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

 
Vladimir Gribachev:

Pues bien, en el servidor MetaQuotes-Demo (donde el moderador está haciendo pruebas) el nivel de parada mínima vuelve normalmente. Compruébelo usted mismo, 0 no lo hará.

No sé en qué servidor se prueba moderador, pero el arrancador topik fue la comprobación de un nivel de parada y regresó el producto a la mejora del error 130. Lee el hilo desde el principio.
 
Vitalii Ananev:
No sé en qué servidor el moderador de la prueba, pero el iniciador del tema tenía una comprobación de un nivel de parada y el producto fue devuelto a él para la mejora debido a un error 130. Lee el hilo desde el principio.

En su caso, el 130 no sólo puede ocurrir cuando los búhos intentan colocar un stop loss demasiado cerca del mercado.

Es mejor comprobarlo directamente al enviar o modificar un slp.

 
Vladimir Gribachev:

Pregunta, ¿por qué poner un stop loss de 1 punto en el real?

Acabo de recordar... Una vez probado dicho algoritmo con un min stop loss, la comprobación es básicamente la misma y no hubo errores así como tampoco ganancias.

El vendedor de 60 productos del Marketplace -- que ha escrito 80 tareas como freelance -- tiene un sitio con anuncios para escribir EAs -- y todo esto no es el primer año -- es el topicstarter.

Y de repente el topicstarter pregunta qué hacer con el stoplevelling cero y dice que los moderadores del mercado están revisando de alguna manera extraña los EA del mercado.

En contraste con sus comentarios, los usuarios del foro que tienen experiencia en el desarrollo, que tienen experiencia en poner productos en el mercado, leen sus comentarios y se quedan perplejos.

Me parece... que el tópico está en un estado de completa ineptitud y se ha chupado el problema de la mano.

 
Andrey F. Zelinsky:

El vendedor de 60 productos del mercado -- que ha escrito 80 tareas en freelance local -- que tiene un sitio web que anuncia la escritura de EAs -- y todo esto está lejos del primer año -- es el topicstarter.

Y de repente el topicstarter pregunta qué hacer con el stoplevelling cero y dice que los moderadores del mercado están revisando de alguna manera extraña los EA del mercado.

En contraste con sus comentarios, los usuarios del foro que tienen experiencia en el desarrollo, que tienen experiencia en poner productos en el mercado, leen sus comentarios y se quedan perplejos.

Me parece... que el tópico está en un estado de completa ineptitud y se ha chupado el problema de la mano.

¿Quizás sólo quiere comunicarse? ) programar bots es un asunto muy solitario
 
lilita bogachkova:

el código publicado aquí:

double point=SymbolInfoDouble(symToWorkmodify,SYMBOL_POINT);
int spread=(ask-bid)/point;

No se puede dividir por un punto de esa manera, el valor de la funciónSymbolInfoDouble(symToWorkmodify,SYMBOL_POINT) puede ser igual a cero.
Esto también se aplica a otras funciones del mercado.

Por ejemplo, el uso deAccountInfoInteger(ACCOUNT_LEVERAGE) en los cálculos en el campeonato de 2010 hizo que algunos EAs se bloquearan con un error dedivisión cero, cuando esta función devolvía 0 en OnInit.

 
Vladimir Gribachev:

Pregunta, ¿por qué poner un stop loss de 1 punto en el real?

Acabo de recordar... Una vez probé un algoritmo similar con un stop-loss mínimo, la comprobación fue básicamente la misma y no hubo errores, ni tampoco beneficios.

Mira la raíz del asunto. No se trata de por qué puse un stop loss de 1 pip. La cuestión es que el stop loss puede ser menor que el stop loss que oculta el broker y que se calcula en base a la amplitud del spread.

Para aclarar la esencia del problema, le muestro un Asesor Experto que utiliza su algoritmo para comprobar los stops:

#property strict
//--- input parameters
input int      i_slSize          = 10;
input int      i_tpSize          = 10;
input int      i_magicNumber     = 32847623;

int OnInit()
{
   Print("Величина стоплевел: ", MarketInfo(_Symbol,MODE_STOPLEVEL));
   return(INIT_SUCCEEDED);
}

int GetExpertOrderTicket()
{
   for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS))          
         continue;
         
      if (OrderSymbol() != Symbol())
         continue;   
         
      if (OrderMagicNumber() != i_magicNumber)
         continue;
         
      if (OrderType() == OP_BUY)
         return OrderTicket();
   }
   
   return -1;
}

void OnTick()
{
   int ticket = GetExpertOrderTicket();
   if (ticket < 0)
   {
      ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 30, 0.0, 0.0, NULL, i_magicNumber);
      return;
   }
      
   if (!OrderSelect(ticket, SELECT_BY_TICKET) || OrderCloseTime() != 0 || OrderStopLoss() > 0.0 || OrderTakeProfit() > 0.0)
      return;
      
   double SL=NormalizeDouble(OrderOpenPrice()-MathMax(i_slSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   double TP=NormalizeDouble(OrderOpenPrice()+MathMax(i_tpSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   
   bool result = OrderModify(ticket, 0.0, SL, TP, 0);
}

Resultado de la prueba de dicho Asesor Experto:

0       14:52:30.354    Expert CheckStopLevel EURUSD,H1: removed
0       14:52:30.372    Expert CheckStopLevel EURUSD,H1: loaded successfully
0       14:52:30.390    Tester: template 'D:\ForexDC\Alpari\templates\tester.tpl' applied
0       14:52:30.395    TestGenerator: current spread 10 used
2       14:52:32        2015.01.12 00:00  CheckStopLevel inputs: i_slSize=10; i_tpSize=10; i_magicNumber=32847623; 
0       14:52:32        2015.01.12 00:00  CheckStopLevel EURUSD,H1: Величина стоплевел: 0.0
2       14:52:32        2015.01.12 00:00  CheckStopLevel EURUSD,H1: open #1 buy 0.01 EURUSD at 1.18674 ok
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:36        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130

Como puede verse, el método no pasa la prueba elemental.

 
Ihor Herasko:

Llega a la raíz del asunto. No se trata de por qué debes poner un stoploss de 1 punto. Se trata de...

Si se llega a la raíz del asunto... hay que distinguir entre a) "engañar al comprador del promotor" y b) contar con que el comprador es un idiota. Son protecciones diferentes.

Ningún comprador en su sano juicio pondría una toma negativa y se detendría. Por lo tanto, comprobar "cómo reaccionará el EA ante un stop and take negativo" es contar con que el comprador es un idiota.

Lacreación de un EA en el que se impone una toma y un stop definidos por el usuario que aumentan permanentemente por un valor incomprensible de "2 spreads" - esto es "foolproofing" - sólo una protección contra un "tonto de un desarrollador".

Sobre todo si el promotor pone esa protección para pasar la moderación del mercado.

 
Andrey F. Zelinsky:

Si se mira la raíz del asunto, hay que distinguir entre a) "engañar al comprador promotor" y b) contar con que el comprador sea idiota. Son protecciones diferentes.

Ningún comprador en su sano juicio pondría una toma negativa y se detendría. Por lo tanto, comprobar "cómo reaccionará el EA ante un stop and take negativo" es contar con que el comprador es un idiota.

Crear un EA en el que la toma y el stop definidos por el usuario se ven obligados a aumentar continuamente en una cantidad incomprensible de "2 spreads" es "a prueba de tontos", sólo a prueba de tontos por no comprar el producto del "desarrollador de tontos".

¿Crees que hay mucha gente cuerda aquí? :) Especialmente entre los compradores.
 
Ihor Herasko:

Llega a la raíz del asunto. No se trata de por qué debes poner un stop loss de 1 pip. Se trata de que el stop loss puede ser menor que el stop loss, que está oculto por el broker y se calcula en base a la amplitud del spread.

Para aclarar la esencia del problema, le muestro un Asesor Experto que utiliza su algoritmo para comprobar los stops:

Resultado de la prueba de dicho Asesor Experto:

Como se puede ver, el método no pasa la comprobación elemental.

Si es tan malo, aquí está

#property strict
//--- input parameters
input int      i_slSize          = 10;
input int      i_tpSize          = 10;
input int      i_magicNumber     = 32847623;

int OnInit()
{
   Print("Величина стоплевел: ", MarketInfo(_Symbol,MODE_STOPLEVEL));
   return(INIT_SUCCEEDED);
}

int GetExpertOrderTicket()
{
   for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS))          
         continue;
         
      if (OrderSymbol() != Symbol())
         continue;   
         
      if (OrderMagicNumber() != i_magicNumber)
         continue;
         
      if (OrderType() == OP_BUY)
         return OrderTicket();
   }
   
   return -1;
}

void OnTick()
{
   int ticket = GetExpertOrderTicket();
   if (ticket < 0)
   {
      ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 30, 0.0, 0.0, NULL, i_magicNumber);
      return;
   }
      
   if (!OrderSelect(ticket, SELECT_BY_TICKET) || OrderCloseTime() != 0 || OrderStopLoss() > 0.0 || OrderTakeProfit() > 0.0)
      return;
      
   double SL=NormalizeDouble(Bid-MathMax(i_slSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   double TP=NormalizeDouble(Bid+MathMax(i_tpSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   
   bool result = OrderModify(ticket, 0.0, SL, TP, 0);
}

registro

2016.03.16 15:09:35.611 GBPUSD,H1: 94 tick events (1095 bars, 286082 bar states) processed in 0:00:06.037 (total time 0:00:10.109)
2016.03.16 15:09:35.611 2016.03.01 00:12  Tester: order #14  is closed
2016.03.16 15:09:35.588 2016.03.01 00:12  Tester: stop button pressed
2016.03.16 15:09:35.547 2016.03.01 00:12  abcd GBPUSD,H1: modify #14  buy 0.01 GBPUSD at 1.39165 sl: 1.39130 tp: 1.39154 ok
2016.03.16 15:09:35.483 2016.03.01 00:12  abcd GBPUSD,H1: open #14  buy 0.01 GBPUSD at 1.39165 ok
2016.03.16 15:09:35.483 2016.03.01 00:12  Tester: take profit #13  at 1.39144 (1.39144 / 1.39165)
2016.03.16 15:09:35.099 2016.03.01 00:12  abcd GBPUSD,H1: modify #13  buy 0.01 GBPUSD at 1.39156 sl: 1.39120 tp: 1.39144 ok
2016.03.16 15:09:35.035 2016.03.01 00:11  abcd GBPUSD,H1: open #13  buy 0.01 GBPUSD at 1.39156 ok
2016.03.16 15:09:35.035 2016.03.01 00:11  Tester: stop loss #12  at 1.39148 (1.39135 / 1.39156)
2016.03.16 15:09:34.971 2016.03.01 00:11  abcd GBPUSD,H1: modify #12  buy 0.01 GBPUSD at 1.39171 sl: 1.39148 tp: 1.39172 ok
2016.03.16 15:09:34.907 2016.03.01 00:11  abcd GBPUSD,H1: open #12  buy 0.01 GBPUSD at 1.39171 ok
2016.03.16 15:09:34.907 2016.03.01 00:11  Tester: take profit #11  at 1.39143 (1.39150 / 1.39171)
2016.03.16 15:09:34.267 2016.03.01 00:10  abcd GBPUSD,H1: modify #11  buy 0.01 GBPUSD at 1.39147 sl: 1.39119 tp: 1.39143 ok
2016.03.16 15:09:34.203 2016.03.01 00:10  abcd GBPUSD,H1: open #11  buy 0.01 GBPUSD at 1.39147 ok
2016.03.16 15:09:34.203 2016.03.01 00:10  Tester: stop loss #10  at 1.39132 (1.39126 / 1.39147)
2016.03.16 15:09:33.947 2016.03.01 00:10  abcd GBPUSD,H1: modify #10  buy 0.01 GBPUSD at 1.39174 sl: 1.39132 tp: 1.39156 ok
2016.03.16 15:09:33.883 2016.03.01 00:10  abcd GBPUSD,H1: open #10  buy 0.01 GBPUSD at 1.39174 ok
2016.03.16 15:09:33.883 2016.03.01 00:10  Tester: stop loss #9  at 1.39157 (1.39153 / 1.39174)
2016.03.16 15:09:33.435 2016.03.01 00:09  abcd GBPUSD,H1: modify #9  buy 0.01 GBPUSD at 1.39186 sl: 1.39157 tp: 1.39181 ok
2016.03.16 15:09:33.371 2016.03.01 00:09  abcd GBPUSD,H1: open #9  buy 0.01 GBPUSD at 1.39186 ok
2016.03.16 15:09:33.371 2016.03.01 00:09  Tester: take profit #8  at 1.39163 (1.39165 / 1.39186)
2016.03.16 15:09:32.603 2016.03.01 00:06  abcd GBPUSD,H1: modify #8  buy 0.01 GBPUSD at 1.39173 sl: 1.39139 tp: 1.39163 ok
2016.03.16 15:09:32.539 2016.03.01 00:06  abcd GBPUSD,H1: open #8  buy 0.01 GBPUSD at 1.39173 ok
2016.03.16 15:09:32.539 2016.03.01 00:06  Tester: take profit #7  at 1.39152 (1.39152 / 1.39173)
2016.03.16 15:09:32.346 2016.03.01 00:06  abcd GBPUSD,H1: modify #7  buy 0.01 GBPUSD at 1.39173 sl: 1.39128 tp: 1.39152 ok
2016.03.16 15:09:32.282 2016.03.01 00:06  abcd GBPUSD,H1: open #7  buy 0.01 GBPUSD at 1.39173 ok
2016.03.16 15:09:32.282 2016.03.01 00:06  Tester: take profit #6  at 1.39148 (1.39152 / 1.39173)
2016.03.16 15:09:32.025 2016.03.01 00:05  abcd GBPUSD,H1: modify #6  buy 0.01 GBPUSD at 1.39155 sl: 1.39124 tp: 1.39148 ok
2016.03.16 15:09:31.961 2016.03.01 00:05  abcd GBPUSD,H1: open #6  buy 0.01 GBPUSD at 1.39155 ok
2016.03.16 15:09:31.961 2016.03.01 00:05  Tester: stop loss #5  at 1.39140 (1.39134 / 1.39155)
2016.03.16 15:09:31.249 2016.03.01 00:04  abcd GBPUSD,H1: modify #5  buy 0.01 GBPUSD at 1.39170 sl: 1.39140 tp: 1.39164 ok
2016.03.16 15:09:31.185 2016.03.01 00:04  abcd GBPUSD,H1: open #5  buy 0.01 GBPUSD at 1.39170 ok
2016.03.16 15:09:31.185 2016.03.01 00:04  Tester: take profit #4  at 1.39147 (1.39149 / 1.39170)
2016.03.16 15:09:30.801 2016.03.01 00:02  abcd GBPUSD,H1: modify #4  buy 0.01 GBPUSD at 1.39159 sl: 1.39123 tp: 1.39147 ok
2016.03.16 15:09:30.737 2016.03.01 00:01  abcd GBPUSD,H1: open #4  buy 0.01 GBPUSD at 1.39159 ok
2016.03.16 15:09:30.737 2016.03.01 00:01  Tester: take profit #3  at 1.39136 (1.39138 / 1.39159)
2016.03.16 15:09:30.481 2016.03.01 00:01  abcd GBPUSD,H1: modify #3  buy 0.01 GBPUSD at 1.39143 sl: 1.39112 tp: 1.39136 ok
2016.03.16 15:09:30.417 2016.03.01 00:01  abcd GBPUSD,H1: open #3  buy 0.01 GBPUSD at 1.39143 ok
2016.03.16 15:09:30.417 2016.03.01 00:01  Tester: stop loss #2  at 1.39126 (1.39122 / 1.39143)
2016.03.16 15:09:30.225 2016.03.01 00:00  abcd GBPUSD,H1: modify #2  buy 0.01 GBPUSD at 1.39156 sl: 1.39126 tp: 1.39150 ok
2016.03.16 15:09:30.161 2016.03.01 00:00  abcd GBPUSD,H1: open #2  buy 0.01 GBPUSD at 1.39156 ok
2016.03.16 15:09:30.161 2016.03.01 00:00  Tester: take profit #1  at 1.39135 (1.39135 / 1.39156)
2016.03.16 15:09:29.647 2016.03.01 00:00  abcd GBPUSD,H1: modify #1  buy 0.01 GBPUSD at 1.39148 sl: 1.39111 tp: 1.39135 ok
2016.03.16 15:09:29.583 2016.03.01 00:00  abcd GBPUSD,H1: open #1  buy 0.01 GBPUSD at 1.39148 ok
2016.03.16 15:09:29.583 2016.03.01 00:00  abcd GBPUSD,H1: Величина стоплевел: 12.0
2016.03.16 15:09:29.574 2016.03.01 00:00  abcd inputs: i_slSize=10; i_tpSize=10; i_magicNumber=32847623; 
2016.03.16 15:09:27.513 TestGenerator: current spread 21 used

y sin problemas.

Pero si es tan malo, como señala acertadamenteAndrey F. Zelinsky

Si quieres empeorar un EA sólo para ir a la moderación del Mercado, eso es inadecuado.

Si mi EA no ha sido revisado por el error 130 y añade +1 a las paradas. Pero eso es una tontería.
 
Maxim Dmitrievsky:
¿Crees que hay mucha gente cuerda aquí? :) Especialmente entre los compradores.

Creo que si investigas, hay más compradores cuerdos que promotores cuerdos.

El comprador puede equivocarse. Se puede hacer entender al cliente. Se les puede persuadir.

Pero si el desarrollador tiene un problema con el sentido común, no se puede resolver.

Deteriorar la funcionalidad del Asesor Experto sólo para ir al Mercado - esto es inadecuado.

Razón de la queja: