开拓者期货期权程序化系统交易论坛

标题: 国外知名策略-dual thrust分享 [打印本页]

作者: 穿堂风    时间: 2011-7-24 03:45:15     标题: 国外知名策略-dual thrust分享

oliverzrl的老弟在一个贴子中提到他的股指系统是根据dual thrust系统为雏形,所以特意找了一下这个系统。
dual thrust是八几年一个老外写的,目前在自动化交易里应该还能排到前三吧。
这个系统核心相当简单,我一直都相信越简单越有效,而且作者的思想很有借鉴之处,为方便与大家分享,我重写了一个TB版本。
原形很简单,很多人经验都比我丰富,一定能扩充不少,如加入止损,止赢,加入资金/风险管理,改成日内系统等,从而打造成为自己的一个利器。

写在前面的话:
从看dual thrust的原形到重写TB代码,用时大概半小时,因为我本人是从事研发工作,代码从构思开始就会首先考虑逻辑思维的严密和健壮性,但也很可能有疏忽之处,比如这个系统我就没有加入涨跌停和最小幅度控制(我只想原汁原味重写,其它的大家自己扩充吧),所以大家在提问的时候,不要先入为主的认为我会犯很多低级错误,一定要认真读过代码,并对TB机制有足够的了解,这也是对我的尊重吧,坦白说,前几次发分享系统,看到大家的回复,我有些失落。
另外:很多朋友通过QQ直接跟我沟通,因为本人用于维持生计的工作跟期货没任何关系,而且一直都很忙,写系统时要么是在上班的时候忙里偷闲偷偷摸摸的写上一段,要么就是利用休息时间,像重写这个系统就是在凌晨3点多,所以很多留言和询问我可能没有时间去关注,碰到没有回复的朋友,还请谅解。
如果以后有时间的话,我会再重写一些MT4上比较有价值的策略和大家分享。
作者: 穿堂风    时间: 2011-7-24 03:47:17

dual thrust系统原形
  1. Inputs: K1(.5),K2(.5),Mday(1),Nday(1);
  2. Vars: BuyRange(0), SellRange(0);
  3. Vars: BuyTrig(0),SellTrig(0);
  4. Vars: HH(0),LL(0),HC(0),LC(0);

  5. If CurrentBar > 1 Then Begin
  6. HH = Highest(High,Mday);
  7. HC = Highest(Close,Mday);
  8. LL = Lowest(Low,Mday);
  9. LC = Lowest(Close,Mday);

  10. If (HH - LC) >= (HC - LL) Then Begin
  11. SellRange = HH - LC;
  12. End Else Begin
  13. SellRange = HC - LL;
  14. End;

  15. HH = Highest(High,Nday);
  16. HC = Highest(Close,Nday);
  17. LL = Lowest(Low,Nday);
  18. LC = Lowest(Close,Nday);

  19. If (HH - LC) >= (HC - LL) Then Begin
  20. BuyRange = HH - LC;
  21. End Else Begin
  22. BuyRange = HC - LL;
  23. End;

  24. BuyTrig = K1*BuyRange;
  25. SellTrig = K2*SellRange;

  26. If MarketPosition = 0 Then Begin
  27. Buy at Open of next bar + BuyTrig Stop;
  28. Sell at Open of next bar - SellTrig Stop;
  29. End;

  30. If MarketPosition = -1 Then Begin
  31. Buy at Open of next bar + Buytrig Stop;
  32. End;

  33. If MarketPosition = 1 Then Begin
  34. Sell at Open of next bar - SellTrig Stop;
  35. End;

  36. End;
复制代码

作者: 穿堂风    时间: 2011-7-24 03:49:33

