期货软件TB系统源代码解读系列36-R-Breaker系统

应一哥们建议写下R-Breaker系统,根据昨日价格计算出六个价位作为今日盘中交易的参考价位,只是比Pivot Points的设置少了一个枢轴点。它的买卖规则也不难理解,即突破上区间,做多;破下区间,做空。做多后,回撤至次上区间,则认为假突破,反手;做空类似。

这个系统很有名,我也不废话了,直接附上TB论坛里穿堂风大神分享的代码了,解读如下:

Params

Numeric notbef(9.00);//声明数值参数notbef,初值为9.00,其实不用这个直接表示Time>0.0900更方便的。//

Numeric notaft(14.55);//声明数值参数notaft,初值为14.55,同理的,可在正文直接表示Time<0.1455。//

Numeric f1(0.35);//声明数值参数f1,初值为0.35.//

Numeric f2(0.07);//声明数值参数f2,初值为0.07.//

Numeric f3(0.25);//声明数值参数f3,初值为0.25.//

Numeric reverse(1.00);//声明数值参数reverse,初值为1.00.//

Numeric rangemin(0.2);//声明数值参数rangemin,初值为0.2.//

Numeric xdiv(3);//声明数值参数xdiv,初值为3.//

Vars

NumericSeries ssetup(0);//声明数值序列变量ssetup,初值0.//

NumericSeries bsetup(0);//声明数值序列变量bsetup,初值0.//

NumericSeries senter(0);//声明数值序列变量senter,初值0.//

NumericSeries benter(0);//声明数值序列变量benter,初值0.//

NumericSeries bbreak(0);//声明数值序列变量bbreak,初值0.//

NumericSeries sbreak(0);//声明数值序列变量sbreak,初值0.//

NumericSeries ltoday(0);//声明数值序列变量ltoday,初值0.//

NumericSeries hitoday(9999);//声明数值序列变量hitoday,初值为9999.//

NumericSeries startnow(0);//声明数值序列变量startnow,初值0.//

NumericSeries div(0);//声明数值序列变量div,初值0.//

BoolSeries rfilter(false);////声明布尔型序列变量rfilter,初值为假。//

Numeric i_reverse;//声明数值变量i_reverse.//

Numeric i_rangemin;//声明数值变量i_rangemin.//

Numeric i_vB;//声明数值变量i_vB.//

Numeric i_vS;//声明数值变量i_vS.//

Begin

i_reverse = reverse*(OpenD(0)/100);//变量i_reverse = 参数reverse * (当天开盘价OpenD(0) / 100).//

i_rangemin = rangemin*(OpenD(0)/100);//变量i_rangemin = 参数rangemin * (当天开盘价OpenD(0) / 100).//

if(BarStatus==0)//当前为第一根k线的。//

{

startnow=0;//变量startnow = 0.//

div=max(xdiv,1);//代入相应参数,即Max(3,1),可得变量div = 3.//

}

if(Date != Date[1])//假如当前日期不等于前一天的日期的。//

{

SetGlobalVar(0,0);//全局变量,就是系统本身只定义了一个GlobalVar全局变量,这个全局变量一共有0到49共50个存储位置,你希望在第一个位置放进一个数据(在本软件中一般放下的是静态数据,不因K线的移动而改变),就用setglobalvar(0,你的数),放进第二个数又不希望覆盖第一个,就用setglobalvar(1,你的数),最多能放下共50个静态数据;然后是引用这些数据了,就用getglobalvar(存储位置)等等,这个全局变量最起码是生存于当前的程序模块中,比如用户函数、技术指标、K形态、特征走势、交易指令中。

设置setglobalvar(0,你的数),setglobalvar(1,你的数),setglobalvar(2,你的数),setglobalvar(3,你的数),.....可以设置到setglobalvar(49,你的数).

调用getglobalvar(0,你的数),getglobalvar(1,你的数),getglobalvar(2,你的数),getglobalvar(3,你的数),...getglobalvar(49,你的数)。//

SetGlobalVar(1,0);//设置第二个数据位置了,值为0。//

startnow=startnow+1;//变量startnow = 0 + 1.//

ssetup=hitoday[1]+f1*(Close[1]-ltoday[1]);//代入初始相应数值,即ssetup = 9999 + 0.35 * (前一根k线收盘价 - 0)。//

senter=((1+f2)/2)*(hitoday[1]+Close[1])-(f2)*ltoday[1]; //同上代入,senter = ((1+0.07)/2)*(9999+Close[1])-0.07*0.//

benter=((1+f2)/2)*(ltoday[1]+Close[1])-(f2)*hitoday[1];//同上代入相应数值了。//

bsetup=ltoday[1]-f1*(hitoday[1]-Close[1]);//同上的。//

bbreak=ssetup+f3*(ssetup-bsetup);//把上面求得的值代入就行了。//

sbreak=bsetup-f3*(ssetup-bsetup);//同上。//

hitoday=High;//变量hitoday = 当前最高价High//

ltoday=Low;//变量ltoday = 当前最低价Low//

rfilter=(hitoday[1]-ltoday[1])>=i_rangemin;//变量rfilter = (前一变量hitoday[1] - 前一变量ltoday[1]) >= i_rangemin,其实就是昨天振幅是否大于等于当前开盘价/100*0.2//

}

