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

 
Vladislav Andruschenko:

我的专家顾问正在捕捉最小的动作,所以它正在冲击服务器,但不是用1点止损,而是用正常的最小水平+点差,但点差是浮动的。这就是为什么EA在猛烈抨击服务器,直到它恢复正常价差。

换句话说,在打开的那一刻,它检查min stop--重建它的值--然后它击中服务器。但如果你需要设置10个点的止损,你必须等待最小的点差,并对服务器进行冲击。

颠覆服务器并不是一个好主意。你可能会遇到禁止自动交易的情况。(谁会想处理他的EA对服务器的DDOS攻击?)

首先,在发送请求之前,我们需要获得点差,止损水平,调整止损,如果止损可以接受交易,然后发送请求。如果停止的尺寸不能接受,那么就没有必要打扰任何人。如果我的服务器被打成这样,我就会杀了它......。

但是,如果在以可接受的止损大小发送请求后,我们再次得到错误130(在发送请求时止损平移条件发生了变化),那么我们可以调整止损大小并发送请求(以可接受的新计算的止损大小)。这种要求的数量应该受到限制,否则将是另一种愚蠢的喋喋不休。

现在我知道为什么不允许你进入市场了。

 

这里的情况略有不同。

我并不是说要一直凿下去。

自然,在错误之后有一个错误检查--Slip.但它在测试器中并不工作。

这是关于浮动的传播。

正如我上面写的--在发送请求之前--止损水平被纠正并发送给服务器,--服务器返回错误130--Expert Advisor再次纠正水平并再次发送给服务器。

等等。

滑动在测试器中不起作用,这就是为什么没有延迟。

目前,我是这样解决的:止损不应该低于服务器上的止损水平+价差+1。

如果服务器返回的停止水平 为0,我应该怎么做?

选项--按错误130调整--不是一个选项--主持人不会让这种方式。

正如之前建议的那样=错误130-增加1,以此类推,直到服务器不漏掉一个交易。- 不是一个选项。

朋友们,感谢你们的帮助,解决了这个问题。但会寻找一个合理的解决方案来解决这个问题。

感谢大家的参与。

 
Vladislav Andruschenko:

这里的情况略有不同。

我并不是说要一直凿下去。

自然,在错误之后有一个错误检查--Slip.但它在测试器中并不工作。

这是关于浮动的传播。

正如我上面写的--在发送请求之前--止损水平被纠正并发送给服务器,--服务器返回错误130--Expert Advisor再次纠正水平并再次发送给服务器。

等等。

滑动在测试器中不起作用,这就是为什么没有延迟。

目前,我是这样解决的:止损不应该低于服务器上的止损水平+价差+1。

如果服务器返回的停止水平 为0,我应该怎么做?

选项--按错误130调整--不是一个选项--主持人不允许这种方法。

正如之前建议的那样=错误130-增加1,以此类推,直到服务器不漏掉一个交易。- 不是一个选项。

朋友们,感谢你们的帮助,解决了这个问题。但会寻找一个合理的解决方案来解决这个问题。

感谢大家的参与。

原则上,当stoplevel==0时,可以强制用户手动输入传播乘法系数。也就是说,在初始化时(不是切换时间段),检查停止水平,如果是零,显示要求输入系数。如果用户拒绝输入,那么就使用系数。2(价差*2),然后在误差130的情况下,增加系数或停止大小。如果用户知道止损位是如何计算的(例如询问技术支持部门),那么就使用用户输入的系数,但不要忘记通过增加止损大小来应对第130个错误(以防它仍然出现)。但通常情况下(我遇到过几次,也是根据经验得知的),如果你使用stop=stopplavel*coefficient+1,就不会出现错误。如果你不加1分,就会出现错误。

因此,在MC服务器上检查他们是如何计算止损水平的,并将所需的系数输入EA。即使主持人拒绝手动输入系数,也会自动输入。

 

谢谢你,这是默认设置的2+1分。

问一下是个好主意。 我会建立一个表格,让他自己输入。

 

有时,如果在没有停顿的情况下发送约20条指令,经纪人会禁止自动交易几分钟。
换句话说,你应该修改/关闭一堆订单,订单之间至少要有300-500毫秒的停顿。(但错误不再是130)

 
MqlTick MS_MqlTick;

enum EnumStopLevel
  {
   a0 = 0, // Real StopLevel
   a1 = 1, // StopLevel correction spread
   a2 = 2, // StopLevel correction 2*spread
   a3 = 3, // StopLevel correction 3*spread
   a4 = 4, // StopLevel correction 4*spread      
   a5 = 5, // StopLevel correction 5*spread         
  };
input EnumStopLevel Mode_StopLevel = 0;


//========================================== StopLevFun
double StopLevFun(int Mode_StopLevelF)
{
   double StopLL = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL) * _Point;
 
   if(MQLInfoInteger(MQL_TESTER) && Mode_StopLevelF < 3) Mode_StopLevelF = 3; ///////////////////////// Это для тестера при модерации
 
   switch(Mode_StopLevelF)
   {
      case 0: break;
      case 1: While_SymbolInfoTick(_Symbol); StopLL = MathMax(MS_MqlTick.ask - MS_MqlTick.bid, StopLL); break;
      case 2: While_SymbolInfoTick(_Symbol); StopLL = MathMax((MS_MqlTick.ask - MS_MqlTick.bid) * 2, StopLL); break;
      case 3: While_SymbolInfoTick(_Symbol); StopLL = MathMax((MS_MqlTick.ask - MS_MqlTick.bid) * 3, StopLL); break;
      case 4: While_SymbolInfoTick(_Symbol); StopLL = MathMax((MS_MqlTick.ask - MS_MqlTick.bid) * 4, StopLL); break;
      case 5: While_SymbolInfoTick(_Symbol); StopLL = MathMax((MS_MqlTick.ask - MS_MqlTick.bid) * 5, StopLL); break;
   }
 
   return(NormalizeDouble(StopLL, _Digits) );   
}


//=========================================== While SymbolinfoTick
bool While_SymbolInfoTick(string Fsymbol)
{
   int WhTi = 0;
   
   while(!SymbolInfoTick(Fsymbol, MS_MqlTick) ) 
   {
      if(WhTi % 10 == 0) Print(Fsymbol, " >> SymbolInfoTick(Fsymbol, MS_MqlTick)= false     Try= ", WhTi);
      
      WhTi++;
      
      if(WhTi > 100) return(false);
      
      Sleep(10);
   }
   
   return(true);
}
А если вот такой вариант.
Если реал или демо, то по умолчанию выбирается вариант 0 Mode_StopLevelF, и в этом случае возвращается реальный стоплевел.
Но можно выбрать и коррекцию стоплевела спредом, с разным коэффициентом. При этом если стоплевел будет больше чем спред, то будет учитываться стоплевел.
А для тестера, при модерации, выбирается всегда режим не ниже 3 Mode_StopLevelF, в этом случае стоплевел будет больше спреда в 3 раза и больше.
П.С. Как пишет разработчик SymbolInfoTick  предпочтительнее чем SymbolInfoDouble для Ask и Bid.
https://www.mql5.com/ru/docs/marketinformation/symbolinfodouble
 
Vladislav Andruschenko:

朋友们,大家好

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

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

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

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

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

谁在处理这个问题?

你好,Vladislav,看了我也遇到的问题,决定如果浮动止损位返回值为0或接近0,那么就用反向信号来关闭。

你认为这个解决方案可以吗?

 
嗨,收盘信号是否反转,在虚拟止损的意义上?
 
是的,但我有一个更好的主意,所以我会这么做。例如,如果通过ATR自动计算的止损位返回了零或接近零,小于平均价差的值,那么我们使用以前的数据,直到新的数据出现时,下一个订单的开仓。这比反向信号更好。
 
如果你做的是系统--那么就可以了,但问题是关于在市场上检查,不幸的是错误130 阻止了产品的进一步发展。