本人重写的TB源码
转载注明出处
  1. //------------------------------------------------------------------------
  2. // 简称: dual_thrust
  3. // 名称:
  4. // 类别: 公式应用
  5. // 类型: 用户应用
  6. // 输出: 穿堂风
  7. //------------------------------------------------------------------------


  8. Params
  9. Numeric K1(0.5);
  10. Numeric K2(0.5);
  11. Numeric Mday(1);
  12. Numeric Nday(1);
  13. Numeric lots(1);
  14. Numeric offset(0);

  15. Vars
  16. Numeric BuyRange(0);
  17. Numeric SellRange(0);
  18. Numeric BuyTrig(0);
  19. Numeric SellTrig(0);
  20. Numeric HH;
  21. Numeric LL;
  22. Numeric HC;
  23. Numeric LC;
  24. Numeric i_offset;
  25. Numeric BuyPosition;
  26. Numeric SellPosition;

  27. Begin
  28. If(CurrentBar > 44*Max(Mday,Nday))//使用的是5分钟周期,其它的周期自己做相应修改
  29. {
  30.         i_offset = offset*MinMove*PriceScale;
  31.         HH = Highest(HighD(1),Mday);
  32.         HC = Highest(CloseD(1),Mday);
  33.         LL = Lowest(LowD(1),Mday);
  34.         LC = Lowest(CloseD(1),Mday);

  35.         If((HH - LC) >= (HC - LL))
  36.         {
  37.                 SellRange = HH - LC;
  38.         }
  39.         Else
  40.         {
  41.                 SellRange = HC - LL;
  42.         }

  43.         HH = Highest(HighD(1),Nday);
  44.         HC = Highest(CloseD(1),Nday);
  45.         LL = Lowest(LowD(1),Nday);
  46.         LC = Lowest(CloseD(1),Nday);

  47.         If((HH - LC) >= (HC - LL))
  48.         {
  49.                 BuyRange = HH - LC;
  50.         }
  51.         Else
  52.         {
  53.                 BuyRange = HC - LL;
  54.         }

  55.         BuyTrig = K1*BuyRange;
  56.         SellTrig = K2*SellRange;
  57.        
  58.         BuyPosition = OpenD(0)+BuyTrig;
  59.         SellPosition = OpenD(0)-SellTrig;
  60.        
  61.         PlotNumeric("BuyPosition",BuyPosition);
  62.         PlotNumeric("SellPosition",SellPosition);

  63.         If(MarketPosition == 0)
  64.         {
  65.                 If(High>=BuyPosition)
  66.                 {
  67.                         Buy(lots,Max(Open,BuyPosition)+i_offset);
  68.                         Return;
  69.                 }
  70.                
  71.                 If(Low<=SellPosition)
  72.                 {
  73.                         SellShort(lots,Min(Open,SellPosition)-i_offset);
  74.                         Return;
  75.                 }
  76.         }

  77.         If(MarketPosition == -1)
  78.         {
  79.                 If(High>=BuyPosition)
  80.                 {
  81.                         Buy(lots,Max(Open,BuyPosition)+i_offset);
  82.                         Return;
  83.                 }
  84.         }

  85.         If(MarketPosition == 1)
  86.         {
  87.                 If(Low<=SellPosition)
  88.                 {
  89.                         SellShort(lots,Min(Open,SellPosition)-i_offset);
  90.                         Return;
  91.                 }
  92.         }
  93. }
  94. End

  95. //------------------------------------------------------------------------
  96. // 编译版本        GS2010.12.08
  97. // 用户版本        2011/07/24 02:14
  98. // 版权所有        穿堂风
  99. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  100. //                        每一版本的TrabeBlazer公式修改和重写的权利
  101. //------------------------------------------------------------------------
复制代码

作者: 穿堂风    时间: 2011-7-24 03:53:09

RB 5分钟周期
使用默认参数,未作优化
其它品种大家可以去试试
[attach]4843[/attach]
[attach]4844[/attach]
作者: 穿堂风    时间: 2011-7-24 03:57:22

参数设置说明
[attach]4845[/attach]
作者: 穿堂风    时间: 2011-7-24 04:03:53

