RangeBreak系统交易模型[开拓者公式]

更新时间:2023-07-10 03:04:42 阅读: 评论:0

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 ExitOnCloMins(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 >=ExitOnCloMins/100)
 {
  Sell(1,Open);
  BuyToCover(1,Open);
 }
 SetExitOnClo;
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;
    }El
    {
        DayOpen = DayOpen[1];
        preDayRange = preDayRange[1];
    }
增加止损
有可能通道会比较宽,难道非要等到反转才平仓?
b型血的性格考虑增加止损设置,有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);   
 }
}
 
下面是做空的止损代码:5fu
El 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;
}El // 止损
{
 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。

本文发布于:2023-07-10 03:04:42,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1088422.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:止损   增加   开仓
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图