Questions des débutants MQL5 MT5 MetaTrader 5 - page 114

 
Yedelkin:
Je trouve qu'il est difficile de répondre. J'ai relu vos messages mais je n'ai pas compris l'idée de changer la taille du tableau. Votre réponse au code dépend également de la compréhension du concept. Peut-être que quelqu'un d'autre répondra.

Je ne me soucie pas vraiment de changer la taille du tableau, je lui donne 20, par exemple.

 double masCenPoc[20]; 

 for(int i=0; i<20; i++){
 
   if((cena_poc < high && cena_poc < low)||(cena_poc > high && cena_poc > low))

//как вот дальше обозначить чтоб он запомнил значение цены уровня Рос?
    
    masCenPoc[i] = cena_poc;

else 

//и удалил значение из массива, если нашлось пересечение с ценой этого уровня Рос?
 
Top2n: Je ne me soucie pas vraiment de modifier la taille du tableau ; je la fixerai, par exemple, à 20.

Ici, vous avez un tableau de 20 éléments. Supposons que la condition if se vérifie - nous attribuons une valeur de prix au premier élément du tableau: masCenPoc[0] = cena_poc;

Qu'allons-nous attribuer au deuxième élément du tableau?

 
Yedelkin:

Ici, vous avez un tableau de 20 éléments. Supposons que la condition if se vérifie - nous attribuons une valeur de prix au premier élément du tableau: masCenPoc[0] = cena_poc;

Que devons-nous attribuer au deuxième élément du tableau?

La prochaine valeur de Ros, qui sera dans n nombre de fois. Les lignes du Ros apparaissent au début de chaque journée, en fonction des résultats de la journée précédente. Si le prix ne touche pas le niveau, la valeur de ce niveau Ros sera stockée dans le tableau.
 
Top2n: La prochaine valeur de Ros, qui sera dans n temps. Les lignes du Ros apparaissent au début de chaque journée, sur la base des résultats de la journée précédente. Si le prix ne touche pas le niveau, alors la valeur de ce niveau Ros sera stockée dans le tableau.
Je vois. Je ferais ce qui suit. Je créerais un tableau de 20 éléments et j'attribuerais la valeur -1 à chacun d'entre eux. Au début de chaque jour, j'exécuterais la boucle for(int i=0 ; i<20 ; i++) et chercherais le premier élément avec la valeur -1 dans le tableau. Après avoir trouvé un tel élément, il vérifie les conditions commerciales(if((cena_poc < high && cena_poc < low)||(cena_poc > high && cena_poc > low)) et, en cas de succès, attribue la valeur de cena_poc à l'élément du tableau trouvé. Le tableau sera ainsi progressivement rempli avec les valeurs requises.
 
Top2n: Je vois, merci.
Oui, si vous utilisez un tableau non dynamique (comme dans votre dernier exemple), vous n'avez pas besoin de cette fonction non plus. Si vous avez besoin d'un tableau dynamique, déclarez-le et dimensionnez-le dans les premières lignes de code, avant la boucle.
 
Top2n:

Je ne me soucie pas vraiment de changer la taille du tableau, je vais lui donner 20, par exemple.

Il faut que ça ait un sens. Dans ce cas, un tableau peut ne pas être nécessaire. Dans une boucle avec d'autres calculs, une seule variable est peut-être suffisante. Je pense que vous voulez obtenir des données historiques, il serait donc plus logique de boucler à partir d'une barre vers 0. Et alors vos données seront construites. Si vous avez besoin d'un tableau, il devrait s'accumuler comme une pile dans votre cas.

Si vous voulez construire par des devis en ligne, alors c'est toujours selon les règles de la pile.

//Удачи!
 

Bonjour. Lorsque j'essaie de copier les données de l'indicateur dans un tableau à l'aide de la fonction CopyBuffer, j'obtiens des valeurs comme -6.9999999999999999999e-005.

Quelle peut en être la raison ?


Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyBuffer - Документация по MQL5
 
sss20192:

Bonjour. Lorsque j'essaie de copier les données de l'indicateur dans un tableau à l'aide de la fonction CopyBuffer, j'obtiens des valeurs comme -6.9999999999999999999e-005.

Quelle peut en être la raison ?


Peut-être que les valeurs sont les mêmes que dans l'original. Ce serait une bonne idée de poster le code.
 

L'indicateur présente des données différentes dans la fenêtre de données. J'ai attaché l'EA au graphique H1 et il copie les données des cadres temporels M5 M15 et H1.

int MacdHandleTf1 = iMACD(_Symbol, Timeframe1, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

int MacdHandleTf2 = iMACD(_Symbol, Timeframe2, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

int MacdHandleTf3 = iMACD(_Symbol, Timeframe3, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

CopyBuffer(MacdHandleTf1, 0, 1, 1, MacdArray);

Print(NormalizeDouble(MacdArray[0], 5)); 

CopyBuffer(MacdHandleTf2, 0, 1, 1, MacdArray);

Print(NormalizeDouble(MacdArray[0], 5)); 

CopyBuffer(MacdHandleTf3, 0, 1, 1, MacdArray); 

Print(NormalizeDouble(MacdArray[0], 5));