WonderTrader快速入门

安装wtpy


选择要运行的demo


修改demo的配置


  • 打开回测配置文件configbt.yaml

    replayer:
        basefiles:
            commodity: ../common/commodities.json   #品种列表
            contract: ../common/contracts.json      #合约列表
            holiday: ../common/holidays.json        #节假日列表
            hot: ../common/hots.json                #主力合约映射表
            session: ../common/sessions.json        #交易时间模板
        mode: csv   #回测历史数据存储,csv或者bin/wtp,其中bin/wtp都是一个意思
        store:
            module: WtDataStorage   #历史数据存储模块,如果是csv,该配置不生效
            path: ../storage/       #历史数据存储跟目录
        etime: 201912011500         #回测结束时间,精确到分钟
        stime: 201909010900         #回测开始时间,精确到分钟
        fees: ../common/fees.json   #佣金配置文件
    env:
        mocker: cta                 #回测引擎,cta/sel/hft/exec/uft
    

回测及结果分析


  • 打开回测入口文件runBT.py,配置好回测引擎,加入要测试的策略,以及设置好绩效分析的参数

    from wtpy import WtBtEngine,EngineType
    from wtpy.apps import WtBtAnalyst
    
    from Strategies.DualThrust import StraDualThrust
    
    if __name__ == "__main__":
        #创建一个运行环境,并加入策略
        engine = WtBtEngine(EngineType.ET_CTA)
        engine.init('../common/', "configbt.yaml")
        engine.configBacktest(201909100930,201912011500)
        engine.configBTStorage(mode="csv", path="../storage/")
        engine.commitBTConfig()
    
        '''
        创建DualThrust策略的一个实例
        name    策略实例名称
        code    回测使用的合约代码
        barCnt  要拉取的K线条数
        period  要使用的K线周期,m表示分钟线
        days    策略算法参数,算法引用的历史数据条数
        k1      策略算法参数,上边界系数
        k2      策略算法参数,下边界系数
        isForStk    DualThrust策略用于控制交易品种的代码
        '''
        straInfo = StraDualThrust(name='pydt_IF', code="CFFEX.IF.HOT", barCnt=50, period="m5", days=30, k1=0.1, k2=0.1, isForStk=False)
        engine.set_cta_strategy(straInfo)
    
        #开始运行回测
        engine.run_backtest(bAsync=False)
    
        #创建绩效分析模块
        analyst = WtBtAnalyst()
        #将回测的输出数据目录传递给绩效分析模块
        analyst.add_strategy("pydt_IF", folder="./outputs_bt/pydt_IF/", init_capital=500000, rf=0.02, annual_trading_days=240)
        #运行绩效模块
        analyst.run_new()
    
        kw = input('press any key to exit\n')
        engine.release_backtest()
    
  • 然后启动runBT.py进行回测,回测的执行如下

  • alt 回测示例图

  • 回测完成以后,打开生成的绩效分析报表(xxxx.xlsx),则可以查看策略的回测绩效

  • 回测绩效概览

  • alt 回测绩效概览

  • 回测收益详情

  • alt 回测绩效详情 从上图的绩效分析可以看出,DualThrust策略,针对股指期货主力合约,在20190919到20191201这段时间内,这组参数下进行回测,一直处于回撤的状态,累计亏损达20%。可见,这不是一组好的参数。

  • 接下来我们调整参数,将K1和K2改成0.5和0.3,再进行回测和分析,得到如下结果

  • 调整后的回测绩效总览

  • alt 回测绩效概览

  • 从上图可以看出,参数调整过以后的绩效远远好于调整之前。

  • 最后进行回测分析总结 让我们简单的分析一下参数调整前和参数调整后绩效悬殊的原因。 熟悉DualThrust的朋友肯定知道:DualThrus的信号原理其实就是价格突破。当上边界系数k1和下边界系数k2较小的时候,信号出现较多,但是容易遇到假突破,从而导致交易成本上升,最终出现净亏损;当k1和k2较大的时候,信号变少,但是又容易错失交易机会。 调整之前的k1和k2较小,调整以后的k1和k2也不是特别大,从而达到了过滤大部分假突破,降低交易成本,并保证一定的灵敏度的效果,所以才会有较大幅度的改善。 大家有兴趣的话,可以自行尝试一下,将k1和k2改成不同的组合,相信能够有更好的回测结果。