Comprobación del stop mínimo en los EAs publicados en el mercado. - página 17

 
Vladislav Andruschenko:

Mi Expert Advisor está captando movimientos min, por lo que está machacando el servidor, pero no con stoploss de 1 pip, sino con un nivel min normal + spread, pero el spread está flotando. Por eso EA está machacando el servidor hasta que vuelva a tener un spread normal.

En otras palabras, en el momento de la apertura comprueba la parada de los minis - reconstruye sus valores - y luego golpea el servidor. Pero si necesitas poner un stop de 10 pips, tienes que esperar al min spread y machacar el servidor.

Golpear al servidor no es una buena idea. Es posible que te encuentres con una prohibición de autotrading. (¿Quién querría enfrentarse a ataques DDOS en el servidor por parte de su EA?)

En primer lugar, antes de enviar una solicitud, necesitamos obtener el spread, el nivel de stop, ajustar los stops y si el stop es aceptable para operar, entonces enviar una solicitud. Si la parada no era aceptable, entonces no hay necesidad de molestar a nadie. Si mi servidor fuera golpeado así, lo habría matado...

Pero si, después de enviar una solicitud con un tamaño de parada aceptable, volvemos a obtener el error 130 (las condiciones de nivelación de la parada han cambiado durante el envío de la solicitud), entonces podemos ajustar el tamaño de la parada y enviar la solicitud (con un tamaño aceptable de la parada recién calculada). Hay que limitar el número de estas peticiones, de lo contrario será otro estúpido parloteo.

Ahora entiendo por qué no se le permite entrar en el mercado.

 

es una situación ligeramente diferente aquí,

No me refiero a cincelar todo el tiempo.

Naturalmente, después del error hay una comprobación de error - Slip. pero no funciona en el probador.

Se trata de la propagación flotante.

como escribí anteriormente - antes de enviar una solicitud - los niveles de parada se corrigen y se envían al servidor, - el servidor devuelve un error 130 - Expert Advisor vuelve a corregir el nivel y envía al servidor de nuevo.

y así sucesivamente.

El deslizamiento no funciona en el probador, por eso no hay retraso.

De momento, he resuelto el problema de esta manera: el stop no debe ser inferior al nivel de stop del servidor + spread + 1.

¿Qué debo hacer si el servidor devuelve el nivel de parada como 0?

Opción - ajustar por error 130 - no es una opción - el moderador no dejará esta manera.

Como se sugirió antes = Error 130 - aumentar en 1 y así sucesivamente, hasta que el servidor no se pierda un acuerdo. - no es una opción.

Amigos, Gracias por la ayuda en la solución del problema. Pero buscará una solución racional a este problema.

Gracias a todos por su participación.

 
Vladislav Andruschenko:

es una situación ligeramente diferente aquí,

No me refiero a cincelar todo el tiempo.

Naturalmente, después del error hay una comprobación de error - Slip. pero no funciona en el probador.

Se trata de la propagación flotante.

como escribí anteriormente - antes de enviar una solicitud - los niveles de parada se corrigen y se envían al servidor, - el servidor devuelve un error 130 - Expert Advisor vuelve a corregir el nivel y envía al servidor de nuevo.

y así sucesivamente.

El deslizamiento no funciona en el probador, por eso no hay retraso.

De momento, he resuelto el problema de esta manera: el stop no debe ser inferior al nivel de stop del servidor + spread + 1.

¿Qué debo hacer si el servidor devuelve el nivel de parada como 0?

Opción - ajustar por error 130 - no es una opción - el moderador no permitirá este método.

Como se sugirió antes = Error 130 - aumentar en 1 y así sucesivamente, hasta que el servidor no se pierda un acuerdo. - no es una opción.

Amigos, Gracias por la ayuda en la solución del problema. Pero buscará una solución racional a este problema.

Gracias a todos por su participación.

En principio, es posible obligar al usuario a introducir manualmente el factor de multiplicación de la dispersión cuando stoplevel==0. Es decir, al inicializar (no al cambiar de marco temporal) comprueba el nivel de estocaje y, si es cero, muestra una solicitud para introducir el coeficiente. Si el usuario se niega a entrar, entonces utiliza el coeficiente. 2 (spread*2) y luego aumentar el coeficiente o el tamaño de la parada en caso de error 130. Si un usuario sabe cómo se calcula el nivel de parada (pregunte al departamento de asistencia técnica, por ejemplo), utilice el coeficiente introducido por el usuario, pero no olvide responder a un error 130 aumentando el tamaño de la parada (en caso de que siga apareciendo). Pero normalmente (me lo he encontrado varias veces y lo he aprendido empíricamente), si se utiliza stop=stopplavel*coefficient+1, no se produce ningún error. Si no se añade 1 punto, aparecen errores.

Por lo tanto, compruebe en el servidor de MC cómo calculan el nivel de llenado e introduzca el coeficiente necesario en el EA. Incluso si el moderador se niega a introducir el coeficiente manualmente, se introducirá automáticamente.

 

Gracias, esa es la configuración por defecto de 2 +1 puntos.

Es una buena idea preguntar. Crearé un formulario y dejaré que lo introduzca él mismo.

 

A veces el broker prohíbe el autotrading durante un par de minutos si se envían unas 20 órdenes sin pausa.
En otras palabras, debería modificar/cerrar un montón de órdenes con una pausa de al menos 300-500 ms entre ellas. (Pero el error ya no es 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:

¡Hola a todos, amigos!

Hayuna característica especial de Marketplace: tenemos que comprobar todos los valores para la parada mínima.

Si el valor de la variable es menor que el min-stop, entonces asigna un min-stop, para que no haya error 130.

Actualmente el 90% de los brokers tienen spread flotante y min STOP y yield 0.

Hay una construcción de código que asigna todas las variables al tope mínimo.

Pero ya no funciona en el mercado, porque ahora minstop = 0 en todas partes,

¿Quién se ocupa de este problema?

Hola Vladislav, leí el problema que también encontré y decidí que si el nivel de parada flotante devuelve un valor de 0 o cercano a cero, entonces utilice señales inversas para cerrar.

¿Cree que esta solución está bien?

 
hola, ¿se invierte la señal de cierre, en el sentido de paradas virtuales?
 
Sí, pero tengo una idea mejor, así que lo haré. Por ejemplo, si el cálculo automático de los niveles de parada por ATR ha devuelto cero o cerca de cero, que es menor que el valor del spread medio, entonces utilizamos los datos anteriores hasta que aparezcan los nuevos datos con la apertura de la siguiente orden. Esto es mejor que las señales inversas.
 
Si usted hace el sistema - entonces está bien, pero la pregunta era sobre la comprobación en el mercado, por desgracia, el error 130 impide que el producto vaya más allá
Razón de la queja: