您現在的位置:程序化交易>> 期貨公式>> 交易開拓者(TB)>> 開拓者公式>>正文內容

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

 


必須考慮的特殊情況

如果前一日漲停或跌停,則會出現范圍很小。
解決方案:
設定一個范圍的最小值,假定為當前價格的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

 

 

 

 

如果以上指標公式不適用于您常用的行情軟件

或者您想改編成選股公式,以便快速選出某種形態個股的話,

可以聯系我們相關技術人員 QQ: 262069696  點擊在線交流進行 有償 改編!

 


【字體: 】【打印文章】【查看評論

相關文章

    沒有相關內容
  双色球机选新浪彩票