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

@ DrUhl [#20]

sorry, war etwas langsam mit meiner ersten Antwort...

im 2. Chart ist in den Fallenden Bereichen des "Grundkurses" auffällig, das der OMA dann zunächst immer am "oberen" Ende der Schwankungen verläuft und bei steigenden Kursen zunächst immer am "unteren" Ende der Schwankungen verläuft.

Bis der OMA "gelernt" hat den Trend ("Mitte") zu finden dauert es eben...

Gary
Mitglied seit 10 Jahre 9 Monate

@ pullpush

Welches Chartprogramm nimmst du denn her? Habe darunter Interactivebrokersdaten gesehen. ;)

Danke fuer deine Info !

Gast

Um den Indikator für Metastock nutzbar zu machen, brauche ich den MDK. Meine Bewerbungen bei Equis (become a partner) stoßen auf taube Ohren. Kann mir jemand verraten wie ich an den MDK herankomme.

Profile picture for user pullPUSH
pullPUSH
Mitglied seit 10 Jahre 9 Monate

@ Gary [#23]

Ja das sind die IAB Daten-Charts. Finde die Funktionen ganz nützlich auch wenn sie kein "professionelles" Chartprogramm samt Echtzeitdaten ersetzen. Leider darf man sich auf die Verfügbarkeit nicht ganz verlassen. ;O(

Sixer
Mitglied seit 10 Jahre 9 Monate

@DrUhl,

von der Webseite von Alan Hull (http://www.justdata.com.au/Journals/AlanHull/hull_ma.htm)
die Formel für MetaStock:

{Hull Moving Average}
period:=Input("Period",1,200,20) ;
sqrtperiod:=Input("Square Root of Period",1,20,4);
Mov(2*(Mov(C,period/2,W))-Mov(C,period,W),sqrtperiod,W);

Aus dem Thread im Tradestation-Forum für die Tradestation:
(https://http://www.tradestation.com/Discussions/Topic.aspx?Topic_ID=40589)

Function:
{jtHMA - Hull Moving Average Function}
{Author: Atavachron}
{May 2005}

Inputs: price(NumericSeries), length(NumericSimple);
Vars: halvedLength(0), sqrRootLength(0);

{
Original equation is:
---------------------
waverage(2*waverage(close,period/2)-waverage(close,period), SquareRoot(Period)
Implementation below is more efficient with lengthy Weighted Moving Averages.
In addition, the length needs to be converted to an integer value after it is halved and
its square root is obtained in order for this to work with Weighted Moving Averaging
}

if ((ceiling(length / 2) - (length / 2)) <= 0.5) then
halvedLength = ceiling(length / 2)
else
halvedLength = floor(length / 2);

if ((ceiling(SquareRoot(length)) - SquareRoot(length)) <= 0.5) then
sqrRootLength = ceiling(SquareRoot(length))
else
sqrRootLength = floor(SquareRoot(length));

Value1 = 2 * WAverage(price, halvedLength);
Value2 = WAverage(price, length);
Value3 = WAverage((Value1 - Value2), sqrRootLength);

jtHMA = Value3;

Indicator:
{jtHMA - Hull Moving Average Indicator}
{Author: Atavachron}
{May 2005}

{
Inputs:
-------
price: the time series being smoothed, usually Close, High, etc,
but could be RSI(Close, 25) for example.
length: the length of the MA, pretty meaningless in the normal sense
of moving averages, as this quantity is heavily modified
in the code. You need to experiment, do not just use a setting
of 20 because that is what works for you with Simple Moving Averages.
zeroLine: if you are using this in an indicator pane, you might
want to display a centre line of some sort, ths allows
one to set its value
zeroVisible: boolean variable, determines whether the centre line
(zeroLine) is plotted.
upColour: If you wish to differentiate upward movements by colour coding.
downColour: If you wish to differentiate downward movements by colour coding.
colourDeltaBar: Set this to 1 if you wish the colour change to be effective on
the actual bar where the direction change occurred.
Set this to 0 for default behaviour. All other values
are pretty meaningless.
}

Inputs: price(Close), length(21),
zeroLine(0.0), zeroVisible(false),
upColour(Blue), downColour(Red), colourDeltaBar(1);

Value1 = jtHMA(price, length);

Plot1(Value1, "jtHMA");

If ZeroVisible = true then
Plot2(zeroLine, "Zero");

{ Color criteria }
if (Value1 > Value1[1]) then
SetPlotColor[colourDeltaBar](1, upColour)
else if (Value1 < Value1[1]) then
SetPlotColor[colourDeltaBar](1, downColour);

Viel Spaß !

Sixer

Gast

@Sixer
ich verstehe nicht ! Der "Hull Moving Average" ist doch was ganz anderes.

wuelle
Mitglied seit 10 Jahre 9 Monate

@ DrUhl [#24]

Im aktuellen Stocks & Commodities Oktober 2005 stellt John F. Ehlers seinen "Fractal Adapive Moving Average" (FRAMA) vor.

Dein Konzept scheint mir besser als das von Ehlers.

Die Herausgeberin des S&C veröffentlicht regelmäßig Anzeigen, in denen sie nach Autoren sucht.

Wenn Dein Indikator im S&C veröffentlicht wird, kümmern sich die verschiedenen Softwareanbieter um die Programmierung Deines Indikators, weil sie die besprochenen Indikatoren Ihren Anwendern nach Möglichkeit zugänglich machen möchten.

Dax mit FRAMA 16

.

Sammy
Mitglied seit 10 Jahre 9 Monate

@ DrUhl [#1]

Ich würde gerne versuchen, den OMA zu programmieren.
Darf ich fragen, was genau Du als Input-Parameter v(t) verwendest?
Einfach High - Low?

Gast

Metatrader: Wo bist Du, wenn man Dich braucht? ;-)
Könntest Du deine überirdischen Programmierkenntnisse nicht in den Dienst einer guten Sachen stellen?

Gast

so oder ähnlich sieht der MA in ELA aus. Da ich selbst TS nicht benutze und mir nur das ELA-Handbuch vorliegt, kann ich nicht testen.

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

vars:
CA(0),SA(0),n(0),
v1(0),v2(0),v3(0),
e(0),tol(0),Kold(0),K(0);

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

tol=Power(10,-5);

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);
v3=iff(v1=0 OR v2=0,1,v2/(v1+v2));

{calculate current gain factor K}
e=1;
Kold=1;
while e>tol begin
K=v3*Kold*(2-Kold);
e=Kold-K;
Kold=K;
end;
CA=CA[1]+K*(SA-CA[1]);
end;

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

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