Der optimale gleitenden Durchschnitt

Gleitende Durchschnitte als sogenannte Trendindikatoren spielen eine große Rolle in der technischen Analyse von Finanzmarktdaten. Der einfache gleitende Durchschnitt (SMA) ist nur für eine visuelle Analyse geeignet, da er in trendschwachen Phasen durch häufige Richtungsänderungen falsche Signale erzeugt. Der einfache exponentielle Durchschnitt (EMA) hat eine von der Größe des gewählten Glättungsmaßes abhängige Filterwirkung mit den entscheidenden Nachteilen, dass a) das Glättungsmaß nicht adaptiv ist und b) eine Trendumkehr angezeigt wird, sobald der aktuelle Wert der Zeitreihe seinen gleitenden Durchschnitt kreuzt, was wiederum zu einer Fülle von Fehlsignalen führt. Der EMA ist wie der SMA nur für visuelle Analysen geeignet. Dieses gilt dann auch für alle Indikatoren, die auf einer einfachen Mittelwertbildung oder auf einer konstanten Glättung nach den Prinzip des EMA basieren.

Die Stärke des optimalen gleitenden Durchschnitts (OMA) besteht darin, dass der aktuelle Wert der Zeitreihe einen von der momentanen Volatilität abhängigen Schwellenwert überschreiten muss, damit der Filter steigt bzw. fällt, wodurch Fehlsignale in trendschwachen Phasen vermieden werden.

Wer Intresse an der vollständigen Herleitung oder den Codes für Tradestation bzw. Metastock hat, kann mich anschreiben.

Gast

mit dem CA bzw. OMA kann ein Trendindiaktor berechnet werden. Werte über +50% zeigen einen Aufwärtstrend, Werte unter -50% einen Abwärtstrend an. Es folgt ein Beispiel für ein Testsignal und einen Indexchart. Die Formeln gibt es demnächst auf meiner Homepage.

Gast

Indexchart mit CA und Oszillator:

YingYang
Mitglied seit 10 Jahre 9 Monate

DrUhl hat freundlicherweise seinen Code zu Verfügung gestellt.

Dabei ist möglicherweise eine grundlegende Vereinfachung des Codes durch Wegfall der zeitintensiven Schleife möglich

Ich nehme den besser lesbaren Code:

Auszug aus dem Code

To1=0,00001
{calculate current gain factor K}
e=1;
Kold=1;
while e>tol begin
K=v3*Kold*(2-Kold);
e=Kold-K;
Kold=K;
end;

Die Schleife will e zu (fast) Null (To1) laufen lassen.
Setzt man e=0
Folgt Kold=K

Eingesetzt in
„K=v3*Kold*(2-Kold);“

erhält man

K=v3*K*(2-K)

Diese Gleichung hat 2 Lösungen
K=0 und
K= (-1+2*v3)/v3

Da man den Glättungsfaktor K=0 bestimmt nicht will,
ist

K= (-1+2*v3)/v3 die gesuchte Lösung.

K soll nicht negativ werden, deshalb sollte noch die Bedingung
„Wenn K<0 dann K=0“ angefügt werden (im entsprechenden Code).

Mit anderen Worten: Die Schleife oben kann durch 2 einfache Zeilen ersetzt werden.

K= (-1+2*v3)/v3
Wenn K<0 dann K=0
Damit sollte der Indikator auch z.B. in einer einfachen Exceltabelle ohne Programmierung dargestellt werden können.

Ich bitte um Überprüfung meiner Gedanken.

Gast

@YingYang
das geht leider nicht!!!
"K=v3*Kold*(2-Kold)" ist eine konvergente rekursive Reihe. In der Schleife wird der Grenzwert dieser Reihe berechnet (iterativ). Dieser Grenzwert ist der gesuchte "Gain-Faktor". Den kann man nicht explizit berechnen. Wenn man die Rechenzeit verkürzen will, bleibt nur den Wert für "tol" größer zu wählen, aber dann auf Kosten der Genauigkeit (tol<<1).

YingYang
Mitglied seit 10 Jahre 9 Monate

@DrUhl

ich würde das erst Mal testen.

metatrader
Mitglied seit 10 Jahre 9 Monate

@YingYang.

Rot: Corrected Ema (Dr.Uhl)
Blau: SMA
Grün: Corrected Ema (YingYang)

Ergebnis siehe Chart ;)

Gast

Jetzt sag uns aber auch wie Du das hingekriegt hast, o allmächtiger Metatrader. Bitte, bitte!

Gast

@YingYang
entschuldige, du hast doch völlig recht ! Damit ist dann der Code für MS auch kein Problem mehr.

{Corrected Average (CA), A.Uhl, Oct. 25, 2005}

vars:
CA(0),SA(0),n(0),
v1(0),v2(0),K(0);

inputs:
Price(Close),length(35);

if CurrentBar=1 then
CA=Price
else
begin

if CurrentBar<length then
n=CurrentBar
else
n=length;

SA=Average(Price,n);
v1=Square(StdDev(Price,n));
v2=Square(CA[1]-SA);

if v2<v1 then
K=0
else
K=1-v1/v2;
CA=CA[1]+K*(SA-CA[1]);
end;

Plot1(CA,"Corrected Average",Red,White,3);
Plot2(SA,"Simple Average",Blue,White,1);

YingYang
Mitglied seit 10 Jahre 9 Monate

#DrUhl

der neue Code mit der weiteren Vereinfachung ist prima. Das Programm kann nun auch in eine Exceltabelle übertagen werden.

Anstatt
CA=CA[1]+K*(SA-CA[1])
nehme ich dann die Umstellung
CA=SA - v1/v2*(SA-CA[1])
vor,
dabei sieht man schön, wie sich der CA um den "Simple Average" bewegt.

Vielen Dank für den Code.

wuelle
Mitglied seit 10 Jahre 9 Monate

@ YingYang [#40]

"Das Programm kann nun auch in eine Exceltabelle übertagen werden."

Leider kann ich den MS Code nicht richtig lesen und somit in Excel übersetzen.

Könntest Du freundlicherweise beschreiben, wie das funktioniert bzw. eine Basis-Excel Tabelle zur Verfügung stellen, auf der man aufbauen kann? Wäre sehr nett.

@Dr Uhl

Welchen Unterschied gibt es zwischen dem OMA und dem corrected Average?

Rückrufservice
Beschreiben Sie bitte Ihr Anliegen, damit wir uns auf den Rückruf vorbereiten können.
Ja, ich habe die Datenschutzerklärung zur Kenntnis genommen und willige ein, dass die von mir angegebenen Daten inklusive der Kontaktdaten zwecks Bearbeitung der Anfrage und für den Fall von Anschlussfragen elektronisch erhoben und gespeichert werden. Meine Daten werden dabei nur streng zweckgebunden zur Bearbeitung meiner Anfrage genutzt und nicht ohne Einwilligung weitergegeben. Diese Einwilligung kann jederzeit mit Wirkung für die Zukunft widerrufen werden.

Jetzt registrieren

Jetzt registrieren und ZMP Live+ 14 Tage kostenlos testen!
  • Dauerhaft kostenfrei
  • Keine Zahlungsinformationen erforderlich