Was Sie mit gleitenden Durchschnitten machen können

Oleh Fedorov | 2 Mai, 2022

Einführung

Ich habe mehrere funktionierende Handelssysteme. Im Allgemeinen verwende ich keine Indikatoren, die für jeden Tick berechnet werden, sondern bevorzuge stattdessen gerade Linien. Aber manchmal stoße ich auf Ideen, die meine Wahrnehmung eines Charts verbessern oder sogar meine Sicht auf den Handel völlig verändern, auch wenn sie einige Berechnungen erfordern.

In diesem Artikel werden einige Ideen im Zusammenhang mit dem beliebtesten und verständlichsten Indikator vorgestellt - dem Gleitenden Durchschnitt (МА).

In seiner einfachsten Version wird der Indikatorwert anhand der bekannten Durchschnittsgleichung berechnet:

MA[i] = (Price[i]+Price[i+1]+...+Price[i+MAPeriod])/MAPeriod

Hier ist MA[i] das nächste Element der Folge, ein Punkt auf einer Kurve. Preis[i] — aktueller Preis, MAPeriode — Anzahl der Elemente für die Mittelwertbildung.

Natürlich können wir jeden beliebigen Preis verwenden: Open, Close, High, Low, gewichtete Durchschnittswerte, etc. Ein Standardindikator erlaubt die Auswahl sowohl des Berechnungspreises als auch der Berechnungsmethoden, einschließlich derer, die komplexer sind als ein einfacher Durchschnitt... Bei den Beispielen lasse ich die Möglichkeit offen, eine Berechnungsmethode auszuwählen. Dies ist jedoch nicht wichtig, um die Idee hinter den betrachteten Methoden zu verstehen. Alle Beispiele funktionieren ziemlich gut, unabhängig davon, ob wir einen "simplen" Gleitenden Durchschnitt (SMA), einen exponentiellen (EMA) oder einen anderen verwenden. Daher wird in allen Screenshots und Standardindikatorszenarien normalerweise der SMA verwendet. Alle Indikatoren verwenden Schlusskurse, wenn nicht anders angegeben. Es steht Ihnen frei, mit diesen Parametern zu spielen, um sie zu verbessern.

Wenn ich von einer einzelnen Kurve spreche, verwende ich in der Regel einen Standard-Periodenwert von 10 Balken. Wenn mehrere Kurven mit unterschiedlichen Perioden in einem einzigen Indikator verwendet werden, sind die verwendeten Perioden meist 5 und 8. Ich verwende nicht mehr als zwei Kurven mit unterschiedlichen Perioden.

Die Farben sind wie folgt: rot — schnell, orange — langsam... Wenn ich etwas anderes verwende, werde ich das im Text ausdrücklich angeben.


Vorlage Indikator

Ich habe mehrere Indikatoren erstellt, um Signale zu visualisieren, die bei der Verwendung verschiedener Ansätze für Kurven ausgelöst werden. Sie basieren auf einer einzigen Vorlage, die einem Standard-MACD, wie er in Standardbeispielen vorkommt, sehr ähnlich ist. Ich glaube, es macht keinen Sinn, hier den gesamten Code der Vorlage zu zeigen.

Jeder Indikator verwendet einen oder mehrere gleitende Durchschnitte und manchmal auch ATR, um einen Abstand zu Pfeilen zu definieren oder Kanallinien zu zeichnen.

Manchmal ist es einfacher, eine Idee zu visualisieren, wenn sich ein Indikator in einem Chart-Fenster befindet, während es manchmal einen Indikator in einem separaten Fenster erfordert. Dies wird mit Hilfe einer der Eigenschaften erreicht. Die folgende Eigenschaft wird für einen Indikator innerhalb eines Chart-Fensters verwendet:

#property indicator_chart_window

Befindet sich ein Indikator in einem separaten Fenster, wird die folgende Eigenschaft verwendet:

#property indicator_separate_window

In diesem Fall werde ich manchmal die Fensterhöhe über diese Eigenschaft einstellen:

#property indicator_height 100

Natürlich kann der Eigenschaftswert geändert werden.

Die Puffernamen haben das Suffix "Buffer" am Ende. Zum Beispiel werden die Standard-Pfeilpuffer ArrowDownBuffer und ArrowUpBuffer genannt. Wenn der Indikator die Linien zeichnet, wird der Puffer entsprechend der Linienfunktion benannt.

Alle globalen Variablen, die ich definiert habe, haben das Präfix "ext" (wenn es sich nicht um Puffer handelt). Zum Beispiel ist extATRData eine globale Variable, die die Quelldaten des ATR-Indikators enthält.

Ich werde Puffer verwenden, ohne in den "Serien"-Modus zu wechseln.

Während der Initialisierung setze ich alle leeren Werte auf 0:

  PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
  PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
  PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);

So brauchen wir nur Pfeile oder Linien anzeigen Bedingungen, d.h. alles, was in der Hauptschleife bleibt.

Ich versuche, Indikator-Redraws zu vermeiden, daher wird das Zeichnen auf einer Nullkerze durchgeführt, während die Daten der bereits geschlossenen Kerzen für Berechnungen verwendet werden.


Linienkreuzung durch den Preis (Trendrichtung)

Im einfachsten Fall wird die Linie МА allein, in ihrer "natürlichen" Form, verwendet. Ich glaube, Sie alle haben ein ähnliches Bild auf Ihren Bildschirmen gesehen:

"Clean" MA

Abb. 1. Einfacher gleitender Durchschnitt

In den meisten Fällen nutzen Händler die Fähigkeit des MA, einem Trend zu folgen. Ein Trend kann als eine Reihe von Kerzen definiert werden, die sich auf einer Seite der Kurve befinden. Wenn beispielsweise mehr als zwei Kerzen unterhalb der Linie schließen, ist der Trend rückläufig und es ist an der Zeit, Verkaufspositionen in Betracht zu ziehen. Wenn der Schlusskurs oberhalb der Kurve liegt, gibt es einen Aufwärtstrend und es ist Zeit zu kaufen... Wenn der Kurs die Kurve kreuzt, sind wir Zeuge einer Trendwende.

Die Bedingungen, die es uns ermöglichen, einen durchschnittlichen Durchbruch zu verfolgen, können wie folgt aussehen:

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      ((close[i-1]<extMAData[i-1]
        && open[i-1]>extMAData[i-1]
       )
       ||(close[i-2]>extMAData[i-2]
          && open[i-2]>extMAData[i-2]
          && close[i-1]<extMAData[i-1]
          && open[i-1]<extMAData[i-1]
         )
      )

    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }
    else
      if(
        ((close[i-1]>extMAData[i-1]
          && open[i-1]<extMAData[i-1]
         )
         ||(close[i-2]<extMAData[i-2]
            && open[i-2]<extMAData[i-2]
            && close[i-1]>extMAData[i-1]
            && open[i-1]>extMAData[i-1]
           )
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   } // main cycle

Anstatt die Eröffnungskurse zu prüfen, können wir unsere Aufmerksamkeit ausschließlich auf die Schlusskurse des aktuellen und des vorherigen Balkens richten. Wenn sie sich auf verschiedenen Seiten der Kurve befinden, sind wir Zeugen eines Durchbruchs.

Die Indikatordatei heißt MA-Breaking.mq5. Wenn man sie auf dem Chart ausführt, ergibt sich folgendes Bild (bei einer Standardkurvenlänge von 10 Balken):

MA — Durchbruch

Abb. 2. Durchbrechen des Durchschnitts

Ich glaube, diese Methode ist ohne zusätzliche Filter nicht sinnvoll. Es sieht so aus, als ob die Anzahl der Aufwärtspfeile fast der Anzahl der Abwärtspfeile entspricht, selbst im Trendbereich. Wenn man die МА-Periode vergrößert, verringert sich die Anzahl der Pfeile, was jedoch nicht sehr hilfreich ist, da ein starker Durchbruch mit einem Trend ohne Rollback eher selten vorkommt. In den meisten Fällen geht einer starken Bewegung eine flache Bewegung voraus. Lassen Sie uns also nach Filtern suchen...


Der МА als Unterstützungs-/Widerstandslinie

Die nächste ziemlich offensichtliche Möglichkeit, die Kurve zu nutzen, ist ihre Anwendung als Unterstützungs-/Widerstandslinie. Wenn der Kurs die Linie berührt, aber nicht überschreitet (auf der gleichen Seite schließt), haben wir ein Handelssignal. Am 17. Februar können wir zum Beispiel 3 Abwärtsbewegungen und, wenn es keine zusätzlichen Filter gibt, eine Aufwärtsbewegung (zu Beginn) erkennen.

Natürlich können wir diese Regel sowohl für die Eröffnung des ersten Handels als auch für die Ergänzung eines bereits bestehenden Handels verwenden.

Dieses Konzept wird in der Datei MA-Support.mq5 demonstriert.

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      (high[i-1]>=extMAData[i-1]
       && close[i-1]<extMAData[i-1]
       && open[i-1]<extMAData[i-1]
      )
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }

    else
      if(
        (low[i-1]<=extMAData[i-1]
         && close[i-1]>extMAData[i-1]
         && open[i-1]>extMAData[i-1]
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   } // Main cycle end

Unten sehen Sie das Ergebnis der Codeoperation:

Der МА als Unterstützungs-/Widerstandslinie

Abb. 3. Verwendung des МА als Unterstützungs-/Widerstandslinie

Dies sieht besser aus als die vorherige Option. Wenn wir Take-Profit-Levels verwenden oder sogar einfach Aufträge durch Pfeile akkumulieren und durch einen entgegengesetzt gerichteten Pfeil wieder aussteigen (offensichtlich unter Verwendung einer Umkehrung), ist die Chance auf einen profitablen Handel hoch.

Je höher die МА-Periode ist, desto niedriger ist ihr Winkel und desto weiter ist sie vom Kurs entfernt. Dadurch werden Durchbruch- und Rückschlagssignale seltener, aber das Niveau wird als Unterstützungs-/Widerstandsniveau zuverlässiger. Ich möchte Ihnen zum Vergleich einen Chart mit einer Periodenlänge von 20 zeigen. Wir können sehen, dass Rückschläge seltener auftreten. Allerdings sind die Signale wahrscheinlich zuverlässiger, sodass ein Stop-Loss-Niveau reduziert werden kann.

МА als Unterstützung/Widerstand (erhöhte Periode)

Abb. 4. MA mit der längeren Periodenlänge (20)

Zum Beispiel, um 4 Uhr morgens. 17. Februar, liefert die rote Kurve ein Kaufsignal und wir erhalten einen Verlust, da die orangefarbene ein Verkaufssignal liefert. Im Falle der roten Linie können wir jedoch Signale um 8 Uhr, 10 Uhr und 15 Uhr nutzen, um die Position aufzustocken.

Bei höheren MA-Periodenlängen treffen die Signale später ein, was dazu führen kann, dass ein Teil des potenziellen Gewinns verloren geht, auch wenn die Anzahl der Positionen sich verringert.


Steigung

Je steiler die Steigung der Linie ist, desto schneller bewegt sich der Kurs und desto wahrscheinlicher ist es, dass sich der Trend bei der nächsten Kerze fortsetzt.

Am einfachsten lässt sich die Steigung anhand der Differenz zwischen dem aktuellen und dem vorherigen Wert messen. Ist die Differenz positiv, bewegt sich die Kurve nach oben, ist die Differenz negativ, bewegt sie sich nach unten.

Der Programmcode der Hauptschleife in MA-Slope.mq5 sieht wie folgt aus:

//--- main cycle
  for(i=start+SlopeShift*2; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]);

    //---

    if(
      slopeIndex<0

    )
     {
      SlopeDownBuffer[i]=slopeIndex;
     }
    else
      if(
        slopeIndex>0
      )
       {
        SlopeUpBuffer[i]=slopeIndex;
       }
   } // main cycle

Hier gibt SlopeShift die Anzahl der Bars an, die vom aktuellen Preis aus weitergegeben werden sollen. Der Standardwert ist eins. Aber wir können ziemlich interessante Ergebnisse erzielen, wenn wir diesen Wert erhöhen, indem wir zum Beispiel die Differenz der MA-Werte in zwei oder drei Balken verwenden.

Ich glaube, die resultierende Kurve sollte als Histogramm angezeigt werden. Das Ergebnis ist unten dargestellt:

МА — Histogramm der Steigung

Abb. 5. Histogramm der Steigung

Das Bild ist recht interessant.

Erstens ist es offensichtlich, dass wir zufällige Bewegungsschwankungen leicht verfolgen und sortieren können. Wenn sich die Richtung der Kurve nur während eines, zwei oder drei Balken ändert, ist es wahrscheinlich verfrüht, von einer Trendänderung zu sprechen. Auf jeden Fall sollten wir äußerst vorsichtig sein, um ihn nicht zu verpassen.

Zweitens: Kursänderungen sind sofort sichtbar. Wenn die Höhe der Diagrammsäule unter einem bestimmten Wert liegt, haben wir es höchstwahrscheinlich mit einer Seitwärtsbewegung zu tun. Es wäre also unvernünftig, länger als 2-3 Balken in Richtung der kleinen Steigung des MA zu handeln.

Drittens, trotz der Tatsache, dass die Kurve auf Trendsegmenten fast monoton steigend oder fallend aussieht, variiert die reale Änderungsrate stark von Balken zu Balken. Dies deutet auf eine Art von relativem Wert hin, der uns wahrscheinlich helfen wird, etwas zu sehen, was wir noch nicht sehen können.

Versuch (МА-Slope-Index-First.mq5)... Code:

//--- main cycle
  for(i=start+SlopeShift*3; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100);
    //---

    if(
      slopeIndex<0
    )
     {
      SlopeDownBuffer[i]=slopeIndex;
     }
    else
      if(
        slopeIndex>0
      )
       {
        SlopeUpBuffer[i]=slopeIndex;
       }
   } // main cycle

Das Hinzufügen eines kleinen Wertes (Point()/100) zu Dividend und Divisor ändert das Ergebnis nicht sehr, aber es ermöglicht uns, den Fehler einer Teilung durch Null zu vermeiden.

Das Bild stellt sich wie folgt dar:

MA — relative Steigung

Abb. 6. Relativer Index der durchschnittlichen Steigung

An den Kreuzungspunkten sind scharfe Spitzen zu erkennen. Verschiebt man den Chart um ein paar Balken nach links, wird der Unterschied noch deutlicher.

МА — relativer Index nach links verschoben

Abb. 7. Relativer Index der MA-Steigung (nach links verschoben)

Abb. 7 zeigt anschaulich, wie die Spitzenwerte die Grenzen einer ziemlich starken Bewegung markieren. Die Differenz der Spitzenwerte zum übrigen Datenfeld ist recht groß. Die Tatsache, dass sich die "Peaks" in ihrer Größe so stark voneinander unterscheiden, sowie die Tatsache, dass der Unterschied zwischen den Peaks und den übrigen Daten so groß ist, führen zum nächsten Schritt. Da die Richtungsänderung so beachtlich ist, sehe ich keinen Sinn darin, die Histogramme eines relativen Steigungsindexes zu analysieren. Stattdessen können wir die Ausgabe einfach grober gestalten, indem wir sie binär machen. Zum Beispiel so (МА-Slope-Index-Bin.mq5):

//--- main cycle
  for(i=start+SlopeShift*3; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100);
    //---

    if(
      slopeIndex<=-SlopeThreshold
    )
     {
      SlopeDownBuffer[i]=-1;
     }
    else
      if(
        slopeIndex>=SlopeThreshold
      )
       {
        SlopeUpBuffer[i]=1;
       }
   } // Main cycle


Dabei ist SlopeThreshold ein Schwellenwert der vorherigen Diagrammleistenhöhe, bei dem das Signal ausgelöst wird. Auf dem Bild ist der Parameterwert gleich 5.

Relative МА Steigung (binär)

Abb. 8. Relativer Index der durchschnittlichen Steigung (binär). SlopeThreshold=5.

Nachstehend ein weiteres Bild mit SlopeThreshold=15

Relativer Steigungsindex, SlopeThreshold=15

Abb. 9. Relativer Index der durchschnittlichen Steigung (binär). SlopeThreshold=15.

Diese Streifen sind auf jeden Fall einen genaueren Blick wert!

Offensichtlich weisen solche Markierungen auf einen Richtungswechsel der aktuellen Kerze hin, oder auf 2-3 oder noch mehr Kerzen nach der markierten Kerze. In jedem Fall gibt es eine klare Abhängigkeit des Trends von der Kombination der Markerfarben, der Hauptrichtung und der aktuellen Kerze. Natürlich sollten wir Statistiken sammeln, zum Beispiel auf die Art und Weise, die ich in meinem Artikel über Tabellenkalkulationen beschrieben habe. In Kombination mit den anderen hier vorgestellten Methoden sieht der Indikator schon vielversprechend aus...

Natürlich können die binären Streifen auf dem Histogramm leicht durch Pfeile ersetzt werden, ähnlich wie bei den vorherigen Indikatoren.


Kanäle auf der Grundlage eines einzelnen Gleitenden Durchschnitts

Zusätzlich zu den oben beschriebenen Methoden können wir Kanäle auf der Basis von gleitenden Durchschnitten erstellen, um die Volatilität der Kursbewegung zu berücksichtigen. Die Möglichkeiten sind zahlreich. Ich werde nur zwei davon besprechen.

Die erste ist sehr einfach, da sie nur den Standard-MA-Indikator erfordert. Beim Hinzufügen eines Indikators auf dem Chart sollten wir einfach Levels hinzufügen. Der einzige Nachteil ist, dass jeder Zeitrahmen seine eigenen Niveaus hat. Ich habe sie in einem einzigen "Paket" zusammengefasst, damit ich sie nicht jedes Mal eingeben muss, wenn ich den Zeitrahmen wechsle. Für den JPY sieht das Bild wie folgt aus:

Einfacher Kanal — MA

Abb. 10. Liste der Kanalwerte

Das endgültige Bild auf H1 sieht wie folgt aus:

Kanal aus den Levels

Abb. 11. Aussehen der Levels (H1)

Die Levels sind hier auf einen Rollback eingestellt. Wenn also eine Kerze ein Level berührt und von diesem zurückprallt (oder ihm ziemlich nahe kommt), steigen Sie gegen den Trend ein. Zum Beispiel zeigt der Kanal auf dem Screenshot, dass am 22. Februar ein guter Zeitpunkt zum Verkaufen war. Wir können einen Auftrag in der Mitte der Signalkerze oder am Ende erteilen (in diesem Fall, wenn wir nach einem Rollback einsteigen, könnte ein Auftrag beim Tiefpunkt der Signalkerze - 115,100 - erteilt werden, während ein Stopp-Level bei 115,265 gesetzt werden könnte). Das unmittelbare Ziel ist das Berühren des Durchschnitts, während das endgültige Ziel das Berühren einer gegenüberliegenden Grenze desselben Kanals ist.

In diesem Fall ist es jedoch auch möglich, den Durchbruch des engen Kanals zu handeln. Beispielsweise schloss die 9-Uhr-Kerze am 22. Februar oberhalb der engen Kanalgrenze. Zwei Aufwärtskerzen haben über dem Durchschnitt geschlossen, während die dazwischen liegende Abwärtskerze nicht über die untere Grenze hinausgelangt ist. Die Steigung des ist eindeutig rückläufig (dies ist am deutlichsten zu sehen, wenn wir den Chart mit eingestellter MA-Steigung betrachten). All dies kann als klares Kaufsignal gewertet werden. Ein Stop-Level kann bei 114,570 gesetzt werden, der Einstiegspunkt kann anhand von Levels berechnet werden. Wir können ihn bei 115,230 ansetzen. Alternativ können wir auch einen Trailing-Stop nach Kerzen oder eine andere Methode verwenden, die wir wollen.

Bitte beachten Sie, dass nur zwei Kanäle auf der Periode zu sehen sind: der innerste Kanal und der etwas größere. Wenn wir zu einem höheren Zeitrahmen, z.B. D1, wechseln, ist der Kanal +-50 fast verborgen, während +-300 und +-1500 zu operativen Kanälen werden können. Auch der monatliche Kanal ist manchmal zu sehen. Er kann sogar Signale liefern, aber die am besten sichtbaren Kanäle werden als Hauptkanäle verwendet.

Mehrere Kanäle (D1)

Abb. 12. Aussehen der Level (D1)

Ein ähnliches Bild zeigt sich auf der Wochen-/Monatsskala. Der vierte Kanal ist dafür am besten geeignet, während der dritte als interner und zusätzlicher Kanal verwendet werden kann.

Der innerste Kanal ist für М1-М15 vorgesehen.

Das Einstellungsprinzip ist offensichtlich: Wir schalten auf den erforderlichen Zeitrahmen um und wählen die Größe der Stufen so, dass wir eine minimale Anzahl von Berührungspunkten haben, während wir gleichzeitig die größtmögliche Amplitude zwischen ihnen haben. Am einfachsten geht das, indem man die Amplitude der wesentlichen Korrektur im aktuellen Zeitrahmen misst und durch 2 teilt. Die folgende Animation veranschaulicht diesen Vorgang.

Messung der Kanalgröße

Abb. 13. Messen der Kanalvolatilität (D1)

Nach einigen groben Schätzungen müssen wir die Größe eventuell genauer einstellen, aber das ist ziemlich einfach...


Kanäle auf der Grundlage von zwei gleitenden Durchschnitten (ATR3x5)

Die oben beschriebenen Kanäle sind gut, aber sie haben einige Nachteile.

Erstens muss die Kanalgröße für jeden Zeitrahmen und jedes Symbol manuell ausgewählt werden. Diesen Prozess zu automatisieren, scheint eine schwierige Aufgabe zu sein.

Zweitens werden die Pegel nicht in Puffern gespeichert, was bedeutet, dass es schwierig wäre, sie programmatisch zu verwenden.

Der Kanal, der auf gleitenden Durchschnitten und ATR basiert, hat diese Nachteile nicht. Die Idee ist einfach. Wir nehmen zwei gleitende Durchschnittsindikatoren mit der Periode von 3. Einer davon wird auf Hochs (high) angewendet, der andere auf Tiefs (low). Verschieben Sie dann die erhaltenen Linien im Abstand einer 5-Periode ATR in die entsprechende Richtung (die untere geht nach unten, die obere nach oben).

Der Kanal ist fertig! Er passt perfekt zu jedem Symbol und funktioniert meistens mit einem Rollback, da Durchbrüche ziemlich selten sind. Ich habe auch die Pfeile hinzugefügt, um Berührungen der Kanalgrenzen zu erkennen.

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    MAUpBuffer[i]=extMAUpData[i]+extATRData[i]*DistanceCoefficient;
    MADownBuffer[i]=extMADownData[i]-extATRData[i]*DistanceCoefficient;

    if(
      (high[i-1]>=MAUpBuffer[i-1]
       && close[i-1]<MAUpBuffer[i-1])
      ||(
        close[i-2]>MAUpBuffer[i-2]
        && close[i-1]<MAUpBuffer[i-1]
      )
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }
    else
      if(
        (low[i-1]<=MADownBuffer[i-1]
         && close[i-1]>MADownBuffer[i-1])
        ||(
          close[i-2]<MADownBuffer[i-2]
          &&close[i-1]>MADownBuffer[i-1]
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   }// main cycle

Hier ist DistanceCoefficient ein Indikatorparameter, mit dem wir den Abstand zu den Kanalgrenzen ändern können, um den Indikator an bestimmte Bedingungen anzupassen. Der Parameter kann jeden beliebigen Bruchteil eines Wertes annehmen. Es macht jedoch wenig Sinn, mehr als 2 einzustellen, da die Pfeile in diesem Fall fast vollständig verschwinden, d.h. es werden keine Abschlüsse gemacht.

ART3x5-Kanal

Abb. 14. ATR3x5-Kanal

Natürlich kann der Indikator in Verbindung mit jedem anderen hier beschriebenen (oder nicht beschriebenen) Indikator verwendet werden.

Achten Sie beim Betrachten des Bildes darauf, wie der Preis mit den Ober- und Untergrenzen des Indikators interagiert. Das könnte hilfreich sein.


Mehrere Indikatoren mit unterschiedlichen Periodenlängen

Bis jetzt haben wir eine einzige MA-Linie für den Empfang von Kauf- und Verkaufssignalen verwendet. Viele Händler sind jedoch der Meinung, dass die Einstiegsgenauigkeit durch Hinzufügen eines weiteren Indikators oder mehrerer Indikatoren erheblich verbessert werden kann.

Erstellen wir also einen Chart mit zwei Kurven mit den Periodenlängen von 5 und 8 Balken. Die Periodenlängen sind der Fibo-Serie entnommen. Eine der Perioden beschreibt die "schnelle" Linie, während die andere die "langsame" beschreibt.

Zwei gleichzeitig angezeigte MAs

Abb. 15. Zwei MAs auf einem Chart

Zusätzlich zu den bereits betrachteten Merkmalen haben wir nun die Möglichkeit, die relative Position der Kurven und ihre "Ko-Direktionalität" (oder Divergenz) zu sehen. Der Abstand zwischen den МАs wird ebenfalls angezeigt.

Jeder der Parameter kann einige der von den Kurven angezeigten Bewegungsattribute verstärken oder abschwächen und auch unabhängige Einstiegssignale liefern.


Relative Position. Sich kreuzende MAs

Wenn der schnelle MA über dem langsamen MA liegt, befinden wir uns höchstwahrscheinlich in einem Aufwärtstrend, und die Wahrscheinlichkeit, dass die nächste Kerze aufwärts tendiert, ist sehr hoch. Es sollten auch andere Parameter berücksichtigt werden, z. B. die Steigung der Signallinie und andere Parameter.

Wenn der schnelle MA unter dem langsamen liegt, haben wir einen "globalen" (für den aktuellen Zeitrahmen) Abwärtstrend, und die Wahrscheinlichkeit, dass jede nachfolgende Kerze bärisch ist, steigt stark an, bis wir den Höhepunkt erreichen...

Wir können einen Trendwechsel annehmen, wenn der schnelle MA den langsamen durchbricht.

Wir sollten versuchen, einen Indikator zu entwickeln, der auf sich kreuzende MAs reagiert. Außerdem sollten wir auch die Seitwärtsbewegungen berücksichtigen, um Fehleinstiege zu reduzieren. Dies kann z. B. durch Berücksichtigung der Steigungsgröße des schnellen MA geschehen. In diesem Fall können wir den nächsten Code erhalten, um nach Signalen zu suchen (MA2-Breaking):

//--- main cycle
  for(i=start+3+SlopeShift*2; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      extMAFastData[i-1]<extMASlowData[i-1]
      && extMAFastData[i-2]>=extMASlowData[i-2]
      && MASlope(extMAFastData,i-1)<-SlopeThreshold
      && MASlope(extMASlowData,i-1)<SlopeThreshold/SlowDelimiter
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/3;
     }
    else
      if(
        extMAFastData[i-1]>extMASlowData[i-1]
        && extMAFastData[i-2]<=extMASlowData[i-2]
        && MASlope(extMAFastData,i-1)>SlopeThreshold
        && MASlope(extMASlowData,i-1)>-SlopeThreshold/SlowDelimiter
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/3;
       }
   } // main cycle

Hier ist MASlope eine Funktion, die die MA-Steilheit auf eine ähnliche Weise berechnet wie das Beispiel im Abschnitt Steigung. Sie akzeptiert als Parameter das Datenfeld für die notwendige Kurve und den Balkenindex, mit dem die Berechnungen durchgeführt werden.

SlopeTreshold — Schwellenwert des schnellen MA Steigungsdiagramms. Wie Sie sich vielleicht erinnern, handelt es sich höchstwahrscheinlich um eine Seitwärtsbewegung, wenn die Fast-MA-Steigung im Moment des Übergangs zu klein ist. Eine Seitwärtsbewegung ist in der Regel mit einer großen Anzahl von falschen Signalen verbunden, die zu Verlusten führen.

SlowDelimiter — Schwellenwert für die langsame MA-Steigung. Manchmal haben wir ein ziemlich gutes Signal, wenn der schnelle MA bereits nach unten gekippt ist, während der langsame MA noch nicht umgedreht hat, obwohl er kurz vor der Umkehr steht. Mit anderen Worten, der Eintrag

MASlope(extMASlowData,i-1)>-SlopeThreshold/SlowDelimiter

bedeutet Folgendes: Die langsame MA-Steigung kann entweder einen kleinen negativen Wert haben (nach unten gerichtet, wenn auch leicht), gleich Null sein oder positiv, aber nicht stark negativ.

Wenn wir den Indikator in seiner "klaren" Form verwenden, sollten der Schwellenwert und das Begrenzungszeichen für jedes Instrument und jeden Zeitrahmen separat ausgewählt werden. Unten sehen Sie das Ergebnis für USDJPY H1 mit SlopeTreshold=0,017 und SlowDelimiter=5:

MA-Crossing-Signale unter Berücksichtigung der Steigung

Abb. 16. MA-Kreuzungssignale unter Berücksichtigung der Steigung

Das Bild hat keine Linien, damit die Pfeile deutlicher zu sehen sind. Wenn wir den richtigen Take-Profit-Wert (oder Exit-Level) wählen, können wir fast aus jedem Pfeil einen Gewinn erzielen, indem wir Stop-Levels setzen, die nicht zu verlustbringend sind.

Das folgende Bild zeigt denselben Chart bei näherer Betrachtung (größerer Zoom).

MA-Kreuzung (vergrößert)

Abb. 17. MA-Kreuzung unter Berücksichtigung der Steigung (vergrößert)

Wie Sie sich vielleicht erinnern, erscheint das Signal bei der Nullkerze. Es wird jedoch das vorherige Intervall analysiert. Um also zu verstehen, warum ein Pfeil gezeichnet wird, sollten wir uns das Intervall von der grünen Linie bis zum Balken links ansehen.

Warum haben wir nicht zwei Pfeile auf der rechten Seite? Die Steigung überschreitet weder den Schwellenwert für einen langsamen noch für einen schnellen MA, und der Indikator betrachtet dieses Intervall als eine Seitwärtsbewegung. Hätte ich jedoch mit diesen Signalen in diesem Bereich gehandelt, hätte ich wahrscheinlich keinen Grund, mich zu beschweren, da der Trend weiter anstieg und einen Verkauf zu einem besseren Preis ermöglichte.

MA-Kreuzung — Trend setzt sich fort

Abb. 18. Kreuzungssignale: Trend setzt sich fort.


Schlussfolgerung

Ich habe noch einige Dinge zu diesem Thema zu sagen, aber das werde ich in einem anderen Artikel tun.

In diesem Artikel habe ich mich mit den grundlegenden Dingen beschäftigt, die mit den MAs zusammenhängen und die es uns ermöglichen, die allgemeine Richtung der Kursbewegung zu verfolgen.

Außerdem habe ich Codes von Indikatoren grafisch dargestellt, um die Verwendung der wichtigsten MA-Parameter für Handelsentscheidungen zu demonstrieren.

Ich habe gezeigt, wie man eine Handelsstrategie verbessern kann, indem man die Eigenschaften bekannter Indikatoren kombiniert und sie gemeinsam anwendet.

Im nächsten Artikel möchte ich zeigen, wie man die Position jeder Kerze auf der Grundlage von Daten über gleitende Durchschnitte und davon abgeleitete Indikatoren berechnen kann.

Der Artikel bietet keine Garantie dafür, dass die hier enthaltenen Informationen Ihnen bei Ihrem Handel helfen werden.

Möge der Gewinn bei Ihnen bleiben!