设为首页收藏本站

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

TBquant里面商品设置里面前复权功能的作用? [复制链接]

Rank: 3Rank: 3

精华
0
UID
282502
积分
243
帖子
84
主题
35
阅读权限
40
注册时间
2019-8-13
最后登录
2020-10-26
跳转到指定楼层
1#
发表于 2019-8-13 12:19:44 |只看该作者 |倒序浏览
我使用rb888品种,即螺纹钢主连合约,如果设置成前复权,那么,在换约之前的合约的价格是否是做复权处理?
1、但是使用过程中,发现无论是否点前复权,价格似乎都没太大变化;
2、前复权的实现原理是怎么样的?跟股票的有什么不同?
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2019-8-13 13:36:25 |只看该作者
本帖最后由 小米 于 2019-8-13 13:42 编辑

1,此选择仅对股票有效
2,对于期货连续合约想要做到换月时的平滑处理,需要借助公式。请参考此法http://www.tbquant.net/article/52.html

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
282502
积分
243
帖子
84
主题
35
阅读权限
40
注册时间
2019-8-13
最后登录
2020-10-26
3#
发表于 2019-8-13 13:46:46 |只看该作者
谢谢

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
282502
积分
243
帖子
84
主题
35
阅读权限
40
注册时间
2019-8-13
最后登录
2020-10-26
4#
发表于 2019-8-13 14:07:32 |只看该作者
小米 发表于 2019-8-13 13:36
1,此选择仅对股票有效
2,对于期货连续合约想要做到换月时的平滑处理,需要借助公式。请参考此法http://ww ...

我大概看了下,这个换月公式实现的是向后复权吗?在这个公式上进行用主力连续合约回测,是不是跟正常的TB一样,进行下单就行了?还需要额外改其他代码吗?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
5#
发表于 2019-8-13 14:09:07 |只看该作者
quant_yunjinqi 发表于 2019-8-13 14:07
我大概看了下,这个换月公式实现的是向后复权吗?在这个公式上进行用主力连续合约回测,是不是跟正常的TB ...

是的。这段代码里也有对实际下单 时的处理。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
282502
积分
243
帖子
84
主题
35
阅读权限
40
注册时间
2019-8-13
最后登录
2020-10-26
6#
发表于 2019-8-13 15:15:21 |只看该作者
小米 发表于 2019-8-13 14:09
是的。这段代码里也有对实际下单 时的处理。

现假设对一个最简单的三均线策略进行回测,用主力连续合约进行,我使用下面的代码,是否存在问题呢?

1、因为信号是产生在复权过后的主力合约上的,交易应该怎么处理,手数是用系统默认的(如1手)还是应该用在换月的时候计算的lots?
2、买卖的使用的价格呢?是使用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.         Avg3=Average(rClose,AvgLen3);
  79.         //在图表上划出指数移动平均线
  80.         PlotNumeric("Avg1",Avg1);
  81.         PlotNumeric("Avg2",Avg2);
  82.         PlotNumeric("Avg3",Avg3);
  83.         //Avg1向上穿过Avg2为买入条件之一
  84.         BuyCon1=CrossOver(Avg1,Avg2);     
  85.         sellCon1=Crossunder(avg1,avg2);
  86.         //BuyCon1满足且Avg2大于Avg3时,做多
  87.         If(MarketPosition==0 and BuyCon1[1] And Avg3[1]>Avg3[2] And Vol > 0)
  88.                 Buy(0,Open);
  89.         //Avg1小于Avg2多头出场
  90.         If(MarketPosition==1 And BarsSinceEntry>0 And Avg1[1]<Avg2[1] And Vol > 0)
  91.                 Sell(0,Open);
  92.         //BuyCon1满足且Avg2大于Avg3时,做多
  93.         If(MarketPosition==0 and SellCon1[1] And Avg3[1]<Avg3[2] And Vol > 0)
  94.                 SellShort(0,Open);
  95.         //Avg1小于Avg2多头出场
  96.         If(MarketPosition==-1 And BarsSinceEntry>0 And Avg1[1]>Avg2[1] And Vol > 0)
  97.                 Sell(0,Open);
  98. /*
  99. PlotDic(xdxr_price);
  100. PlotNumeric("MA1",AverageFC(rClose,Length1));
  101. PlotNumeric("MA2",AverageFC(rClose,Length2));
  102. PlotNumeric("MA3",AverageFC(rClose,Length3));
  103. PlotNumeric("MA4",AverageFC(rClose,Length4));
  104. Commentary("ma1"+Text(AverageFC(rClose,Length1)));
  105. PlotNumeric("rClose",rClose);
  106. PlotNumeric("rHigh",rHigh);
  107. PlotNumeric("rLow",rLow);
  108. PlotNumeric("rOpen",rOpen);
  109. */

  110. }
  111. }


  112. //------------------------------------------------------------------------
  113. // 编译版本        GS2015.12.25
  114. // 用户版本        2019/08/13 13:46:00
  115. // 版权所有        tianjixuetu
  116. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  117. //                        每一版本的TradeBlazer公式修改和重写的权利
  118. //------------------------------------------------------------------------
复制代码

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

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

GMT+8, 2024-5-5 04:51

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部