VBA回测示例模板
本示例仅作策略演示和模板介绍,请不要直接用于实际交易
策略导入的方式
1. 直接复制到空代码文件
2. 将.rzrk附件导入到QMT/投研版内部
策略介绍
本策略运用了MA,HHV,EMA,MACD指标,并演示了如何在VBA代码中进行策略收益计算
买入条件:
- 最新价大于20天内收盘价的最高点
- 最新价大于60日均线时
- 当前不满足平仓条件
- 当前没有持仓
以上四条同时满足时,符合开仓条件,买入
卖出条件:
- 持仓三天以上
- 5日均线死叉20日均线
- 当天是阴线
- 最新价小于5日均线
以上四条同时满足时,符合平仓条件,卖出
回测结果
策略源码
- ```vba
- VARIABLE:cj1=0,hszhishu:=0,BBD=0,zhishu=0,tmp=0,tmpshort=0,buypoint=0,sellpoint=0,profit=0,TestHolding=0,maxzhishu=0,huiche=0,maxhuiche=0,DCS=0,maxprofit=0,maxDhuiche=0,Dhuiche=0,maxshortprofit=0, hs300bp=0,hstmp=0,TMPzhishu=0,hs300bp=0;
- //……………………下单参数定义……………………………………
- //ORDERTYPE:=1101;//…………下单类型
- //ACCOUNTID:='580000';//…………填写对应下单账号
- //ORDERCODE:=STKLABEL();//…………下单代码
- //PRICETYPE:=5;//…………下单价格类型
- //VOLUME:=100;//…………下单数量(金额)
- ordercode:=marketlabel + stklabel;
- accid:='2000567';
- acctype:='stock';
- //…………………………………………………………………………
- DIFF := EMA(CLOSE,12) - EMA(CLOSE,26);
- DEA := EMA(DIFF,9);
- MACD1 := 2*(DIFF-DEA), COLORSTICK;
- hs300c:=callstock('sh000300',vtclose,-1,0);/////引用其他证券价格
- /////////////////////均线
- m1:=ma(c,5);
- m2:=ma(c,10);
- m3:=ma(c,20);
- m4:=ma(c,30);
- m5:=ma(c,60);
- m6:=ma(c,120);
- m7:=ma(c,240);
- ///////////////////////////////////////////////////
- M:=BARSLAST(date<>REF(date,1))+1;//////当天开盘的k线数
- /////////////////////////////////////////////
- t:BARSLAST(TestHolding=0),nodraw;//////////持仓周期
- zst:=(hs300c-ref(hs300c,t))/ref(hs300c,t);//////持仓期间指数涨跌幅
- ggt:=(c-ref(c,t))/ref(c,t);///////////
- CJt:= 1*(GGt) ,NOAXIS;////////计算纯多头实时收益
- dcCJt:= 1*(GGt-zst) ,NOAXIS;////////计算对冲实时收益
- //
- cjt1:=if(TestHolding>0,(cjt-ref(cjt,1))*100,0),LINETHICK0;////每个周期的多头收益
- dccjt1:=if(TestHolding>0,(dccjt-ref(dccjt,1))*100,0),LINETHICK0;//每个周期的对冲收益
- qzzhishu:=1*sum(cjt1,0),NOAXIS;//计算实时收益的净值
- qzdczhishu:=1*sum(dccjt1,0),NOAXIS;//计算实时对冲收益的净值
- bk:= c>= hhv(c,20) and c>m5;//////////开仓条件
- bp:=(t>=3 and m1<m3 and c<o and c<m1);////平仓条件
- //
- nn:=0;//////往后推迟几个周期交易//
- IF (ref(bk,nn) and not(bp) and TestHolding=0 ) THEN BEGIN
- TestHolding:=1;
- BBD:=BARPOS;
- DRAWTEXT(1 ,H+4,'买入');
- VERTLINE(1 ,h+10,l-10,coloryellow,1,VTDOT);
- passorder(
- 23{操作号}, 1101{组合类型}, accid{资金账号ID}, acctype{资金账号类型}
- , orderCode{下单标的代码}, 14{报价类型}, -1{价格}, 200{数量}
- , 'test1'{策略名称}, 0{快速下单}, ''{投资备注}
- );
- hs300bp:=callstock('sh000300',vtclose,-1,0);
- buypoint:=close;
- tmp:=zhishu;
- hstmp:=hszhishu;
- END
- //卖出
- IF (ref(bp,nn) AND TestHolding>0 ) THEN BEGIN
- TestHolding:=0;
- BBD:=0;
- DRAWTEXT(1,H+1,'卖出');
- VERTLINE(1,h+10,l-10,colorwhite,1,VTDOT);
- passorder(
- 24{操作号}, 1101{组合类型}, accid{资金账号ID}, acctype{资金账号类型}
- , orderCode{下单标的代码}, 14{报价类型}, -1{价格}, 200{数量}
- , 'test1'{策略名称}, 0{快速下单}, ''{投资备注}
- );
- hs300sp:=callstock('sh000300',vtclose,-1,0);
- thisprofit:=(close-buypoint)/buypoint;
- HSthisprofit:=(hs300sp-hs300bp)/hs300bp;
- HSzhishu:=(hstmp+hsthisprofit);
- zhishu:=(tmp+thisprofit-0.003);
- buypoint:=0;
- hs300bp:=0;
- profit:=profit+thisprofit;
- DCS:=DCS+1;
- END
- //…………………回撤统计开始…………………………………
- if profit>maxprofit THEN BEGIN
- maxprofit:=profit;
- Dhuiche:=0;
- END
- IF profit<maxprofit THEN BEGIN
- Dhuiche:=maxprofit-profit;
- END
- IF Dhuiche>maxDhuiche THEN BEGIN
- maxDhuiche:=Dhuiche;
- END
- if profit>maxprofit THEN BEGIN
- maxprofit:=profit;
- Dhuiche:=0;
- END
- IF profit<maxprofit THEN BEGIN
- Dhuiche:=maxprofit-profit;
- END
- IF Dhuiche>maxDhuiche THEN BEGIN
- maxDhuiche:=Dhuiche;
- END
- //……………………回撤统计结束………………………………
- BYL:=IF(buypoint>0,close-buypoint,0);
- vv:=hs300bp;
- 指数:zhishu,NOAXIS,coloryellow;
- 对应指数:=hszhishu,NOAXIS,colorwhite;
- 对冲:=指数-对应指数,NOAXIS,colorblue;
- dczs:=TMPzhishu,NOAXIS,colorblue;
- 最近浮盈:=thisprofit,LINETHICK0;
- 最近指数涨跌:=HSthisprofit,LINETHICK0;
- 最近对冲收益:=thisprofit-HSthisprofit,LINETHICK0;
- 交易次数:DCS,LINETHICK0;
- 最近回撤:=hhv(指数,0)-指数,noaxis;
- 最大回撤率db:hhv((hhv(指数,0)-指数),0),LINETHICK0;
- 持仓时间:=count(TestHolding>0,0),LINETHICK0;
- 交易时间:=count(hs300c>0,0),LINETHICK0;
- ttttt:TestHolding,LINETHICK0;
- 平均单边:指数/交易次数,LINETHICK0;
- 平均对冲:=对冲/交易次数,LINETHICK0;
- 最大回撤率dc:=hhv((hhv(对冲,0)-对冲),0),LINETHICK0;
- xpdymd指数:zhishu,NOAXIS,coloryellow;
- 胜率:count(指数>ref(指数,1),0)/DCS,LINETHICK0;
- ```
复制代码
策略附件
VBA回测示例.rzrk
(13.61 KB, 下载次数: 45)
不清楚的内容可添加下方助理微信咨询,有其他 QMT 小技巧想学习的吗?欢迎在下方留言,笔者将根据大家的留言持续更新哦! 欢迎和我一起加入迅投组建的 QMT 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。 只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!” |