Page 1 of 1

MACD als Filter - CalculateAtEveryTick ?

Posted: 30 Nov 2013 20:07
by triboon
Hallo,

wenn ich den MACD als Filter einsetze, ist die Ausgabe der entsprechenden Kauf- bzw. Verkaufssignale (roter/grüner Hintergrund) im Hauptchart
erst nach Beendigung der jeweiligen Kerze oder Periode vorgesehen.
Da ich das Signal des MACD "realtime" benötige, soll hier ein sog. flackern der Hintergrundfarbe der aktuellen Kerze entstehen, sobald der MACD die
Nulllinie oder EMA´s kreuzt. Es soll bei jedem Tick geprüft werden und in diesem Moment eine Färbung des Hintergrunds erfolgen.
Können Sie mir hier weiterhelfen, wie ich den Quelltext ändern muß ??

Vielen Dank
Gruß
Timo

Express MACD_ZeroTrigger;

Vars

Series fastMA, slowMA, Signalline, MACD, Zeroline(0);

Input
$slowEMA(1, 200, 26),
$fastEMA(1, 200, 12),
$smooth(1, 200, 9);

Calculation
If IsFirstbar() then begin
ExpMovingAverage(c, fastMA, $fastEMA);
ExpMovingAverage(c, slowMA, $slowEMA);
end
MACD = fastMA-slowMA;
If IsFinalBar() then ExpMovingAverage(MACD, Signalline, $smooth);

Interpretation
begin
if (MACD >= Zeroline) and (MACD >= Signalline) then Sentiment = 100;
if (MACD < Zeroline) and (MACD <= Signalline) then Sentiment = 0;
end

plot (MACD, red, 1);
plot (Signalline, darkblue, 1);
plot (zeroline, grey, 1);

Re: MACD als Filter - CalculateAtEveryTick ?

Posted: 02 Dec 2013 20:27
by WHS Support
Guten Tag,

eine Anwendung des MACDs in dieser Form nutzt unter anderem die bekannte Whitelink Vermögensverwaltung (http://www.whitelinktrading.ch), die diesen Indikator auch in dieser Form für die FutureStation umgesetzt haben.
Wir möchten Sie daher bitten sich diesbezüglich am besten direkt mit Whitelink in Verbindung zu setzen.

Freundliche Grüße,
Timo
WH SelfInvest

Re: MACD als Filter - CalculateAtEveryTick ?

Posted: 11 Dec 2013 19:18
by sffragen
Hallo!

Ich fand die Idee interessant und wollte diese Codeerweiterung ausprobieren. Es hat leider nicht funktioniert (s. Anhang).
Im Masterchart gibt es keine Veränderungen. Und die Grafik des Indikators hat keine neutralen Phasen. Das Bild ist durchgehend rot oder grün.
Wird mich interessieren, ob es bei Timo (tribon) funktioniert hat.
Schönen Abend noch.

Re: MACD als Filter - CalculateAtEveryTick ?

Posted: 15 Dec 2013 21:30
by sffragen
Hallo!

Ich melde mich noch ein Mal. Mit dem Blinken klappt es tatsächlich. Es blinkt aber solange die Kerze aufgebaut wird. Nach dem Sprung zu der nächsten Kerze ensteht leider weiterhin kein neutraler Bereich (weiß). Sogar wenn beim Kerzenaufbau der Bereich neutral (weiß) war, wird er sofort rot rot oder grün eingefärbt, sobald der Sprung zur neuen Kerze erfolgt. Die Einfärbung des Indikators erfolgt letztendlich anhand der Nulllinie und MACD. Die Signallinie spielt dann anscheinend keine Rolle, obwohl der Code eindeutig Vorgaben für die Auswertung von beiden Kriterien enthält.
if (MACD >= Zeroline)and (MACD >= Signalline)
if (MACD < Zeroline) and (MACD <= Signalline)
Freundliche Grüße

Re: MACD als Filter - CalculateAtEveryTick ?

Posted: 16 Dec 2013 08:30
by WHS Support
Hallo,

Der Code enthält beide Parameter, da man so z.B. ein Kreuzen ober oder unterhlab der Nulllinie als Bedingung nehmen kann. Also nicht nur das Kreuzen an sich, sondern auch die Stelle, wo es ist.

Freundliche Grüße
Dominic
WHS

Re: MACD als Filter - CalculateAtEveryTick ?

Posted: 04 Jan 2014 21:18
by triboon
Hi,
sorry für die späte Antwort.
Bei mir funktioniert der Indikator wie geplant. Wenn er als Filter eingefügt wird, bekomme ich das jeweilige Sentiment im Hauptchart angezeigt.
Sobald die Signallinie die Nulllinie von unten nach oben kreuzt, bekomme ich ein grünes Filtersignal, dieses erlischt, sobald die Signallinie den MACD oberhalb der Nullinie von oben nach unten kreuzt. Umgekehrt funktioniert dies natürlich auch.

Hier aber eine weitere Frage:
Wenn ich den Indikator als Sentimentor einfüge, erhalte ich leider keine Kauf und Verkaufs Triggersignale ?? Woran liegt das ?
Ich würde diese Signale gern mal backtesten.
Vielen Dank

Hier nochmal der Quelltext:
Express TKMACDZeroTrigger;

Vars

Series fastMA, slowMA, Signalline, MACD, Zeroline(0);

Input
$slowEMA(1, 200, 26),
$fastEMA(1, 200, 12),
$smooth(1, 200, 9);

Calculation
If IsFirstbar() then begin
ExpMovingAverage(c, fastMA, $fastEMA);
ExpMovingAverage(c, slowMA, $slowEMA);
end
MACD = fastMA-slowMA;
If IsFinalBar() then ExpMovingAverage(MACD, Signalline, $smooth);

Interpretation
begin
if (MACD >= Zeroline) and (MACD >= Signalline) then Sentiment = 100;
if (MACD < Zeroline) and (MACD <= Signalline) then Sentiment = 0;
end

plot (MACD, red, 1);
plot (Signalline, darkblue, 1);
plot (zeroline, grey, 1)

Re: MACD als Filter - CalculateAtEveryTick ?

Posted: 06 Jan 2014 22:15
by triboon
Hi,
vielen Dank für die schnelle Antwort. Habe die Variante ausprobiert, funktioniert aber irgendwie leider nicht so wie ich mir das vorstelle.


Wenn ich den Indikator als FILTER einfüge, bekomme ich das gewünschte Ergebnis (siehe Datei Anhang "MACD").
Sobald ich ihn aber als SENTIMENTOR einfüge, erhalte ich die Buy- und Sell-Triggerpunkte nur beim kreuzen der Nulllinie.(siehe Datei Anhang"MACD-fehler")

Mein Ziel ist es aber einen Buy-Entry beim kreuzen der roten Signallinie von unten nach oben der Nulllinie und einen Exit beim kreuzen der
Signallinie von oben nach unten mit dem MACD. Sowie ein Re-Entry bzw Exit beim kreuzen der Signallinie mit dem MACD oberhalb der Nullinie.
Das gleiche vorgehen natürlich als Sell-Entry.

Was mache ich hier falsch ???
Danke für die Hilfe

Hier nochmal der Quelltext

Express TKMACDZeroTrigger;

Vars

Series fastMA, slowMA, Signalline, MACD, Zeroline(0);

Input
$slowEMA(1, 200, 26),
$fastEMA(1, 200, 12),
$smooth(1, 200, 9);

Calculation
If IsFirstbar() then begin
ExpMovingAverage(c, fastMA, $fastEMA);
ExpMovingAverage(c, slowMA, $slowEMA);
end
MACD = fastMA-slowMA;
If IsFinalBar() then ExpMovingAverage(MACD, Signalline, $smooth);

Interpretation
begin
if (MACD >= Zeroline) and (MACD >= Signalline) then Sentiment = 100;
if (MACD <= Zeroline) and (MACD <= Signalline) then Sentiment = 0;
end

plot (MACD, red, 1);
plot (Signalline, darkblue, 1);
plot (zeroline, grey, 1);