English Русский 中文 Español 日本語 Português
Zeichnen Horizontaler Durchbruch-Ebenen mit Fractals

Zeichnen Horizontaler Durchbruch-Ebenen mit Fractals

MetaTrader 4Beispiele | 3 März 2016, 12:02
864 0
Victor Chebotariov
Victor Chebotariov

Fractals

Fractals sind einer der fünf Indikatoren von Bill Williams Handelsstrategie, die es ermöglichen Spitzen und Böden zu ermitteln. Die technische Definition eines Up-Fractals, ist eine Reihe von mindestens fünf aufeinanderfolgenden Balken, die zwei Balken mit niedrigerem Maximum direkt vor und hinter dem höchsten Maximum hat. Die entgegengesetzte Konfiguration (eine Reihe von fünf Balken, die höhere Minimums vor und hinter dem tiefsten Minimum) entspricht Down-Fractals. Fractals haben Hoch- und Tief-Werte und sind mit Pfeilen auf dem Chart markiert.

Wenn Sie das Chart genau betrachten, werden Sie verstehen, dass ein Überschreiten der Fractal-Ebenen häufig zur Fortsetzung der Bewegung in die Richtung des Fractals neigt. Bei einem steigenden Markt, dient diese Art des Überschreitens dem Halten einer Long-Position. Die niedrige Fractal-Ebene ist das Überschreiten des Support-Niveaus, was ein Signal zum Schließen einer Long-Position ist. Alles funktioniert auf die gleiche Weise, jedoch umgekehrt bei einem Abwärtstrend. Die Verwendung dieser Strategie in einem seitwärts bewegenden Markt wird keine Ergebnisse erbringen.


Indikator der Fractal Ebenen

Um die Ebene des letzten oberen und unteren Fractals einfacher zu bestimmen, können wir einen einfachen Indikator schreiben, der die Ebenen mit den horizontalen Ebenen zeichnet.

Mit dem "Expert Advisor Wizard" erstellen wir den Hauptteil des Indikators. Dazu führen wir die Befehle "Datei -> Neu" aus oder betätigen die Schaltfläche in der Werkzeugleiste. Der "Expert Advisor Wizard" wird auf dem Bildschirm geöffnet.

  • Im ersten Schritt wählen Sie "Benutzerdefinierter Indikator".
  • Im zweiten Schritt müssen Sie Name, Autor, Link und Parameter bestimmen. Da wir die Fractal-Anzeige für unseren Indikator verwenden, haben wir keine einstellbaren Parameter, also geben wir nur Name, Autor und Link an.
  • Im dritten Schritt (in neuen MetaEditor Versionen ist dies der vierte Schritt) bietet der Wizard uns an, die Parameter zu Anzeige des benutzerdefinierten Indikators festzulegen. Da unser Indikator im Hauptchart angezeigt werden soll, setzen wir kein Häkchen bei "Indikator in separatem Fenster". Des Weiteren wird angeboten die Indizes zu bestimmen. Wir benötigen zwei Indizes: Einen für die Ebene des oberen Fractals und einen weiteren für die Ebene des unteren Fractals. Beide Indizes werden den "Linien" Typ haben, wir wählen die blaue Farbe für den ersten Index und die rote Farbe düe den zweiten Index und können dann die "Fertig stellen" Schaltfläche betätigen.

Die Erstellung des Körpers des Programms ist abgeschlossen, es sollte wie folgt aussehen:

//+------------------------------------------------------------------+
//|                                                 FractalsLine.mq4 |
//|                             Copyright © 2006, Victor Chebotariov |
//|                                      http://www.chebotariov.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Victor Chebotariov"
#property link      "http://www.chebotariov.com/"
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----

   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Nun bleibt nur noch ein kleines Stück Code einzufügen und unser Indikator wird fertig sein.

Wir brauchen:

1. Um den Wert des Indikators für jeden Balken zu berechnen, benötigen wir den Zyklus:

int i=Bars-counted_bars-1;
 
while(i>=0)
  {
   // Here we calculate the value of the indicator for each bar (i)
   i--;
  }

2. Um die Werte der oberen und unteren Fractals zu erhalten:

double upfrac_val=iFractals(NULL,0,MODE_UPPER,i+1);
double lofrac_val=iFractals(NULL,0,MODE_LOWER,i+1);

3. Das wichtigste - um den Wert des letzten Fractals zu behalten, werden wir Rückgriff auf die globalen Variablen haben:

if(upfrac_val>0)
  {
   GlobalVariableSet(Symbol()+Period()+"upfrac",upfrac_val);
  }
else if(lofrac_val>0)
  {
   GlobalVariableSet(Symbol()+Period()+"lofrac",lofrac_val);
  }

4. Es bleibt das Auslesen der Daten aus den globalen Variablen und diese an unsere Indizes zu übergeben:

ExtMapBuffer1[i] = GlobalVariableGet(Symbol()+Period()+"upfrac");
ExtMapBuffer2[i] = GlobalVariableGet(Symbol()+Period()+"lofrac");

Der betriebsbreite Zustand unseres Indikators hat das folgende Aussehen::

//+------------------------------------------------------------------+
//|                                                 FractalsLine.mq4 |
//|                             Copyright © 2006, Victor Chebotariov |
//|                                      http://www.chebotariov.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Victor Chebotariov"
#property link      "http://www.chebotariov.com/"
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   int i=Bars-counted_bars-1;
 
   while(i>=0)
     {
      double upfrac_val=iFractals(NULL,0,MODE_UPPER,i+1);
      double lofrac_val=iFractals(NULL,0,MODE_LOWER,i+1);
      if(upfrac_val>0)
        {
         GlobalVariableSet(Symbol()+Period()+"upfrac",upfrac_val);
        }
      else if(lofrac_val>0)
        {
         GlobalVariableSet(Symbol()+Period()+"lofrac",lofrac_val);
        }
      ExtMapBuffer1[i] = GlobalVariableGet(Symbol()+Period()+"upfrac");
      ExtMapBuffer2[i] = GlobalVariableGet(Symbol()+Period()+"lofrac");
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Er muss nur noch kompiliert werden, im Menü mit dem Befehlen "Datei -> Kompilieren" oder betätigen der Schaltfläche in der Werkzeugleiste.

Der neu erstellte Indikator kann dem Chart hinzugefügt werden.


Praktische Anwendung

Im ersten Fall können die Fractal-Ebenen nützlich sein um die StopLoss Ebene unter die rote Linie in einem steigenden Markt zu verschieben. Sie müssen den StopLoss in einem rückläufigen Markt über der blauen Linie halten. Auf diese Weise ist der sichere intelligente Abstand zwischen dem StopLoss und dem Markt gewährleistet.

Zum Beispiel, wir sind in dem Markt eingetreten (sehen sie Chart Markierung 1) mit dem StopLoss über der blauen Linie (Markierung 2), wird die rote Linie durchbrochen (Markierung 3), verschieben wir den StopLoss (Markierung 4), wenn ein neuer Durchbruch entritt (Markierung 5), verschieben wir den StopLoss entsprechend (Markierung 6). Wird die blaue Linie durchbrochen (Markierung 7), schließen wir die Position.

Um FractalsLine als Trailing-Stop zu verwenden, müssen wir zwei kleine Stücke Code in den EA einfügen:

Daten erhalten von dem FractalsLine Indikator:

double FLU = iCustom(NULL,0,"FractalsLine",0,0); // Blue fractal line
double FLL = iCustom(NULL,0,"FractalsLine",1,0); // Red fractal line

Trailing-stop based on the FractalsLine indicator:

if(Close[0]>FLU) //Trailing-stop for the long positions
  {
   if(OrderStopLoss()<FLL-3*Point || OrderStopLoss()==0)
     {
      OrderModify(OrderTicket(),OrderOpenPrice(),FLL-3*Point,OrderTakeProfit(),0,Green);
      return(0);
     }
  }
if(Close[0]<FLL) //Trailing-stop for the short positions
  {
   if(OrderStopLoss()>FLL+(Ask-Bid+3)*Point || OrderStopLoss()==0)
     {
      OrderModify(OrderTicket(),OrderOpenPrice(),FLL+(Ask-Bid+3)*Point,OrderTakeProfit(),0,Red);
      return(0);
     }
  }

Die Implementierung des auf dem FractalsLine Indikator basierenden Trailing-Stop in den MACD Sample Expert Advisor brachte ein positives Ergebnis. Dies ist aus dem Vergleich der Tests ersichtlich.


Test des Standard MACD Sample

Symbol EURUSD (Euro vs US Dollar)
Periode 1 Std. (H1) 2008.01.02 12:00 - 2008.06.30 23:00 (2008.01.01 - 2008.07.01)
Modell Jeder Tick (präziseste Methode, die auf allen verfügbaren kleinsten Zeitrahmen basiert zur Generierung jedes Ticksignals)
Parameter TakeProfit=50; Lots=0.1; TrailingStop=30; MACDOpenLevel=3; MACDCloseLevel=2; MATrendPeriod=26;
Balken im Test 4059 Modellierte Ticks 1224016 Modellierungsqualität 90.00%
Fehler in Chartanpassung 1
Ursprüngliche Einzahlung 10000.00
Nettoprofit gesamt 182.00 Bruttoprofit 1339.00 Bruttoverlust -1157.00
Profitfaktor 1.16 Erwartetes Ergebnis 3.79
Absoluter Rückgang 697.00 Maximaler Rückgang 827.00 (8.16%) Relativer Rückgang 8.16% (827.00)
Anzahl an Trades 48 Sell-Positionen (davon gewonnen %) 28 (82.14%) Buy-Positionen (davon gewonnen %) 20 (85.00%)
Gewonnene Trades (in % von Gesamt) 40 (83.33%) Verlorene Trades (in % von Gesamt) 8 (16.67%)
Größter Gewinntrade 50.00 Verlusttrade -492.00
Durchschnitt Gewinntrade 33.48 Verlusttrade -144.63
Maximum Gewinntrades in Folge (Profit in Geld) 14 (546.00) Verlusttrades in Folge (Verlust in Geld) 3 (-350.00)
Maximum Gewinn aufeinanderfolgender Gewinntrades (Anzahl) 546.00 (14) Verlust aufeinanderfolgender Trades (Anzahl) -492.00 (1)
Durchschnitt Gewinntrades in Folge 7 Verlusttrades in Folge 1


Test des MACD Sample mit Trailing-stop Basierend auf dem FractalsLine Indikator

Symbol EURUSD (Euro vs US Dollar)
Periode 1 Std. (H1) 2008.01.02 12:00 - 2008.06.30 23:00 (2008.01.01 - 2008.07.01)
Modell Jeder Tick (präziseste Methode, die auf allen verfügbaren kleinsten Zeitrahmen basiert zur Generierung jedes Ticksignals)
Balken im Test 4059 Modellierte Ticks 1224016 Modellierungsqualität 90.00%
Fehler in Chartanpassung 1
Ursprüngliche Einzahlung 10000.00
Nettoprofit gesamt 334.00 Bruttoprofit 1211.00 Bruttoverlust -877.00
Profitfaktor 1.38 Erwartetes Ergebnis 5.14
Absoluter Rückgang 211.00 Maximaler Rückgang 277.00 (2.75%) Relativer Rückgang 2.75% (277.00)
Anzahl an Trades 65 Sell-Positionen (davon gewonnen %) 41 (41.46%) Buy-Positionen (davon gewonnen %) 24 (62.50%)
Gewonnene Trades (in % von Gesamt) 32 (49.23%) Verlorene Trades (in % von Gesamt) 33 (50.77%)
Größter Gewinntrade 50.00 Verlusttrade -102.00
Durchschnitt Gewinntrade 37.84 Verlusttrade -26.58
Maximum Gewinntrades in Folge (Profit in Geld) 3 (150.00) Verlusttrades in Folge (Verlust in Geld) 4 (-168.00)
Maximum Gewinn aufeinanderfolgender Trades (Anzahl) 150.00 (3) Verlust aufeinanderfolgender Trades (Anzahl) -168.00 (4)
Durchschnitt Gewinntrades in Folge 2 Verlusttrades in Folge 2


Fazit

Die vorgestellten Tests zeigen, dass die Rentabilität gewachsen und der Drawdown zurückgegangen ist, mit FractalsLine.

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/1435

Prognose von Finanzzeitreihen Prognose von Finanzzeitreihen
Die Prognose der Finanzzeitreihen ist ein erforderliches Element jeder Investitionstätigkeit. Das Konzept der Investition selbst - Geld jetzt einzusetzen, um in der Zukunft Gewinne zu erzielen -basiert auf dem Konzept der Vorhersage der Zukunft. Deshalb unterliegt die Prognose von Finanzzeitreihen den Aktivitäten der gesamten Anlageindustrie - alle organisierten Börsen und andere Handelssysteme.
Grafische Kontrolle der Externen Parameter von Indikatoren Grafische Kontrolle der Externen Parameter von Indikatoren
Externe Variablen von Indikatoren werden über ein spezielles Fenster gesteuert, in dem Parameter geändert werden können und der Indikator wieder gestartet wird. Der offensichtliche Nachteil dieser Bearbeitung, ergibt sich aus der Notwendigkeit die benötigten Parameter auf dem Bildschirm anzuzeigen und den Indikator grafisch zu steuern.
Orders.Erstellen aktiver MQL5-Bedienfelder für den Handel Orders.Erstellen aktiver MQL5-Bedienfelder für den Handel
Dieser Beitrag behandelt die Frage des Problems der Entwicklung aktiver Bedienfelder in MQL5. Die Elemente der Benutzeroberfläche werden von dem Ereignisverarbeitungsmechanismus gesteuert. Darüber hinaus besteht die Möglichkeit zur flexiblen Anpassung der Eigenschaften der Bedienfelder. Aktive Bedienfelder ermöglichen die Arbeit mit Positionen sowie die Platzierung, Änderung und Löschung von Bestensaufträgen und Pending Orders.
Testen von Expert Advisors auf atypischen Zeitrahmen Testen von Expert Advisors auf atypischen Zeitrahmen
Es ist nicht nur einfach, es ist super einfach. Das Testen von Expert Advisors auf atypischen Zeitrahmen ist möglich! Alles was wir tun müssen, ist die Daten der Standard-Zeitrahmen mit den Daten der atypischen Zeitrahmen zu ersetzen. Darüber hinaus können wir auch Expert Advisors testen, die Daten aus mehreren atypischen Zeitrahmen verwenden.