忘说了,重写的是使用V4版本。
编译时下边提示框提示编译警告,说“包含系列函数,可能有逻辑错误”,不用管。
虽然可以把openD放if外边去掉警告,但没必要那么做,因为我们自己知道,这里没有逻辑错误。
作者: 穿堂风    时间: 2011-7-24 04:26:27

股指默认参数也是杠杠的
因本人现在连螺纹都买不起(不是想拉资金,本人现在一点想代客的心情都没有),IF更是没碰过,手续费设置的2%%,不知道对不对。
[attach]4846[/attach]
[attach]4847[/attach]
作者: Joseph0727    时间: 2011-7-24 06:56:43

仔细研究下!
作者: Joseph0727    时间: 2011-7-24 07:12:22

If(CurrentBar > 44*Max(Mday,Nday))//使用的是5分钟周期,其它的周期自己做相应修改
这个44是采用相应周期下面的日内bar数吗?比如采用股指5分钟数据,应该就写成
If(CurrentBar > 54*Max(Mday,Nday)) 是这个意思吗?谢谢
作者: 穿堂风    时间: 2011-7-24 09:25:59

If(CurrentBar > 44*Max(Mday,Nday))//使用的是5分钟周期,其它的周期自己做相应修改
这个44是采用相应周期 ...
Joseph0727 发表于 2011-7-24 07:12



    恩,是这个意思,我上边写错了,应该是45,不过没关系,这块写的不对,也只是影响测试的前边一两次交易
作者: bluefox    时间: 2011-7-24 12:29:41

无条件顶。。。。。。。。。。。。。
作者: 道勤    时间: 2011-7-24 13:42:22

十分感谢分享!
作者: weibo-lwb    时间: 2011-7-25 01:12:21

如果当天走势一直在上下穿多空临界点怎么办啊。
作者: 穿堂风    时间: 2011-7-25 09:18:11

如果当天走势一直在上下穿多空临界点怎么办啊。
weibo-lwb 发表于 2011-7-25 01:12



    趋势系统一般都会有这个问题,在原有模型上再扩充吧,比如上边我也说到了,设定一个最小波动范围,或者限定一段时间内的失败次数……
作者: weorc    时间: 2011-7-25 12:34:04

感谢穿大侠的分享
作者: 趋势跟踪    时间: 2011-7-25 13:03:34

顶一个,谢谢穿堂风老弟无私奉献!
作者: beijib    时间: 2011-7-25 15:56:24

凌晨发帖,保重身体啊
作者: illidanyl    时间: 2011-7-26 16:53:54

今天针对楼主这个做了个日内的模型测试了下 效果感觉一般的说。。。
作者: illidanyl    时间: 2011-7-26 16:55:15

