Questions des débutants MQL4 MT4 MetaTrader 4 - page 133

 
Aliaksandr Kryvanos:

Salut !

Quelqu'un peut-il suggérer un remplacement analogue de MaxLotCheck() de MT5 pour MT4, merci.

Il n'y a pas de fonction proprement dite. Vous devez écrire le vôtre. Avec tous les contrôles, cela devrait tenir en 10 à 20 lignes.

 
Ihor Herasko:

Il n'y a pas de fonction proprement dite. Vous devez écrire le vôtre. Avec tous les contrôles, il devrait tenir en 10 à 20 lignes.

OK, mais la formule elle-même ?

 
Aliaksandr Kryvanos:

OK, mais voici la formule elle-même ?

Regardons la source :

//+------------------------------------------------------------------+
//| Access functions OrderCalcMargin(...).                           |
//| INPUT:  name            - symbol name,                           |
//|         trade_operation - trade operation,                       |
//|         price           - price of the opening position,         |
//|         percent         - percent of available margin [1-100%].   |
//+------------------------------------------------------------------+
double CAccountInfo::MaxLotCheck(const string symbol,const ENUM_ORDER_TYPE trade_operation,
                                 const double price,const double percent) const
  {
   double margin=0.0;
//--- checks
   if(symbol=="" || price<=0.0 || percent<1 || percent>100)
     {
      Print("CAccountInfo::MaxLotCheck invalid parameters");
      return(0.0);
     }
//--- calculate margin requirements for 1 lot
   if(!OrderCalcMargin(trade_operation,symbol,1.0,price,margin) || margin<0.0)
     {
      Print("CAccountInfo::MaxLotCheck margin calculation failed");
      return(0.0);
     }
//---
   if(margin==0.0) // for pending orders
      return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX));
//--- calculate maximum volume
   double volume=NormalizeDouble(FreeMargin()*percent/100.0/margin,2);
//--- normalize and check limits
   double stepvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   if(stepvol>0.0)
      volume=stepvol*MathFloor(volume/stepvol);
//---
   double minvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(volume<minvol)
      volume=0.0;
//---
   double maxvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   if(volume>maxvol)
      volume=maxvol;
//--- return volume
   return(volume);
  }
ENUM_ORDER_TYPE et OrderCalcMargin doivent être remplacés ici.
 
Miam) la source... merci
 

Toujours pas clair....

margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED)

и

double margin;

OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),margin);


retourner différents nombres de marge pour ouvrir 1 lot

 
Aliaksandr Kryvanos:

Toujours pas clair....

margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED)

и

double margin;

OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),margin);


retourner différents nombres de marge pour l'ouverture d'un lot

Vous comparez manifestement sur des terminaux différents ;)) En haut, c'est MT4, en bas, c'est MT5. Les serveurs sont donc différents, les conditions commerciales sont différentes. La chose la plus simple est un effet de levier différent.

Qu'avez-vous réellement obtenu, quelles étaient les valeurs ?

 

Oui, c'est vrai, l'effet de levier est différent, sur l'un 1/300, sur l'autre 1/2000.

merci

 

Bonjour à tous !

Mon EA utilise une recherche en plusieurs étapes pour un point d'entrée, pour cela il vérifie d'abord l'historique des signaux depuis le début, puis travaille en temps réel. Ainsi, dans le testeur de stratégie, tout fonctionne bien avec l'historique, mais lorsque je l'exécute en temps réel, il n'analyse pas correctement l'historique et manque des signaux, quel pourrait être le problème ?

Peut-être qu'il y a une réponse évidente, parce que le fragment de code est assez gros pour être affiché ici, donc je ne donne pas encore le code.

 
ArturR:

Bonjour à tous !

Mon EA utilise une recherche en plusieurs étapes pour un point d'entrée, pour cela il vérifie d'abord l'historique des signaux depuis le début, puis travaille en temps réel. Ainsi, dans le testeur de stratégie, tout fonctionne bien avec l'historique, mais lorsque je l'exécute en temps réel, il n'analyse pas correctement l'historique et manque des signaux, quel pourrait être le problème ?

Peut-être qu'il y a une réponse évidente, parce que le fragment de code est assez gros pour être affiché ici, donc je ne donne pas encore le code.

Faites le débogage morceau par morceau. Séparez l'analyse de l'historique dans le script. Afficher des informations détaillées avec Alert() : d'abord le nombre de barres dans l'historique, la date de début et de fin, ... et ensuite le processus de numérisation. Il peut être plus pratique d'écrire tout cela dans un fichier
 
STARIJ:
Faites le débogage étape par étape. Séparez l'analyse de l'historique en un script. Produire à l'aide de Alert() les informations détaillées : tout d'abord, le nombre de barres dans l'historique, la date de début et de fin, ... et ensuite le processus de numérisation. Il peut être plus pratique d'écrire tout cela dans un fichier

Merci pour le conseil, je vais lire comment faire.

J'ai une autre question, lorsque je lance le débogage en temps réel, Metatrader4 l'exécute toujours sur le CHF, quelqu'un sait-il ce qu'il faut ajuster pour qu'il fonctionne sur la paire dont j'ai besoin ?

Ce sont les valeurs des indicateurs pour d'autres périodes qui ne sont apparemment pas prises en compte par le testeur. J'ai aussi trouvé le moyen de faire la bonne paire. Merci de votre participation ;)