"Find the maximum value in the ticks array" - la valeur maximale de ce que nous trouvons ?
ticks[copié-1].bid ou ticks[copié-1].flags
Pour rire)))))
Il est fort probable que vous ayez confondu CopyTicks avec CopyRates, bien que dans ce dernier cas, vous disposiez également d'un tableau de structures et que vous spécifiez l'élément de la structure dont vous avez besoin.
double PrevClose = rates[copied-1].close ;
Vousavez une ligne supplémentaire dans votre code.
Vous n'en avez pas besoin car CopyTicks et CopyRates allouent eux-mêmes la taille du tableau lors de la copie.
Merci pour l'astuce. Je ne le savais pas. J'insère cette ligne au cas où.
Est-ce que je comprends bien votre blague, à savoir que dans les rates, tous les prix sont moyennés et prennent en compte la barre, alors que dans les ticks, ce n'est pas le cas ? C'est la raison pour laquelle j'ai utilisé le terme tick pour désigner un intervalle de temps arbitraire, et non les prix de la barre. CopyRates dans ma formule similaire a rempli la variable copiée avec la valeur maximale de type ulong pour l'intervalle d'heure. Je n'ai pas pu résoudre ce problème non plus.
Merci pour le conseil. Je ne le savais pas. J'insère cette ligne au cas où.
Est-ce que je comprends bien votre plaisanterie selon laquelle les taux font la moyenne de tous les prix et tiennent compte de la barre, mais pas les ticks ? C'est pourquoi j'ai considéré que les ticks utilisaient un intervalle de temps arbitraire, et non les prix de la barre. CopyRates dans ma formule similaire a rempli la variable copiée avec la valeur maximale de type ulong pour l'intervalle d'heure. Je n'ai pas pu résoudre ce problème non plus.
Tout est faux.
MqlRates est une structure, et vous la traitez comme une variable.
Vous essayez de combiner le chaud et le mou, et le compilateur ne vous comprend pas.
Moi non plus, je ne comprends pas I))))
Je pourrais peut-être vous suggérer quelque chose d'utile, mais votre code n'indique pas clairement ce que vous essayez de trouver.
Il s'agit de modifier le WPR (Williams Percent Range) de manière à obtenir la différence des valeurs WPR pour une période de temps arbitraire, sans tenir compte des barres.
maxvoronin74 #: Il s'agit de modifier le WPR (Williams Percent Range) de manière à obtenir la différence des valeurs WPR pour une période de temps arbitraire, sans tenir compte des barres.
Il est possible (mais pas certain) que ce soit ce que vous vouliez obtenir.
MqlTick ticks[];
int copied = CopyTicksRange(Symbol(), ticks, COPY_TICKS_INFO, t0, t1);
double bid[];
for(int i = 0; i < copied; i++)
bid[i] = ticks[i].bid;
double PrevClose = bid[copied - 1]; // Получаем последний элемент массива как значение PrevClosedouble highestHigh = ArrayMaximum(bid, 0, copied); // Находим максимальное значение в массиве ticksdouble lowestLow = ArrayMinimum(bid, 0, copied); // Находим минимальное значение в массиве ticks
Aleksandr Slavskii #: double lowestLow = ArrayMinimum(bid, 0, copied) ;
Je vous remercie. Voici ce que j'ai obtenu, si j'ai bien compris la leçon :
MqlTick ticks[];
int copied=CopyTicksRange(Symbol(),ticks,COPY_TICKS_INFO,t0,t1);
double bid_arr[];
double ask_arr[];
for(int i = 0; i < copied; i++)
{
bid_arr[i] = ticks[i].bid;
ask_arr[i] = ticks[i].ask;
}
double highestBid = ArrayMaximum(bid_arr, 0, copied-1);
double lowestBid = ArrayMinimum(bid_arr, 0, copied-1);
double highestAsk = ArrayMaximum(ask_arr, 0, copied-1);
double lowestAsk = ArrayMinimum(ask_arr, 0, copied-1);
double highestHigh = (highestBid+highestAsk)/2; // Средняя наибольшего ask и наибольшего bid элементаdouble lowestLow = (lowestBid+lowestAsk)/2; // Средняя наименьшего ask и наименьшего bid элементаdouble PrevClose = (bid_arr[copied-1]+ask_arr[copied-1])/2; // Средняя ask и bid последнего элементаdouble WPR_Past = -100 * (NormalizeDouble((highestHigh - PrevClose) / (highestHigh - lowestLow),_Digits)); // Формула предыдущего WPR
Mais, malheureusement, à la ligne bid_arr[i] = ticks[i].bid ; le conseiller expert est sorti du graphique à cause d'un tableau hors plage dans 'namemyexpert.mq5' (204,12).
Je vous remercie. Voici le résultat, si j'ai bien compris la leçon :
Puisque nous passons en boucle par tous les ticks de toute façon, nous ne pouvons pas copier dans cette boucle, mais chercher les maximums-minimums en une seule fois.
D'ailleurs, si nous copions, il serait bon de définir d'abord les tailles des tableaux où nous copions, la boucle ne le fera pas pour nous, nous sortirons du tableau à la première itération. Seul CopyTicksRange redimensionne le tableau cible lui-même.
Puisque nous parcourons tous les ticks de toute façon, nous ne pouvons pas copier dans ce cycle, mais rechercher ces maximums-minimums en une seule fois.
D'ailleurs, si nous copions, il serait bon de définir d'abord les tailles des tableaux où nous copions, la boucle ne le fera pas pour nous, nous sortirons du tableau à la première itération. Seul CopyTicksRange redimensionne le tableau cible lui-même.
Je suis un perfectionniste, trier des éléments séparés d'un tableau de structures est comme frapper du verre avec du polystyrène.
A propos du tableau non alloué, j'ai une bonne raison. Il est une heure du matin et ma femme me dit dans l'oreille "il est temps de dormir, il est temps de dormir". ))))))
Aleksandr Slavskii #: Je suis un perfectionniste, trier des éléments individuels d'un tableau de structures est comme frapper du verre avec du polystyrène.
J'ai une bonne raison de ne pas distribuer les tableaux. Il est une heure du matin et ma femme me souffle à l'oreille "c'est l'heure de dormir, c'est l'heure de dormir". ))))))
Quoi, nuit ou matin ?)
Oui, vous avez raison de chercher le maximum en une seule fois. Je suis un peu bête ce matin.
Puisque nous parcourons tous les ticks de toute façon, nous ne pouvons pas copier dans ce cycle, mais rechercher ces maximums-minimums en une seule fois.
D'ailleurs, si nous copions, il serait bon de définir d'abord les tailles des tableaux où nous copions, la boucle ne le fera pas pour nous, nous sortirons du tableau à la première itération. Seul CopyTicksRange redimensionne le tableau cible lui-même.
Je suis désolé. Mon inattention. Corrigé. J'ai oublié que la valeur ArrayMaximum est un indice et non un prix. J'ai oublié que la valeur ArrayMaximum est un indice, pas un prix. Mais c'est corrigé maintenant.
MqlTick ticks[];
int copied=CopyTicksRange(Symbol(),ticks,COPY_TICKS_INFO,t0,t1);
double bid_arr[];
ArrayResize(bid_arr,copied,100000);
double ask_arr[];
ArrayResize(ask_arr,copied,100000);
for(int i = 0; i < copied; i++)
{
bid_arr[i] = ticks[i].bid;
ask_arr[i] = ticks[i].ask;
}
int IndMaxBid = ArrayMaximum(bid_arr, 0, copied-1); // Индекс элемента массива bid_arr с максимальной ценойdouble highestBid = bid_arr[IndMaxBid]; // Самая высокая цена bid за периодint IndMinBid = ArrayMinimum(bid_arr, 0, copied-1); // Индекс элемента массива bid_arr с минимальной ценойdouble lowestBid = bid_arr[IndMinBid]; // Самая низкая цена bid за периодint IndMaxAsk = ArrayMaximum(ask_arr, 0, copied-1); // Индекс элемента массива ask_arr с максимальной ценойdouble highestAsk = ask_arr[IndMaxAsk]; // Самая высокая цена ask за периодint IndMinAsk = ArrayMinimum(ask_arr, 0, copied-1); // Индекс элемента массива ask_arr с минимальной ценойdouble lowestAsk = ask_arr[IndMinAsk]; // Самая низкая цена ask за периодdouble highestHigh = (highestBid+highestAsk)/2; // Средняя наибольшего ask и наибольшего bid элементаdouble lowestLow = (lowestBid+lowestAsk)/2; // Средняя наименьшего ask и наименьшего bid элементаdouble PrevClose = (bid_arr[copied-1]+ask_arr[copied-1])/2; // Средняя ask и bid последнего элементаdouble WPR_Past = -100 * (NormalizeDouble((highestHigh - PrevClose) / (highestHigh - lowestLow),_Digits)); // Формула предыдущего WPR
Comme ArrayMaximum ne fonctionnait pas avec le tableau de ticks, j'ai essayé d'autres calculs, avec if dans une boucle. Pourquoi est-ce mieux ?
"Find the maximum value in the ticks array" - la valeur maximale de ce que nous trouvons ?
ticks[copié-1].bid ou ticks[copié-1].flags
Pour rire)))))
Il est fort probable que vous ayez confondu CopyTicks avec CopyRates, bien que dans ce dernier cas, vous disposiez également d'un tableau de structures et que vous spécifiez l'élément de la structure dont vous avez besoin.
double PrevClose = rates[copied-1].close ;
Vousavez une ligne supplémentaire dans votre code.
Vous n'en avez pas besoin car CopyTicks et CopyRates allouent eux-mêmes la taille du tableau lors de la copie.Merci pour l'astuce. Je ne le savais pas. J'insère cette ligne au cas où.
Est-ce que je comprends bien votre blague, à savoir que dans les rates, tous les prix sont moyennés et prennent en compte la barre, alors que dans les ticks, ce n'est pas le cas ? C'est la raison pour laquelle j'ai utilisé le terme tick pour désigner un intervalle de temps arbitraire, et non les prix de la barre. CopyRates dans ma formule similaire a rempli la variable copiée avec la valeur maximale de type ulong pour l'intervalle d'heure. Je n'ai pas pu résoudre ce problème non plus.
Merci pour le conseil. Je ne le savais pas. J'insère cette ligne au cas où.
Est-ce que je comprends bien votre plaisanterie selon laquelle les taux font la moyenne de tous les prix et tiennent compte de la barre, mais pas les ticks ? C'est pourquoi j'ai considéré que les ticks utilisaient un intervalle de temps arbitraire, et non les prix de la barre. CopyRates dans ma formule similaire a rempli la variable copiée avec la valeur maximale de type ulong pour l'intervalle d'heure. Je n'ai pas pu résoudre ce problème non plus.
Tout est faux.
MqlRates est une structure, et vous la traitez comme une variable.
MqlTick est également une structure.
Vous essayez de combiner le chaud et le mou, et le compilateur ne vous comprend pas.
Moi non plus, je ne comprends pas I)))))
Je pourrais peut-être vous suggérer quelque chose d'utile, mais votre code n'indique pas clairement ce que vous essayez de trouver.
Tout est faux.
MqlRates est une structure, et vous la traitez comme une variable.
MqlTick est également une structure.
Vous essayez de combiner le chaud et le mou, et le compilateur ne vous comprend pas.
Moi non plus, je ne comprends pas I))))
Je pourrais peut-être vous suggérer quelque chose d'utile, mais votre code n'indique pas clairement ce que vous essayez de trouver.
Il s'agit de modifier le WPR (Williams Percent Range) de manière à obtenir la différence des valeurs WPR pour une période de temps arbitraire, sans tenir compte des barres.
Il est possible (mais pas certain) que ce soit ce que vous vouliez obtenir.
double lowestLow = ArrayMinimum(bid, 0, copied) ;
Je vous remercie. Voici ce que j'ai obtenu, si j'ai bien compris la leçon :
Mais, malheureusement, à la ligne bid_arr[i] = ticks[i].bid ; le conseiller expert est sorti du graphique à cause d'un tableau hors plage dans 'namemyexpert.mq5' (204,12).Je vous remercie. Voici le résultat, si j'ai bien compris la leçon :
Puisque nous passons en boucle par tous les ticks de toute façon, nous ne pouvons pas copier dans cette boucle, mais chercher les maximums-minimums en une seule fois.
D'ailleurs, si nous copions, il serait bon de définir d'abord les tailles des tableaux où nous copions, la boucle ne le fera pas pour nous, nous sortirons du tableau à la première itération. Seul CopyTicksRange redimensionne le tableau cible lui-même.
Puisque nous parcourons tous les ticks de toute façon, nous ne pouvons pas copier dans ce cycle, mais rechercher ces maximums-minimums en une seule fois.
D'ailleurs, si nous copions, il serait bon de définir d'abord les tailles des tableaux où nous copions, la boucle ne le fera pas pour nous, nous sortirons du tableau à la première itération. Seul CopyTicksRange redimensionne le tableau cible lui-même.
Je suis un perfectionniste, trier des éléments individuels d'un tableau de structures est comme frapper du verre avec du polystyrène.
Puisque nous parcourons tous les ticks de toute façon, nous ne pouvons pas copier dans ce cycle, mais rechercher ces maximums-minimums en une seule fois.
D'ailleurs, si nous copions, il serait bon de définir d'abord les tailles des tableaux où nous copions, la boucle ne le fera pas pour nous, nous sortirons du tableau à la première itération. Seul CopyTicksRange redimensionne le tableau cible lui-même.
Je suis désolé. Mon inattention. Corrigé. J'ai oublié que la valeur ArrayMaximum est un indice et non un prix. J'ai oublié que la valeur ArrayMaximum est un indice, pas un prix. Mais c'est corrigé maintenant.
Comme ArrayMaximum ne fonctionnait pas avec le tableau de ticks, j'ai essayé d'autres calculs, avec if dans une boucle. Pourquoi est-ce mieux ?
Pourquoi est-ce mieux ?