设为首页收藏本站

 找回密码
 注册
查看: 30115|回复: 12

经典策略DualThrust改进(带源码) [复制链接]

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
发表于 2013-4-9 15:03:49 |显示全部楼层
本帖最后由 米小兔 于 2013-4-9 15:10 编辑

DualThrust简称DT,是海外top10交易系统中的其一.属于开盘区间突破类交易系统,以今日开盘价加\减一定比例的昨日振幅,确定上下轨.日内突破上轨时平空做多,突破下轨时平多做空.DualThrust在形式上和开盘区间突破策略类似.不同点主要体现在两个方面: DualThrust在Range的设置上,引入前N日的四个价位,使得一定时期内的Range相对稳定,可以适用于日间的趋势跟踪;DualThrust对于多头和空头的触发条件,考虑了非对称的幅度,做多和做空参考的Range可以选择不同的周期参数,也可以通过参数K1和K2来确定.
        原版本DT在RB000中的测试效果,时间范围20090101-20130101.
        关键绩效数据:

资金曲线:

        针对缺陷的修改:
        1) 日内宽幅震荡,高低点反复穿越开多触发价格和开空触发价格,导致日内反复被洗,这种心情相信实盘在用趋势跟随类策略的人都能理解.效果图如下:

针对此种情况,我们设置一个参数TimesMaxToday,用于限制当天的开仓次数,避免在震荡行情中反复被洗.
TimesMaxToday的值设置为1,意思为限定当天开仓次数1次, 有效避免了当天反复被洗的悲剧.修改过后的效果图如下:

修改后的版本命名为ITF_T_DualThrust_V101,在RB000中的测试环境设置同上,关键数据的对照,:

        从关键数据的对照中可以看出,减小最大回撤的同时也损失了部分利润.
        其他参数优化列表:
  1. //------------------------------------------------------------------------
  2. // 简称: ITF_T_DualThrust_V101
  3. // 名称: 国贸期货上海营业部量化交易 客户群:186100158
  4. // 类别: 公式应用
  5. // 类型: 用户应用
  6. // 输出:
  7. //------------------------------------------------------------------------

  8. Params
  9.         Numeric Lots(1);
  10.         Numeric TimesMaxToday(1);  //限制当天开仓最多次数;
  11.         Numeric K1(0.5);
  12.         Numeric K2(0.5);
  13.         Numeric Mday(1);
  14.         Numeric Nday(1);
  15.         Numeric offset(0);
  16.        
  17. Vars
  18.         Numeric BuyRange(0);
  19.         Numeric SellRange(0);
  20.         Numeric BuyTrig(0);
  21.         Numeric SellTrig(0);
  22.         Numeric HH;
  23.         Numeric LL;
  24.         Numeric HC;
  25.         Numeric LC;
  26.         Numeric i_offset;
  27.         Numeric BuyPosition;
  28.         Numeric SellPosition;
  29.         NumericSeries TimesToday(0);  //记录当天开仓次数;

  30. Begin

  31.         If(Barstatus==2 )
  32.         {
  33.                 If( Time==0.090000 And CurrentTime<=0.090001) Return;
  34.                 If( Time==0.101500 And CurrentTime<=0.103001) Return;
  35.                 If( Time==0.133000 And CurrentTime<=0.133001) Return;
  36.         }
  37.        
  38.         If(CurrentBar > 44*Max(Mday,Nday))//使用的是5分钟周期,其它的周期自己做相应修改
  39.         {
  40.                 i_offset = offset*MinMove*PriceScale;
  41.                 HH = Highest(HighD(1),Mday);
  42.                 HC = Highest(CloseD(1),Mday);
  43.                 LL = Lowest(LowD(1),Mday);
  44.                 LC = Lowest(CloseD(1),Mday);
  45.                 If((HH - LC) >= (HC - LL))
  46.                 {
  47.                         SellRange = HH - LC;
  48.                 }
  49.                 Else
  50.                 {
  51.                         SellRange = HC - LL;
  52.                 }
  53.                 HH = Highest(HighD(1),Nday);
  54.                 HC = Highest(CloseD(1),Nday);
  55.                 LL = Lowest(LowD(1),Nday);
  56.                 LC = Lowest(CloseD(1),Nday);

  57.                 If((HH - LC) >= (HC - LL))
  58.                 {
  59.                         BuyRange = HH - LC;
  60.                 }
  61.                 Else
  62.                 {
  63.                         BuyRange = HC - LL;
  64.                 }
  65.                 BuyTrig = K1*BuyRange;
  66.                 SellTrig = K2*SellRange;
  67.                 BuyPosition = OpenD(0)+BuyTrig;
  68.                 SellPosition = OpenD(0)-SellTrig;
  69.                 PlotNumeric("BuyPosition",BuyPosition);
  70.                 PlotNumeric("SellPosition",SellPosition);
  71.                
  72.                 //开盘第一根K线将当天开仓次数清零;
  73.                 If(BarsSinceToday==0)
  74.                 {
  75.                         TimesToday = 0;
  76.                 }
  77.                 //开仓;
  78.                 If(TimesToday<TimesMaxToday And CurrentBar>90)
  79.                 {
  80.                         If(MarketPosition!=1)
  81.                         {
  82.                                 If(High>=BuyPosition)
  83.                                 {
  84.                                         Buy(lots,Max(Open,BuyPosition)+i_offset);
  85.                                         TimesToday = TimesToday+1;
  86.                                         Return;
  87.                                 }
  88.                         }
  89.                         If(MarketPosition!=-1)
  90.                         {
  91.                                 If(Low<=SellPosition)
  92.                                 {
  93.                                         SellShort(lots,Min(Open,SellPosition)-i_offset);
  94.                                         TimesToday = TimesToday+1;
  95.                                         Return;
  96.                                 }
  97.                         }
  98.                 }
  99.                 //平仓;
  100.                 If(MarketPosition==1 and Low<=SellPosition)
  101.                 {
  102.                         Sell(lots,Min(Open,SellPosition)-i_offset);
  103.                         TimesToday = TimesToday+1;
  104.                         Return;
  105.                 }
  106.                 If(MarketPosition==-1 and High>=BuyPosition)
  107.                 {
  108.                         BuyToCover(lots,Max(Open,BuyPosition)+i_offset);
  109.                         TimesToday = TimesToday+1;
  110.                         Return;
  111.                 }
  112.         }
  113.         Commentary("当天开仓次数="+Text(TimesToday));
  114.          
  115. End

  116. //------------------------------------------------------------------------
  117. // 编译版本        GS2010.12.08
  118. // 用户版本        2013/03/28 11:02
  119. // 版权所有        国贸期货上海营业部量化交易 客户群:186100158
  120. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  121. //                        每一版本的TrabeBlazer公式修改和重写的权利
  122. //------------------------------------------------------------------------
复制代码
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 1

精华
0
UID
117929
积分
49
帖子
13
主题
1
阅读权限
10
注册时间
2013-4-9
最后登录
2013-8-19
发表于 2013-4-9 16:30:57 |显示全部楼层
这个系统是连续在市系统吧,任何时候都有持仓

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
发表于 2013-4-9 17:16:23 |显示全部楼层
原版是这样的,修改之后就会有空仓的情况。

使用道具 举报

Rank: 1

精华
0
UID
119275
积分
20
帖子
7
主题
1
阅读权限
10
注册时间
2013-5-22
最后登录
2015-11-17
发表于 2013-5-24 11:35:26 |显示全部楼层
弱弱的问下,这个可以做实盘自动下单吗?

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
发表于 2013-5-30 14:46:05 |显示全部楼层
只要你接受风险收益比,就可以实盘啦

使用道具 举报

Rank: 1

精华
0
UID
170989
积分
37
帖子
30
主题
6
阅读权限
10
注册时间
1970-1-1
最后登录
2014-6-6
发表于 2014-6-2 20:07:43 |显示全部楼层
不错,赞一下。

使用道具 举报

Rank: 1

精华
0
UID
226419
积分
28
帖子
20
主题
8
阅读权限
10
注册时间
2016-1-8
最后登录
2016-4-15
发表于 2016-4-3 13:40:52 |显示全部楼层
学习一下,return这么用我研究下

使用道具 举报

Rank: 1

精华
0
UID
261763
积分
1
帖子
1
主题
0
阅读权限
10
注册时间
2018-1-17
最后登录
2018-4-20
发表于 2018-1-18 09:03:01 |显示全部楼层
这个代码是有问题的。

使用道具 举报

Rank: 1

精华
0
UID
261967
积分
1
帖子
1
主题
0
阅读权限
10
注册时间
2018-1-23
最后登录
1970-1-1
发表于 2018-1-23 16:57:34 |显示全部楼层
复制上去,测试通不过,有好多个地方错误

使用道具 举报

Rank: 1

精华
0
UID
132691
积分
7
帖子
6
主题
1
阅读权限
10
注册时间
2012-2-11
最后登录
2018-9-8
发表于 2018-8-6 14:25:24 |显示全部楼层
If(CurrentBar > 44*Max(Mday,Nday))//使用的是5分钟周期,其它的周期自己做相应修改

如果不算夜盘的话 这里不应该是45吗? 4*12-3=45

使用道具 举报

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

bottom

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

GMT+8, 2024-3-29 18:34

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部