Sie haben den Punkt verpasst. Der Beitrag, den Sie beziehen sich auf war über WIE das Signal von einem EA zu bekommen, können Sie offensichtlich nicht haben, indem Sie nur die letzten 2 Kerzen Werte, Sie brauchen die dritte.
Es ist NICHT möglich, ein frühes Signal zu haben, denn um eine Divergenz zu erkennen, brauchen Sie einen Peak/Trough und dafür brauchen Sie eine zusätzliche Kerze, die SCHLIESSEN. Wenn also Kerze 0 gerade geöffnet hat, bedeutet das, dass Kerze 1 geschlossen ist, und das erlaubt es, den Peak/Trough bei Kerze 2 zu bestätigen. Wenn jemand den Indikator so modifizieren möchte, dass er unbestätigte Hochs/Tiefs verwendet, um ein frühes Signal zu erhalten, kann man das tun, aber ich werde nicht dabei helfen, weil es eine schlechte Idee ist, da man eine Menge schlechter Signale erhalten wird.
Was getan werden könnte, ist das Signal auf Kerze 1 oder sogar Kerze 0 zu zeichnen, aber das wird nichts ändern, und ich beschloss, das Signal auf die Kerze zu zeichnen, die tatsächlich den Peak/Trough zeigen.
Ich habe den Code geändert und Sie haben Recht. Man erhält falsche Bewegungen vor der eigentlichen Divergenz. Vielen Dank für Ihre Zeit in dieser Sache.
Sie haben den Punkt verpasst. Der Beitrag, den Sie beziehen sich auf war über WIE das Signal von einem EA zu bekommen, können Sie offensichtlich nicht haben, indem Sie nur die letzten 2 Kerzen Werte, Sie brauchen die dritte.
Es ist NICHT möglich, ein frühes Signal zu haben, denn um eine Divergenz zu erkennen, brauchen Sie einen Peak/Trough und dafür brauchen Sie eine zusätzliche Kerze, die SCHLIESSEN. Wenn also Kerze 0 gerade geöffnet hat, bedeutet das, dass Kerze 1 geschlossen ist, und das erlaubt es, den Peak/Trough bei Kerze 2 zu bestätigen. Wenn jemand den Indikator so modifizieren möchte, dass er unbestätigte Hochs/Tiefs verwendet, um ein frühes Signal zu erhalten, kann man das tun, aber ich werde nicht dabei helfen, weil es eine schlechte Idee ist, da man eine Menge schlechter Signale erhalten wird.
Was getan werden könnte, ist das Signal auf Kerze 1 oder sogar Kerze 0 zu zeichnen, aber das wird nichts ändern, und ich beschloss, das Signal auf die Kerze zu zeichnen, die tatsächlich den Peak/Trough zeigen.
Sie haben vielleicht auch einen Punkt übersehen.
Im Falle von Renko-Charts ist der aktuelle Balken (meistens) bereits geschlossen, so dass Sie eine Kerze weniger benötigen würden. Oder habe ich etwas übersehen?
Hallo Alain, sehr guter Indikator, der auch ohne Anpassung der Einstellungen gut funktioniert. Es ist gut, dass es die Alerts hat, aber das Einzige, was mir fehlt, ist die Möglichkeit, Push-Benachrichtigungen an mein Telefon zu senden. Die gleiche Nachricht, die auf der Pop-up-Benachrichtigung erscheint, um sie an mein Telefon zu senden. Könnten Sie diese Funktion hinzufügen? Das wäre sehr nett von Ihnen.
Das Signal wird beim Schließen einer Kerze gegeben, 1 Kerze in der Vergangenheit (2, wenn Sie die offene Kerze zählen und nicht 3). Das ist normal und so muss es auch funktionieren. Die Divergenz basiert auf der Suche nach einem Extremum (oben/unten). Wenn Sie eine Möglichkeit haben, ein Extremum an der aktuellen Kerze zu erkennen, schlage ich vor, dass Sie programmieren lernen und uns diese großartige Innovation kostenlos zur Verfügung stellen.
Hallo Alain. Sehr guter Indikator. Er liefert korrekte Signale.
BTW im Teil "//--- Bearish divergence is found" sollte es "divergenceStyle" anstelle von "STYLE_SOLID" sein.
Indikator totalaly nicht neu zu zeichnen. Für meinen Zweck entschied ich mich, eine kleine Änderung vorzunehmen, um den letzten Balken des Indikators sowie das Divergenzsignal redrawable zu machen.
Es wird ein Divergenzsignal auf dem vorherigen Balken angezeigt, das sicher neu gezeichnet werden kann. Auf schnellen Timeframes wird es hilfreich sein, das Signal kurz vor dem Schließen eines Balkens zu verwenden.
Ich habe Änderungen vorgenommen:
- den ganzen Teil "//--- Indikator wird nur bei neuer Kerze aktualisiert, außer bei totalem Redraw" entfernt
- "start=prev_calculated-2;" wurde geändert in "start=prev_calculated-1;"
- Im Teil "//--- Hauptschleife der Berechnungen" wurde "for(int shift=start; shift<rates_total-2; shift++)" geändert in "for(int shift=start; shift<rates_total-1; shift++)"
Das Divergenzsignal erscheint jetzt auf dem vorherigen Balken, aber es friert im Moment des Erscheinens ein und folgt nicht der Indikatorlinie auf diesem Balken.
Ich habe diesen Teil geändert und das Problem gelöst. Vielleicht könnte es besser und einfacher gemacht werden, aber es funktioniert. Die Pfeile sind um 1 Takt vorgerückt. Linien ohne Pfeile sind unbestätigte Signale.
//--- Der Indikator wird nur bei einer neuen Kerze aktualisiert, außer bei einem Total Redraw// static datetime lastCandleTime=0;// if(lastCandleTime==time[rates_total-1])// return(rates_total);// sonst// lastCandleTime=time[rates_total-1];//--- erste Berechnung oder Anzahl der Balken wurde geändertint start;
if(prev_calculated<=0)
{
start=slowEMA;
ArrayInitialize(bullishDivergence,EMPTY_VALUE); // Divergenzpuffer müssen initialisiert werdenArrayInitialize(bearishDivergence,EMPTY_VALUE);
}
else
{
start=prev_calculated-1;
bullishDivergence[rates_total-1]=EMPTY_VALUE;
bearishDivergence[rates_total-1]=EMPTY_VALUE;
}
//--- Anzahl der zu kopierenden Daten (Macd-Puffer) int toCopy=rates_total-prev_calculated+(prev_calculated<=0 ? 0 : 1);
//--- nicht alle Daten können berechnet werdenint calculated=BarsCalculated(macdHandle);
if(calculated<rates_total)
{
Print("Not all data of macdHandle is calculated (",calculated,"bars ). Error",GetLastError());
return(0);
}
//--- Haupt-MACD-Puffer abrufenif(IsStopped()) return(0); //Prüfung auf Stop-Flagif(CopyBuffer(macdHandle,MAIN_LINE,0,toCopy,macdBuffer)<=0)
{
Print("Getting MACD Main is failed! Error : ",GetLastError());
return(0);
}
//--- Signal MACD-Puffer abrufenif(IsStopped()) return(0); //Prüfung auf Stop-Flagif(CopyBuffer(macdHandle,SIGNAL_LINE,0,toCopy,signalBuffer)<=0)
{
Print("Getting MACD Signal is failed! Error : ",GetLastError());
return(0);
}
//--- Hauptschleife der Berechnungenfor(int shift=start; shift<rates_total; shift++)
{
int currentExtremum,lastExtremum;
bool isBullishDivergence,isBearishDivergence;
string divergenceMsg;
ENUM_LINE_STYLE divergenceStyle=0;
//--- Bullische Divergenz einfangen
isBullishDivergence=false;
if(macdBuffer[shift-1]<=macdBuffer[shift-2] &&
macdBuffer[shift-1]<macdBuffer[shift-3] &&
macdBuffer[shift-1]<macdBuffer[shift])
//--- wenn der aktuelle macd main ein Tiefpunkt ist (niedriger als 2 vorherige und 1 nächste)
{
currentExtremum=shift;
lastExtremum=GetIndicatorLastTrough(shift);
//--- if(macdBuffer[currentExtremum-1]>macdBuffer[lastExtremum] &&
low[currentExtremum-1]<low[lastExtremum])
{
isBullishDivergence=true;
divergenceMsg="Classical bullish divergence on: ";
divergenceStyle=STYLE_SOLID;
}
//--- if(macdBuffer[currentExtremum-1]<macdBuffer[lastExtremum] &&
low[currentExtremum-1]>low[lastExtremum])
{
isBullishDivergence=true;
divergenceMsg="Reverse bullish divergence on: ";
divergenceStyle=STYLE_DOT;
}
//--- Bullische Divergenz gefundenif(isBullishDivergence)
{
bullishDivergence[currentExtremum]=macdBuffer[currentExtremum]-ARROWS_DISPLACEMENT;
//---if(drawPriceTrendLines==true)
DrawTrendLine(TRENDLINE_MAIN,time[currentExtremum-1],time[lastExtremum],low[currentExtremum-1],low[lastExtremum],Green,divergenceStyle);
//---if(drawIndicatorTrendLines==true)
DrawTrendLine(TRENDLINE_INDICATOR,time[currentExtremum-1],time[lastExtremum],macdBuffer[currentExtremum-1],macdBuffer[lastExtremum],Green,divergenceStyle);
//---if(displayAlert==true && shift>=rates_total-3 && time[currentExtremum-1]!=lastAlertTime)
DisplayAlert(divergenceMsg,time[currentExtremum-1]);
}
}
//--- Fangen Sie die bärische Divergenz
isBearishDivergence=false;
if(macdBuffer[shift-1]>=macdBuffer[shift-2] &&
macdBuffer[shift-1]>macdBuffer[shift-3] &&
macdBuffer[shift-1]>macdBuffer[shift])
//--- wenn der aktuelle macd main ein Top ist (höher als 2 vorherige und 1 nächste)
{
currentExtremum=shift;
lastExtremum=GetIndicatorLastPeak(shift);
//--- if(macdBuffer[currentExtremum-1]<macdBuffer[lastExtremum] &&
high[currentExtremum-1]>high[lastExtremum])
{
isBearishDivergence=true;
divergenceMsg="Classical bearish divergence on: ";
divergenceStyle=STYLE_SOLID;
}
if(macdBuffer[currentExtremum-1]>macdBuffer[lastExtremum] &&
high[currentExtremum-1]<high[lastExtremum])
{
isBearishDivergence=true;
divergenceMsg="Reverse bearish divergence on: ";
divergenceStyle=STYLE_DOT;
}
//--- Bärenhafte Divergenz wird festgestelltif(isBearishDivergence)
{
bearishDivergence[currentExtremum]=macdBuffer[currentExtremum]+ARROWS_DISPLACEMENT;
//---if(drawPriceTrendLines==true)
DrawTrendLine(TRENDLINE_MAIN,time[currentExtremum-1],time[lastExtremum],high[currentExtremum-1],high[lastExtremum],Red,divergenceStyle);
//---if(drawIndicatorTrendLines==true)
DrawTrendLine(TRENDLINE_INDICATOR,time[currentExtremum-1],time[lastExtremum],macdBuffer[currentExtremum-1],macdBuffer[lastExtremum],Red,divergenceStyle);
//---if(displayAlert==true && shift>=rates_total-3 && time[currentExtremum-1]!=lastAlertTime)
DisplayAlert(divergenceMsg,time[currentExtremum-1]);
}
}
}
//--- Rückgabe des Wertes von prev_calculated für den nächsten Aufrufreturn(rates_total);
}
//+------------------------------------------------------------------+//| Letzte Mulde suchen|//+------------------------------------------------------------------+int GetIndicatorLastTrough(int shift)
{
for(int i=shift-6; i>=2; i--)
{
if(signalBuffer[i] <= signalBuffer[i-1] && signalBuffer[i] <= signalBuffer[i-2] &&
signalBuffer[i] <= signalBuffer[i+1] && signalBuffer[i] <= signalBuffer[i+2])
{
for(int j=i; j>=2; j--)
{
if(macdBuffer[j] <= macdBuffer[j-1] && macdBuffer[j] < macdBuffer[j-2] &&
macdBuffer[j] <= macdBuffer[j+1] && macdBuffer[j] < macdBuffer[j+2])
return(j);
}
}
}
return(0);
}
//+------------------------------------------------------------------+//| Suche nach letztem Peak|//+------------------------------------------------------------------+int GetIndicatorLastPeak(int shift)
{
for(int i=shift-6; i>=2; i--)
{
if(signalBuffer[i] >= signalBuffer[i-1] && signalBuffer[i] >= signalBuffer[i-2] &&
signalBuffer[i] >= signalBuffer[i+1] && signalBuffer[i] >= signalBuffer[i+2])
{
for(int j=i; j>=2; j--)
{
if(macdBuffer[j] >= macdBuffer[j-1] && macdBuffer[j] > macdBuffer[j-2] &&
macdBuffer[j] >= macdBuffer[j+1] && macdBuffer[j] > macdBuffer[j+2])
return(j);
}
}
}
return(0);
}
//+------------------------------------------------------------------+//| ENUM_TRENDLINE_TYPE verwendet von DrawTrendLine |//+------------------------------------------------------------------+
wenn Divergenz Nulllinie unten auch Preis Bildung HL Boden ( Preis, wenn nicht wieder LL gemacht) Histogramm jede andere 5 30 60 240 tf 3 tf unterzeichnet, um fruchtbar
Sie haben den Punkt verpasst. Der Beitrag, den Sie beziehen sich auf war über WIE das Signal von einem EA zu bekommen, können Sie offensichtlich nicht haben, indem Sie nur die letzten 2 Kerzen Werte, Sie brauchen die dritte.
Es ist NICHT möglich, ein frühes Signal zu haben, denn um eine Divergenz zu erkennen, brauchen Sie einen Peak/Trough und dafür brauchen Sie eine zusätzliche Kerze, die SCHLIESSEN. Wenn also Kerze 0 gerade geöffnet hat, bedeutet das, dass Kerze 1 geschlossen ist, und das erlaubt es, den Peak/Trough bei Kerze 2 zu bestätigen. Wenn jemand den Indikator so modifizieren möchte, dass er unbestätigte Hochs/Tiefs verwendet, um ein frühes Signal zu erhalten, kann man das tun, aber ich werde nicht dabei helfen, weil es eine schlechte Idee ist, da man eine Menge schlechter Signale erhalten wird.
Was getan werden könnte, ist das Signal auf Kerze 1 oder sogar Kerze 0 zu zeichnen, aber das wird nichts ändern, und ich beschloss, das Signal auf die Kerze zu zeichnen, die tatsächlich den Peak/Trough zeigen.
Sie haben den Punkt verpasst. Der Beitrag, den Sie beziehen sich auf war über WIE das Signal von einem EA zu bekommen, können Sie offensichtlich nicht haben, indem Sie nur die letzten 2 Kerzen Werte, Sie brauchen die dritte.
Es ist NICHT möglich, ein frühes Signal zu haben, denn um eine Divergenz zu erkennen, brauchen Sie einen Peak/Trough und dafür brauchen Sie eine zusätzliche Kerze, die SCHLIESSEN. Wenn also Kerze 0 gerade geöffnet hat, bedeutet das, dass Kerze 1 geschlossen ist, und das erlaubt es, den Peak/Trough bei Kerze 2 zu bestätigen. Wenn jemand den Indikator so modifizieren möchte, dass er unbestätigte Hochs/Tiefs verwendet, um ein frühes Signal zu erhalten, kann man das tun, aber ich werde nicht dabei helfen, weil es eine schlechte Idee ist, da man eine Menge schlechter Signale erhalten wird.
Was getan werden könnte, ist das Signal auf Kerze 1 oder sogar Kerze 0 zu zeichnen, aber das wird nichts ändern, und ich beschloss, das Signal auf die Kerze zu zeichnen, die tatsächlich den Peak/Trough zeigen.
Sie haben vielleicht auch einen Punkt übersehen.
Im Falle von Renko-Charts ist der aktuelle Balken (meistens) bereits geschlossen, so dass Sie eine Kerze weniger benötigen würden. Oder habe ich etwas übersehen?
Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien
macd divegence
ENEZA PETER MKIRAMWENI, 2021.09.12 12:26
hallo helfen Sie mir mit diesem Indikator es Alarm nach drei bar ich will Alarm sofort nach 1 bar anzeigen
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Indikatoren: MACD-Divergenz
Alain Verleyen, 2013.11.05 19:14
So freundlich.
Das Signal wird beim Schließen einer Kerze gegeben, 1 Kerze in der Vergangenheit (2, wenn Sie die offene Kerze zählen und nicht 3). Das ist normal und so muss es auch funktionieren. Die Divergenz basiert auf der Suche nach einem Extremum (oben/unten). Wenn Sie eine Möglichkeit haben, ein Extremum an der aktuellen Kerze zu erkennen, schlage ich vor, dass Sie programmieren lernen und uns diese großartige Innovation kostenlos zur Verfügung stellen.
Ich danke Ihnen für Ihren Beitrag.
Ich habe diesen Teil geändert und das Problem gelöst. Vielleicht könnte es besser und einfacher gemacht werden, aber es funktioniert. Die Pfeile sind um 1 Takt vorgerückt. Linien ohne Pfeile sind unbestätigte Signale.
wenn Divergenz Nulllinie unten auch Preis Bildung HL Boden ( Preis, wenn nicht wieder LL gemacht) Histogramm jede andere 5 30 60 240 tf 3 tf unterzeichnet, um fruchtbar
Hallo Alain,
Vielen Dank für diesen tollen Indikator!
Ich versuche, die Werte des Datenfensters dieses Indikators in einem EA zu verwenden (siehe Anhang).
Ich verwende die gleiche Logik für alle vier Indizes, aber ich kann die korrekten Werte nur für die letzten beiden (Main und Signal) erhalten.
Für die ersten beiden sehe ich immer eine feste Zahl
wenn, wie im beigefügten Beispiel, einer einen korrekten Wert haben sollte und der andere 0/blank sein sollte
Wissen Sie, warum ich dieses Problem habe?
Ich danke Ihnen.