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

 
Vladislav Andruschenko:

se tiene en cuenta el diferencial, el diferencial era de 8 pips. + min stop 18=26 pips

El 27 está bien.

Y además, si una persona necesita colocar un stoploss de 100 pips, significa que perderá 100 pips, así que para BAY desde el precio ASC necesitas contar 100 pips.

y para vender desde el BID, respectivamente.

No he dicho dónde poner el SL. Dije qué precio utilizar al comprobarlo.
 
Andrey Khatimlianskii:
No he dicho dónde poner el SL. Dije qué precio utilizar al comprobarlo.
Gracias. Esa opción también cuenta.
 
Taras Slobodyanik:

Entonces, ¿cómo no adivinar? si el corredor da un nivel de parada poco razonable? %)

...está claro que después de todas las comprobaciones, hay que adivinar para saber la sangría mínima

No se puede adivinar en el trazado. Tienes que saberlo todo. Por adelantado. Para no cometer ni un solo error. Aunque creo que los errores del servidor no son un error. Es una advertencia.
 

No tengo experiencia en la venta de EAs en el Mercado, pero después de leer todas las opiniones, voy a poner mis cinco centavos.

Puede intentar seleccionar varias opciones en el menú

1 Variante - Por defecto. Esto es cuando la parada mínima está totalmente determinada porMODE_STOPLEVEL. Asegúresede pedir un nuevoNIVEL DE PARADA antes de cada acción de la orden.

2 Variante, siMODE_STOPLEVEL == 0, entonces el tope sale de la extensión.

3 Opcionalmente, establecemos manualmente nuestro propio nivel de stop, o algún multiplicador multiplicado por el spread.

Es necesario introducir el control. Si se está probando u optimizando un EA, el nivel de stop no puede ser inferior al spread. Creo que esto permitirá al mercado pasar cualquier prueba de estrés, incluso una con StopLoss = 1.

 
Dmytro Zelenskyy:

No tengo experiencia en la venta de EAs en el Mercado, pero después de leer todas las opiniones, voy a poner mis cinco centavos.

Puede intentar seleccionar varias opciones en el menú

1 Variante - Por defecto. Esto es cuando la parada mínima está totalmente determinada porMODE_STOPLEVEL. Asegúresede pedir un nuevoNIVEL DE PARADA antes de cada acción de la orden.

2 Variante, siMODE_STOPLEVEL == 0, entonces el tope sale de la extensión.

3 Opcionalmente, establecemos manualmente nuestro propio nivel de stop, o algún multiplicador multiplicado por el spread.

Es necesario introducir el control. Si se está probando u optimizando un EA, el nivel de stop no puede ser inferior al spread. Creo que esto permitirá al mercado pasar cualquier prueba de estrés, incluso una con StopLoss = 1.

Por desgracia, no.

En el mercado todo debería ir automáticamente.

Ahora bien, aquí hay una nueva cosa curiosa con el oro, se citan 3 dígitos, pero el último dígito debe ser redondeado, es decir, el último dígito debe ser 0,

El último dígito debe ser 0, para que al redondear, lo haga de acuerdo a una regla matemática, y no en la dirección que le permita saltarse la regla del tope mínimo.

Por supuesto, puedo simplemente poner - a través de la comprobación del mercado para poner todos los niveles en 10 niveles de parada - por así decirlo, con el fin de dejar que los moderadores pasan, pero me gustaría manejarlo correctamente.

Tengo que redondear hacia arriba para comprar y hacia abajo para vender. oh............

 
Vladislav Andruschenko:

Por desgracia, no.

En el mercado todo debería ir automáticamente.

Ahora hay un nuevo truco en el oro, hay cotizaciones de 3 dígitos, pero el último dígito debe ser redondeado, es decir, el último dígito debe ser 0,

El último dígito debe ser 0, para que al redondear, lo haga por una regla matemática, y no hacia el lado que le permite saltarse la regla del tope mínimo.

Por supuesto, puedo simplemente poner - a través de la comprobación del mercado para poner todos los niveles en 10 niveles de parada - por así decirlo, con el fin de dejar que los moderadores pasan, pero me gustaría manejarlo correctamente.

Tengo que redondear hacia arriba para comprar y hacia abajo para vender. oh............

Yo también me he enfrentado a este problema al probar el oro y la plata.

double NormalizePrice(string symbol,double value)
  {
   double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
   if(ts==0)return(value);
   return(NormalizeDouble(value/ts,0)*ts);
  }

ejemplo de uso

      double ask=NormalizeDouble(SymbolInfoDouble(symbol,SYMBOL_ASK),digits);
      if(NormalizeDouble(NormalizePrice(symbol,ask),digits)!=ask)return;
 

así es como se ve mi función de take profit y stop loss por ejemplo

