Discussion de l'article "Limitations et vérifications dans Expert Advisors" - page 2

 

Nous vous remercions.

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

SYMBOL_VOLUME_LIMIT' - identifiant non déclaré.............

'SymbolInfoDouble' - aucune des surcharges ne peut être appliquée à l'appel de la fonction.............

Est-ce que c'est juste moi ?

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

SYMBOL_VOLUME_LIMIT' - identifiant non déclaré.............

'SymbolInfoDouble' - aucune des surcharges ne peut être appliquée à l'appel de la fonction.............

Est-ce que c'est juste moi ?

Dès qu'une nouvelle version sera publiée, tout redeviendra normal. Nous attendons cette version.
 
Rosh:

Pouvez-vous faire cela ?

lot_max=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
 

Encore une question sur la fonction SeriesInfoInteger().

Lors de la création de la rubrique"AccountInfo... Pertinence de l'information", j'ai appris qu'il y a des fonctions qui utilisent des données "mises en cache dans l'environnement du logiciel" et d'autres qui ont toujours un "accès direct aux données réelles".

A quelle catégorie de fonctions appartient la fonction SeriesInfoInteger()?

 

Le code suivant est utilisé dans la fonction 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);

}

Mais il est plus correct :

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

}

Parce que le pas minimum de changement de volume doit être compté à partir de la valeur minimum.

 

Et peut-être que l'extrait de code

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

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

devrait être remplacé par :

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

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

[Supprimé]  
Les fichiers de code source joints et les inserts de code source dans le code HTML sont désormais entièrement traduits en portugais.
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:

En raison des modifications apportées à MQL5, le volume global maximal autorisé pour un symbole peut être obtenu comme suit :

N'utilisez pas l'ancienne variante ! Elle se présentait comme suit :

L'article a été corrigé et le nouveau code expert Check_Order_And_Volume_Limits.mq5 y a été joint.

Cher administrateur

J'essaie d'utiliser cette fonction mais elle renvoie 0 dans tous les cas.

Mon MT5 build est 2280

 
double orders_volume_on_symbol=PendingsVolume(symbol);


donne une erreur, aucune fonction de ce type

Et après avoir modifié la fonction pour ne pas inclure les ordres en attente, elle donne 0


double NewOrderAllowedVolume(string symbol)
  {
   double allowed_volume=0;
//--- obtenir la limitation du volume maximal d'une commande
   double symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
//--- obtenir la limitation du volume par un symbole
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

//--- obtenir le volume de la position ouverte d'un symbole
   double opened_volume=PositionVolume(symbol);
   if(opened_volume>=0)
     {
      //--- si nous avons déjà utilisé le volume disponible
      if(max_volume-opened_volume<=0)
         return(0);

      //--- le volume de la position ouverte ne dépasse pas max_volume
      //double orders_volume_on_symbol=PendingsVolume(symbol) ;
      //allowed_volume=max_volume-opened_volume-orders_volume_on_symbol ;
      allowed_volume=max_volume-opened_volume;
      if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume;
     }
   return(allowed_volume);
  }

C'est parce que max_volume est 0 et open_volume est 0 ;

Pourquoi le volume max est 0 s'il n'y a pas de positions ouvertes ?

Version 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