Discusión sobre el artículo "Limitaciones y verificaciones en Expert Advisors" - página 2

 

Gracias, señor.

 
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

SYMBOL_VOLUME_LIMIT' - identificador no declarado.............

SymbolInfoDouble' - no se puede aplicar ninguna de las sobrecargas a la función call.............

¿Sólo me pasa a mí?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
gumgum:

SYMBOL_VOLUME_LIMIT' - identificador no declarado.............

SymbolInfoDouble' - no se puede aplicar ninguna de las sobrecargas a la llamada de función.............

¿Sólo me pasa a mí?

En cuanto se publique una nueva compilación, todo volverá a la normalidad. Estamos a la espera de la compilación.
 
Rosh:

¿Puedes hacerlo?

lot_max=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
 

Una pregunta más sobre la función SeriesInfoInteger().

Al crear el tema"AccountInfo... Relevancia de la información", aprendí que hay funciones que utilizan datos "almacenados en caché en el entorno de software" y hay funciones que siempre tienen "acceso directo a los datos reales".

¿A qué categoría de funciones pertenece la función SeriesInfoInteger()?

 

El siguiente código se utiliza en la función CheckVolumeValue :

int ratio=(int)MathRound(volume/volume_step);

if(MathAbs(ratio*volume_step-volume)>0.0000001)

{

description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",

volume_step,ratio*volume_step);

return(false);

}

Pero es más correcto:

int ratio = (int)MathRound((volume-min_volume)/volume_step);

if (MathAbs(ratio*volume_step+min_volume-volume)>0.0000001)

{

description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",

  volume_step,ratio*volume_step+min_volume);

return(false);

}

Porque el paso mínimo de cambio de volumen debe contarse a partir del valor mínimo.

 

Y quizás el fragmento de código

//--- вычислим значение маржи

bool check=OrderCalcMargin(type,Symbol(),lots,last_tick.ask,margin);

debería sustituirse por:

//--- вычислим значение маржи

double price = (type == ORDER_TYPE_BUY || type == ORDER_TYPE_BUY_LIMIT || type == ORDER_TYPE_BUY_STOP || type == ORDER_TYPE_BUY_STOP_LIMIT) ? last_tick.ask : last_tick.bid;

bool check=OrderCalcMargin(type,Symbol(),lots,price,margin);

[Eliminado]  
Los archivos de código fuente adjuntos y los insertos de código fuente en código HTML están ahora completamente traducidos al portugués para su comodidad.
MQL5.community - User Memo
MQL5.community - User Memo
  • 2010.02.25
  • MetaQuotes Software Corp.
  • www.mql5.com
You have just registered and most likely you have questions such as, "How do I insert a picture to my a message?" "How do I format my MQL5 source code?" "Where are my personal messages kept?" You may have many other questions. In this article, we have prepared some hands-on tips that will help you get accustomed in MQL5.community and take full advantage of its available features.
 
Rashid Umarov:

Debido a los cambios en MQL5, ahora el volumen global máximo permitido para un símbolo se puede obtener de la siguiente manera:

¡No utilice la variante antigua! Era así:

El artículo ha sido corregido y se le ha adjuntado el nuevo código experto Check_Order_And_Volume_Limits.mq5.

Estimado Admin

Trato de usar esta función pero devuelve 0 en todos los casos.

Mi MT5 build es 2280

 
double orders_volume_on_symbol=PendingsVolume(symbol);


da error, no existe tal función

Y después de modificar la función para no incluir órdenes pendientes, da 0


double NewOrderAllowedVolume(string symbol)
  {
   double allowed_volume=0;
//--- obtener la limitación del volumen máximo de una orden
   double symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
//--- obtener la limitación de volumen por un símbolo
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

//--- obtener el volumen de posición abierta por un símbolo
   double opened_volume=PositionVolume(symbol);
   if(opened_volume>=0)
     {
      //--- si ya hemos utilizado el volumen disponible
      if(max_volume-opened_volume<=0)
         return(0);

      //--- el volumen de la posición abierta no supera max_volume
      //double pedidos_volumen_sobre_símbolo=PendingsVolume(símbolo);
      //volumen_permitido=volumen_max_abierto_volumen_pedidos_volumen_en_símbolo;
      allowed_volume=max_volume-opened_volume;
      if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume;
     }
   return(allowed_volume);
  }

Es porque max_volume es 0 y opened_volume es 0;

¿Por qué el volumen máximo es 0 si no hay posiciones abiertas?

Construir 2715

Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
  • www.mql5.com
Predefined Macro Substitutions - Named Constants - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5