Bitte helfen Sie mir, die Indikatoren zu verstehen.
Hier sollte bei der Eröffnung eines jeden neuen Balkens eine Neuberechnung erfolgen.
Logik - ZigZag sollte Tiefststände (Tief der letzten 3 Balken unter zwei benachbarten) und Höchststände (Hoch der letzten 3 Balken über zwei benachbarten) verbinden.
Wenn auf einen Peak ein neuer Peak folgt, wird der Indikator auf dem neuen Peak neu gezeichnet, der alte Peak wird gelöscht, ich denke, das ist klar.
In der Tat verbindet der Indikator alle Hochs und Tiefs sequentiell, wo liegt das Problem?
#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);
}
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
Bitte helfen Sie mir, die Indikatoren zu verstehen.
Hier sollte bei der Eröffnung eines jeden neuen Balkens eine Neuberechnung erfolgen.
Logik - ZigZag sollte Tiefststände (Tief der letzten 3 Balken unter zwei benachbarten) und Höchststände (Hoch der letzten 3 Balken über zwei benachbarten) verbinden.
Wenn auf einen Peak ein neuer Peak folgt, wird der Indikator auf dem neuen Peak neu gezeichnet, der alte Peak wird gelöscht, ich denke, das ist klar.
Der Indikator schaltet alle HI und LH in Reihe, wo liegt das Problem?
Soweit ich weiß, haben Sie 2 Zeichenpuffer. Sie sind beide gezeichnet. Jeder Puffer hat seine eigene Zeile, Sie erhalten ein Extremum. Es gibt 3 Puffer im Zickzack. Zwei berechnete für Maxima und Minima getrennt, und eine für das Zeichnen nach dem Vorzeichen, dass wir nach dem Schreiben der Maxima in den Puffer nach dem Minimum suchen und umgekehrt.
Ich habe gehört, dass Sie zwei Zeichenpuffer haben. Beide sind unentschieden. Jeder Puffer hat seine eigene Zeile, Sie erhalten ein Extrem. Es gibt 3 Puffer im Zickzack. Es gibt zwei getrennte Berechnungspuffer für Maxima und Minima, und ein Puffer wird zum Zeichnen nach dem letzten in den Maxima-Puffer geschriebenen Maximum verwendet und umgekehrt.
Hilfe - Zickzack wird mit 2 Puffern gebaut, Beispiel auch mit 2 Puffern
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
Hallo! Wie kann ich die Schriftgröße im Terminal ändern? Kann mir jemand einen Tipp geben?
Es kann hilfreich sein, den Zoom in den Anzeigeeinstellungen des Betriebssystems zu ändern, wenn Sie einen solchen Bedarf haben.
Gibt es eine Möglichkeit, aus dem OnChartEvent zu ermitteln, ob eine Taste auf der Tastatur gedrückt wurde, als die Maus auf die Grafik geklickt hat?
Bitte helfen Sie mir, die Indikatoren zu verstehen.
Hier sollte bei der Eröffnung eines jeden neuen Balkens eine Neuberechnung erfolgen.
Logik - ZigZag sollte Tiefststände (Tief der letzten 3 Balken unter zwei benachbarten) und Höchststände (Hoch der letzten 3 Balken über zwei benachbarten) verbinden.
Wenn auf einen Peak ein neuer Peak folgt, wird der Indikator auf dem neuen Peak neu gezeichnet, der alte Peak wird gelöscht, ich denke, das ist klar.
In der Tat verbindet der Indikator alle Hochs und Tiefs sequentiell, wo liegt das Problem?
Bitte helfen Sie mir, die Indikatoren zu verstehen.
Hier sollte bei der Eröffnung eines jeden neuen Balkens eine Neuberechnung erfolgen.
Logik - ZigZag sollte Tiefststände (Tief der letzten 3 Balken unter zwei benachbarten) und Höchststände (Hoch der letzten 3 Balken über zwei benachbarten) verbinden.
Wenn auf einen Peak ein neuer Peak folgt, wird der Indikator auf dem neuen Peak neu gezeichnet, der alte Peak wird gelöscht, ich denke, das ist klar.
Der Indikator schaltet alle HI und LH in Reihe, wo liegt das Problem?
Soweit ich weiß, haben Sie 2 Zeichenpuffer. Sie sind beide gezeichnet. Jeder Puffer hat seine eigene Zeile, Sie erhalten ein Extremum. Es gibt 3 Puffer im Zickzack. Zwei berechnete für Maxima und Minima getrennt, und eine für das Zeichnen nach dem Vorzeichen, dass wir nach dem Schreiben der Maxima in den Puffer nach dem Minimum suchen und umgekehrt.
Ich habe gehört, dass Sie zwei Zeichenpuffer haben. Beide sind unentschieden. Jeder Puffer hat seine eigene Zeile, Sie erhalten ein Extrem. Es gibt 3 Puffer im Zickzack. Es gibt zwei getrennte Berechnungspuffer für Maxima und Minima, und ein Puffer wird zum Zeichnen nach dem letzten in den Maxima-Puffer geschriebenen Maximum verwendet und umgekehrt.
Hilfe - Zickzack wird mit 2 Puffern gebaut, Beispiel auch mit 2 Puffern
Frage, gibt es eine Beschreibung der Standardbibliotheken für MT4 oder nicht?
MT4.
Vielen Dank für die Artikel. Großartige Arbeit.
Hilfe - Zickzack wird über 2 Puffer gebaut, Beispiel auch mit 2 Puffern
Beginn des ZZ-Codes.
Ein Zeichenpuffer. Drei Arrays.
Sehen Sie sich den Code an. Die Logik ist komplex. Das ist in der Regel schwer zu bewerkstelligen, wenn die Zeit drängt.
ZigZag-Code mit ins Russische übersetzten KommentarenMT4.
Vielen Dank für die Artikel. Großartige Arbeit.
Das macht nichts - fast alles passt.
Ich danke Ihnen.