类似于这套系统
  1. //------------------------------------------------------------------------
  2. // 简称: B1
  3. // 名称:
  4. // 类别: 公式应用
  5. // 类型: 用户应用
  6. // 输出:
  7. //------------------------------------------------------------------------

  8. Params
  9.    Numeric Lot(1);            //交易仓位
  10.    Numeric OffsetPoint(2);    //滑点
  11.    Numeric MoneyLoss(0.2); //亏损平仓值  
  12.    Numeric PercentOfRange(0.3);

  13. Vars
  14.    String name;

  15.    Numeric bTime;             //Bar的建立时间
  16.    Numeric Offset;            //滑点
  17.    NumericSeries Position;          //仓位
  18.    NumericSeries estP;              //极值
  19.    NumericSeries ExitP;             //止损线
  20.    NumericSeries Trade;
  21.    NumericSeries Up;
  22.    NumericSeries Down;
  23.    Numeric DayOpen;
  24.    Numeric preDayRange;
  25.    Numeric UpperBand;
  26.    Numeric LowerBand;
  27.    Bool BarUp;
  28.    Bool BarDown;
  29.    Bool bTimeCon;

  30. Begin
  31.    If(Date != Date[1] And High == Low) Return;//接近涨跌停板时不做交易

  32.    bTime = IntPart(Time*10000);
  33.    Offset = OffsetPoint* PriceScale*MinMove;
  34.    Up = OpenD(0) + (HighD(1) -  LowD(1))*PercentOfRange;
  35.    Down = OpenD(0) - (HighD(1) -  LowD(1))*PercentOfRange;
  36.    DayOpen = OpenD(0);

  37.    BarUp = Open > Up;
  38.    BarDown = Open < Down;
  39.    bTimeCon = (bTime > 0910) And (bTime < 1456);

  40.    If(Position > 0 And estP < High) estP = High[1];
  41.    If(Position < 0 And estP > Low) estP = Low[1];
  42.    If(Position > 0)
  43.       ExitP = estP * (100 - MoneyLoss) / 100;
  44.    Else
  45.       ExitP = estP * (100 + MoneyLoss) / 100;
  46.    If(Trade == 1 And Low < Up) Trade = 0;
  47.    If(Trade == 2 And High > Down) Trade = 0;

  48.    PlotNumeric("UpperBand",Up);
  49.    PlotNumeric("LowerBand",Down);
  50.    PlotNumeric("MidLine",DayOpen);

  51.    If(bTimeCon)
  52.    {
  53.       If(Position == 0)
  54.       {
  55.          If(BarUp And Trade != 1)         //Long Open
  56.          {
  57.             Buy(lot,Open);
  58.             Position = lot;
  59.             estP = Up;
  60.             ExitP = Up;
  61.          }
  62.    
  63.          If(BarDown And Trade != 2)
  64.          {
  65.             SellShort(lot,Open);
  66.             Position = lot * -1;
  67.             estP = Down;
  68.             ExitP = Down;
  69.          }
  70.       }
  71.       Else
  72.       If(Position != 0)
  73.       {
  74.          If(Position > 0 And Low < DayOpen)
  75.          {
  76.             Sell(lot,DayOpen);
  77.             Position = 0;
  78.             Commentary("1");
  79.             Trade = 1;
  80.          }
  81.       
  82.          If(Position < 0 And High > DayOpen)
  83.          {
  84.             BuyToCover(lot,DayOpen);
  85.             Position = 0;
  86.             Commentary("2");
  87.             Trade = 2;
  88.          }
  89.    
  90.          If(Position > 0 And Low < ExitP)
  91.          {
  92.             Sell(lot,ExitP);
  93.             Position = 0;
  94.             Commentary("3");
  95.             Trade = 1;
  96.          }
  97.    
  98.          If(Position < 0 And High > ExitP)
  99.          {
  100.             BuyToCover(lot,ExitP);
  101.             Position = 0;
  102.             Commentary("4");
  103.             Trade = 2;
  104.          }
  105.       }
  106.    }

  107.    If(bTime > 1429)
  108.    {
  109.       If(Position != 0)
  110.       {
  111.          If (Position < 0)
  112.          BuyToCover(lot,Open);
  113.       Else
  114.          Sell(lot,Open);
  115.       }
  116.       Position = 0;
  117.    }

  118.    Commentary("Position = "+Text(Position));
  119.    Commentary("Trade = "+Text(Trade));
  120.    Commentary("ExitP = "+Text(ExitP));
  121. End

  122. //------------------------------------------------------------------------
  123. // 编译版本   GS2010.12.08
  124. // 用户版本   2011/04/18 10:11
  125. // 版权所有   illidanly
  126. // 更改声明   TradeBlazer Software保留对TradeBlazer平台
  127. //         每一版本的TrabeBlazer公式修改和重写的权利
  128. //------------------------------------------------------------------------
复制代码

作者: a415260930    时间: 2011-8-1 09:28:42

先看看,有问题再请教哈
作者: shijianxulie    时间: 2011-8-1 17:18:54

有问题啊,每个BAr上都交易
作者: 读书山林    时间: 2011-8-2 13:19:54

好贴 消化下
作者: a415260930    时间: 2011-8-2 16:38:21

