期貨軟體TB系統原始碼解讀系列43-價格通道突破系統

隨機在TB裡找了一個系統,看著畫線還不錯的,但交易結果一般,可能是沒有做一點參數優化吧。可以不用它,但可以研究一下它的畫線意思的。

策略說明:

1.計算價格通道

2.收盤價加上ATR的一定倍數作為進場價

入場條件:

1.上一根Bar創新高

2.當前Bar最高價突破上一根Bar收盤價加上ATR的一定倍數

出場條件:

1.記錄多頭進場後的跟蹤止損價

2.價格向下突破跟蹤止損價多頭出場

買賣規則就這樣了,先直接看做多的具體代碼吧,解讀如下:

Params

Numeric Length(10); //聲明數值參數Length,初值10,用於計算ATR和新高價的Bar數。//

Numeric Trigger(0.79);//聲明數值參數Trigger,初值0.79,用於計算多頭進場價的驅動係數。//

Numeric Acceleration(0.05);//聲明數值參數Acceleration,初值0.05,拋物線的加速係數。//

Numeric FirstBarMultp(5);//聲明數值參數FirstBarMultp,初值5,用於計算在進場Bar設置止損價的係數。//

Vars

NumericSeries ATR;//聲明數值序列變量ATR。//

NumericSeries StopPrice;//聲明序列變量StopPrice,即跟蹤止損價。//

NumericSeries HighValue;//聲明數值序列變量HighValue,即多頭進場之後的盈利峰值價。//

NumericSeries AF;//聲明數值序列變量AF。//

BoolSeries Condition1(False);//聲明布爾型序列變量Condition1,初值為假。//

Numeric StopATR;//聲明數值變量StopATR。//

Begin

If(!CallAuctionFilter()) Return;// 集合競價和小節休息過濾。//

//初始設置。//

ATR=AvgTrueRange(Length);//變量ATR的求法,就是之前解讀的拋物線了。//

Condition1=High>Highest(High[1],Length);//先求Highest(High[1],Length)值,再與當前High比較,判斷當前最高價大於成立的,則把值賦值給布爾型變量Condition1值。//

//上一根Bar創新高後且當前Bar最高價突破上一根Bar收盤價加上ATR的一定倍數多頭入場。//

If(Condition1[1])//假如前一個布爾型序列變量Condition1[1]為真。//

{

If(High>=Close[1]+ATR[1]*Trigger And Vol > 0)//假如當前最高價 >= 前一收盤價Close[1] + 前一ATR[1] * 0.79,並且成交量Vol>0.//

{

Buy(0,Max(Open,Close[1]+ATR[1]*Trigger));//開倉買入了。//

}

}

//記錄盈利峰值價和跟蹤止損價。//

StopATR = Average(TrueRange,3);//函數TrueRange,求真實波動值了。函數Average,求平均值。這些都是前面解讀過的,都是把相應數值代回去求值就行。//

If(MarketPosition==1 And BarsSinceEntry==0)//假如持有多單,並且建倉位等於0.//

{

StopPrice=Low-StopATR*FirstBarMultp;//止損價StopPrice = 最低價Low - 變量StopATR * 5.//

AF=Acceleration;//代入值,即AF = 0.05//

HighValue=High;//序列變量HighValue = 當前最高價High。//

}

Else If(MarketPosition==1 And BarsSinceEntry>0)//假如持有多單,並且建倉位大於0.//

{

If(High>HighValue) HighValue=High;//假如當前最高價大於變量HighValue值,則變量HighValue = 當前High值。//

If(HighValue>HighValue[1] And AF<0.2)//假如當前變量HighValue值大於前一個HighValue[1]值的,並且AF < 0.2//

{

AF=AF+Min(Acceleration,0.2-AF);//代入相應值了,依據起始建倉位AF = Acceleration = 0.05,這代碼意思先求括號裡的最小值,再加上AF值,最後再賦值給係數AF了。//

}

StopPrice=StopPrice+AF*(HighValue-StopPrice);//這個StopPrice也是依據起始建倉位算得的值,這裡也就是把相應值給代進去算了。//

}

PlotNumeric("StopPrice",StopPrice);//畫出跟蹤止損價。//

//向下突破跟蹤止損價多頭出場。//

If(MarketPosition==1 And BarsSinceEntry>0 And Low<=StopPrice[1] And Vol > 0)//假如持有多單,並且建倉位大於0,並且最低價小於等於前一個止損價StopPrice值,並且成交量大於0.//

{

Sell(0,Min(Open,StopPrice[1]));//賣出平倉。//

}

End

期貨軟件TB系統源代碼解讀系列43-價格通道突破系統

期貨軟件TB系統源代碼解讀系列43-價格通道突破系統

它的5分鐘週期收益看著也還有點盈利,但我覺得一般的,最主要的還是看它畫線止損的算法。

寫完具體的,下面就是它做空的代碼了:

Params

Numeric Length(10);

Numeric Trigger(0.5);

Numeric Acceleration(0.06);

Numeric FirstBarMultp(2);

Vars

NumericSeries ATR;

NumericSeries StopPrice;

NumericSeries LowValue;

NumericSeries AF;

BoolSeries Condition2(False);

Numeric StopATR;

Begin

If(!CallAuctionFilter()) Return;

ATR=AvgTrueRange(Length);

Condition2=Low

If(Condition2[1])

{

If(Low<=Close[1]-ATR[1]*Trigger And Vol > 0)

{

SellShort(0,Min(Open,Close[1]-ATR[1]*Trigger));

}

}

StopATR = Average(TrueRange,3);

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

{

StopPrice=High+StopATR*FirstBarMultp;

AF=Acceleration;

LowValue=Low;

}Else If(MarketPosition==-1 And BarsSinceEntry>0)

{

If(Low

If(LowValue

{

AF=AF+Min(Acceleration,0.2-AF);

}

StopPrice=StopPrice-AF*(StopPrice-LowValue);

}

PlotNumeric("StopPrice",StopPrice);

If(MarketPosition==-1 And BarsSinceEntry>0 And High>=StopPrice[1] And Vol > 0)

{

BuyToCover(0,Max(Open,StopPrice[1]));

}

End

期貨軟件TB系統源代碼解讀系列43-價格通道突破系統

期貨軟件TB系統源代碼解讀系列43-價格通道突破系統

做空的就很一般了,這波動虧損的,誰還敢用啊,當然還是老話,這個不是它系統不好,你首先還是得先了解它,可能是參數對不上,實在不行,你可以再加個均線要求,比如在均線上方才開多,下方開空等,總能調節一下的。


分享到:


相關文章: