1、回测平台搭建——思路

什么是回测平台?

最简单来说,写好了一个策略,从一个txt中读取了数据,放到策略中,得到了一个最后的收益,这个程序就是一个回测平台,用回测平台来概括虽然有些过,但是这就是一个回测平台的雏形。

升级——需求增加

当最后的统计结果不仅需要收益,还需要统计交易次数、开多开空次数、盈亏比、平均盈利、平均亏损、夏普比率等等这些指标,最后的结果还需要加上可视化的控件的时候,就需要再添加些东西了。

升级——标准化

现在,从读取数据到运行策略再得到最后的结果已经可以跑通了,但是当又写了一个又一个策略后,发现这些策略之间有很多公共的部分,如设置时间窗口、求MA、求RSI等等,每次都需要复制粘贴这部分代码,就造成了代码的冗余性,所以这些常用的模块就可以都抽出来,最为一个公共的模块——Technical(随便起得名字),下次再编写策略时,用到什么直接调用就可以了。

接着,下一个问题,我读取的数据不是txt而是csv或者是数据库中的数据呢,所以还需要规定一个对数据的规范,类似:

FutureData{
    0 string marketDM         # 市场代码
    1 string instrumentID     #  合约代码
    2 string date             #   时间 exg:2017-8-1 11:30:00
    3 double Open   
    4 double High
    5 double Low
    6 double Close
    7 double volume       
    8 double buyprice
    9 double sellprice
 }

虽然每个文件或者数据库中的数据类型不同,但是基本用于回测的信息应该都包含了,所以每个这样的数据单元就可以作为一个封装了,起个名字叫——Bar,这个Bar的对象就具有了以上的属性。

有了数据后进行回测时还有一个重要的问题,那就是要考虑模型的鲁棒性,所谓鲁棒性的衡量可以通过设置滑点、提高手续费等来对风险进行一个把控。因此还需要一个这样的Risk来作为手续费和滑点等的封装。

然后类似的,再对仓位Position做一个封装,包括统计持有多仓还是空仓,持仓价格等等。

最后,对策略Strategy再进行一个抽象,设置一个策略的父类,每个策略代码部分公共的模块如开仓平仓、配置初始化等设置一个父类方法,通过让子类继承来实现。

总结

之所以要自己搭建回测平台而不用现有的框架,一方面便于理解,另一方面可以任由自己yy,需要设计什么模块什么功能自己来决定,所以一个至关重要的问题,就是写代码前一定要对需求搞清楚了,还有就是保留好一些重要的接口方便以后对程序的扩展。


后面的细节部分想好了再写。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值