广西北海银滩酒店预订:系统交易论坛 国外成熟策略R-Breaker分享

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 11:20:12


标题: 国外成熟策略R-Breaker分享,提供翻译后的TB源码,日内系统 [打印本页]

作者: 穿堂风    时间: 2011-6-27 16:32     标题: 国外成熟策略R-Breaker分享,提供翻译后的TB源码,日内系统

本帖最后由 穿堂风 于 2011-6-27 17:25 编辑

R-Breaker这个系统,可能很多人比我熟悉,也更为了解,有错误处还请谅解
另外我并没实盘验证,在信号那加入了一个逻辑锁,用于控制实盘时有信号,但又不会多次满足反复开仓,这个逻辑锁我很多系统都会有,实战很好用。
作者: 穿堂风    时间: 2011-6-27 16:35

先上TS源码
  1. {R-Breaker}
  2. {***********SystemSetup*******************
  3. Trading between 9:15 and 14:29 ChicagoTime only
  4. MMStop $1000
  5. Close End of Day
  6. 10 min Time Frame
  7. ******************************************}


  8. input:notbef(715),notaft(1229);
  9. var:{input:}f1(.35),f2(0.07),f3(.25),reverse(2.00),
  10. rangemin(1.15),xdiv(3);

  11. var:ssetup(0),bsetup(0),senter(0),benter(0),bbreak(0),sbreak(0),
  12. ltoday(0),hitoday(9999),startnow(0),div(0),
  13. rfilter(false);


  14. if currentbar=1 then startnow=0;
  15. div=maxlist(xdiv,1);
  16. if d>d[1] then begin

  17. startnow=startnow+1;

  18. ssetup=hitoday[1]+f1*(c[1]-ltoday[1]);
  19. senter=((1+f2)/2)*(hitoday[1]+c[1])-(f2)*ltoday[1];
  20. benter=((1+f2)/2)*(ltoday[1]+c[1])-(f2)*hitoday[1];
  21. bsetup=ltoday[1]-f1*(hitoday[1]-c[1]);
  22. bbreak=ssetup+f3*(ssetup-bsetup){(1.3625*hitoday[1]+.45*c[1])-.8125*ltoday[1]};
  23. sbreak=bsetup-f3*(ssetup-bsetup){(1.3625*ltoday[1]+.45*c[1])-.8125*hitoday[1]};

  24. hitoday=h;
  25. ltoday=l;

  26. rfilter=hitoday[1]-ltoday[1]>=rangemin;

  27. end;

  28. if h>hitoday then hitoday=h;
  29. if l

  30. if t>=notbef and t=2 and rfilter and
  31. date>entrydate(1) then begin

  32. if hitoday>=ssetup and marketposition>-1 then
  33. SELL("Rlev SE") senter+(hitoday-ssetup)/div stop;
  34. if ltoday<=bsetup and marketposition<1 then
  35. BUY("Rlev LE") benter-(bsetup-ltoday)/div stop;

  36. if marketposition=-1 then
  37. BUY("RbUP LE") entryprice+reverse stop;
  38. if marketposition=1 then
  39. SELL("RbDN SE") entryprice-reverse stop;

  40. if marketposition=0 then
  41. BUY("Break LE") bbreak stop;
  42. if marketposition=0 then
  43. SELL("Break SE") sbreak stop;

  44. end;

  45. if t>=notaft and t<>sess1endtime then begin

  46. if marketposition=-1 then
  47. EXITSHORT("RbUP SX") entryprice+reverse stop;
  48. if marketposition=1 then
  49. EXITLONG("RbDN LX") entryprice-reverse stop;

  50. EXITSHORT("Late SX") h+.05 stop;
  51. EXITLONG("Late LX") l-.05 stop;
  52. END;
复制代码
作者: 穿堂风    时间: 2011-6-27 16:39

本帖最后由 穿堂风 于 2011-6-27 17:28 编辑

