Experts: Multik

 

Multik:

Conseiller multidevises.

Multik

Author: Andrey Kornishkin

 

Allons-nous normaliser toutes les paires en fonction de l'instrument actuel ?

dsma2 = NormalizeDouble(SMA[2] - SMA[3], _Digits);      // MA au site 2-3
dsma1 = NormalizeDouble(SMA[1] - SMA[2], _Digits);      // MA sur le site 1-2
 
Valmars:

Quoi, allons-nous normaliser toutes les paires en fonction de l'instrument actuel ?


Oui, il y a là une erreur. Par ailleurs, la fonction de définition d'une nouvelle barre peut être mise en œuvre sans utiliser la fonction de copie temporelle.
 
Valmars:

Allons-nous normaliser toutes les paires en fonction de l'instrument actuel ?


Et comment l'implémenter correctement pour qu'il n'y ait pas d'avertissement ?

Dans la version originale, c'est comme ça :

     int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS) + 4;
     dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_);      // MA au site 2-3
     dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_);      // MA sur le site 1-2
[Supprimé]  
AM2:

Quelle est la bonne façon de le mettre en œuvre sans avertissement ?

Dans la version originale, c'est comme ça :

Qu'est-ce que +4 a à voir avec ça ? C'est ainsi que cela devrait être logiquement

int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS);
dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_); // MA au site 2-3
dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_); // MA sur le site 1-2
 
Interesting:

Quel est le rapport avec +4 ? C'est censé être logique.

C'est également ainsi que se présente l'avertissement :

perte possible de données en raison de la conversion de type Multik.mq5 218 18

 
AM2:

C'est également le cas pour l'avertissement :

perte possible de données en raison de la conversion de type Multik.mq5 218 18

pour éviter les avertissements, vous devez effectuer la conversion comme suit

int Digits_ = (int)SymbolInfoInteger(Symbol_, SYMBOL_DIGITS);
 

Beau travail, mais le multi-instrument ne perd-il pas son sens lorsque vous traitez des paires corrélées avec les mêmes configurations ? Je m'attendrais à ce que leurs baisses se produisent à peu près en même temps et cela pourrait être un problème. Malheureusement, toutes les paires de devises sont tellement liées que cela peut être inévitable. En fait, je trade également les paires EUR/USD GBP/USD ensemble, mais j'utilise un suiveur de tendance pour l'une et un EA de type retournement, hauts et bas pour l'autre.

 
sergey1294:

Si vous ne voulez pas recevoir d'avertissements, vous devez faire la conversion comme ceci.

Merci, ça marche !
 

request.volume = Money_M() ;

Cet EA est un excellent exemple de code organisé et comporte d'excellents commentaires. J'ai cependant une question concernant votre fonction de taille de lot appelée Money_M(). Quel est l'arbre de décision derrière cette fonction et où se trouve-t-il ?

J'ai essayé de chercher sur le site de support mais je n'ai trouvé aucune référence et elle ne semble pas être liée à une classe associée.

[Supprimé]  
bdwezensky:

request.volume = Money_M() ;

Cet EA est un excellent exemple de code organisé et comporte d'excellents commentaires. J'ai cependant une question concernant votre fonction de taille de lot appelée Money_M(). Où et comment se situe l'arbre de décision derrière cette fonction ?

J'ai essayé de chercher sur le site de support mais je n'ai trouvé aucune référence et elle ne semble pas être liée à une classe associée.

double Money_M()
  {
   double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10;
   Lots=MathMin(5,MathMax(0.1,Lots));
   if(Lots<0.1)
      Lots=NormalizeDouble(Lots,2);
   else
     {
      if(Lots<1) Lots=NormalizeDouble(Lots,1);
      else       Lots=NormalizeDouble(Lots,0);
     }
   return(Lots);
  }

Cette fonction est utilisée pour calculer la taille des lots de négociation.

double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10;

Dans cette chaîne, la taille calculée des lots de négociation. Le calcul est effectué sur les fonds libres(ACCOUNT_FREEMARGIN). Risque = 10% des fonds disponibles.

Lots=MathMin(5,MathMax(0.1,Lots));
Dans cette ligne est exécutée la normalisation des lots de transaction. 0.1 <= Lot <= 5.0