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

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

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

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

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

先上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<ltoday then ltoday=l;

  30. if t>=notbef and t<notaft and startnow>=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:17

本帖最后由 穿堂风 于 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<ltoday)
  62. {
  63.         ltoday=Low;
  64. }
  65. if(Time*100>=notbef and Time*100<notaft and startnow>=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:05

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

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

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

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

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

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

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

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

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

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



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

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:31

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

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

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:59

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

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

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

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

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

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



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

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



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

根据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)
        {
        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<UpperBand1 )
                {
                if(low<=Dayopen+preDayRange* PercentOfRange2*0.618)
                {
                SellShort(1,Dayopen+(UpperBand2-Dayopen)*0.618);
                Return;
                }
                }
                If(lowtoday<=LowerBand2 And LowerBand1<lowtoday )
                {
                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:07

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

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


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

startnow=startnow+1
作者: shijianxulie    时间: 2011-8-2 09:08:17

是个过滤器
作者: explorerr    时间: 2011-8-11 22:37:41

最好有注释,照顾下低水平的同学
作者: islycyl    时间: 2011-8-12 22:21:41

唔,先自己研究看看
作者: liq77    时间: 2011-8-14 07:20:53

这个系统本身是用在SP上,多次出现在实盘赛的前列。
我觉得这个系统的构架和思维非常好,直接拿着套国内商品可能表现很差, ...穿堂风 发表于 2011-6-27 16:43


为什么“直接拿着套国内商品可能表现很差”?有人深入探究过吗?
此外,用“区间参数拟合”的办法也许可以做出很好的测试结果,但实战中不可行,有时会输得很惨。
但在SP上有时表现却很好(据楼主介绍),为什么?
作者: win5ms    时间: 2011-8-16 18:28:31

sp是什么意思?做外汇,外盘期货这样连续报价的效果怎样?
作者: 放飞的翅膀    时间: 2011-8-19 10:11:31

if(BarStatus==0)

{

        startnow=0;

        div=max(xdiv,1);

}

  div=max(xdiv,1); 参数设置里面,DIV的默认值未3,那么这句有什么佐为?DIV肯定每次都为3了,不能不能将每个变量都注释一下呢?
作者: lzl563    时间: 2011-8-21 21:13:27

:handsha项一下先
作者: 穿堂风    时间: 2011-9-6 10:47:08

参考参数
IF 5分钟周期,2%%手续费,无滑点
[attach]5075[/attach]
[attach]5076[/attach]
[attach]5077[/attach]
作者: clarte-pan    时间: 2011-9-8 12:36:38

m个 学习一下先
作者: 太阳之光    时间: 2011-9-11 21:46:36

谢谢LZ先顶学习
作者: cym138    时间: 2011-11-30 23:03:43

我的测试与楼主差别有点大
作者: 穿堂风    时间: 2011-12-1 13:38:56

手续费不一样
作者: cym138    时间: 2011-12-1 20:43:36

调了也是不一样,是TB的IF连测试吗?
作者: 穿堂风    时间: 2011-12-1 21:34:24

那可能当时我用的是指数
作者: cqalan    时间: 2011-12-20 23:33:21

高手!!!
作者: TBSTUDENT992    时间: 2012-1-12 20:35:39

if(Time != GetGlobalVar(1) and GetGlobalVar(1) != 0)

        {

                SetGlobalVar(1,10000);

        }



请教一下,上面这几行代码是起什么作用的?
作者: freetiger    时间: 2012-1-13 18:14:51

本帖最后由 freetiger 于 2012-1-13 18:21 编辑

这么多参数,优化的话应该跑哪几个呢?范围又是多大?有点无从下手
想看看在白糖的表现
作者: tzs111111    时间: 2012-1-18 16:53:50

顶了学习下
作者: lanchongms    时间: 2012-1-21 17:19:04

if(hitoday>=ssetup and marketposition>-1 and GetGlobalVar(1)<1)

        {

                If(Low<=(senter+(hitoday-ssetup)/div))

                {

                        SellShort(1,senter+(hitoday-ssetup)/div);

                        SetGlobalVar(1,Time);

                        Return;

                }

        }

        if(ltoday<=bsetup and marketposition<1  and GetGlobalVar(1)<1)

        {

                If(High>=(benter-(bsetup-ltoday)/div))

                {

                        Buy(1,benter-(bsetup-ltoday)/div);

                        SetGlobalVar(1,Time);

                        Return;

                }

        }

这一段可能会出现同一根BAR既满足high值高于ssetup,又满足Low<=(senter+(hitoday[1]-ssetup)/div)的情况,但实际无法判断先后。

改成
        if(hitoday[1]>=ssetup and marketposition>-1 and GetGlobalVar(1)<1 &&date==date[1])
        {
                If(Low<=(senter+(hitoday[1]-ssetup)/div))
                {
                        SellShort(1,senter+(hitoday[1]-ssetup)/div);
                        SetGlobalVar(1,Time);
                        Return;
                }
        }
        if(ltoday[1]<=bsetup and marketposition<1  and GetGlobalVar(1)<1 &&date==date[1])
        {
                If(High>=(benter-(bsetup-ltoday[1])/div))
                {
                        Buy(1,benter-(bsetup-ltoday[1])/div);
                        SetGlobalVar(1,Time);
                Return;
                }
        }
这样子会不会好一点?还有后面的if(marketposition==0)那一段貌似也得加上跳空判断~

不过话说这个策略非常不错~感谢穿大大分享
作者: rypan    时间: 2012-1-30 20:21:14

参数满天飞啊
作者: xyzqy    时间: 2012-1-31 23:23:38

谢谢楼主的无私奉献
作者: 阳明2010    时间: 2012-2-3 16:14:48

mark
作者: mel_6e    时间: 2012-2-19 19:26:25

商品惨不忍睹,只有博股指这种新开张的赌场头两年,搞一阵就撤
作者: 6481830    时间: 2012-2-23 15:32:06

我是新手,请教一个问题
NumericSeries ltoday(0);
NumericSeries hitoday(9999);
申明的这两个序列变量,为什么hitoday[1],ltoday[1] 就是昨天的最高和最低价呢?我看中间也没有任何的赋值过程,这两个变量值是不是系统内设的常量?
作者: 6481830    时间: 2012-2-23 15:38:29

哦。。。不好意思。看懂了。
if(High>hitoday)
{
        hitoday=High;
}
if(Low<ltoday)
{
        ltoday=Low;
}

在下面赋值给它们的。
作者: leisecu@qq.com    时间: 2012-2-26 17:52:37

测试了很多模型,发现短周期交易测试结果好的,长周期交易就不行。长周期好的,短周期就不行。短周期模型和长周期模型,感觉就是很难调和协调一致的一对矛盾啊。
作者: 纳小兜    时间: 2012-2-29 14:20:19

希望lz可以给个有注释版本的,谢谢啊
作者: bjzch    时间: 2012-3-24 16:04:46

基本原理:
[attach]8715[/attach]

R-Breaker是一种短线交易策略,它结合了趋势和反转两种交易方式。

交易系统的基本原理如下:
1. 根据前一个交易日的收盘价、最高价和最低价数据通过一定方式计
算出六个价位,从大到小依次为:突破买入价、观察卖出价、反转
卖出价、反转买入价、观察买入价、突破卖出价。
以此来形成当前交易日盘中交易的触发条件。这里,通过对计算方
式的调整,可以调节六个价格间的距离,进一步改变触发条件。
2. 追踪盘中价格走势,实时判断触发条件。具体条件如下:
 当日内最高价超过观察卖出价后,盘中价格出现回落,且进一

步跌破反转卖出价构成的支撑线时,采取反转策略,即在该点位(反
手、开仓)做空;
 当日内最低价低于观察买入价后,盘中价格出现反弹,且进一
步超过反转买入价构成的阻力线时,采取反转策略,即在该点位(反
手、开仓)做多;
 在空仓的情况下,如果盘中价格超过突破买入价,则采取趋势
策略,即在该点位开仓做多;
 在空仓的情况下,如果盘中价格跌破突破卖出价,则采取趋势
策略,即在该点位开仓做空。
3. 设定止损条件。当亏损达到设定值后,平仓。
4. 设定过滤条件。当前一个交易日波幅过小,该交易日不进行交易。
5. 在每日收盘前,对所持合约进行平仓。
6. 可使用1分钟、5分钟或10分钟等高频数据进行判断。
作者: BLUESGUITAR    时间: 2012-4-8 22:07:42

if(Date != Date[1])

{

        SetGlobalVar(0,0);

        SetGlobalVar(1,0);
..............

请问这里把第一个全局变量设置为0,把第二个全局变量设置为0,作用是什么,谢谢解释下初级的问题
作者: BLUESGUITAR    时间: 2012-4-8 22:17:14

我不是很懂TB的语言,不知道下面的注解对不对,另外请大虾帮详解下这里面SETGLOBALVAR和GETGLOBALVAR在里面的作用是什么?里面几次用到了这两个函数,是否是用来限制交易次数的?非常感谢
各位的详解

感谢楼主提供这样的源码供我这种菜鸟学习TB语言


if(High>hitoday)
{
        hitoday=High;//当日内出现比第一个K线高点高的值时,hitoday取新高
}
if(Low<ltoday)
{
        ltoday=Low;//当日内出现比第一个K线低点低的值时,litoday取新低
}
if(Time*100>=notbef and Time*100<notaft and startnow>=2 and rfilter)//
{

        if(Time != GetGlobalVar(1) and GetGlobalVar(1) != 0)  //当时间不等于第二个全局变量,并且第二个全局变量不等于0时候(这里是不是要在第三个K线交易)
        {
                SetGlobalVar(1,10000);//把第二个全局变量设置成10000
        }
        if(hitoday>=ssetup and marketposition>-1 and GetGlobalVar(1)<1)//如果今日高点大于SSETUP,并且持仓不为空单,并且第二个全局变量小于1
        {
                If(Low<=(senter+(hitoday-ssetup)/div))        
                {
                        SellShort(1,senter+(hitoday-ssetup)/div);                          SetGlobalVar(1,Time);
                        Return;
                }
作者: 趋势跟踪    时间: 2012-4-9 05:56:56

有注释就好理解了
作者: ivanzhu79    时间: 2012-4-9 15:01:03

唉,真是牛人啊
作者: youyu8792    时间: 2012-4-12 13:53:40

if(Time != GetGlobalVar(1) and GetGlobalVar(1) != 0)  //当时间不等于第二个全局变量,并且第二个全局变量不等于0时候(这里是不是要在第三个K线交易)

第二个全局变量本身就是0啊,怎么会满足第二个全局变量不等于0的条件呢,我是新手,对这个还不太懂,谢谢
作者: lnyuanming    时间: 2012-4-26 19:34:12

·····························································
作者: 天崖    时间: 2012-5-3 06:24:09

看了1#穿堂风老师提供的TB源码,深受启发。经过模拟测试,有几点疑问不明白的地方,如开仓部分-------
if(marketposition==0)

        {

                if(High>=bbreak and GetGlobalVar(0) == 0)

               {

                        Buy(1,bbreak);

                        Return;

                }

        }

       if(marketposition==0)

        {

                if(low<=sbreak  and GetGlobalVar(0) == 0)

                {
                      SellShort(1,sbreak);

                      Return;

              }

       }

1、如果开多仓,每次价格开到最低,无法成交?开空仓也是如此,遇到同样的问题
2、为了保证成交,我加了滑点偏移,但是加上后,测试发单信号、价格无变化,不知道什么原因?
3、超级图表中,发单信号指令价格,与实际发单价格不一致?
恳请穿堂风老师及高手、管理员,在百忙之中解答一下,非常感激!!!

作者: 天崖    时间: 2012-5-4 07:54:36

1、如果开多仓,每次价格开到最低,无法成交?开空仓也是如此,遇到同样的问题
2、为了保证成交,我加了滑点偏移,但是加上后,测试发单信号、价格无变化,不知道什么原因?
3、超级图表中,发单信号指令价格,与实际发单价格不一致?
恳请穿堂风老师及高手、管理员,在百忙之中解答一下,非常感激!!!

作者: 天崖    时间: 2012-5-5 07:58:36

请管理员及高手看到此贴后,解答一下,谢谢
作者: xichen139    时间: 2012-5-8 23:24:56

感谢分享
作者: 草根。    时间: 2012-7-1 11:40:45

支持下。。。
作者: 雨归晨    时间: 2012-7-3 10:28:36

这里我只能说非常感谢楼主提供源码,但是对所有编程人员来说,没有注释的源码,基本无任何作用。楼主既然有能力能翻译这么复杂的源码,为什么不添加一点注释呢?既然是分享,就应该把有价值的东西拿来分享。。。
这是我在所有论坛的发表的原则,并无刻意冒犯。
作者: yml6363    时间: 2012-7-3 23:13:54

支持下。。。
作者: skykisser    时间: 2012-7-4 23:29:47

6481830 发表于 2012-2-23 15:38
哦。。。不好意思。看懂了。
if(High>hitoday)
{

即使这样,hitoday[1]不也应该等于high[1]吗,那也是前一个bar 的最高价啊,为什么是前一日的最高价呢。为什么不直接用highD(1)代表前一日最高价呢,帮忙解答,谢谢了!
作者: sqj888    时间: 2012-7-5 07:58:42

好一定要顶啊
作者: tufeiyige    时间: 2012-7-5 16:05:30

人家 吧源码 都发了  你们要求还真多 。  有些人 还希望 手把手的 教,
哪有时间  手把手的教
自己 摸索不就得了 。  
作者: tufeiyige    时间: 2012-7-5 16:07:01

用模拟盘 跑跑 善于 发现问题 总结 问题  再解决问题
实在解决不了的 问问,  问了也不知道原因的  放一边, 以后能力上去了 看能解决不

有好多问题  我倒现在 都没解决   

也不影响 我实盘 每月保持 稳定的收益
作者: 木飘风    时间: 2012-7-9 07:28:40

谢谢高人分享!
作者: shenpei715    时间: 2012-7-30 11:03:15

好贴必须顶,穿堂大侠不仅为众多想进入程序化交易的新手入门少走弯路,减少摸索时间提供了宝贵经验。更提升了一个台阶,分享、向国外先进模式学习。
作者: haiphong    时间: 2012-7-31 17:52:33


作者: A.Leng。    时间: 2012-8-8 21:39:18

学习学习~~~
作者: 松鹏    时间: 2012-8-17 21:38:45

太无私风险了,抓下来看看
作者: chenmiaohero    时间: 2012-8-28 11:00:40

很好很强大,楼主很好
作者: stewen.net    时间: 2012-8-30 13:17:26

大力感谢啊!
作者: feijian0000    时间: 2012-9-5 14:06:33

穿堂风 发表于 2011-6-27 16:35
先上TS源码

TS的代码有错误,问下楼主  代码是从哪里找的呢?
作者: 沉积-大浪淘沙    时间: 2012-9-13 14:17:28

交易次数少啊,在tb上测试过哪个品种了?
作者: 多多亮-亮多多    时间: 2012-9-25 18:18:18

这系统不错 就是参数太多
作者: 多多亮-亮多多    时间: 2012-9-25 18:18:34

请问谁在用着策略实盘?
作者: 多多亮-亮多多    时间: 2012-11-3 06:44:09

穿堂风 发表于 2011-6-28 13:04
根据昨日波幅算出几个区间
突破上区间,做多
破下区间,做空

大大你好 测试过你写的RB源码 成绩好 但是未是原版的意思 原版有6个区间 原版的卖出(买入)观察价是不开仓的 而到了你源码是反手开仓 不过还好 这样写的收益比原版的还高
作者: 多多亮-亮多多    时间: 2012-11-3 06:44:17

穿堂风 发表于 2011-6-28 13:04
根据昨日波幅算出几个区间
突破上区间,做多
破下区间,做空

大大你好 测试过你写的RB源码 成绩好 但是未是原版的意思 原版有6个区间 原版的卖出(买入)观察价是不开仓的 而到了你源码是反手开仓 不过还好 这样写的收益比原版的还高
作者: 认识你真好    时间: 2012-11-6 15:36:14

很感谢~~学习了~

作者: CHAXINQING    时间: 2012-11-17 22:39:00

参数的重新设定  增强适应性
作者: CHAXINQING    时间: 2012-11-17 22:46:38

牛人  谢谢
作者: 乌鸦的一生    时间: 2012-11-27 22:57:13

只能说楼主的奉献精神可嘉

但是程序出现很多问题:既有信号闪现的毛病,还有R-breaker一些应用错误及策略的逻辑错误
作者: 交易小子    时间: 2012-11-29 00:54:46

比较想知道一开始构建这个操作策略的思路
作者: fanmily    时间: 2012-12-4 23:04:38

很好,源代码都提供了,希望楼主如果有国外的类似经典案例,可以多提供学习。非常感谢。加分。
作者: tcx    时间: 2012-12-9 21:41:50


作者: 石破总会天惊    时间: 2012-12-9 21:50:26

好东西
作者: tcx    时间: 2012-12-10 09:29:48


作者: zcquan123    时间: 2012-12-10 23:02:32

穿大侠在江湖中失踪很久了,据说上次出现是在一个夜黑风高的晚上.......
作者: 佛拉斐·杨    时间: 2012-12-11 20:30:41

bug一堆
作者: 月夜微凉    时间: 2012-12-14 06:58:13

一直想编一个既适合震荡市、又能追突破的代码, 之前有这个相似的思路,,但是还不完整,,看了大侠改编的模版 很受启发
作者: 月夜微凉    时间: 2012-12-14 06:58:19


作者: Tracymao    时间: 2013-1-16 15:48:46

家纺3362 发表于 2013-1-15 17:30
这个策略我实盘了几天,滑点搞不好

效果如何?
作者: 天崖    时间: 2013-1-27 12:03:04


作者: 期市劫匪    时间: 2013-3-11 23:46:51

顶一下下。





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