检查在市场上发布的EA中的最小止损。

 

朋友们,大家好

Marketplace有一个特殊的特点: 我们需要检查min stop的所有值。

如果变量的值小于最小止损点,那么就指定一个最小止损点,这样就不会出现错误130

目前90%的经纪商有浮动点差和最小STOP,收益率为0。

有一个代码结构,将所有的变量都分配给最小的停止

 int OnInitLevels(string symToWorkmodify)
  {
   if(lot<SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MIN))lots=SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MIN);else
   if(lot>SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MAX))lots=SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MAX);else lots=lot;
   if(StopLoss>0 && StopLoss<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))StopLosss=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else StopLosss=StopLoss;
   if(TakeProfit>0 && TakeProfit<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TakeProfits=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TakeProfits=TakeProfit;
   if(TrailingStop>0 && TrailingStop<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TrallingStops=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TrallingStops=TrailingStop;
   if(TakeProfitALL>0 && TakeProfitALL<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TakeProfitsAver=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TakeProfitsAver=(int)TakeProfitALL;
   if(TrailingStop>0 && TrailingStop<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TrallingStops=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TrallingStops=TrailingStop;
   return(0);
  }

但它在市场上已经不起作用了,因为现在到处都是min.stop = 0。

谁在处理这个问题?

 

当然,它不))))不是SL、TP和TS应该被设置为最小值,而是Stop Level。而且不仅是在程序开始时一次,而是在每次打勾 时。

   digits          = (int) SymbolInfoInteger(symbol, SYMBOL_DIGITS);
   point           = SymbolInfoDouble(symbol, SYMBOL_POINT);
   
   tickSize        = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
   
   ask             = SymbolInfoDouble(symbol, SYMBOL_ASK);
   bid             = SymbolInfoDouble(symbol, SYMBOL_BID);
   spread          = ask - bid;

   stopLevel       = MarketInfo(symbol, MODE_STOPLEVEL) * point;
   
   if (stopLevel == 0)
   {
      if (!isECN)
         stopLevel = NormalizeDouble(2 * spread, digits);
   }
   else
      stopLevel = NormalizeDouble(stopLevel + tickSize, digits);
isECN - 必须供用户设置。有一些账户,如 "真正的ECN",确实没有最小距离的限制,即止损/盈利/仓位可以设置在点差内。
 

谢谢。但你的设计和我的一样,只是你在最小止损点=0时乘以点差*2,但我们知道在许多经纪公司,最小止损点=3点差,为什么你要做2?

我在每一个tick 上检查最小的停止。

 
StopLevel不会有帮助,因为它也会返回0,使用Ask-Bid差价,可以用一些乘数。
 
Alexander Bereznyak:
StopLevel没有帮助,因为它也返回0,我使用Ask-Bid差值
它是用于传播,但用于最小的停止?
 
也是为一分钟的停留
 
Alexander Bereznyak:
也是为了迷你型停车。
所以你让最小止损等于点差?
 
Vladislav Andruschenko:

朋友们,大家好

Marketplace有一个特殊的特点:我们需要检查min stop的所有值。

如果变量的值小于最小止损点,那么就指定一个最小止损点,这样就不会出现错误130

目前90%的经纪商有浮动点差和最小STOP,收益率为0。

有一个代码结构,将所有的变量都分配给最小的停止

但这在市场上已经不起作用了,因为现在到处都是minstop=0。

谁在处理这个问题?

作为一种选择,对最小停靠点的尺寸进行限制。例如,在OnInit()中,如果用户设置的止损点少于2点,则给出警告并返回代码INIT_PARAMETERS_INCORRECT。

另一个选择是不允许用户控制止损大小,而是根据交易条件在专家顾问中动态地计算它。

 
由于经纪商指出最小止损为零,所以没有别的办法,如果点差不够,你可以拿起乘数。
 
Vitalii Ananev:

或者,你可以引入最小止损规模的限制。例如,在OnInit()中,如果用户设置的止损点少于2个点,它会发出警告并返回代码INIT_PARAMETERS_INCORRECT。

另一个选择是不允许用户控制止损大小,而是根据交易条件在专家顾问中动态地计算它。

我同意--不给控制权,但你知道它是如何被类型要求的:我想设置自己的停止。

我会考虑信息输出的问题 - 谢谢你。

 
Alexander Bereznyak:
由于经纪人宣布最小止损为零,所以没有其他事情可做,如果点差不够,你可以拿起一个倍增器

是的,这只是对市场而言--但对任何经纪人来说都没有普遍性。

它的工作方式是,你必须在3个价位上做一个最小的止损,以便被市场接受。

唯一的区别是市场接受它们--你必须做一个最小止损和3个点差,但事实上这是错误的--如果一个经纪人最小止损=1个点差--那么用户将不能放少于3个点差。

挡板。