返回列表 发布新帖

【因子公式】期货多空模板

1149 0
发表于 2024-8-14 19:38:03 | 显示全部楼层 阅读模式
一、前言
大家常常在问,如果想做期货多空交易,要怎么编写买入卖出代码才能实现。因此本文主要分享一个期货多空交易的策略模板,可以根据自己需求修改对应的买入卖出条件,实现快速因子验证。回测结果示例如图所示:
Snipaste_2024-08-14_19-33-42.png

二、操作步骤:
1.修改,添加交易条件

示例给的是一个金叉BPK(买平开),死叉SPK(买平开)的示例策略,假如我们要叠加一个MACD指标,来辅助产生交易信号,那么应该像下面这样修改。且尤其要注意:修改模板的时候,注意不要修改买入卖出条件区域以外的内容。
Snipaste_2024-08-16_16-15-33.png


2.绩效结果查看
想要查看某个品种,某个周期的回测收益曲线,只需要在对应的行情界面,双击这个因子公式就行。
Snipaste_2024-08-16_16-21-40.png

3、代码如图所示:
  1. variable:TestHolding=0,maxhuiche=0,open_times=0,maxprofit=0,maxDhuiche=0,Dhuiche=0,maxshortprofit=0, 期货基准bp=0,hstmp=0,TMPzhishu=0,期货基准bp=0,profit=0,开仓成本:=0,delay=0;
  2. BK:0,nodraw();SK:0,nodraw();BP:0,nodraw();SP:0,nodraw();BPK:0,nodraw();SPK:0,nodraw(); // 此行不可修改,不可注释
  3. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  4. //-----------------------------------------------上面两行不要动----------------------------------------------------------------
  5. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



  6. // 双均线策略
  7. ma1:=ma(C,10);
  8. ma2:=ma(C,20);



  9. ///////////////////////        注意:策略信号需要用  :=   赋值

  10. //BK:= 0,nodraw();// 买开指令,实际编写的时候进行替换
  11. //BP:= 0,nodraw();// 买平指令,同上
  12. //SK:= 0,nodraw();// 卖开指令,同上
  13. //SP:= 0,nodraw();// 卖平指令,同上

  14. BPK:=cross(ma1,ma2),nodraw(); // 可以自己修改BPK条件,同上
  15. SPK:=cross(ma2,ma1),nodraw(); // 可以自己修改SPK条件,同上


  16. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  17. // -------------------------------------------------下面的都不用动---------------------------------------------------------
  18. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  19. 买入信号:BK OR BPK,nodraw();
  20. 卖出信号:SK OR SPK,nodraw();
  21. 卖平信号:SP,nodraw();
  22. 买平信号:BP,nodraw();


  23. 期货基准:= callstock('290000.BKZS',vtclose,-1,0); //引入商品期货市场指数

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

  25. 基准涨幅:=(期货基准-ref(期货基准,t))/ref(期货基准,t);//////持仓期间指数涨跌幅

  26. 持仓涨幅 := (C-ref(C,t))/ref(C,t);///////////
  27. 多头持仓收益 := 1*持仓涨幅;
  28. 空头持仓收益 := -1*持仓涨幅;

  29. 多头超额涨幅:= 1*(持仓涨幅 - 基准涨幅);
  30. 空头超额涨幅:= -1*(持仓涨幅 - 基准涨幅);

  31. 多头收益:= iff(TestHolding>0,(多头持仓收益 - ref(多头持仓收益,1)) * 100,0),LINETHICK0;////每个周期的多头收益
  32. 多头超额收益:=if(TestHolding>0,(多头超额涨幅-ref(多头超额涨幅,1))*100,0),LINETHICK0;//每个周期的对冲收益

  33. 空头收益:= iff(TestHolding<0,(空头持仓收益 - ref(空头持仓收益,1)) * 100,0),LINETHICK0;////每个周期的多头收益
  34. 空头超额收益:=if(TestHolding<0,(空头超额涨幅-ref(空头超额涨幅,1))*100,0),LINETHICK0;//每个周期的对冲收益


  35. 实时净值:= 1 + 1*(sum(多头收益,0) + sum(空头收益,0))/100,noaxis;
  36. 实时对冲净值:=1*(sum(多头超额收益,0) + sum(空头超额收益,0)),noaxis;





  37. /// SP
  38. if(ref(买平信号,delay) and TestHolding = -1) then begin
  39.         TestHolding:=0;
  40.         BBD:=0;
  41.         DRAWTEXT(1,L*0.95,'买入平仓',colorwhite);
  42.     VERTLINE(1,H+10,L-10,colorwhite,1,VTDOT);
  43.         期货基准sp:= callstock('290000.BKZS',vtclose,-1,0);
  44.         thisprofit:=-1 * (C-开仓成本)/开仓成本;
  45.         期货thisprofit:=-1 * (期货基准sp-期货基准bp)/期货基准bp;
  46.         开仓成本:=0;
  47.     期货基准bp:=0;
  48.     profit:=profit+thisprofit;
  49.     open_times:=open_times+1;

  50. end

  51. /// BP
  52. if(ref(卖平信号,delay) and TestHolding = 1) then begin
  53.         TestHolding:=0;
  54.         BBD:=0;
  55.         DRAWTEXT(1,L*0.95,'卖出平仓',colorwhite);
  56.     VERTLINE(1,H+10,L-10,colorwhite,1,VTDOT);
  57.         期货基准sp:= callstock('290000.BKZS',vtclose,-1,0);
  58.         thisprofit:=(C-开仓成本)/开仓成本;
  59.         开仓成本:=0;
  60.     期货基准bp:=0;
  61.     profit:=profit+thisprofit;
  62.     open_times:=open_times+1;
  63. end

  64. /// BK
  65. if(ref(买入信号,delay)  and TestHolding=0) THEN begin
  66.         TestHolding:=1;
  67.         BBD:=BARPOS;
  68.         DRAWTEXT(1 ,H+4,'买入开仓',colorred);
  69.     //VERTLINE(1 ,H+10,L-10,coloryellow,1,VTDOT);
  70.         期货基准bp:= callstock('290000.BKZS',vtclose,-1,0);
  71.         开仓成本:=C;
  72.         

  73. end
  74. /// SK
  75. if(ref(卖出信号,delay) and TestHolding = 0) then begin
  76.         TestHolding:= -1;
  77.         BBD:=BARPOS;
  78.         DRAWTEXT(1 ,H+4,'卖出开仓',colorgreen);
  79.     //VERTLINE(1 ,H+10,L-10,coloryellow,1,VTDOT);
  80.         期货基准bp:= callstock('290000.BKZS',vtclose,-1,0);
  81.         开仓成本:=C;
  82. end


  83. /// BPK

  84. if(ref(买入信号,delay) and TestHolding = -1) then begin
  85.         
  86.         DRAWTEXT(1,L*0.95,'空平',colorwhite);
  87.     VERTLINE(1,H+10,L-10,colorwhite,1,VTDOT);
  88.         期货基准sp:= callstock('290000.BKZS',vtclose,-1,0);
  89.         thisprofit:=-1 * (C-开仓成本)/开仓成本;
  90.         期货thisprofit:=-1 * (期货基准sp-期货基准bp)/期货基准bp;
  91.         开仓成本:=0;
  92.     期货基准bp:=0;
  93.     profit:=profit+thisprofit;
  94.     open_times:=open_times+1;
  95.         TestHolding:=1;
  96.         BBD:=BARPOS;
  97.         DRAWTEXT(1 ,H+4,'多开',colorred);
  98.     VERTLINE(1 ,H+10,L-10,coloryellow,1,VTDOT);
  99.         期货基准bp:= callstock('290000.BKZS',vtclose,-1,0);
  100.         开仓成本:=C;

  101. end

  102. /// SPK

  103. if(ref(卖出信号,delay) and TestHolding = 1) then begin
  104.         BBD:=0;
  105.         DRAWTEXT(1,L*0.95,'多平',colorwhite);
  106.     VERTLINE(1,H+10,L-10,colorwhite,1,VTDOT);
  107.         期货基准sp:= callstock('290000.BKZS',vtclose,-1,0);
  108.         thisprofit:=(C-开仓成本)/开仓成本;
  109.         开仓成本:=0;
  110.     期货基准bp:=0;
  111.     profit:=profit+thisprofit;
  112.     open_times:=open_times+1;
  113.         TestHolding:= -1;
  114.         BBD:=BARPOS;
  115.         DRAWTEXT(1 ,H+4,'空开',colorgreen);
  116.     VERTLINE(1 ,H+10,L-10,coloryellow,1,VTDOT);
  117.         期货基准bp:= callstock('290000.BKZS',vtclose,-1,0);
  118.         开仓成本:=C;
  119. end


  120. //…………………回撤统计开始…………………………………        
  121. if profit>maxprofit THEN BEGIN         
  122.         maxprofit:=profit;         
  123.         Dhuiche:=0;         
  124. END

  125. IF profit<maxprofit THEN BEGIN   
  126.         Dhuiche:=maxprofit-profit;   
  127. END

  128. IF Dhuiche>maxDhuiche THEN BEGIN     
  129.         maxDhuiche:=Dhuiche;     
  130. END



  131. BYL:=IF(开仓成本>0,C-开仓成本,0);
  132. 最近浮盈:=thisprofit,LINETHICK0;
  133. 最近指数涨跌:=期货thisprofit,LINETHICK0;
  134. 最近对冲收益:=thisprofit-期货thisprofit,LINETHICK0;
  135. 单位净值:实时净值,noaxis;
  136. 交易次数:open_times,LINETHICK0,nodraw();

  137. 持仓时间:=count(TestHolding>0,0),LINETHICK0;
  138. 交易时间:=count(期货基准>0,0),LINETHICK0;
  139. 当前持仓方向:TestHolding,LINETHICK0,nodraw();
复制代码

期货多空模板.rzrk

18.57 KB, 下载次数: 6

客服专线

400-080-8112

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