TB源码
  1. //------------------------------------------------------------------------
  2. // 简称: R_Breaker
  3. // 名称:
  4. // 类别: 公式应用
  5. // 类型: 用户应用
  6. // 输出: 穿堂风
  7. //------------------------------------------------------------------------

  8. /*R-Breaker*/


  9. Params
  10. Numeric notbef(9.00);
  11. Numeric notaft(14.55);
  12. Numeric f1(0.35);
  13. Numeric f2(0.07);
  14. Numeric f3(0.25);
  15. Numeric reverse(1.00);
  16. Numeric rangemin(0.2);
  17. Numeric xdiv(3);

  18. Vars
  19. NumericSeries ssetup(0);
  20. NumericSeries bsetup(0);
  21. NumericSeries senter(0);
  22. NumericSeries benter(0);
  23. NumericSeries bbreak(0);
  24. NumericSeries sbreak(0);
  25. NumericSeries ltoday(0);
  26. NumericSeries hitoday(9999);
  27. NumericSeries startnow(0);
  28. NumericSeries div(0);
  29. BoolSeries rfilter(false);
  30. Numeric i_reverse;
  31. Numeric i_rangemin;
  32. Numeric i_vB;
  33. Numeric i_vS;

  34. Begin
  35. i_reverse = reverse*(OpenD(0)/100);
  36. i_rangemin = rangemin*(OpenD(0)/100);
  37. if(BarStatus==0)
  38. {
  39.         startnow=0;
  40.         div=max(xdiv,1);
  41. }

  42. if(Date != Date[1])
  43. {
  44.         SetGlobalVar(0,0);
  45.         SetGlobalVar(1,0);
  46.         startnow=startnow+1;
  47.         ssetup=hitoday[1]+f1*(Close[1]-ltoday[1]);
  48.         senter=((1+f2)/2)*(hitoday[1]+Close[1])-(f2)*ltoday[1];
  49.         benter=((1+f2)/2)*(ltoday[1]+Close[1])-(f2)*hitoday[1];
  50.         bsetup=ltoday[1]-f1*(hitoday[1]-Close[1]);
  51.         bbreak=ssetup+f3*(ssetup-bsetup);
  52.         sbreak=bsetup-f3*(ssetup-bsetup);

  53.         hitoday=High;
  54.         ltoday=Low;

  55.         rfilter=(hitoday[1]-ltoday[1])>=i_rangemin;
  56. }

  57. if(High>hitoday)
  58. {
  59.         hitoday=High;
  60. }
  61. if(Low
  62. {
  63.         ltoday=Low;
  64. }
  65. if(Time*100>=notbef and Time*100=2 and rfilter)
  66. {

  67.         if(Time != GetGlobalVar(1) and GetGlobalVar(1) != 0)
  68.         {
  69.                 SetGlobalVar(1,10000);
  70.         }
  71.         if(hitoday>=ssetup and marketposition>-1 and GetGlobalVar(1)<1)
  72.         {
  73.                 If(Low<=(senter+(hitoday-ssetup)/div))
  74.                 {
  75.                         SellShort(1,senter+(hitoday-ssetup)/div);
  76.                         SetGlobalVar(1,Time);
  77.                         Return;
  78.                 }
  79.         }
  80.         if(ltoday<=bsetup and marketposition<1  and GetGlobalVar(1)<1)
  81.         {
  82.                 If(High>=(benter-(bsetup-ltoday)/div))
  83.                 {
  84.                         Buy(1,benter-(bsetup-ltoday)/div);
  85.                         SetGlobalVar(1,Time);
  86.                         Return;
  87.                 }
  88.         }

  89.         if(marketposition==-1)
  90.         {
  91.                 SetGlobalVar(0,1);
  92.                 if(High-EntryPrice>=i_reverse)
  93.                 {
  94.                         BuyToCover(1,entryprice+i_reverse);
  95.                         Return;
  96.                 }
  97.         }
  98.         if(marketposition==1)
  99.         {
  100.                 SetGlobalVar(0,1);
  101.                 if(EntryPrice-Low>=i_reverse)
  102.                 {
  103.                         Sell(1,entryprice-i_reverse);
  104.                         Return;
  105.                 }
  106.         }

  107.         if(marketposition==0)
  108.         {
  109.                 if(High>=bbreak and GetGlobalVar(0) == 0)
  110.                 {
  111.                         Buy(1,bbreak);
  112.                         Return;
  113.                 }
  114.         }
  115.         if(marketposition==0)
  116.         {
  117.                 if(low<=sbreak  and GetGlobalVar(0) == 0)
  118.                 {
  119.                         SellShort(1,sbreak);
  120.                         Return;
  121.                 }
  122.         }

  123. }

  124. if(Time*100>=notaft and Time<0.1600)
  125. {

  126.         if(marketposition==-1)
  127.         {
  128.                 BuyToCover(1,Open);
  129.         }
  130.         if(marketposition==1)
  131.         {
  132.                 Sell(1,Open);
  133.         }

  134. }
  135. End

  136. //------------------------------------------------------------------------
  137. // 编译版本        GS2010.12.08
  138. // 用户版本        2011/06/27 14:29
  139. // 版权所有       
  140. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  141. //                        每一版本的TrabeBlazer公式修改和重写的权利
  142. //------------------------------------------------------------------------
复制代码
作者: 穿堂风    时间: 2011-6-27 16:43

这个系统本身是用在SP上,多次出现在实盘赛的前列。
我觉得这个系统的构架和思维非常好,直接拿着套国内商品可能表现很差,不过大家能看到这个系统的核心思想就足够了,可以借鉴。
作者: 穿堂风    时间: 2011-6-27 16:51

忘了说了,得用TB V4,要不V3的系列值传递那还得接力一下。
作者: bluefox    时间: 2011-6-27 16:52

牛人啊  。。。。。。。。。。。
作者: 趋势跟踪    时间: 2011-6-27 18:22

谢谢楼主分享好的交易思路,顶!
作者: 祈人    时间: 2011-6-28 09:07

最好有注释,照顾下低水平的同学
作者: 穿堂风    时间: 2011-6-28 13:04

根据昨日波幅算出几个区间
突破上区间,做多
破下区间,做空
做多后,回撤至次上区间,则认为假突破,反手
做空类似
收盘前平仓,notaft(14.55)设置为14.55为出场时间,14点55分,适用1分钟和5分钟周期,其它周期自己手动修改参数
作者: forfree    时间: 2011-6-28 17:41

rfilter=(hitoday[1]-ltoday[1])>=i_rangemin;

这句是什么意思?
作者: 穿堂风    时间: 2011-6-28 18:05

rfilter=(hitoday[1]-ltoday[1])>=i_rangemin;

这句是什么意思?
forfree 发表于 2011-6-28 17:41



    过滤昨日波幅过小的情况,比如昨日一直停板,波动为0,波幅太小没有可操作性。
作者: kings425    时间: 2011-7-7 00:00

rfilter=(hitoday[1]-ltoday[1])>=i_rangemin;

这句是什么意思?
forfree 发表于 2011-6-28 17:41


Rfilter=   这是个开关,用来判断

(hitoday[1]-ltoday[1])>=i_rangemin;  过滤掉最高价减去最低价减值小于i_rangemin
作者: selffinder    时间: 2011-7-8 14:53

请问,V4中还有opend这个函数吗,没找到啊
作者: selffinder    时间: 2011-7-8 15:58

if(Date != Date[1])
{....
startnow=startnow+1;
.....}
.....
if(Time*100>=notbef and Time*100startnow>=2  and rfilter)
我的问题是,对于日内交易的话,满足Date != Date[1]条件的不就是当天开盘那根K线吗,那么startnow=startnow+1只能执行一次。后面startnow>=2的条件怎么能满足呢??求解答!!
作者: 穿堂风    时间: 2011-7-8 18:15

if(Date != Date[1])
{....
startnow=startnow+1;
.....}
.....
if(Time*100>=notbef and Time*100=2  and  ...
selffinder 发表于 2011-7-8 15:58



    有opend;
这块主要是保持原有系统框架,运行一次也会满足,大于等于2,等于2也成立啊.
作者: freetiger    时间: 2011-7-9 11:06

如果论坛多些穿堂风这样的大侠,TB会普及得快了。谢谢分享!
作者: 红永    时间: 2011-7-9 15:35

鼎兴俱乐部也顶一个
作者: speed_fj    时间: 2011-7-10 19:26

就是RB加个反手吧
作者: selffinder    时间: 2011-7-10 22:02

谢谢穿堂风大侠,后来我想了想是可以的。一个界面不一定就只显示一天的k线。
作者: cntxp    时间: 2011-7-11 19:38

本帖最后由 cntxp 于 2011-7-11 19:40 编辑

顶了再学
谢lz
lz在哪看的策略
作者: selffinder    时间: 2011-7-13 10:28

问一个细节性的问题,我想该模型就是利用前天的最高、最低、和收盘来确定今天交易的两个上下限。为啥上下限要通过程序中的那种方式确定呢,有什么统计学优势没有。还有穿堂风大虾,这个程序的参数设定原来是用在哪个品种上的呀?用股指5分钟测了一下,效果不好
作者: 穿堂风    时间: 2011-7-13 12:31

问一个细节性的问题,我想该模型就是利用前天的最高、最低、和收盘来确定今天交易的两个上下限。为啥上下限 ...
selffinder 发表于 2011-7-13 10:28



    算法上可以自己去改,这个系统在SP上很有名,算法是根据SP的特性统计的,生搬可能不好,知道大致原理再引申吧.
作者: 穿堂风    时间: 2011-7-13 12:32

顶了再学
谢lz
lz在哪看的策略
cntxp 发表于 2011-7-11 19:38



    群里一个人提供的,他叫来刀刀,我翻成了TB
作者: selffinder    时间: 2011-7-15 16:06

根据R_breaker模型做了些修改,但运行时开仓与我的意思不同,比如很多时候都是在刚开盘就建仓,但我的意思是想当其价格突破前日波动幅度后建仓。不知道程序哪里出了错误。请各路大虾特别是穿堂风帮忙诊断一下。程序如下:
Params
        Numeric PercentOfRange1(0.5);
                Numeric PercentOfRange2(0.4);//突破参数N
        Numeric ExitOnCloseMins(14.45);//平仓时间
        Numeric MinRange(0.004);//最小Range - 0.2%
        Numeric LastTradeMins(14.00);//最后交易时间
        Numeric BeginTradeMins(9.00);
        Numeric Lots(1);
               Numeric reverse(0.01);
               
               
Vars
        NumericSeries DayOpen;
                NumericSeries hightoday;
                NumericSeries lowtoday;
        NumericSeries preDayRange;
                   Numeric MaxProfit;
                Numeric UpperBand1;
                Numeric UpperBand2;
        Numeric LowerBand1;
                Numeric LowerBand2;
        Numeric MyPrice;
             Numeric i_reverse;
               
               
Begin
        i_reverse=reverse*OpenD(0)/100;
                       
               
        If(Date != Date[1])      
                {
                        //startnow=startnow+1;
                                DayOpen = OpenD(0);
                preDayRange = HighD(1) - LowD(1);
                //如果昨日振幅过小,则取设置的最小振幅
                preDayRange = max(preDayRange, DayOpen* MinRange);
                                UpperBand1= DayOpen + preDayRange* PercentOfRange1;
                                UpperBand2= DayOpen + preDayRange* PercentOfRange2;
                            LowerBand1 = Dayopen - preDayRange * PercentOfRange1;
                                LowerBand2 = Dayopen - preDayRange * PercentOfRange2;
                                hightoday=High;
                                lowtoday=low;
        }
                Else
       
        {
        DayOpen=DayOpen[1];
        preDayRange=preDayRange[1];
        If(High>hightoday)
        {
        hightoday=High;
        }
        If(Low        {
        lowtoday=low;
        }
               
                        }      
      
        //未开仓时,判断是否需要开仓
        if(MarketPosition == 0){
                //多头开仓
                If(High >= UpperBand1 && Time < LastTradeMins / 100)
                                {
                                         MyPrice= max(UpperBand1 , open);
                        Buy(Lots,MyPrice);
                                       
                                                Return;
                                               
                    
                }
               
                //空头开仓
                If(Low <= LowerBand1 && Time < LastTradeMins/100)
                                {
                        MyPrice=min(LowerBand1,open);
                                                Sellshort(Lots, MyPrice);
                                       
                                                Return;
                     
                                       
                }
                If(hightoday>=UpperBand2 And hightoday                {
                if(low<=Dayopen+preDayRange* PercentOfRange2*0.618)
                {
                SellShort(1,Dayopen+(UpperBand2-Dayopen)*0.618);
                Return;
                }
                }
                If(lowtoday<=LowerBand2 And LowerBand1                {
                if(High>=Dayopen-(Dayopen-LowerBand2)*0.618)
                {
                Buy(1,Dayopen-(Dayopen-LowerBand2)*0.618);
                Return;
                }
                }
                                }
        

        //多头止损
        If(MarketPosition == 1){
              If(EntryPrice-low>=preDayRange*0.618)
                          {                                   
                        Sell(Lots,Min(EntryPrice-preDayRange,low));
                                                Return;
                }
        }

        //空头止损
        If(MarketPosition == -1){               
                If(High-EntryPrice>=preDayRange){
                     
                        BuyToCover(Lots, Max(EntryPrice+preDayRange,High));
                                                Return;
                }
        }
               
               
               
        //收盘平仓
        If(Time >= ExitOnCloseMins / 100){
                Sell(Lots, Close);
                BuyToCover(Lots,Close);
        }
               

     
End
作者: ww123    时间: 2011-7-17 12:14

最好有注释,照顾下低水平的同学
作者: jlwangsdu    时间: 2011-7-18 10:20

有opend;
这块主要是保持原有系统框架,运行一次也会满足,大于等于2,等于2也成立啊. ...
穿堂风 发表于 2011-7-8 18:15


运行一次startnow的值等于1吧?这时这个条件不满足啊···
作者: kings425    时间: 2011-7-19 09:21

startnow=startnow+1
作者: shijianxulie    时间: 3 天前 09:08

是个过滤器




欢迎光临 系统交易论坛 - 开拓者期货自动交易平台 (http://www.tradeblazer.net/forum/) Powered by Discuz! 7.2