[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 587

 
OK, si ce n'est pas le cas, aidez-moi à régler ça ce soir.
 
Veuillez me dire s'il est possible d'utiliser la valeur du double, qui est le résultat du calcul, comme une valeur int de substitution pour d'autres calculs.
Exemple :
   ATR_Din=iATR(NULL,PERIOD_M5,14,1);
   Din_Per210= MathRound(6000*ATR_Din+210);
   Din_Per5  = MathRound(6000*ATR_Din+5);
   
   MA210_DIN  =iMA(NULL,PERIOD_M5,Din_Per210,0,MODE_SMA,PRICE_CLOSE,1);
   MA5_DIN    =iMA(NULL,PERIOD_H1,Din_Per5,0,MODE_SMA,PRICE_CLOSE,1);
   
Ici mes variables sélectionnées sont de type double, mais dans iMA leur valeur est utilisée là où une valeur int est nécessaire (comme une période de MA).
La question est la suivante : cette utilisation est-elle correcte ou est-il nécessaire de convertir les valeurs en type int ?
 
Bonjour à tous, pourriez-vous m'indiquer s'il existe un script permettant d'exécuter un test expert sur chacun des résultats d'optimisation et de sauvegarder chaque résultat de test dans un fichier séparé (rapport htm) ?
 
Craft:
Il y a t-il un exemple fonctionnel ou un lien ?
Donnez-moi le code ou donnez-moi une tâche et nous le corrigerons.
 
artmedia70:
Veuillez me dire s'il est possible d'utiliser la valeur du double, qui est le résultat du calcul, comme une valeur int de substitution pour d'autres calculs.
Exemple :
Ici, mes variables sélectionnées sont de type double, mais dans iMA , leur valeur est utilisée là où une valeur int est nécessaire (comme la période de la MA).
Ma question est donc la suivante : cette utilisation est-elle correcte ou une conversion des valeurs en type int est-elle nécessaire ?
La conversion se fait automatiquement, en coupant simplement la partie fractionnée. La seule limitation que j'ai rencontrée pour une telle utilisation est que le double ne peut pas être placé dans l'index du tableau.
 
alsu:
La conversion se fait automatiquement, en coupant simplement la partie fractionnée. La seule limitation à cette utilisation que j'ai vue est que le double ne peut pas être placé dans l'index du tableau.
Merci, c'est rassurant... :)
Une dernière question :
   MA200_DIN =iMA(NULL,PERIOD_M5,Din_Per200,0,MODE_SMA,PRICE_CLOSE,1);
   MA200_UP  =MA200_DIN+20*pt;
   MA200_DN  =MA200_DIN-20*pt;
   
   MA5_DIN  =iMA(NULL,PERIOD_H1,Din_Per5,0,MODE_SMA,PRICE_CLOSE,1);
   MA5_UP   =MA5_DIN+20*pt;
   MA5_DN   =MA5_DIN-20*pt;
Constructions
MA200_UP=MA200_DIN+20*pt; 
MA200_DN=MA200_DIN-20*pt; и 
MA5_UP=MA5_DIN+20*pt; 
MA5_DN=MA5_DIN-20*pt;
ne fonctionnent pas. Lorsque l'on affiche leurs valeurs dans le graphique, elles ont toutes la même valeur, par ex :
1,4118 pour MA200_DIN, MA200_UP, MA200_DN et
1.4106 pour MA5_DIN, MA5_UP, MA5_DN.
Il s'avère que les formules de calcul des niveaux +20 et -20 points ne fonctionnent pas.
Qu'est-ce que je fais de mal ?
 
Que représente pt ? Essayez de l'afficher avec NormalizeDouble().
 
OK, merci, j'ai compris... J'ai défini pt=Point ; déjà après le calcul des valeurs...
Comme l'a dit Matroskin : Vous êtes un idiot... :)
 
alsu:
Donnez-nous un code ou définissez une tâche et nous la corrigerons
.

Dans WelsLab, l'analogue du problème ressemble à ceci :

MyATR = SMA.Series((((High-Low)/Low), PerB)[i-1] ;

si (BuyAtStop(i, (Open[i] + Open[i]*MyATR), "") ;

c'est-à-dire que lorsqu'une barre est ouverte, une position Stop est placée où le prix Open [i] de la barre actuelle + le trigger (le même prix Open multiplié par MyATR calculé pour la période PerB sur les barres fermées [i-1]) est ouvert une fois si le niveau spécifié est atteint.

Celui-ci montre ce que je veux obtenir sur mql4 en utilisant WellLab comme exemple.

J'ai étudié les matériaux du site et j'ai essayé d'en faire une analogie.

        MyATR = ((High[0] - Low[0])/Low[0]);
	 BT = Open[0] + Open[0]*iMAOnArray(MyATR ,0,PerB,0,MODE_SMA,1);
        ST = Open[0] - Open[0]*iMAOnArray((MyATR ,0,PerS,0,MODE_SMA,1);

   if (Ask >=  BT)                       // Если разница между
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (Bid <= ST)                       // Если разница между
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Résultat : les ordres s'accumulent. Veuillez indiquer quelle condition doit être ajoutée (ou modifiée) pour que les ordres soient exécutés une fois à un niveau spécifié.

 

Note : le premier paramètre de la fonction iMAOnArray doit être un tableau - et vous avez le scalaire MyATR. Pour bien faire les choses, vous devez :

1. déclarer le double MyATR[] ;

2. définissez la taille du tableau à ArrayResize(MyATR,PerB) ;

3. remplissez le tableau for(i=1;i<=PerB;i++) MyATR[i-1]=(High[i]-Low[i])/Low[i] ; l'indice i commence par 1 puisque nous n' avons besoin que des barres fermées

4. après cela vous pouvez lire iMAOnArray(MyATR,0,PerB,0,MODE_SMA,0) ; ici le dernier paramètre est 0 puisque le décalage ha1 a déjà été pris en compte à l'étape 3.


Vérifiez comment il fonctionne, peut-être l'erreur est juste dans ce