void ModifyTP(string symbol,double tp)
  {
   if(tp<=0)return;
   bool res;
   double last=SymbolInfoDouble(symbol,SYMBOL_LAST);
   double bid=SymbolInfoDouble(symbol,SYMBOL_BID);
   double ask=SymbolInfoDouble(symbol,SYMBOL_ASK);
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
   int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);

   if(last<=0.0)
     {
      bid=SymbolInfoDouble(symbol,SYMBOL_BID);
      ask=SymbolInfoDouble(symbol,SYMBOL_ASK);
     }
   else
     {
      bid=SymbolInfoDouble(symbol,SYMBOL_LAST);
      ask=SymbolInfoDouble(symbol,SYMBOL_LAST);
     }

   if(bid<=0.0)return;
   if(ask<=0.0)return;

   int total=OrdersTotal();

   for(int i=0; i<total; i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderSymbol()!=symbol)continue;
      if(OrderType()>1)continue;
      if(OrderTakeProfit()!=0)continue;

      if(OrderType()==OP_BUY) tp=NormalizeDouble(NormalizePrice(symbol,bid+tp*point),digits);
      if(OrderType()==OP_SELL) tp=NormalizeDouble(NormalizePrice(symbol,ask-tp*point),digits);
      if(tp<0)continue;
      res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),tp,0);
      if(!res)
        {
         int error=GetLastError();
         rezult=StringConcatenate(OrderSymbol(),": error modifying TakeProfit order ",StrToType(OrderType())," №- ",error," ",ErrorDescription(error)," Ticket: ",OrderTicket());
         Print(rezult);
        }
     }
  }
 
Sergey Gritsay:

También ante el problema de las pruebas sobre el oro y la plata, escribí una función como esta

ejemplo de uso

¡¡¡¡Si utilizo el oro en el servidor mt5 - 3 decimales, pero las paradas y el precio de apertura se debe establecer en !!!! Si todavía quiere jugar con 2 decimales, redondee a 2 decimales en lugar de 3, y también puede ver algunos trucos humorísticos con topes mínimos en el oro y la plata,

así:

   request.tp=NormalizeDouble(request.tp,SymbolInfoInteger(symToWork2,SYMBOL_DIGITS)-Rounding);
   request.sl=NormalizeDouble(request.sl,SymbolInfoInteger(symToWork2,SYMBOL_DIGITS)-Rounding);
   request.price=NormalizeDouble(request.price,SymbolInfoInteger(symToWork2,SYMBOL_DIGITS)-Rounding);

dondeRedondeo= para el oro mt5 es 1.

Tienes que redondear el precio, de lo contrario te informará de que el precio es incorrecto, pero cuando lo redondees, el servidor lo corregirá al precio correcto y la transacción se cerrará.

El mt4 no tiene esas peculiaridades - hay 2 decimales y se redondea hasta 2 decimales sin problemas.

mi opinión personal sobre el error 130:

Tengo todas las comprobaciones de error 130 - hay una salida de registro de errores.

También existe la normalización.

En el mercado me hicieron normalizar a min stop, respectivamente + spread, (por ejemplo, debería comprar desde el precio ASK y comprobar el min stop en el precio BID).

Por lo tanto, se debería forzar al usuario, si un trader utiliza el EA y establece por ejemplo 20 puntos de Stop Loss, entonces el EA debería sobrescribirlo automáticamente en 50 puntos (MinStop + Spread), lo cual no es correcto. El operador debe ver el error 130 y corregir el stop por su cuenta y riesgo.

Otra opción - si un usuario establece el stoploss más bajo que el mínimo - prohibir el comercio y la modificación, porque los moderadores no permitirá que el Asesor Experto con el error 130.

Pero prohibir el comercio es un error, el stop y el spread son flotantes, ahora es menos que el mínimo - entonces está bien.

No creo que sea una buena idea utilizar el mercado para ese enfoque.

IMHO: un error 130 debería ser y un usuario debería ver el error 130 desde el servidor, no desde un Asesor Experto diciendo: "Su stop está por debajo del mínimo, corríjalo".

Regla del mercado: no salte el Asesor Experto que genera el error 130 - porque el verificador ha puesto 1 punto en el Stop Loss - bien, esto es un fracaso.

Se puede pasar una misma versión de Asesor Experto o no.

He publicado una versión - todo está bien, después de un tiempo vi que el EA imprime mucho (sólo el hecho de que el stop loss es menor que el mínimo), rápidamente lo corregí y esperé una semana hasta que comienzan las pruebas, de nuevo 2 semanas de estancamiento porque de nuevo veo 130 error en algún símbolo

 
Vladislav Andruschenko:

En el oro en el servidor mt5 - 3 decimales, pero las paradas y el precio de apertura debe ser fijado en !!!!. Si quiere cambiar el precio del oro y la plata, tiene que ponerlo con 2 decimales, es decir, redondearlo a 2 decimales y no a 3, y habrá un truco con su tope mínimo en el oro y la plata,

así:

dondeRedondeo= para el oro mt5 es 1.

Tienes que redondear el precio, de lo contrario te informará de que el precio es incorrecto, pero cuando lo redondees, el servidor lo corregirá al precio correcto y la transacción se cerrará.

El mt4 no tiene esas peculiaridades - hay 2 decimales y se redondea hasta 2 decimales sin problemas.

mi opinión personal sobre el error 130:

Tengo todas las comprobaciones de error 130 - hay una salida de registro de errores.

También existe la normalización.

En el mercado me hicieron normalizar a min stop, respectivamente + spread, (por ejemplo, debería comprar desde el precio ASK y comprobar el min stop en el precio BID).

Por lo tanto, se debería forzar al usuario, si un trader utiliza el EA y establece por ejemplo 20 puntos de Stop Loss, entonces el EA debería sobrescribirlo automáticamente en 50 puntos (MinStop + Spread), lo cual no es correcto. El operador debe ver el error 130 y corregir el stop por su cuenta y riesgo.

Otra opción - si un usuario establece el stoploss más bajo que el mínimo - prohibir el comercio y la modificación, porque los moderadores no permitirá que el Asesor Experto con un error de 130.

Pero prohibir el comercio es un error, el stop y el spread son flotantes, ahora es menos que el mínimo - entonces está bien.

No creo que sea una buena idea utilizar el mercado para ese enfoque.

IMHO: un error 130 debería ser y un usuario debería ver el error 130 desde el servidor, no desde un Asesor Experto diciendo: "Su stop está por debajo del mínimo, corríjalo".

Regla del mercado: no salte el Asesor Experto que genera el error 130 - porque el verificador ha puesto 1 punto en el Stop Loss - bien, esto es un fracaso.

Se puede pasar una misma versión de Asesor Experto o no.

He publicado una versión - todo está bien, después de un tiempo vi que el EA imprime mucho (sólo el hecho de que el stop loss es menor que el mínimo), rápidamente lo corregí y esperé una semana hasta que comienzan a comprobar, de nuevo 2 semanas de estancamiento porque 130 error aparece de nuevo en algún símbolo

IMHO - muchos mensajes del servidor - no un error, y el código de retorno. Y no se pretende evitar con todo tipo de trucos, sino que el Asesor Experto sea capaz de tomar decisiones. Son decisiones basadas en la respuesta del servidor a sus acciones. De lo contrario, no sería más que un juguete tonto que no permite controlar el mercado y corregir sus acciones en función de la "comunicación" con el servidor.

Así que "facetar" a los moderadores en el error 130 es exagerado. Hay que ser reflexivos: una cosa es que un Asesor Experto siga machacando al servidor después del error número 130, y otra que reaccione ante él y cambie sus acciones. ¿Por qué no se nos permite hacer esto último? ¿Se debe simplemente a que alguien (el moderador) no quiere examinar más a fondo el trabajo del EA? Se siente como ver 130 - en el matrimonio. No importa que el EA muy probablemente necesite esa respuesta del servidor para su propia lógica, es importante simplemente rechazarla, y no buscar más. ¿Es así como funciona?

 
Artyom Trishkin:

IMHO - muchos mensajes del servidor no son un error, sino un código de retorno. Y lo necesita no para evitarlo con todo tipo de trucos, sino para que el Asesor Experto pueda tomar decisiones. Son decisiones basadas en la respuesta del servidor a sus acciones. De lo contrario, sería sólo un juguete tonto que no permite seguir el mercado y corregir sus acciones en base a una "comunicación" recíproca con el servidor.

Por lo tanto, es una exageración "obligar" a los moderadores a cometer el error 130. Deberíamos ser reflexivos: una cosa es que el Asesor Experto siga machacando al servidor después del error número 130, y otra muy distinta es que reaccione ante él y cambie sus acciones. ¿Por qué no se nos permite hacer esto último? ¿Se debe simplemente a que alguien (el moderador) no quiere examinar más a fondo el trabajo del EA? Se siente como ver 130 - en el matrimonio. No importa que el experto probablemente necesite esa respuesta del servidor para su propia lógica, es importante simplemente rechazarla, y no buscar más. ¿Es así como funciona?

Por eso mi EA ha ido cogiendo movimientos min/max y por eso está machacando el servidor no con stoploss de 1 pip sino con un nivel min + spread normal, pero el spread es flotante. Por lo tanto, EA golpeará el servidor hasta que devuelva 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 vencer al servidor.