回复 3# 穿堂风


    穿老大 对这句话我不大理解,不知道这有什么用?是用来设置滑点的吗?“If(CurrentBar > 44*Max(Mday,Nday))//使用的是5分钟周期,其它的周期自己做相应修改”
作者: lzl563    时间: 2011-8-3 12:35:31

.
...........
作者: 輪回    时间: 2011-8-3 20:07:58

無條件頂上——
作者: bjzch    时间: 2011-8-5 15:45:53

这个系统是 Michael Chalek 在80 年代开发的 Dual Thrust。在自动化交易排名中,目前为止,仍然排名第二左右。详细资料,大家可以搜索网络对这方面的介绍。

基本原理很简单,描述出来如下,这样不懂编程的人都可以明白:

1. 在今天的收盘,计算两个值: 最高价-收盘价, 和 收盘价-最低价。然后取这两个值较大的那个,乘以k值0.7。把结果称为 触发值。

2. 在明天的开盘,记录开盘价,然后在价格超过(开盘+触发值)时马上买入,或者价格低于(开盘-触发值)时马上卖空。

3. 没有明确止损。这个系统是反转系统,也就是说,如果在价格超过(开盘+触发值)时手头有一口空单,则买入两口。同理,如果在价格低于(开盘-触发值)时手上有一口多单,则卖出两口。

程序在复制了原程序基础上,增加了止损设置和优化环境,你可以决定是否止损,止损后是否重新开仓,是否以当前价立刻执行策略还是以收盘价执行,你还可以选择你认为对你最重要的几个指标进行打分排序,并通过表现打分,选出最优的参数组合。
通过分析参数,可以发现各个品种的不同特性。并构建较为稳健的策略组合池。
程序还给你非常直观的视觉感受,让你直观的看到你的策略执行情况,是否满足上涨行情做多,下跌行情做空为主体执行格局。如下图。程序还直观的表示了你的策略回报与一般的正态分布之间的风险占有对比,如下图,很明显我们的策略回报一阶占优于正态分布,也就是说,尖峰,薄尾。
程序还给你提供了非常详尽的统计报告,如平均盈利,最长不盈利时间,这些指标均可以作为你选择程序好坏的指标,用于你的打分系统,选择最符合你心理的系统优化参数。
本文来自: 人大经济论坛 详细出处参考:http://www.pinggu.org/bbs/viewth ... &fromuid=651507
作者: tbfan    时间: 2011-8-5 16:37:25

不错啊 顶一下
作者: futurekiller    时间: 2011-8-7 19:34:20

谢谢楼主,期待穿堂风老大的后续作品
作者: wanyg    时间: 2011-8-7 21:14:29

感谢楼主无私的贴出源码,给了一个机会,期待更多更好的作品
作者: 读书山林    时间: 2011-8-8 16:32:57

好贴 不顶不行,
作者: xxjxxjj    时间: 2011-8-11 17:03:48

期待新作品
作者: hxh    时间: 2011-8-12 13:10:33

能代写些程序吗?
作者: lzl563    时间: 2011-8-22 23:11:29

必须顶起,不知道排名前三的另两个是什么程序啊
作者: zyxsir    时间: 2011-8-25 10:28:53

谢谢分享,顶!
作者: hansw    时间: 2011-8-28 08:35:26

恩,研究一下

谢谢穿堂风
作者: 几何    时间: 2011-9-3 15:03:25

无私地发表程序代码要大大的张扬, 但希望以后在写代码前要描述一下策略和思路.这样对大家就更有帮助了.
作者: 全自动交易    时间: 2011-9-3 22:42:28

Highest(HighD(1),Mday);
V4里面,这种写法错误,Highest(HighD(1),Mday)实际等于HighD(1)
正确的写法是 用for循环求最大值
  1.              HH=HighD(1);
  2.                  HC=CloseD(1);
  3.                  LL=LowD(1);
  4.                  LC=HC;//CloseD(1);
  5.                  For i=2 to Mday
  6.                  {
  7.                      HH = Max(HH,HighD(i));
  8.                          HC = Max(HC,CloseD(i));
  9.                          LL = Min(LL,LowD(i));
  10.                          LC = Min(LC,CloseD(i));
  11.                 }
