返回列表 发布新帖

VBA回测示例模板

3292 2
发表于 2024-1-4 11:22:18 | 显示全部楼层 阅读模式
VBA回测示例模板

本示例仅作策略演示和模板介绍,请不要直接用于实际交易


策略导入的方式
1. 直接复制到空代码文件
2. 将.rzrk附件导入到QMT/投研版内部

策略介绍

本策略运用了MA,HHV,EMA,MACD指标,并演示了如何在VBA代码中进行策略收益计算

买入条件:

  • 最新价大于20天内收盘价的最高点
  • 最新价大于60日均线时
  • 当前不满足平仓条件
  • 当前没有持仓
以上四条同时满足时,符合开仓条件,买入

卖出条件:
  • 持仓三天以上
  • 5日均线死叉20日均线
  • 当天是阴线
  • 最新价小于5日均线
以上四条同时满足时,符合平仓条件,卖出


回测结果
1704344964032.png
策略源码
  1. ```vba
  2. 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;

  3. //……………………下单参数定义……………………………………

  4. //ORDERTYPE:=1101;//…………下单类型
  5. //ACCOUNTID:='580000';//…………填写对应下单账号
  6. //ORDERCODE:=STKLABEL();//…………下单代码
  7. //PRICETYPE:=5;//…………下单价格类型
  8. //VOLUME:=100;//…………下单数量(金额)

  9. ordercode:=marketlabel + stklabel;
  10. accid:='2000567';
  11. acctype:='stock';


  12. //…………………………………………………………………………

  13. DIFF := EMA(CLOSE,12) - EMA(CLOSE,26);
  14. DEA  := EMA(DIFF,9);
  15. MACD1 := 2*(DIFF-DEA), COLORSTICK;
  16. hs300c:=callstock('sh000300',vtclose,-1,0);/////引用其他证券价格
  17. /////////////////////均线
  18. m1:=ma(c,5);
  19. m2:=ma(c,10);
  20. m3:=ma(c,20);
  21. m4:=ma(c,30);
  22. m5:=ma(c,60);
  23. m6:=ma(c,120);
  24. m7:=ma(c,240);



  25. ///////////////////////////////////////////////////

  26. M:=BARSLAST(date<>REF(date,1))+1;//////当天开盘的k线数
  27. /////////////////////////////////////////////



  28. t:BARSLAST(TestHolding=0),nodraw;//////////持仓周期

  29. zst:=(hs300c-ref(hs300c,t))/ref(hs300c,t);//////持仓期间指数涨跌幅

  30. ggt:=(c-ref(c,t))/ref(c,t);///////////

  31. CJt:= 1*(GGt) ,NOAXIS;////////计算纯多头实时收益

  32. dcCJt:= 1*(GGt-zst) ,NOAXIS;////////计算对冲实时收益
  33. //

  34. cjt1:=if(TestHolding>0,(cjt-ref(cjt,1))*100,0),LINETHICK0;////每个周期的多头收益
  35. dccjt1:=if(TestHolding>0,(dccjt-ref(dccjt,1))*100,0),LINETHICK0;//每个周期的对冲收益


  36. qzzhishu:=1*sum(cjt1,0),NOAXIS;//计算实时收益的净值

  37. qzdczhishu:=1*sum(dccjt1,0),NOAXIS;//计算实时对冲收益的净值

  38. bk:= c>= hhv(c,20) and c>m5;//////////开仓条件

  39. bp:=(t>=3 and  m1<m3 and c<o and c<m1);////平仓条件

  40. //

  41. nn:=0;//////往后推迟几个周期交易//

  42. IF (ref(bk,nn) and not(bp) and  TestHolding=0  ) THEN BEGIN
  43.         TestHolding:=1;
  44.         BBD:=BARPOS;
  45.    DRAWTEXT(1 ,H+4,'买入');
  46.    VERTLINE(1 ,h+10,l-10,coloryellow,1,VTDOT);
  47.     passorder(
  48.         23{操作号}, 1101{组合类型}, accid{资金账号ID}, acctype{资金账号类型}
  49.         , orderCode{下单标的代码}, 14{报价类型}, -1{价格}, 200{数量}
  50.         , 'test1'{策略名称}, 0{快速下单}, ''{投资备注}
  51.     );
  52.    hs300bp:=callstock('sh000300',vtclose,-1,0);
  53.         buypoint:=close;
  54.         tmp:=zhishu;
  55.         hstmp:=hszhishu;
  56. END
  57. //卖出
  58. IF (ref(bp,nn) AND TestHolding>0   ) THEN BEGIN
  59.     TestHolding:=0;
  60.     BBD:=0;
  61.     DRAWTEXT(1,H+1,'卖出');
  62.     VERTLINE(1,h+10,l-10,colorwhite,1,VTDOT);
  63.     passorder(
  64.         24{操作号}, 1101{组合类型}, accid{资金账号ID}, acctype{资金账号类型}
  65.         , orderCode{下单标的代码}, 14{报价类型}, -1{价格}, 200{数量}
  66.         , 'test1'{策略名称}, 0{快速下单}, ''{投资备注}
  67.     );
  68.     hs300sp:=callstock('sh000300',vtclose,-1,0);  
  69.     thisprofit:=(close-buypoint)/buypoint;
  70.          HSthisprofit:=(hs300sp-hs300bp)/hs300bp;
  71.     HSzhishu:=(hstmp+hsthisprofit);
  72.     zhishu:=(tmp+thisprofit-0.003);
  73.     buypoint:=0;
  74.     hs300bp:=0;
  75.     profit:=profit+thisprofit;
  76.     DCS:=DCS+1;
  77. END

  78. //…………………回撤统计开始…………………………………
  79. if profit>maxprofit THEN BEGIN
  80.         maxprofit:=profit;
  81.         Dhuiche:=0;
  82. END

  83. IF profit<maxprofit THEN BEGIN  
  84.         Dhuiche:=maxprofit-profit;  
  85. END

  86. IF Dhuiche>maxDhuiche THEN BEGIN   
  87.         maxDhuiche:=Dhuiche;   
  88. END

  89. if profit>maxprofit THEN BEGIN
  90.         maxprofit:=profit;
  91.         Dhuiche:=0;
  92. END

  93. IF profit<maxprofit THEN BEGIN  
  94.         Dhuiche:=maxprofit-profit;  
  95. END

  96. IF Dhuiche>maxDhuiche THEN BEGIN   
  97.         maxDhuiche:=Dhuiche;   
  98. END
  99. //……………………回撤统计结束………………………………

  100. BYL:=IF(buypoint>0,close-buypoint,0);
  101. vv:=hs300bp;
  102. 指数:zhishu,NOAXIS,coloryellow;
  103. 对应指数:=hszhishu,NOAXIS,colorwhite;
  104. 对冲:=指数-对应指数,NOAXIS,colorblue;
  105. dczs:=TMPzhishu,NOAXIS,colorblue;
  106. 最近浮盈:=thisprofit,LINETHICK0;
  107. 最近指数涨跌:=HSthisprofit,LINETHICK0;
  108. 最近对冲收益:=thisprofit-HSthisprofit,LINETHICK0;

  109. 交易次数:DCS,LINETHICK0;

  110. 最近回撤:=hhv(指数,0)-指数,noaxis;
  111. 最大回撤率db:hhv((hhv(指数,0)-指数),0),LINETHICK0;
  112. 持仓时间:=count(TestHolding>0,0),LINETHICK0;
  113. 交易时间:=count(hs300c>0,0),LINETHICK0;
  114. ttttt:TestHolding,LINETHICK0;
  115. 平均单边:指数/交易次数,LINETHICK0;
  116. 平均对冲:=对冲/交易次数,LINETHICK0;
  117. 最大回撤率dc:=hhv((hhv(对冲,0)-对冲),0),LINETHICK0;
  118. xpdymd指数:zhishu,NOAXIS,coloryellow;
  119. 胜率:count(指数>ref(指数,1),0)/DCS,LINETHICK0;
  120. ```
复制代码

策略附件

VBA回测示例.rzrk (13.61 KB, 下载次数: 45)

不清楚的内容可添加下方助理微信咨询,有其他 QMT 小技巧想学习的吗?欢迎在下方留言,笔者将根据大家的留言持续更新哦!
欢迎和我一起加入迅投组建的 QMT 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。
只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!”
企业微信截图_17235220909173.png

评论2

*******2370
发表于 2024-1-11 15:54:15 | 显示全部楼层
passorder(
        23{操作号}, 1101{组合类型}, accid{资金账号ID}, acctype{资金账号类型}
        , orderCode{下单标的代码}, 14{报价类型}, -1{价格}, 200{数量}
        , 'test1'{策略名称}, 0{快速下单}, ''{投资备注}
    );

@狷夫  是这一行的发单函数报错
心如止水
发表于 2024-3-29 11:19:57 | 显示全部楼层
还有其他想学习的 QMT 小技巧吗?欢迎大家在下方留言,版主将根据大家的留言持续更新哦!
客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 蜀ICP备19002686号-2
关灯
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表