设为首页收藏本站

 找回密码
 注册
查看: 946|回复: 0
打印 上一主题 下一主题

TBquant上商品期货主力连续合约的测试分析 [复制链接]

Rank: 3Rank: 3

精华
0
UID
282502
积分
243
帖子
84
主题
35
阅读权限
40
注册时间
2019-8-13
最后登录
2020-10-26
跳转到指定楼层
1#
发表于 2019-8-13 15:39:16 |只看该作者 |倒序浏览
重新开一个帖子,咨询相关的问题。
提供了一个最简单的双均线策略,供讨论具体的代码。


从代码中可以看出,期货的主力合约在换月的时候是进行向后复权的,在换约的时候,先平掉原有的合约,然后开新的,经过换算后的不同仓位的在新的合约上。这是上面代码已经默认实现的,写策略的时候可以不用考虑了。
在我们自己写新的策略的时候,我们获取行情和下单要如何操作呢?
1、获取行情
复权后的行情在原先的open,high,low,close的基础上,在最前面加了r,代表向right复权(向后复权),这个大概没有疑问。
如以下代码:
  1. //初始设置
  2. Avg1=Average(rClose,AvgLen1);
  3. Avg2=Average(rClose,AvgLen2);
复制代码
2、下新单

下新单的时候要怎么做呢?如信号出现了,现在要买入开仓
buy(lots,price)
这里的lots因该用什么?是上述在换月的时候计算出来的Lots的手数吗?还是继续使用策略设置的手数或者默认的手数?
这里的价格应该用什么?用rOpen-后复权后的价格还是应该用open,主力连续合约的真实价格呢?
  1. //------------------------------------------------------------------------
  2. // 简称: test2
  3. // 名称: 换月测试
  4. // 类别: 公式应用
  5. // 类型: 用户应用
  6. // 输出:
  7. //------------------------------------------------------------------------
  8. Params

  9.         Numeric  AvgLen1(6);
  10.         Numeric  AvgLen2(12);
  11.         Numeric  AvgLen3(28);
  12. Vars
  13. //期货
  14. Dic<Numeric> RolloverPrice("TB_ROLLOVER_futuresPrice"); //获取换月基础数据
  15. //共有变量
  16. Series<Numeric> rOpen(0,60); //除权换月后新的开盘价
  17. Series<Numeric> rHigh(0,60); //除权换月后新的最高价
  18. Series<Numeric> rLow(0,60); //除权换月后新的最低价
  19. Series<Numeric> rClose; //除权换月后新的收盘价
  20. Global Numeric Rollover; //除权换月系数
  21. Global Numeric Lots; //交易手数
  22. Global Numeric i;
  23. // 策略变量
  24. Series<Numeric>  Avg1;        //指数移动平均1
  25. Series<Numeric>  Avg2;        //指数移动平均2
  26. Series<Numeric>  Avg3;        //指数移动平均3
  27. Series<Bool>     BuyCon1(False);        //做多条件之一
  28. Series<Bool>     SellCon1(False);        //做空条件之一



  29. Events
  30. OnBar(ArrayRef<Integer> indexs)
  31. {
  32.         Range[i=0:DataCount()-1]
  33.         {
  34.                 If(CurrentBar==0)
  35.                         {
  36.                         rOpen=Open;
  37.                         rHigh=High;
  38.                         rLow=Low;
  39.                         rClose=Close;
  40.                         Rollover=1;
  41.                         }
  42.                 Else If(ExchangeName<>"上海证券交易所" And ExchangeName<>"深圳证券交易所") //期货换月
  43.                         {
  44.                                 If(RolloverPrice[1]<>RolloverPrice[2] And RolloverPrice[1]<> InvalidNumeric
  45.                                         /* And (Mid(Symbol,2,3) == "888" Or Mid(Symbol,1,3) == "888") */)       
  46.                                         {
  47.                                                 //PlotDic(RolloverPrice);
  48.                                                 PlotBool("换月",True);
  49.                                                 Commentary("原合约收盘价:"+Text(Close));
  50.                                                 Commentary("新合约收盘价:"+Text(RolloverPrice));
  51.                                                 Rollover=rClose/RolloverPrice[1];
  52.                                                 //Lots = Max(1,IntPart(Abs(CurrentContracts)*Rollover));
  53.                                                 Lots=Max(1,Abs(CurrentContracts*Close[1]/RolloverPrice[1]));
  54.                                                 If(MarketPosition==1)
  55.                                                         {
  56.                                                         Sell(0,Close[1],Enum_UnCorrectPrice);
  57.                                                         Buy(Lots,RolloverPrice,Enum_UnCorrectPrice);
  58.                                                         }
  59.                                                 Else If(MarketPosition==-1)
  60.                                                         {
  61.                                                         BuyToCover(0,Close[1],Enum_UnCorrectPrice);
  62.                                                         SellShort(Lots,RolloverPrice,Enum_UnCorrectPrice);
  63.                                                         }
  64.                                         }
  65.                         }
  66.                
  67.         rOpen=Open*Rollover;
  68.         rHigh=High*Rollover;
  69.         rLow=Low*Rollover;
  70.         rClose=Close*Rollover;
  71.         PlotKline(rOpen,rHigh,rLow,rClose);
  72.         // 集合竞价和小节休息过滤
  73.         If(!CallAuctionFilter()) Return;
  74.                
  75.         //初始设置
  76.         Avg1=Average(rClose,AvgLen1);
  77.         Avg2=Average(rClose,AvgLen2);
  78.        
  79.         //在图表上划出指数移动平均线
  80.         PlotNumeric("Avg1",Avg1);
  81.         PlotNumeric("Avg2",Avg2);

  82.         //Avg1向上穿过Avg2为买入条件之一
  83.                 BuyCon1=CrossOver(Avg1,Avg2);     
  84.                 sellCon1=Crossunder(avg1,avg2);
  85.                 //BuyCon1满足且Avg2大于Avg3时,做多
  86.                 If(MarketPosition==0 and BuyCon1[1] And Vol > 0)
  87.                 Buy(0,Open);
  88.                
  89.                
  90.                 //Avg1小于Avg2多头出场
  91.                 If(MarketPosition==1 And BarsSinceEntry>0 And sellCon1[1] And Vol > 0)
  92.                 Sell(0,Open);
  93.                
  94.                 //BuyCon1满足且Avg2大于Avg3时,做多
  95.                 If(MarketPosition==0 and SellCon1[1] )
  96.                 SellShort(0,Open);
  97.                
  98.                
  99.                 //Avg1小于Avg2多头出场
  100.                 If(MarketPosition==-1 And BarsSinceEntry>0 And BuyCon1[1] And Vol > 0)
  101.                 BuyToCover(0,Open);
  102. /*
  103. PlotDic(xdxr_price);
  104. PlotNumeric("MA1",AverageFC(rClose,Length1));
  105. PlotNumeric("MA2",AverageFC(rClose,Length2));
  106. PlotNumeric("MA3",AverageFC(rClose,Length3));
  107. PlotNumeric("MA4",AverageFC(rClose,Length4));
  108. Commentary("ma1"+Text(AverageFC(rClose,Length1)));
  109. PlotNumeric("rClose",rClose);
  110. PlotNumeric("rHigh",rHigh);
  111. PlotNumeric("rLow",rLow);
  112. PlotNumeric("rOpen",rOpen);
  113. */

  114. }
  115. }


  116. //------------------------------------------------------------------------
  117. // 编译版本        GS2015.12.25
  118. // 用户版本        2019/08/13 13:46:00
  119. // 版权所有        tianjixuetu
  120. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  121. //                        每一版本的TradeBlazer公式修改和重写的权利
  122. //------------------------------------------------------------------------
复制代码
您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-5 07:03

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部