Comprobación del stop mínimo en los EAs publicados en el mercado.

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.

 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);
  }

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

¿Quién se ocupa de este problema?

Ihor Herasko  

Por supuesto que no )))) No es el SL, el TP y el TS lo que debe ponerse al mínimo, sino el nivel de parada. Y no sólo una vez al inicio del programa, sino en cada tic:

   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 - debe estar a disposición del usuario para su configuración. Hay cuentas como "true ECN" en las que realmente no hay limitaciones en cuanto a las distancias mínimas, es decir, se pueden establecer stops/ganancias/posiciones dentro del spread.
Alexander Bereznyak  
StopLevel no ayudará ya que también devuelve cero, utilice la diferencia Ask-Bid, puede ser con algún multiplicador
Vladislav Andruschenko  
Alexander Bereznyak:
StopLevel no ayuda, ya que también devuelve cero, utilizo la diferencia Ask-Bid
¿es para spread, pero para min stop?
Vladislav Andruschenko  
Alexander Bereznyak:
y también por la parada del min.
Entonces, ¿haces que el min stop sea igual al spread?
Vitalii Ananev  
Vladislav Andruschenko:

¡Hola a todos, amigos!

Hay una 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 min stop = 0 en todas partes,

¿Quién se ocupa de este problema?

Como opción, introduzca una restricción en el tamaño mínimo de la parada. Por ejemplo, en OnInit(), si un usuario establece un tope inferior a 2 puntos, da un aviso y devuelve el código INIT_PARAMETERS_INCORRECT.

Otra opción es no permitir que el usuario controle el tamaño del stop, sino calcularlo dinámicamente en el Asesor Experto en función de las condiciones de negociación.

Alexander Bereznyak  
como el broker indica que el min stop es cero, no hay nada más que hacer, puedes coger el multiplicador si el spread no es suficiente
Vladislav Andruschenko  
Vitalii Ananev:

Como alternativa, puede introducir un límite en el tamaño mínimo de la parada. Por ejemplo, en OnInit(), si un usuario establece un stop de menos de 2 pips, daría un aviso y devolvería el código INIT_PARAMETERS_INCORRECT.

Otra opción es no permitir que el usuario controle el tamaño del stop, y calcularlo dinámicamente en el Asesor Experto en función de las condiciones de negociación.

Estoy de acuerdo - no dar el control, pero usted sabe cómo se requiere por el tipo: Quiero establecer mi propia parada.

Pensaré en la salida del mensaje - gracias.

Vladislav Andruschenko  
Alexander Bereznyak:
Como el broker declara que el min stop es cero, no hay nada más que hacer, puedes coger un multiplicador si el spread no es suficiente

Sí, esto es sólo para el mercado - pero no hay universalidad para ningún corredor

la forma en que funciona es que tienes que hacer un min stop a 3 spreads para ser aceptado en el mercado,

La única diferencia es que el mercado los acepta - hay que hacer un min stop y 3 spreads, pero en realidad esto es erróneo - si un broker min stop = 1 spread - entonces el usuario no puede poner menos de 3 spreads.

Bafle.

Razón de la queja: