您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

【系统CODE】一个可实盘交易的系统 [开拓者 TB]

  • 咨询内容: maharaj发自海洋论坛
    寻TB的编码,现将原贴附上,看大家是否可帮他的忙:

    一直做美盘,最近对国内期货有些兴趣,买了些数据来做测试。发现有一个系统在白糖上不错。这个系统是 Michael Chalek 在80 年代开发的 Dual Thrust。基本原理很简单,描述出来如下,这样不懂编程的人都可以明白:

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

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

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

    我用TradeStation测试的结果如下:

    测试条件: 一口合约,已减去交易费用50元
    时期: 2006-1-6 (白糖开始交易)至 2009-1-8
    交易次数: 249
    胜率: 48.59%
    平均赢利: 223.17元
    最大连亏: 5880 元

    这是资金曲线图:


    要求不高的话,这已经是一个可以投入实盘交易的系统了。k是唯一的参数,在大范围内变动(0.5-1.1)时,系统赢利都不错。有兴趣的同好可以试验各种滤网,看哪种滤网能显著提高绩效。如果有时间,我会在其他的品种上都测试一下。

    因为交易美盘,我没法人工交易国内期货。哪位朋友可以编出TB的代码,或者有自动交易的建议,请告诉我一下。谢谢。

    [ 本帖最后由 一朵祥云 于 2009-1-31 22:08 编辑 ]

     

  • TB技术人员:
    1. Params
    2. numeric K(0.7);
    3. Vars
    4. numeric Spreadvalue;
    5. numericseries daynum;
    6. Begin
    7. spreadvalue=max(closed(1)-LowD(1),highd(1)-closed(1));
    8. if(barstatus==0)
    9. {
    10.   daynum=0;
    11. }else if(barstatus==1 and day!=day[1])
    12. {
    13.   daynum=daynum+1;
    14. }Else
    15. {
    16.   daynum=daynum[1];
    17. }
    18. if(daynum>0)
    19.   {
    20.    if(high>opend(0)+K*spreadvalue)
    21.     {
    22.      buy(0,min(opend(0)+K*spreadvalue+2*minmove*pricescale,high));
    23.     }
    24.    if(low<opend(0)-K*spreadvalue)
    25.     {
    26.      sellshort(0,max(opend(0)-k*spreadvalue-2*minmove*pricescale,low));
    27.     }
    28.   }
    29. end
    复制代码

     

  • TB客服: 感谢孤舟骑浪的分享!大家可以在不同品种和周期上回测一下,发现了什么?

    欢迎继续积极讨论完善思路和实现办法!

     

  • 网友回复: 以下是海洋论坛TTL所发,zzhang朋友编写的TB代码:
    原帖及相关讨论可见http://www.hylt.net/vb/showthread.php?t=18385&page=2

    Params
    Numeric K1(0.5);
    Numeric K2(0.5);
    Numeric Mday(1);
    Numeric lots(1); //交易手数

    Vars
    Numeric BuyRange(0);
    Numeric SellRange(0);
    Numeric BuyTrig(0);
    Numeric SellTrig(0);
    Numeric HH(0);
    Numeric LL(0);
    Numeric HC(0);
    Numeric LC(0);
    Begin
    HH = Highest(HighD(1),Mday);
    HC = Highest(CloseD(1),Mday);
    LL = Lowest(LowD(1),Mday);
    LC = Lowest(CloseD(1),Mday);

    If((HH - LC) >= (HC - LL)) BuyRange = HH - LC;
    else BuyRange = HC - LL;

    SellRange=BuyRange;

    BuyTrig = K1*BuyRange;
    SellTrig = K2*SellRange;

    If(MarketPosition !=1 && High>=(OpenD(0)+BuyTrig)) Buy(lots,OpenD(0)+BuyTrig); // 多头建仓
    If(MarketPosition !=-1 && Low<=(OpenD(0)-SellTrig)) SellShort(lots,OpenD(0)-SellTrig); // 空头建仓

    End

    [ 本帖最后由 一朵祥云 于 2009-1-20 16:02 编辑 ]

     

  • 网友回复: 经过仔细研究,加了一点东西,但感觉还是没什么作用。或许交易的本质就是用非常大的资金,非常小的头寸,非常多的正期望值的系统,分散非常多的市场,最终忽略局部的小得失,而整体上实现了盈利。小资金和单系统,需有很好的运气(技巧性改善,就是要有坚强的耐性,等到连续亏损次数远远大于概率之外时介入,还有一丁点希望)。
    1. Params
    2. numeric K(0.7);
    3. Vars
    4. numeric Spreadvalue;
    5. numericseries daynum;
    6. boolseries btrailing(false);
    7. Begin
    8. btrailing=btrailing[1];
    9. spreadvalue=max(closed(1)-LowD(1),highd(1)-closed(1));
    10. if(barstatus==0)
    11. {
    12.   daynum=0;
    13. }else if(barstatus==1 and day!=day[1])
    14. {
    15.   daynum=daynum+1;
    16. }Else
    17. {
    18.   daynum=daynum[1];
    19. }
    20. if(daynum>0 and spreadvalue>20*minmove*pricescale)
    21.   {
    22.    if(marketposition!=1 and high>opend(0)+K*spreadvalue)
    23.     {
    24.      btrailing=false;
    25.      buy(0,min(opend(0)+K*spreadvalue+2*minmove*pricescale,high));
    26.      setglobalvar(0,opend(0));
    27.      setglobalvar(1,avgentryprice-OpenD(0));
    28.     }
    29.    if(marketposition!=-1 and low<opend(0)-K*spreadvalue)
    30.     {
    31.      btrailing=false;
    32.      sellshort(0,max(opend(0)-k*spreadvalue-2*minmove*pricescale,low));
    33.      setglobalvar(0,opend(0));
    34.      setglobalvar(1,opend(0)-avgentryprice);
    35.     }
    36.   }
    37. if(marketposition==1)
    38.   {
    39.    if(low<getglobalvar(0))
    40.     {
    41.      sell(0,getglobalvar(0)-2*minmove*pricescale);
    42.     }
    43.    if(high>AvgEntryPrice+3*getglobalvar(1))
    44.     {
    45.      btrailing=true;
    46.     }
    47.    if(btrailing==true and low<highest(high,barssinceentry)-2*getglobalvar(1))
    48.     {
    49.      sell(0,max(highest(high,barssinceentry)-2*getglobalvar(1)-2*minmove*pricescale,low));
    50.     }
    51.   }
    52. if(marketposition==-1)
    53.   {
    54.    if(high>getglobalvar(0))
    55.     {
    56.      buytocover(0,getglobalvar(0)+2*minmove*pricescale);
    57.     }
    58.    if(low<AvgEntryPrice-3*getglobalvar(1))
    59.     {
    60.      btrailing=true;
    61.     }
    62.    if(btrailing==true and high>lowest(low,barssinceentry)+2*getglobalvar(1))
    63.     {
    64.      buytocover(0,min(lowest(low,barssinceentry)+2*getglobalvar(1)+2*minmove*pricescale,high));
    65.     }
    66.   }
    67. Commentary("单手亏损量"+text(K*spreadvalue*ContractUnit/pricescale)+"元。");
    68. end
    复制代码

 

如果以上指标公式不适用于您常用的行情软件

或者您想改编成选股公式,以便快速选出某种形态个股的话,

可以联系我们相关技术人员 QQ: 262069696  点击在线交流进行 有偿 改编!

 


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容