RangeBreak系統交易模型[開拓者公式]
標簽:公式 交易 開拓者 期貨 RangeBreak系統 交易模型 交易系統
這是個日內交易系統,收盤一定平倉;
RangeBreak基于昨日振幅和今日開盤價的關系。
昨日振幅=昨日最高價-昨日最低價
上軌 = 今日開盤價+N*昨日振幅
下軌 = 今日開盤價-N*昨日振幅
當價格突破上軌,買入開倉。
當價格跌穿下軌,賣出開倉。
RangeBreak指標
Params
Numeric PercentOfRange(0.3);
Vars
Numeric DayOpen;
Numeric preDayRange;
Numeric UpperBand;
Numeric LowerBand;
Begin
DayOpen = OpenD(0);
preDayRange = HighD(1) - LowD(1);
UpperBand = DayOpen + preDayRange*PercentOfRange;
LowerBand = DayOpen - preDayRange*PercentOfRange;
PlotNumeric("UpperBand",UpperBand);
PlotNumeric("LowerBand",LowerBand);
PlotNumeric("MidLine",DayOpen);
End
RBS_V1
Params
Numeric PercentOfRange(0.3);
Numeric ExitOnCloseMins(14.59);
Vars
Numeric DayOpen;
Numeric preDayRange;
Numeric UpperBand;
Numeric LowerBand;
Numeric MyPrice;
Begin
DayOpen = OpenD(0);
preDayRange = HighD(1) - LowD(1);
UpperBand = DayOpen + preDayRange*PercentOfRange;
LowerBand = DayOpen - preDayRange*PercentOfRange;
If(MarketPosition!=1 && High>=UpperBand)
{
MyPrice = UpperBand;
If(Open > MyPrice) MyPrice = Open;
Buy(1,MyPrice);
Return;
}
If(MarketPosition!=-1 && Low<=LowerBand)
{
MyPrice = LowerBand;
If(Open < MyPrice) MyPrice = Open;
SellShort(1,MyPrice);
Return;
}
// 收盤平倉
If(Time >=ExitOnCloseMins/100)
{
Sell(1,Open);
BuyToCover(1,Open);
}
SetExitOnClose;
End
必須考慮的特殊情況
如果前一日漲?;虻#瑒t會出現范圍很小。
解決方案:
設定一個范圍的最小值,假定為當前價格的0.2%。
代碼中的改動
Params
Numeric MinRange(0.2);
Vars
NumericSeries DayOpen;
Numeric preDayHigh;
Numeric preDayLow;
NumericSeries preDayRange;
Begin
preDayHigh = HighD(1);
preDayLow = LowD(1);
If(Date!=Date[1])
{
DayOpen = Open;
preDayRange = preDayHigh - preDayLow;
If(preDayRange < Open*MinRange*0.01)
preDayRange = Open*MinRange*0.01;
}Else
{
DayOpen = DayOpen[1];
preDayRange = preDayRange[1];
}
增加止損
有可能通道會比較寬,難道非要等到反轉才平倉?
考慮增加止損設置,有2種方案:
1、虧損固定點數。
2、虧損當前價格的百分比。
考慮到商品價格變化的差異,我們采取第二種方式。
止損部分代碼
先增加一個變量StopLine,用來保存止損位置。
下面是做多時的止損代碼:
If(MarketPosition==1)
{
StopLine = AvgEntryPrice-DayOpen*StopLossSet*0.01;
If(Low <= StopLine)
{
MyPrice = StopLine;
If(Open < MyPrice) MyPrice = Open;
Sell(Lots,MyPrice);
}
}
下面是做空的止損代碼:
Else If(MarketPosition==-1)
{
StopLine = AvgEntryPrice+DayOpen*StopLossSet*0.01;
If(High >= StopLine)
{
MyPrice = StopLine;
If(Open > MyPrice) MyPrice = Open;
BuyToCover(Lots,MyPrice);
}
}
入場時間的考慮
突破的時效性,發生在上午和下午意義是不同的。
不同的商品時效屬性不盡相同
為此我們增加最后交易時間參數,可供優化測試來確定最佳值。
實現代碼
增加參數:
Numeric LastTradeMins(14.00);
開倉條件處增加一個時間條件。
If(MarketPosition!=1 && High>=UpperBand && Time < LastTradeMins/100)
{
// 多頭開倉
}
If(MarketPosition!=-1 && Low<=LowerBand && Time < LastTradeMins/100)
{
// 空頭開倉
}
止贏規則
為了防止較大的盈利被吞噬,增加跟蹤止贏。
設定跟蹤止贏的起始點。
設定跟蹤止贏的回撤值。
或者可以選擇百分比跟蹤止贏。
這里我們采取回撤值。
跟蹤止損的編碼可配合前面的止損編碼一起控制。
If(HigherAfterEntry>=AvgEntryPrice+DayOpen*TrailingStart*0.01)
{
StopLine = HigherAfterEntry - DayOpen*TrailingStop*0.01;
}Else // 止損
{
StopLine = AvgEntryPrice-DayOpen*StopLossSet*0.01;
}
If(Low <= StopLine)
{
MyPrice = StopLine;
If(Open < MyPrice) MyPrice = Open;
Sell(1,MyPrice);
}
做空的代碼類似。
再進場原則
當我們止損或跟蹤止損之后,有兩種情況我們需要加以控制:
止損后,再次突破上軌或下軌;
追蹤止贏后,價格仍符合最初的開倉條件,出場后,馬上又會開倉入場。
同時,為了不錯失大的波段,我們也需要再次入場,只是進場需要更高的條件。我們增加一條:
再次進場必須在突破前期的高點\低點。
代碼的修改
我們需要標記止損動作,并要記錄高低位。
新建兩個布爾型序列變量:
BoolSeries bLongStoped;
BoolSeries bShortStoped;
在腳本開始位置增加處理,保證其值向后傳遞。
增加HigherAfterEntry和LowerAfterEntry在平倉后的值傳遞。
初次進場和再次進場
在原始開倉位置增加條件,開多倉時bLongStoped不能為True,開空倉時bShortStoped不能為True。
發出交易指令處理這兩個序列變量。
增加再次入場的代碼:
If(bLongStoped && MarketPosition==0 && High >=UpperBand && High > HigherAfterEntry && Time < LastTradeMins/100)
{
MyPrice = Max(HigherAfterEntry,UpperBand) + MinPoint;
If(Open > MyPrice) MyPrice = Open;
Buy(1,MyPrice);
bLongStoped = False;
Return;
}
// 做空再次入場代碼:
If(bShortStoped && MarketPosition==0 && Low<=LowerBand && Low < LowerAfterEntry && Time < LastTradeMins/100 && bInBoardRange==false)
{
MyPrice = Min(LowerAfterEntry,LowerBand) - MinPoint;
If(Open < MyPrice) MyPrice = Open;
SellShort(1,MyPrice);
bShortStoped = False;
Return;
}
漲跌停的控制
接近漲跌停板不應開倉。
若有持倉,價格到達漲跌停板馬上平倉。
判斷是否接近漲跌停
我們新建一個布爾變量bInBoardRange,默認值設置為False。
bInBoardRange =
(Open < Q_LowerLimit + DayOpen*StopLossSet*0.02) Or
( Open > Q_UpperLimit - DayOpen*StopLossSet*0.02);
在開倉條件中加入(bInBoardRange==false)
漲跌停板平倉
為了在價格達到漲跌停價馬上平倉,我們需要在增加如下代碼:
做多時:
If(Open == Q_UpperLimit) Sell(1,Open);
做空時:
If(Open == Q_LowerLimit) BuyToCover(Lots,Open);
交易次數控制
增加失敗次數限制,防止單日虧損無限制擴大。
增加二個變量記錄失敗的次數。
NumericSeries LongFailureCnts;
NumericSeries ShortFailureCnts;
增加一個參數設置最大次數。
Numeric FailureLimit(2);
實現代碼
在腳本開始部分增加序列變量值的向后傳遞處理。
在平倉時增加是否虧損的判斷,如果虧損則將計數+1.
If(PositionProfit < 0 ) LongFailureCnts = LongFailureCnts + 1;
在開倉時增加次數限定。
LongFailureCnts < FailureLimit
如果以上指標公式不適用于您常用的行情軟件
或者您想改編成選股公式,以便快速選出某種形態個股的話,
- 上一篇:雙均線交叉系統[TB交易模型]
- 下一篇:[模型]關于持倉系統過夜提前發單的寫法
相關文章
-
沒有相關內容