期货软件TB系统源代码解读系列54-基于初始交易范围突破系统

我看了很多TB里写的程序化系统,很多止损止盈都用ATR指标来写,这个效果也许很好,可我总用不惯,所以还是建议各位用自己的习惯来止盈止损好点。先来看策略吧,如下:

策略说明:

用特定时间周期内的最高价位和最低价位计算交易范围,然后计算真实的波动范围和周期内的ATR对比,如果

当前k线的波动范围比n*交易范围的值大,并且真实波动范围比ATR大,这就满足了前两个系统挂单的条件  

入场条件:

1. 7周期区间“空隙”之和 >7周期区间高度的2倍

当前的k线比交易范围的最高值大, 而且如果当前k线的中间价格高于之前一根k线的最高值

做多

2.  7周期区间“空隙”之和 >7周期区间高度的2倍

当前的k线比交易范围的最低值小, 而且如果当前k线的中间价格低于之前一根k线的最低值

做空

出场条件: 

1.初始止损

2.跟踪止损(盈利峰值价回落ATR的一定倍数)

3.收盘价创7周期低点,且K线中点低于前K线最低价多头出场

做多程序化系统代码解读如下:

Params

Numeric RangeLen(7);//声明数值参数RangeLen,初值7.//

Numeric RngPcnt(200);//声明数值参数RngPcnt,初值200.//

Numeric ATRs(8);//声明数值参数ATRs,初值8.//

Numeric ATRLen(2);//声明数值参数ATRLen,初值2.//

Vars

NumericSeries RangeH(0); //声明数值序列变量RangeH,初值0,即7周期高点。//

NumericSeries RangeL(0); //声明数值序列变量RangeL,初值0,即7周期低点。//

NumericSeries TRange(0); //声明数值序列变量TRange,初值0,即7周期区间。//

NumericSeries NoTrades(0); //声明数值序列变量NoTrades,初值0,即记录7周期高低点分别与7周期内各K线最高最低值的距离之和。//

NumericSeries LongRisk(0); //声明数值序列变量LongRisk,初值0,即初始止损价。//

NumericSeries LongHigh(0); //声明数值序列变量LongHigh,初值0,即跟踪止盈价。//

NumericSeries ATR; //声明数值序列变量ATR,即2周期ATR均值。//

NumericSeries ATRMA; //声明数值序列变量ATRMA,即7周期ATR均值。// 

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

BoolSeries Condition1;//声明布尔型序列变量Condition1.//

BoolSeries Condition2;//声明布尔型序列变量Condition2.//

BoolSeries Condition3;//声明布尔型序列变量Condition3.//

BoolSeries Condition4;//声明布尔型序列变量Condition4.//

Begin

If(!CallAuctionFilter()) Return;// 集合竞价和小节休息过滤。//

  //初始设置。//

RangeH = Highest(High[1], RangeLen);  //把前一最高价与参数7代入函数Highest求值,即可求得变量RangeH值。//

RangeL = Lowest(Low[1], RangeLen);   //把前一最低价与参数7代入函数Lowest求值,即可求得变量RangeL值。//

TRange = RangeH - RangeL; //把求得的值代入公式,即可求得变量TRange值了。//      

ATR = AvgTrueRange(ATRLen); //指标ATR求值公式了,具体可参考之前的抛物线解读。//     

NoTrades = 0;// 变量NoTrades初值0了。//     

ATRMA=AvgTrueRange(RangeLen); //同上的,可参考之前的抛物线解读。//     

For value1 = 1 To RangeLen      //循环语句了,即1-7循环。//

{

If (High[value1] <= RangeH ) //先看第一个值,假如前高价High[1]<=RangeH了。//  

NoTrades = NoTrades + (RangeH - High[value1]); //代入第一个值NoTrades = 0 + (RangeH - High[1]),循环连续算7周期高点与7周期内各K线最高值的距离之和了。//

If (Low[value1] >= RangeL )//还是第一个值,假如前低价Low[1] >=RangeL。//

NoTrades = NoTrades + (Low[value1] - RangeL); //代入第一个值NoTrades = 0 + (Low[1] - RangeL),同样循环连续算7周期低点与7周期内各K线最低值的距离之和。//

}

Condition1 = NoTrades>= TRange*(RngPcnt*0.01);   //7周期区间“空隙”之和 >7周期区间高度的2倍。//

Condition2 = TrueRange >ATRMA[1] ;     //函数TrueRange即当根K线ATR>前根7周期均值。//

Condition3 = Close > RangeH And (High+Low)*0.5 >High[1];  //收盘价创7周期高点,且K线中点高于前K线最高价。//

Condition4 = Close < RangeL And (High+Low)*0.5 < Low[1];  //收盘价创7周期低点,且K线中点低于前K线最低价。//

//多头入场。//

If (Condition1[1] And Condition2[1]) //假如前一变量Condition1[1]和前一变量Condition2[1]条件成立的。//

{

If (Condition3[1] And MarketPosition==0 And Vol > 0)//假如Condition3[1]条件成立,且当前没有持仓,且成交量大于0.//

{

Buy(0,Open);//以开盘价开仓买入。//

LongRisk = RangeL;  //记录初始止损价。//

LongHigh = High;   //记录跟踪止盈价。//

}

}

//更新盈利峰值价。//

If(MarketPosition == 1 And BarsSinceEntry > 0) //假如当前持有多单,且建仓数位大于0.//

LongHigh = Max(LongHigh,High);//对比取大值了。//

//多头出场。//

If(MarketPosition == 1 And BarsSinceEntry > 0 And Vol > 0)//假如持有多单,且建仓数位大于0,且成交量大于0.//

{

If(Condition4[1])//前一变量Condition4[1]条件成立,即收盘价创7周期低点,且K线中点低于前K线最低价多头出场。//

{

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

}

If(Low<=LongRisk) //跌破初始止损价多头出场了。//

{

Sell(0,Min(Open,LongRisk));//平仓。//

}

If(Low<=LongHigh[1]-(ATRs * ATR[1]))  //盈利峰值价回落ATR一定倍数多头出场。//

{

Sell(0,Min(Open,LongHigh[1]-(ATRs*ATR[1])));//平仓。//

}

}

End

做空程序化系统代码及结果如下:

Params

Numeric RangeLen(7);

Numeric RngPcnt(200);

Numeric ATRs(8);

Numeric ATRLen(2);

Vars

NumericSeries RangeH(0);

NumericSeries RangeL(0);

NumericSeries TRange(0);

NumericSeries NoTrades(0);

NumericSeries ShortRisk(0);

NumericSeries ShortLow(0);

NumericSeries ATR;

NumericSeries ATRMA;  

Numeric value1;

BoolSeries Condition1;

BoolSeries Condition2;

BoolSeries Condition3;

BoolSeries Condition4;

Begin

If(!CallAuctionFilter()) Return;

RangeH = Highest(High[1], RangeLen); 

RangeL = Lowest(Low[1], RangeLen);  

TRange = RangeH - RangeL;      

ATR = AvgTrueRange(ATRLen);     

NoTrades = 0;      

ATRMA=AvgTrueRange(RangeLen);     

For value1 = 1 To RangeLen    

{

If (High[value1] <= RangeH )   

NoTrades = NoTrades + (RangeH - High[value1]);

If (Low[value1] >= RangeL )

NoTrades = NoTrades + (Low[value1] - RangeL);

}


Condition1 = NoTrades>= TRange*(RngPcnt*0.01);

Condition2 = TrueRange >ATRMA[1] ;        

Condition3 = Close > RangeH And (High+Low)*0.5 >High[1];

Condition4 = Close < RangeL And (High+Low)*0.5 < Low[1];

If (Condition1[1] And Condition2[1] ) 

{

If (Condition4[1] And MarketPosition==0 And vol > 0)

{

SellShort(0,Open);

ShortRisk = RangeH;

ShortLow = Low;

}

}

If(MarketPosition == -1 And BarsSinceEntry > 0) ShortLow = Min(ShortLow,Low);

If(MarketPosition == -1 And BarsSinceEntry > 0 And Vol > 0) 

{

If(Condition3[1])

{

BuyToCover(0,Open);

}

If(High>=ShortRisk) 

{

BuyToCover(0,Max(Open,ShortRisk));

}

If(High>=ShortLow[1]+(ATRs*ATR[1]))

{

BuyToCover(0,Max(Open,ShortLow[1]+(ATRs*ATR[1])));

}

}

End

初眼一看,都知道这结果很一般,也许是参数不符合,我也没做过参数优化的,但也没兴趣的。我只感兴趣的是,跟踪止盈的另一个写法,所以这个系统,也只是解读一下了。

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

推荐阅读更多精彩内容