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.
Der optimale gleitenden Durchschnitt
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.
Der optimale gleitenden Durchschnitt
Indexchart mit CA und Oszillator:
Der optimale gleitenden Durchschnitt
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.
Der optimale gleitenden Durchschnitt
@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).
Der optimale gleitenden Durchschnitt
@DrUhl
ich würde das erst Mal testen.
Der optimale gleitenden Durchschnitt
@YingYang.
Rot: Corrected Ema (Dr.Uhl)
Blau: SMA
Grün: Corrected Ema (YingYang)
Ergebnis siehe Chart ;)
Der optimale gleitenden Durchschnitt
Jetzt sag uns aber auch wie Du das hingekriegt hast, o allmächtiger Metatrader. Bitte, bitte!
Der optimale gleitenden Durchschnitt
@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);
Der optimale gleitenden Durchschnitt
#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.
Der optimale gleitenden Durchschnitt
@ 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?