Existe-t-il un moyen de déterminer, à partir de l'événement OnChartEvent, si un bouton a été pressé sur le clavier lorsque la souris a cliqué sur le graphique ?
Ici, à l'ouverture de chaque nouvelle barre, il devrait y avoir un nouveau calcul.
Logique - Le zigzag doit relier les bas (bas des 3 dernières barres en dessous de deux barres adjacentes) et les hauts (haut des 3 dernières barres au-dessus de deux barres adjacentes).
Si un pic est suivi d'un nouveau, l'indicateur est redessiné sur le nouveau, l'ancien est supprimé, je pense que c'est clair.
En fait, l'indicateur relie tous les hauts et les bas de manière séquentielle, quel est le problème ?
#property indicator_chart_window#property indicator_buffers2#property indicator_plots1//--- plot ZigZag #property indicator_label1"ZigZag"#property indicator_type1DRAW_ZIGZAG#property indicator_color1clrBlue#property indicator_style1STYLE_SOLID#property indicator_width11//--- indicator buffers double ZigZagBuffer1[];
double ZigZagBuffer2[];
double a = 0;
int last = 0; //В последний раз была вершина или низина int lastN = 0; //Номер бара с экстремумом//+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ intOnInit()
{
//--- связывание массивов и индикаторных буферов SetIndexBuffer(0,ZigZagBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,ZigZagBuffer2,INDICATOR_DATA);
//--- значение 0 (пустое значение) не будет участвовать в отрисовке PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
ArrayInitialize(ZigZagBuffer1, EMPTY_VALUE);
ArrayInitialize(ZigZagBuffer2, EMPTY_VALUE);
//--- значение 0 (пустое значение) не будет участвовать в отрисовке PlotIndexSetString(0,PLOT_LABEL,"ZigZag1;ZigZag2");
//--- return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
if(a != iOpen(_Symbol, PERIOD_CURRENT, 0))
{
a = iOpen(_Symbol, PERIOD_CURRENT, 0);
for(int i = Bars(_Symbol, PERIOD_CURRENT) - 3; i > 0; i--)
{
if(high[i] <= high[i+1] && high[i+2] <= high[i+1] && low[i] >= low[i+1] && low[i+2] >= low[i+1]) //В обе стороны на одном баре
{
if(last == 0) continue; //Если с этого начинается расчет - пропускаем простоif(last == 1) //Если была вершина
{
if(high[lastN] > high[i+1])//Если новая верщина не перебила старую
{
ZigZagBuffer1[i+1] = high[i+1];
ZigZagBuffer2[i+1] = low[i+1];
lastN = i+1;
continue;
}
//Если перебила
ZigZagBuffer1[lastN] = EMPTY_VALUE;
ZigZagBuffer1[i+1] = high[i+1];
ZigZagBuffer2[i+1] = low[i+1];
last = -1;
lastN = i+1;
continue;
}
if(last == -1)
{
if(low[lastN] < low[i+1])//Если новая низина не перебила старую
{
ZigZagBuffer1[i+1] = high[i+1];
ZigZagBuffer2[i+1] = low[i+1];
lastN = i+1;
continue;
}
//Если перебила
ZigZagBuffer2[lastN] = EMPTY_VALUE;
ZigZagBuffer1[i+1] = high[i+1];
ZigZagBuffer2[i+1] = low[i+1];
last = 1;
lastN = i+1;
continue;
}
}
if(high[i] <= high[i+1] && high[i+2] <= high[i+1]) //Новая вершина
{
if(last == 0)
{
last = 1;
lastN = i+1;
ZigZagBuffer1[i+1] = high[i+1];
continue;
}
if(last == 1)
{
ZigZagBuffer1[lastN] = EMPTY_VALUE;
ZigZagBuffer1[i+1] = high[i+1];
lastN = i+1;
continue;
}
if(last == -1)
{
ZigZagBuffer1[i+1] = high[i+1];
lastN = i+1;
last = 1;
continue;
}
}
if(low[i] >= low[i+1] && low[i+2] >= low[i+1])//Новая низина
{
if(last == 0)
{
last = -1;
lastN = i+1;
ZigZagBuffer2[i+1] = low[i+1];
continue;
}
if(last == -1)
{
ZigZagBuffer2[lastN] = EMPTY_VALUE;
ZigZagBuffer2[i+1] = low[i+1];
lastN = i+1;
continue;
}
if(last == 1)
{
ZigZagBuffer2[i+1] = low[i+1];
lastN = i+1;
last = -1;
continue;
}
}
}
}
return(rates_total);
}
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
Ici, à l'ouverture de chaque nouvelle barre, il devrait y avoir un nouveau calcul.
Logique - Le zigzag doit relier les bas (bas des 3 dernières barres en dessous de deux barres adjacentes) et les hauts (haut des 3 dernières barres au-dessus de deux barres adjacentes).
Si un pic est suivi d'un nouveau, l'indicateur est redessiné sur le nouveau, l'ancien est supprimé, je pense que c'est clair.
En fait, l'indicateur connecte tous les HI et LH en série, quel est le problème ?
D'après ce que j'ai compris, vous avez deux tampons de dessin. Les deux sont dessinés. Chaque tampon a sa propre ligne, on obtient un extremum. Il y a 3 tampons dans le zigzag. Deux calculés pour les maxima et les minima séparément, et un pour le tirage au sort selon le signe qu'après avoir écrit les maxima dans le tampon, on cherche le minimum et vice versa.
Je comprends que vous avez deux tampons de dessin. Les deux sont dessinés. Chaque tampon a sa propre ligne, vous obtenez un extrême. Il y a 3 tampons dans le zigzag. Deux tampons de calcul sont séparés pour les maxima et les minima, et un tampon est utilisé pour le dessin suivant le dernier maximum écrit dans le tampon des maxima, et vice versa.
Aide - le zigzag est construit en utilisant 2 tampons, exemple avec 2 tampons aussi
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Bonjour ! Comment modifier la taille de la police dans le terminal ? Quelqu'un peut-il me donner un indice ?
Il peut être utile de modifier le zoom dans les paramètres d'affichage du système d'exploitation si vous en avez besoin.
Existe-t-il un moyen de déterminer, à partir de l'événement OnChartEvent, si un bouton a été pressé sur le clavier lorsque la souris a cliqué sur le graphique ?
Veuillez m'aider à comprendre les indicateurs.
Ici, à l'ouverture de chaque nouvelle barre, il devrait y avoir un nouveau calcul.
Logique - Le zigzag doit relier les bas (bas des 3 dernières barres en dessous de deux barres adjacentes) et les hauts (haut des 3 dernières barres au-dessus de deux barres adjacentes).
Si un pic est suivi d'un nouveau, l'indicateur est redessiné sur le nouveau, l'ancien est supprimé, je pense que c'est clair.
En fait, l'indicateur relie tous les hauts et les bas de manière séquentielle, quel est le problème ?
Veuillez m'aider à comprendre les indicateurs.
Ici, à l'ouverture de chaque nouvelle barre, il devrait y avoir un nouveau calcul.
Logique - Le zigzag doit relier les bas (bas des 3 dernières barres en dessous de deux barres adjacentes) et les hauts (haut des 3 dernières barres au-dessus de deux barres adjacentes).
Si un pic est suivi d'un nouveau, l'indicateur est redessiné sur le nouveau, l'ancien est supprimé, je pense que c'est clair.
En fait, l'indicateur connecte tous les HI et LH en série, quel est le problème ?
D'après ce que j'ai compris, vous avez deux tampons de dessin. Les deux sont dessinés. Chaque tampon a sa propre ligne, on obtient un extremum. Il y a 3 tampons dans le zigzag. Deux calculés pour les maxima et les minima séparément, et un pour le tirage au sort selon le signe qu'après avoir écrit les maxima dans le tampon, on cherche le minimum et vice versa.
Je comprends que vous avez deux tampons de dessin. Les deux sont dessinés. Chaque tampon a sa propre ligne, vous obtenez un extrême. Il y a 3 tampons dans le zigzag. Deux tampons de calcul sont séparés pour les maxima et les minima, et un tampon est utilisé pour le dessin suivant le dernier maximum écrit dans le tampon des maxima, et vice versa.
Aide - le zigzag est construit en utilisant 2 tampons, exemple avec 2 tampons aussi
Question : existe-t-il une description des bibliothèques standard pour MT4 ou non ?
MT4.
Félicitations pour les articles. Excellent travail.
Aide - le zigzag est construit sur 2 tampons, exemple avec 2 tampons aussi
Début du code ZZ.
Un tampon de dessin. Trois réseaux.
Regardez le code. La logique est complexe. C'est généralement difficile à faire à la volée.
Code ZigZag avec commentaires traduits en russeMT4.
Félicitations pour les articles. Excellent travail.
Ce n'est pas grave - presque tout s'adapte.
Merci.