复制代码

作者: 全自动交易    时间: 2011-9-3 22:46:58

Numeric Highest(NumericSeries Price,Numeric Length)
Numeric HighD(Numeric daysAgo)
作者: win5ms    时间: 2011-9-5 14:29:49

为什么资金曲线到后面都显得平了?
作者: 穿堂风    时间: 2011-9-6 10:43:58

提供参考参数:
if 5分钟周期,2%%手续费,无滑点(根据喜好自己加)
[attach]5072[/attach]
[attach]5073[/attach]
[attach]5074[/attach]
作者: shp7566    时间: 2011-9-11 22:04:40

不顶不行啊!
作者: jiaoyizhe    时间: 2011-9-29 20:02:02

原来 改编的原型是出自你这里
作者: shp7566    时间: 2011-9-29 23:51:11

顶起
作者: 俯仰自得    时间: 2011-10-1 22:39:28

顶起,感谢穿堂风的奉献,测试的效果比较好,值得一用。
作者: crocodile1    时间: 2011-10-9 23:14:13

谢谢了,有空时试试
作者: pttost    时间: 2011-10-10 15:50:51

翻译的不错
作者: 财富书生    时间: 2011-10-10 22:58:08

回复 3# 穿堂风


    大师,为何总是固定一手开仓啊,能不能改编一下,按照总资金的百分比开仓啊,比如使用总资金30%开仓,对程序化一窍不通,求提携。麻烦改一下我直接使用。
作者: xiaoshansanzhi    时间: 2011-10-18 16:08:40

回复 3# 穿堂风


    认真学习了,谢谢楼主
作者: 光明之子    时间: 2011-10-19 20:38:53

有人用这个吗?能否谈谈体会。
作者: xiaoshansanzhi    时间: 2011-10-20 09:17:24

回复 2# 穿堂风


    不断学习!
作者: symymt    时间: 2011-10-22 07:49:32

感谢楼主的无私奉献
作者: gzadigo    时间: 2011-10-26 18:20:56

恩,谢谢楼主。我改成了自动识别开始日的。任何周期都能用了。
第一次碰到以下条件
Data!=Date[1]
才开始工作
作者: robert3144    时间: 2011-11-2 16:33:05

请教gzadgo:
如何声明Data函数啊,编译不通过,说是没有声明
作者: nickchen    时间: 2011-11-4 19:19:18

谢谢 这样的好贴不顶都不行。真是学习的好例子。
作者: runcai    时间: 2011-11-8 10:02:33

如果做日K线,把K1K2改成0.8,效果不错
作者: tongchidaozhu    时间: 2011-11-8 11:31:45

支持经典回顾
作者: gzadigo    时间: 2011-11-9 18:30:52

robert3144兄弟:
是Date!=Date[1],  敲错键盘啦。
作者: tank    时间: 2011-11-20 22:44:22

雷锋啊,绝对顶。
作者: tcogh    时间: 2011-12-20 13:58:15

初学者,没看明白这系统的原理,是前一根K线看触发条件,后面的K线来操作呢,还是前一日的日线看触发条件,第二天的5分钟K线操作?另外,止损止盈是怎样的?希望有高手详细说明。谢谢
作者: cqalan    时间: 2011-12-20 23:19:55

看着还不错,不知道实盘如何
作者: tcogh    时间: 2011-12-21 15:26:30

这个系统开仓之后是持有到收盘无论结果如何都平仓吗?
作者: jjjjane    时间: 2011-12-23 00:20:46

楼主的代码没有平仓指令都可以测试,真是神奇了
作者: jjjjane    时间: 2011-12-23 00:25:13

楼主的代码没有平仓指令都可以测试,真是神奇了
作者: illidanyl    时间: 2011-12-23 10:07:49

楼主的代码没有平仓指令都可以测试,真是神奇了
jjjjane 发表于 2011-12-23 00:25



    使用BUY的时候会自动反手的 -,-
作者: youngsunking    时间: 2011-12-24 22:16:29

程序基本看明白了,核心思想不明白(为什么高低点是那样决定的)
作者: hxh    时间: 2011-12-25 22:13:52

知道的人多的系统,还能很有效吗?
作者: tzs111111    时间: 2012-1-8 00:53:40

顶顶一个。。。。。。。。。。。。。。。。。
作者: xiezi1117    时间: 2012-1-25 15:19:32

这明明就是一个日线波段交易系统,为什么那么多人说它是日内系统?真不知道这些人有没有仔细看过代码。又或者,是我自己搞错了?

我的感觉是:这个系统非常的激进,专抓小幅波段,虽然收益比较高,但是承担的风险很大。而且交易频率很高,佣金可能占净收益的20%。原码为永远在市,非空即多。如果是小资金,且不怕赔光,完全可以试试,运气好的话,一年几倍很容易做到。
作者: subf    时间: 2012-1-27 15:51:02

这个突破系统是痛苦的时候多,爽的时候少,折腾的时候多,所以要有很强的心理承受力才能用于实盘交易,既然是出名的系统嘛,如果能坚持下来,做好资金管理,以一年为期,估计不会亏,能赚多少就要看市场了。
作者: pp110117    时间: 2012-1-31 09:40:45

