Mercado: no hay operaciones comerciales

 

¿Puede alguien explicar por qué el mercado devuelve este error? Todos los controles de la EA están en marcha...

Entiendo la esencia, por supuesto: no hay oficios, pero ¿cuál es la razón?

Ограничения и проверки в экспертах
Ограничения и проверки в экспертах
  • www.mql5.com
При создании алгоритма для автоматической торговли необходимо не только уметь обрабатывать цены с целью выработки торговых сигналов, но и зачастую требуется получать множество вспомогательной информации об ограничениях, накладываемых на работу эксперта.  В этой статье будет рассказано о том как: получить информацию о торговых сессиях...
 
  • Por ejemplo, si el lote en la configuración es 0, el EA no puede abrir una operación porque el lote es 0.
  • Limitación del spread en el Expert Advisor, no abre posiciones.
  • Realmente no hay señales para abrir posiciones en el período de prueba.

Y las comprobaciones sólo las ves tú, tu código no se adjunta.

Ejemplos por los miles....

 
Vladislav Andruschenko:
  • Por ejemplo, si el lote en la configuración es 0, el EA no puede abrir una operación porque el lote es 0.
  • Limitación del spread en el Expert Advisor, no abre posiciones.
  • Realmente no hay señales para abrir posiciones en el período de prueba.

Y las comprobaciones sólo las ves tú, tu código no se adjunta.

Ejemplos por los miles....

La validación del lote está ahí, las señales están definitivamente ahí - es un netminder, no hay límites de propagación...
 
Vladislav Andruschenko:
  • Por ejemplo, si el lote en la configuración es 0, el EA no puede abrir una operación porque el lote es 0.
  • Limitación del spread en el Expert Advisor, no abre posiciones.
  • Realmente no hay señales para abrir posiciones en el período de prueba.

Y las comprobaciones sólo las ves tú, tu código no se adjunta.

Ejemplos por los miles....

Los controles de corrección del lote están ahí, las señales están definitivamente ahí - es un netminder, no hay límites de propagación... No entiendo nada...
 
Maksim Neimerik:
La validación del lote está ahí, las señales están definitivamente ahí - es un netminder, sin limitaciones de propagación...

pues entonces hay 100500 opciones más.

el nettler está pasando tranquilamente la prueba de mercado.

 
Vladislav Andruschenko:

pues entonces hay 100500 opciones más.

el nettler está pasando tranquilamente la prueba de mercado.

Estoy de acuerdo, pero de alguna manera no en este caso:)
 
Maksim Neimerik:
Estoy de acuerdo, pero por alguna razón no este:)


Está prohibido hablar aquí de los bots del mercado. Y no lo publicará en el dominio público. Y ya hay 100500 temas con ese nombre, así como las razones de tal tema.

 
Maksim Neimerik:

¿Puede alguien explicar por qué el mercado devuelve este error? Todos los controles de la EA están en marcha...

Entiendo la esencia, por supuesto: no hay intercambios, pero ¿por qué razón?

¿Es tan difícil utilizar la búsqueda del sitio y crear 100500 copias de la rama?

https://www.mql5.com/ru/search#!keyword=no%20trading%20operations&method=2&module=mql5_module_forum

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 

Sólo quiero discutir el código:

double CheckVolumeValue(double volume)
{
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
   {
      Print("Volume is less than the minimum");
      return(min_volume);
   }

   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
   {
      Print("Volume is greater than the maximum");
      return(max_volume);
   }

   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
   {
      Print("Wrong lot size");
      return(min_volume);
   }
     
   if(volume<MarketInfo(Symbol(),MODE_MINLOT))
   {
      Print("Trade stop invalid lot size");
      Comment("Trade stop invalid lot size"); 
      return(MarketInfo(Symbol(),MODE_MINLOT));
   }
   return(volume);
}

He modificado la comprobación estándar para que devuelva el lote correcto en lugar de un error...

Aquí llamamos a esta función:

   if(!OrderSend(Symbol(),cmd,CheckVolumeValue(Lot),NormalizeDouble(priceStep,Digits()),Slippage,0,0,"",magic,0))

¡En mi probador y en mi cuenta real este robot funciona bien! Incluso cuando se introduce un lote incorrecto, sigue devolviendo el correcto y funciona más...

¡Y ya sabes donde vuelve el error 4051! ¡Esto es en general...!

 
Maksim Neimerik:

Sólo quiero discutir el código:

He modificado la comprobación estándar para que devuelva el lote correcto en lugar de un error...

Aquí llamamos a esta función:

¡En mi probador y en mi cuenta real este robot funciona bien! Incluso cuando se introduce un lote incorrecto, sigue devolviendo el correcto y funciona más...

¡Y ya sabes donde vuelve el error 4051! ¡Esto es en general...!

¿No está Lot normalizado?
 
Maksim Neimerik:

Sólo quiero discutir el código:

He modificado la comprobación estándar para que devuelva el lote correcto en lugar de un error...

Aquí llamamos a esta función:

¡En mi probador y en mi cuenta real este robot funciona bien! Incluso cuando se introduce un lote incorrecto, sigue devolviendo el correcto y funciona más...

¡Y ya sabes donde vuelve el error 4051! ¡Esto es en general...!

double CheckVolumeValue(double volume)
{
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
   {
      Print("Volume is less than the minimum");
      return(min_volume);
   }

   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
   {
      Print("Volume is greater than the maximum");
      return(max_volume);
   }

   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
   {
      Print("Wrong lot size");
      return(min_volume);
   }
     
   if(volume<MarketInfo(Symbol(),MODE_MINLOT))
   {
      Print("Trade stop invalid lot size");
      Comment("Trade stop invalid lot size"); 
      return(MarketInfo(Symbol(),MODE_MINLOT));
   }
   return(volume);
}
Y nunca llegará a este punto