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

RangeBreak系統(tǒng)交易模型[開拓者公式]

標(biāo)簽:公式 交易 開拓者 期貨 RangeBreak系統(tǒng) 交易模型 交易系統(tǒng)

 

這是個日內(nèi)交易系統(tǒng),收盤一定平倉;
RangeBreak基于昨日振幅和今日開盤價的關(guān)系。
昨日振幅=昨日最高價-昨日最低價
上軌 = 今日開盤價+N*昨日振幅
下軌 = 今日開盤價-N*昨日振幅
當(dāng)價格突破上軌,買入開倉。
當(dāng)價格跌穿下軌,賣出開倉。


RangeBreak指標(biāo)

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

 


必須考慮的特殊情況

如果前一日漲停或跌停,則會出現(xiàn)范圍很小。
解決方案:
設(shè)定一個范圍的最小值,假定為當(dāng)前價格的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];
    }


增加止損

有可能通道會比較寬,難道非要等到反轉(zhuǎn)才平倉?
考慮增加止損設(shè)置,有2種方案:
1、虧損固定點數(shù)。
2、虧損當(dāng)前價格的百分比。
考慮到商品價格變化的差異,我們采取第二種方式。


止損部分代碼

先增加一個變量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);  
 }
}

 

入場時間的考慮


突破的時效性,發(fā)生在上午和下午意義是不同的。
不同的商品時效屬性不盡相同
為此我們增加最后交易時間參數(shù),可供優(yōu)化測試來確定最佳值。


實現(xiàn)代碼


增加參數(shù):
Numeric LastTradeMins(14.00);
開倉條件處增加一個時間條件。
If(MarketPosition!=1 && High>=UpperBand && Time < LastTradeMins/100)
{
// 多頭開倉
}

If(MarketPosition!=-1 && Low<=LowerBand && Time < LastTradeMins/100)
{
// 空頭開倉
}

 

止贏規(guī)則

為了防止較大的盈利被吞噬,增加跟蹤止贏。
設(shè)定跟蹤止贏的起始點。
設(shè)定跟蹤止贏的回撤值。
或者可以選擇百分比跟蹤止贏。
這里我們采取回撤值。

跟蹤止損的編碼可配合前面的止損編碼一起控制。
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);   
}
做空的代碼類似。

 


再進場原則


當(dāng)我們止損或跟蹤止損之后,有兩種情況我們需要加以控制:
止損后,再次突破上軌或下軌;
追蹤止贏后,價格仍符合最初的開倉條件,出場后,馬上又會開倉入場。
同時,為了不錯失大的波段,我們也需要再次入場,只是進場需要更高的條件。我們增加一條:
再次進場必須在突破前期的高點\低點。


代碼的修改

我們需要標(biāo)記止損動作,并要記錄高低位。
新建兩個布爾型序列變量: 
BoolSeries  bLongStoped;
BoolSeries  bShortStoped;
在腳本開始位置增加處理,保證其值向后傳遞。
增加HigherAfterEntry和LowerAfterEntry在平倉后的值傳遞。

 


初次進場和再次進場

在原始開倉位置增加條件,開多倉時bLongStoped不能為True,開空倉時bShortStoped不能為True。
發(fā)出交易指令處理這兩個序列變量。
增加再次入場的代碼:

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;
}


漲跌停的控制

接近漲跌停板不應(yīng)開倉。
若有持倉,價格到達漲跌停板馬上平倉。


判斷是否接近漲跌停

我們新建一個布爾變量bInBoardRange,默認(rèn)值設(shè)置為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);

 

交易次數(shù)控制

增加失敗次數(shù)限制,防止單日虧損無限制擴大。

增加二個變量記錄失敗的次數(shù)。
 NumericSeries LongFailureCnts;
 NumericSeries ShortFailureCnts;
增加一個參數(shù)設(shè)置最大次數(shù)。
 Numeric FailureLimit(2);

 

實現(xiàn)代碼

在腳本開始部分增加序列變量值的向后傳遞處理。
在平倉時增加是否虧損的判斷,如果虧損則將計數(shù)+1.
 If(PositionProfit < 0 ) LongFailureCnts = LongFailureCnts + 1;
在開倉時增加次數(shù)限定。
   LongFailureCnts < FailureLimit

 

 

 

 

如果以上指標(biāo)公式不適用于您常用的行情軟件

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

可以聯(lián)系我們相關(guān)技術(shù)人員 QQ: 262069696  點擊在線交流進行 有償 改編!

 


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

相關(guān)文章

    沒有相關(guān)內(nèi)容
  主站蜘蛛池模板: 97人妻人人做人碰人人爽| 国产精品无码一区二区三级 | 女人被免费视频网站| 久久久久久久999| 日韩视频在线观看中字| 亚洲天堂水蜜桃| 波多野结衣被强女教师系列| 免费被黄网站在观看| 老熟女高潮一区二区三区| 国产啪亚洲国产精品无码| 五月婷婷一区二区| 国产精品无码V在线观看| 99久久人妻无码精品系列蜜桃| 好吊妞视频这里只有精品| 中文字幕av免费专区| 日本b站一卡二不卡三卡四卡| 久久青草国产精品一区| 欧美zozozo人禽交免费大片 | 高清一区二区三区视频| 国产日韩av在线播放| 波多野结衣33| 国产精品成人久久久久久久| 91精品国产综合久久青草| 夜夜偷天天爽夜夜爱| jizz黄色片| 妇女bbbb插插插视频| 一级黄色香蕉视频| 成人免费公开视频| 中文字幕丰满乱子伦无码专区 | 久久夜色精品国产噜噜麻豆| 最新黄色网址在线观看| 亚洲aⅴ男人的天堂在线观看| 欧美乱人伦中文字幕在线不卡| 亚洲国产美女精品久久久久| 欧美欧洲性色老头老妇| 亚洲福利电影在线观看| 波多野吉衣中文字幕| 亚洲精品nv久久久久久久久久 | 少妇饥渴XXHD麻豆XXHD骆驼 | 永久免费在线观看视频| 亚洲视频日韩视频|