请教下大侠,为什么我编译的时候会出现下列错误?[img]3@XGG9VR[A]}0Z~Z`(H)@(Q[/img]
作者: symymt    时间: 2012-2-8 15:47:06

这个系统谁懂得如何加入止赢止损呀?
自己加入进去,信号就乱了。
请高手指点呀
作者: 禁忌石    时间: 2012-2-18 08:58:39

好东西,得顶
作者: cjyjgz    时间: 2012-2-18 10:39:10

真心感谢,你让我们新手在摸爬滚打的路上省去了不少时间,开拓了眼界!
作者: 纳小兜    时间: 2012-2-29 15:23:39

有没有带注释的啊,跪求~
作者: 纳小兜    时间: 2012-2-29 16:30:05

“i_offset = offset*MinMove*PriceScale;

        HH = Highest(HighD(1),Mday);

请问能否解释一下,我是新手,谢谢啊
作者: lnyuanming    时间: 2012-3-5 18:25:27

顶·································
作者: liq77    时间: 2012-3-19 09:09:31

“i_offset = offset*MinMove*PriceScale;

        HH = Highest(HighD(1),Mday);

请问能否解释一下, ...
纳小兜 发表于 2012-2-29 16:30


第一句是滑点,将offset等于3时,i_offset(滑点) 就设为3个最小跳动单位,对于IF合约,就是0.6个点。
第二句表示昨日最高价的数值,Mday是表示该值向前偏移的BAR的数量(正如自动兄指出的那样,当MDAY>1时,此句表达有错)。
作者: csuwyd    时间: 2012-3-19 16:57:01

穿堂风,新手在这里谢过,这个论坛能有点内容,靠的就是你这样的人
作者: walkerchen    时间: 2012-3-30 14:44:35

本帖最后由 walkerchen 于 2012-3-30 14:45 编辑

If(High>=BuyPosition)
                {
                        Buy(lots,Max(Open,BuyPosition)+i_offset);
                        Return;
                }
                If(Low<=SellPosition)
                {
                        SellShort(lots,Min(Open,SellPosition)-i_offset);
                        Return;
                }
这个有问题,同一根K线上,先下穿SellPosition,则做空,然后后来又上穿BuyPosition,则应该做多。可测试的结果是不反映这个应该先做空然后做多的情况的。最终导致测试结果比实际的要好的多。

把上述代码里的Return都注释掉,再测试下,情况差异很大。
作者: 迎风尿十丈    时间: 2012-4-15 22:25:23

顶   感谢大侠
作者: 迎风尿十丈    时间: 2012-4-22 19:18:49

walkerchen 发表于 2012-3-30 14:44
If(High>=BuyPosition)
                {
                        Buy(lots,Max(Open,BuyPosition)+i_off ...

嗯   把前一日的价格编成跨周期数据,再用分钟k线引用,再用分钟级别的k线测试,可以去除这种情况
作者: yml6363    时间: 2012-7-3 23:15:25

顶   感谢大侠
作者: sqj888    时间: 2012-7-5 07:56:10

好东西,学习一下
作者: VoiP-QD    时间: 2012-7-27 14:16:16

谢谢兄弟,助人者,天助之
作者: kakagoal    时间: 2012-8-2 11:16:08

学习了,顶一下
作者: blackmount    时间: 2012-8-3 10:57:38

感谢你的分享,学习一下!
作者: jiaolongzjd    时间: 2012-8-4 19:24:39

illidanyl 发表于 2011-7-26 16:53
今天针对楼主这个做了个日内的模型测试了下 效果感觉一般的说。。。

日内我也得出同样测试结果
作者: jiaolongzjd    时间: 2012-8-4 19:27:26

全自动交易 发表于 2011-9-3 22:42
Highest(HighD(1),Mday);
V4里面,这种写法错误,Highest(HighD(1),Mday)实际等于HighD(1)
正确的写法是 用 ...

实际上等于H[1]
作者: 浪漫z    时间: 2012-8-5 10:19:47

谢谢分享,学习了
作者: bookjojo    时间: 2012-8-20 22:42:44

学习学习先,谢谢分享
作者: 紫色千纸鹤    时间: 2012-8-22 10:51:52

楼主牛人,感谢了,正在学习tb中
作者: 多多亮-亮多多    时间: 2012-9-25 18:30:16

谢谢分享
作者: 张伟    时间: 2012-10-13 07:31:06

本帖最后由 张伟 于 2012-10-13 07:50 编辑
穿堂风 发表于 2011-7-24 09:25
恩,是这个意思,我上边写错了,应该是45,不过没关系,这块写的不对,也只是影响测试的前边一两次 ...


我想用这个跑日内实盘,就加个日内平仓就可以吧。If(CurrentBar > 44*Max(Mday,Nday))//这里到底是44还是45,CurrentBar的返回值是从0开始的。一天的就是0-44.
作者: ST振翔    时间: 2012-10-26 18:50:59

本帖最后由 ST振翔 于 2012-10-26 21:41 编辑

If(High>=BuyPosition)

                {

                        Buy(lots,Max(Open,BuyPosition)+i_offset);

                        Return;

                }

这个是不是有问题,要不要改成If(High[1]>=BuyPosition)这样的判断条件?因为OPEN出现的比HIGH要早,不然测试的时候系统判断的情况是交易信号出现了,接着又按之前已经出现的开盘价成交,实盘的时候怕有问题吧?
i_offset这个变量,i_offset = offset*MinMove*PriceScale;但是offset又是个0,那i_offset不就没有意义了?


作者: 巴伊老爷-CYY    时间: 2012-11-11 11:48:22

通道突破系统,一直持仓策略,类似肯特纳日线交易系统
作者: 塵埃    时间: 2012-11-13 21:59:12

感谢分享
作者: liyi6817    时间: 2012-11-23 09:27:04

楼主你好,
为什么我实盘操作没有反手单,图形上显示有反手。
作者: yuanwl    时间: 2012-11-24 17:24:00

穿堂风 发表于 2011-7-24 09:25
恩,是这个意思,我上边写错了,应该是45,不过没关系,这块写的不对,也只是影响测试的前边一两次 ...

Dual Thrust这个不是日内模型吗?怎么代码里没有体现?
作者: kykyhyhfs    时间: 2012-11-24 22:25:29

高手阿!
作者: 石破总会天惊    时间: 2012-11-30 15:14:14

支持老大





欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2