if(High>hitoday)//假如当前最高价大于hitoday,一般比如焦炭、螺纹很少大于的,铜、锌到是可以。//

{

hitoday=High;//变量hitoday = 当前最高价。//

}

if(Low

{

ltoday=Low;//变量itoday = 当前最低价。//

}

if(Time*100>=notbef and Time*100=2 and rfilter)//假如时间大于9点,并且小于两点五十五分,并且变量startnow >=2 并且rfilter为真。//

{

if(Time != GetGlobalVar(1) and GetGlobalVar(1) != 0)//getglobalvar(1)获取上面我们已经设置的第二个位置,假如时间不等于位置2数值,并且位置2数值不等于0的时候,才执行下列语句(显然我们上边设置第二位置值为0,不符合这个条件的)。//

{

SetGlobalVar(1,10000);//设置第二位置,值为10000.//

}

if(hitoday>=ssetup and marketposition>-1 and GetGlobalVar(1)<1)//假如变量hitoday >= 变量ssetup,并且 MarketPosition >-1(觉得应该写成<>-1,要不然理解就是没有持仓,或者可以持有多单时),并且获取位置2的数值(初值0)小于1的。//

{

If(Low<=(senter+(hitoday-ssetup)/div))//代入上面算得的数值,假如当前最低价Low <= (变量senter + (变量hitoday - 变量ssetup)/3).//

{

SellShort(1,senter+(hitoday-ssetup)/div);//卖出1手,价格就是依据这个(变量senter + (变量hitoday - 变量ssetup)/3)算得的值。//

SetGlobalVar(1,Time);//这个设置第二位置,值为当前时间,设置这个时间,我也不知道干啥用的。//

Return;//不再执行了。//

}

}

if(ltoday<=bsetup and marketposition<1 and GetGlobalVar(1)<1)//假如变量itoday <= 变量bsetup,并且MarketPosition <1,并且获取位置2的数值(初值0)小于1的。//

{

If(High>=(benter-(bsetup-ltoday)/div))//假如当前最高价High >= (变量benter - (变量bsetup - 变量ltoday)/3)//

{

Buy(1,benter-(bsetup-ltoday)/div);//买1手,价格就是依据这个(变量benter - (变量bsetup - 变量ltoday)/3)算得的值了。//

SetGlobalVar(1,Time);//设置第二位置,值为当前时间。//

Return;//不再执行。//

}

}

if(marketposition==-1)//假如持有空单的情况。//

{

SetGlobalVar(0,1);//设置第一位置,值为1.//

if(High-EntryPrice>=i_reverse)//假如当前最高价High - 进场价EntryPrice >=变量i_reverse值//

{

BuyToCover(1,entryprice+i_reverse);//平仓1手,价格为进场价EntryPrice + 变量i_reverse值//

Return;//不再执行。//

}

}

if(marketposition==1)//假如持有多单。//

{

SetGlobalVar(0,1);//设置第一位置,值为1.//

if(EntryPrice-Low>=i_reverse)//假如进场价EntryPrice - 当前最低价Low >= 变量i_reverse值//

{

Sell(1,entryprice-i_reverse);//平仓1手,价格为进场价EntryPrice - 变量i_reverse值//

Return;//不再执行。//

}

}

if(marketposition==0)//假如没有持仓的时候。//

{

if(High>=bbreak and GetGlobalVar(0) == 0)//假如当前最高价 >=变量bbreak ,并且获取第一位置值(初值0)等于0.//

{

Buy(1,bbreak);//买一手,价格为bbreak值。//

Return;//不再执行。//

}

}

if(marketposition==0)//假如没有持仓情况。//

{

if(low<=sbreak and GetGlobalVar(0) == 0)//当前最低价Low <=sbreak,并且获取第一位置数值(初值0)等于0.//

{

SellShort(1,sbreak);//卖出1手,价格为sbreak值。//

Return;//不再执行。//

}

}

}

if(Time*100>=notaft and Time<0.1600)//假如时间大于两点五十五分,并且时间小于四点。//

{

if(marketposition==-1)//持有空单的时候。//

{

BuyToCover(1,Open);//以开盘价,平仓。//

}

if(marketposition==1)//持有多单的时候。//

{

Sell(1,Open);//以开盘价,平仓。//

}

}

End

这个系统我只解读,没有实盘,也没有在超级图表上测试的,但根据我自己解读的,我觉得要用这个系统,你得优化很多条件才行。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容