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.

Anonymous

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.

Anonymous

Indexchart mit CA und Oszillator:

YingYang
Member for 10 years 9 months

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.

Anonymous

@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
Member for 10 years 9 months

@DrUhl

ich würde das erst Mal testen.

metatrader
Member for 10 years 9 months

@YingYang.

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

Ergebnis siehe Chart ;)

Anonymous

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

Anonymous

@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
Member for 10 years 9 months

#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
Member for 10 years 9 months

@ 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.
Yes, I have read the Privacy Policy note and I consent that the data provided by me, including the contact data, for the processing of the inquiry and in case of questions are electronically collected and stored. My data will only be used strictly for my request and will not be passed without my consent. This consent can be revoked any time with effect for the future.'
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Register now

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