contact@digquant.com.cn
400-1860-552
官方群:463071731

如何使用 AT 进行简单的策略回测

1. 开启 Matlab

Auto-Trader Pro策略研究是基于Matlab平台对策略进行编写以及分析,点击菜单栏“MATLAB”按键,开启Matlab平台。

正常情况下,Matlab安装完毕后,点击按键即可打开Matlab。若点击出现无反应,或弹出提醒、错误窗口,可能是您未完成matlab的正常安装,或未设置matlab的系统变量。

Matlab系统变量设置方法:开始→控制面板→系统→高级系统设置→高级→环境变量,在系统变量中找到变量“Path”,点击“编辑”,在弹出的“编辑系统变量”栏里,加上“;”,将Matlab.exe所在的目录路径,即Matlab安装路径添加进去,确定即可。




2. 了解 AT 策略组成

Auto-Trader的策略操作主要有两部分构成:

策略主函数:内容主要包括策略所需用到的参数,对参数的计算以及策略逻辑体现

策略执行函数:包含策略中所需要的参数,例如需要作用的标的以及时间区间等参数,以及定义被调用的策略主函数是用以回测或者模拟实盘。



3. 编写回测策略主文件结构

Function StrategyName(bInit,bDayBegin,cellPar) %定义策略函数的名称

%括号内输入的参数为固定结构,其中cellPar为策略执行函数入参参数。

% bInit是策略运行时的initialize,在策略逻辑运行前为1,当开始判断是否下单后,该变量为0.

% bDayBegin 在一天的第一根Bar1,其他时刻为0

 

%外部和全局参数声明(这是一个固定结构)

global g_idxKDay; %申明日频或者分钟频率的数据index           

    global g_idxSignal; %申明因子

   

%初始化回测帐户

    if bInit

        traderSetParalMode(false);%默认是true,因子计算函数并行执行,速度快,但是不能调试,false串行执行可以设断点调试

        g_idxKDay = traderRegKData('day',1); %只有注册之后才能获取数据。分钟数据的获取方法为 traderRegKData('min',1)。后面的数字是刷新频率。

        g_idxSignal = traderRegUserIndi(@getSignal,{g_idxKDay,cellPar的入参});

        TLen = length(g_idxKDay(:,1));

 

%交易逻辑

    else

        %----------策略内部计算与基本逻辑----------%

%策略内部的参数计算或条件判断

 

----------策略主体,交易逻辑判断----------%

traderBuyV2(HandleIdx,TargetIdx,Contracts,Price,PriceType,OrderTag);

%买入下单,若初始有空头持仓,则先平仓,再买入

traderSellV2(HandleIdx,TargetIdx,Contracts,Price,PriceType,OrderTag);

%卖出平仓下单

traderSellShortV2(HandleIdx,TargetIdx,Contracts,Price,PriceType,OrderTag);

%卖出下单,若初始有多头持仓,则先平仓,再卖出

traderBuyToCoverV2(HandleIdx,TargetIdx,Contracts,Price,PriceType,OrderTag);

%买入平仓下单

traderDirectBuyV2(HandleIdx,TargetIdx,Contracts,Price,PriceType,OrderTag);

%买入下单,影响初始持仓

traderDirectSellV2(HandleIdx,TargetIdx,Contracts,Price,PriceType,OrderTag);

%卖出下单,影响初始持仓

TraderPositionToV2(HandleIdx,TargetIdx,Position,Price,PriceType,OrderTag);

%以仓位为目标,直接调整至某仓位,可双方向调整

 

计算因子的自定义函数

function value=getSignal(cellPar,bpPFCell)

%调用该函数的参数将会全部被赋给cellPar

%bpPFCell为一个时间序列,标记特定的刷新时刻

%参数声明

%函数计算,计算出来的结果可用于交易逻辑的判断


4. 编写策略执行文件


Code2 = {'IC0000', 'IF0000'};

m=1;

for j = 1:length(Code2)

    targetList(m).Market  = 'CFFEX';

    targetList(m).Code  =  Code2{j};

    m = m+1;

end

 

%---------定义变量----------% 

%定义策略主函数中所要入参cellPar中的变量                 

 

%指定操作的账户,例如以下为期货模拟账户

AccountList(1) = {'FutureSimAcc'};

 

%回测

%设置回测参数,设置InitialCash初始资本,Costfee手续费率,Rate无风险利率,SlidePrice滑价,DealType市价单成交类型,LimitType限价单成交方式。

traderSetBacktest(InitialCash,Costfee,Rate,SlidePrice,PriceLoc,DealType,LimitType);

 

%启动回测

traderRunBacktestV2(StrategyName,TradeFun,varFunParameter,AccountList,TargetList,KFrequency,KFreNum,BeginDate,EndDate,FQ,AlgoTradeFun,varAlgoFunParameter);

 

策略示例请参考Auto-Trader资源池中的本地资源池中策略,更多策略可以在DigQuant社区-策略资源获取。



5. 运行策略,进行回测

策略(包括策略主函数以及策略执行函数)完成后,保存策略。在MATLAB端打开策略执行文件,点击运行:



MATLAB端命令窗口会显示:



返回到Auto-Trader客户端显示回测正在进行:



6. 完成回测,查看绩效报告

回测完成后显示对该策略的绩效报告: