English Русский 中文 Español 日本語 Português
Ein Trader Assistent Basierend auf Erweeiterter MACD Analyse

Ein Trader Assistent Basierend auf Erweeiterter MACD Analyse

MetaTrader 4Beispiele | 30 März 2016, 10:49
538 0
Genkov
Genkov

Einführung

Das MACD Histogramm ist als einer der besten Trend-des-Kurses Indikatoren. Wie von Dr. A. Elder empfohlen, wird der Trend eines Kurses bestimmt durch die zwei letzten Balken auf dem entsprechenden Zeitrahmen. Allerdings können wir nicht mehr über die Verwendung der zwei Balken sagen. Natürlich, ein erfahrener Trader kann sich beim Anschauen des Histogramm basierend auf seiner oder ihrer Intuition eine Vorstellung davon machen. Nun, wenn wir die letzten drei für unsere Analyse nehmen, wird die Quantität und die Qualität unserer Informationen entscheidend erweitert.

Der Skript-Algorithmus basiert auf dem Vergleich von Unterschieden zwischen den Schritten der Nullen des ersten und zweiten Balkens des MACD Histogramms. Zum Beispiel, wenn der Wert der Differenz zwischen dem aktuellen und dem vorhergehenden Balken den Wert der Differenz zwischen dem Wert des vorhergehenden und des vor-vorhergehenden Balken übertrifft, wächst der Trend mit positiver Beschleunigung. Ist die Differenz kleiner, bedeutet dies, dass der Trend sein Wachstum verlangsamt (gedämpfter Trend), und Sie sollten darüber nachdenken Ihre Long-Position zu schließen.

Ein Blick auf das Skript selbst:

Sie können das Skript in mindestens zwei Richtungen verwenden.

Erstens, es kann als Trading-Assistent verwendet werden, und die Einstiegs-/Ausstiegs-Punkte in den Markt zu bestimmen, sowie über die Menge der gehandelten Lots (Volumen) der entsprechenden Position, die Richtung und die positive/negative Beschleunigung des Histogramm-Volumen.

Zweitens, Sie können das Skript verwenden während Sie historische Daten analysieren. Wenn Sie das Skript an ein Chart anfügen um die Daten zu analysieren, wird das Eigenschaften-Fenster sich öffnen, in dem Sie die Anzahl der anfänglichen Balken und den Zeitrahmen zum analysieren festlegen (ändern) können. Wenn Sie das Skript im Echtzeit-Trading verwenden, sollten Sie die anfängliche Anzahl der Balken auf Null einstellen (der letzte aktuelle Balken) oder auf Eins (auf Benutzerwunsch), und sie müssen den Zeitrahmen bestimmen, den Sie verwenden um Ihre Position zu öffnen oder zu halten.

//+------------------------------------------------------------------+
//|                                                 TrendMACD v5.mq4 |
//|MACD histogram analysis by the last three bars             Genkov |
//|                                                     genkov@bk.ru |
//+------------------------------------------------------------------+
#property copyright "Genkov"
#property link      "genkov@bk.ru"
//if you comment on the below line, the properties window will not be displayed
#property show_inputs   
extern int a = 0;            // here you can specify any initial bar to be analyzed
//extern int period = 1;     //  1 minute 
//extern int period = 5;     //  5 minutes 
//extern int period = 15;    // 15 minutes 
extern int period = 30;      //  30 minutes
//extern int period = 60;    // comment on the timeframe you need
//extern int period = 240;   // 4 hours
//extern int period = 1440;  // day
//extern int period = 10080; // week
//extern int period = 43200; // month
//+------------------------------------------------------------------+

Wir platzieren die Hauptvariable 'a' für die anfängliche Balkenanzahl und Variable 'period' für Zeitrahmen in die globalen Variablen des Skripts. Dier interne Variable für Berechnungen und Vergleiche wird nach der Start-Funktion platziert:

int start()
  {
    int b,c;
    b=a+1; c=b+1;
//----
double Macd_h1_a= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,a);
double Macd_h1_b= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,b);
double Macd_h1_c= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,c);

Für die visuelle Steuerung von Berechnungen, können Sie hier den Print() Operator setzen, der nützlich sein kann, wenn Sie vergangene Ereignisse analysieren (auf Historie) Der Multiplikator "*1000" (oder Sie können einen anderen verwenden) wird für eine bessere Lesbarkeit der erhaltenen Ergebnisse verwendet.

Print("   Macd_h1_c= ",Macd_h1_c*1000,"   Macd_h1_b= ",
          Macd_h1_b*1000,"   Macd_h1_a= ",Macd_h1_a*1000);

Wenn Sie Benachrichtigungen (Alerts) deaktivieren müssen Sie Eins mit Null in dem ;int Message = 1;" Operator ersetzen. Gleichzeitig, um die Informationen irgendwo anzuzeigen, müssen Sie an den Operatoren von "int Message = 1;" und "Message == 1;" kommentieren und alle späteren Operatoren Alert() mit Operatoren Print() ersetzen. Dann sind Sie in der Lage die Informationen in der "Expert Advisors" Registerkarte des Client Terminals zu sehen.

Das Skript bietet die Möglichkeit die Skript-Betriebszeit mit der GetTickCount() Funktion zu berechnen. Zu diesem Zweck platzieren Sie den folgenden Operator an den Anfang des Programms:

int start=GetTickCount();
//…
//…, and at the end of the program:
Alert("   Calculation time  ", GetTickCount()-start," millisec"); 

Der Hauptcode des Skripts besteht aus Blöcken, die Zustände vergleichen (die Position und die Größe von Verhältnissen von Differenzen zwischen den Werten des Histogramms auf den analysierten Balken).

In dem Skript werden die wichtigsten relevanten Übergangszustände (Situationen) analysiert. Zum Beispiel:

Insgesamt gibt es 6 Vergleichsblöcke in dem Programm: Blöcke 1-2 für MACD unterhalb der Achse:

// ----------------------for MACD below the axis-------------------------1--&
  if(Macd_h1_c<0.0&&Macd_h1_a<0.0&&Macd_h1_a<0.0) 
   {
     //increment of bar "0" as related to the first one
     double r1=MathAbs(MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b));
     //increment of bar "1" as related to bar "2" 
     double r2=MathAbs(MathAbs(Macd_h1_b)-MathAbs(Macd_h1_c));
// -- MACD is below - the trend is moving down
   if(Macd_h1_c>Macd_h1_b&&Macd_h1_b>Macd_h1_a)
    {
     if(r1>r2) 
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend is moving down \\\'with acceleration");
     }
    if(r1<r2) 
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend is moving down \^with slowing down");
     }
    if((r1==r2)||MathAbs(r1-r2)<0.000015)
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend is moving down with constant acceleration");
     }
    }
// -- MACD is below - the trend is moving up
   if(Macd_h1_c<Macd_h1_b&&Macd_h1_b<Macd_h1_a)
    {
    if(r1>r2) 
     {
     Alert("On bar ",a," MACD<0 =",Macd_h1_a,
           "  The trend is moving up //''with acceleration");
     }
    if(r1<r2) 
     {
     Alert("On bar",a," MACD<0 = ",Macd_h1_a,
           "  The trend is moving up /^with slowing down");
     }
    if((r1==r2)||MathAbs(r1-r2)<0.000015)
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend is moving up with constant acceleration");
     }
    }
// --- MACD is below - the trend reverses down    
   if(Macd_h1_c<Macd_h1_b&&Macd_h1_b>Macd_h1_a)
    {
    if(r1>r2) 
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend reverses down /\\'with acceleration");
     }
    if(r1<r2)
     {
     Alert("On bar",a," MACD<0 = ",Macd_h1_a,
           "  The trend reverses down //^with slowing down");
     }
    }
// --- MACD is below - the trend reverses up
   if(Macd_h1_c>Macd_h1_b&&Macd_h1_b<Macd_h1_a)
    {
    if(r1>r2)
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend reverses up //''with acceleration");
     }
     if(r1<r2) 
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend reverses up \/^with slowing down");
     }
    }
   if(MathAbs(MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b))<0.0002 && 
      MathAbs(MathAbs(Macd_h1_c)-MathAbs(Macd_h1_b))<0.0002)
    {
    Alert("On bar ",a,", it is Flat! within the range of:  ",Macd_h1_c,
          "   ",Macd_h1_b,"   ",Macd_h1_a);
    }
   }

Block 2-3 ist sehr ähnlich - für MACD oberhalb der Achse (siehe angehängte Dateien).

Block 3-4 wird für steigendes Kreuzen der Achse verwendet:

// ------------for up-crossing the axis------------------3--&
   if(Macd_h1_c<0.0 && Macd_h1_b<0.0 && Macd_h1_a>0&&  // c<0 b<0
      Macd_h1_c<Macd_h1_b&&Macd_h1_b<Macd_h1_a)  
    {
     r1=MathAbs(Macd_h1_a)+MathAbs(Macd_h1_b);
     r2=MathAbs(Macd_h1_c)-MathAbs(Macd_h1_b);
    if(MathAbs(r1)>MathAbs(r2))
     {
     Alert("On bar ",a," the trend is up-crossing axis //'' with acceleration ");
     }
    if(MathAbs(r1)<MathAbs(r2))
     {
     Alert("On bar",a," the trend is up-crossing axis /^ with slowing down ");
     }
    }
//---     
   if(Macd_h1_c<0.0 && Macd_h1_b>0.0 && Macd_h1_a>0&&  // b>0 a>0
      Macd_h1_c<Macd_h1_b&&Macd_h1_b<Macd_h1_a)
    {
     r1=MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b);
     r2=MathAbs(Macd_h1_c)+MathAbs(Macd_h1_b);
    if(MathAbs(r1)>MathAbs(r2))
     {
     Alert("On bar ",a," the trend is up-crossing axis //''with acceleration");
     }
    if(MathAbs(r1)<MathAbs(r2))
     {
     Alert("On bar ",a," the trend is up-crossing axis /^ with slowing down");
     }
    }

Ähnlich wird Block 3-4 für fallendes Kreuzen der Achse verwendet (siehe angehängte Dateien).

Block 5-6 wird für die Umkehr unterhalb der Achse verwendet, Block 6-7 ist für die Umkehr oberhalb der Achse. Die Blöcke sind kommentiert und können von denen verwendet werden, die historische Daten analysieren möchten (siehe angehängte Dateien).

Ein Beispiel des Skripts bei der Arbeit auf Historie:





Wenn Sie das Skript für Trading verwenden möchten, sollte sein Header wiefolgt aussehen:

//+------------------------------------------------------------------+
//|                                                 TrendMACD v6.mq4 |
//|     for trading                                                  |
//+------------------------------------------------------------------+
 
#property copyright "Genkov"
#property link      "genkov@bk.ru"
extern int a = 0;      // here you can specify the initial bar to be analyzed
extern int period = 30;       // set the value of the period you need
//+------------------------------------------------------------------+
int start()
  { 
   int b,c; b=a+1; c=b+1;
//----
  double Macd_h1_a= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,a);
  double Macd_h1_b= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,b);
  double Macd_h1_c= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,c);
…
….

Die anderen Vergleichsblöcke sind die gleichen wie in die der Basisversion gegebenen.


Ein Beispiel, wie das Skript im Trading arbeitet:



Bitte beachten Sie, dass die Werte der Variablen 'a' und 'period' festgelegt werden müssen, bevor sie beginnen das Skript zu benutzen! Darüber hinaus wäre es in der Trading-Version sinnvoller, den anfänglichen Balken auf Eins festzulegen, da sich der Null-Balken als unvollständig im Moment der Datenanfrage herausstellen kann, zum Beispiel am Anfang oder in der Mitte eines Zeitrahmens.

Als Fazit, möchte ich meine Hoffnung dafür ausdrücken, dass die Verwendung dieses Skripts Einsteigern ins Trading und auch erfahrenen Tradern hilft und, dass es außerdem die Anzahl der Fehler um mindestens 10 Prozent verringert. Fröhliches Trading für alle!

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

Beigefügte Dateien |
TrendMACD_v5.mq4 (11.36 KB)
TrendMACD_v6.mq4 (9.63 KB)
Vergleichende Analyse von 30 Indikatoren und Oszillatoren Vergleichende Analyse von 30 Indikatoren und Oszillatoren
Der Artikel beschreibt einen Expert Advisor, der es ermöglicht die Durchführung der vergleichenden Analyse von 30 Indikatoren und Oszillatoren, mit dem Ziel ein effektives Paket aus Indizes für das Trading zu bilden
Expert Advisors Basierend auf Beliebten Handelssystemen und Alchemie der Handelsroboter Optimierung (Teil III) Expert Advisors Basierend auf Beliebten Handelssystemen und Alchemie der Handelsroboter Optimierung (Teil III)
In diesem Artikel fährt der Autor fort mit dem Analysieren der Umsetzung von Algorithmen einfachster Handelssysteme und führt ein in die Automatisierung von Backtests. Der Artikel wird nützlich sein für beginnende Trader und EA-Autoren.
Expert Advisors Basierend auf Beliebten Handelssystemen und Alchemie der Handelsroboter Optimierung (Teil II) Expert Advisors Basierend auf Beliebten Handelssystemen und Alchemie der Handelsroboter Optimierung (Teil II)
In diesem Artikel fährt der Autor fort mit dem Analysieren der Umsetzung von Algorithmen einfachster Handelssysteme und beschreibt einige relevante Einzelheiten der Verwendung von Optimierungsergebnissen. Der Artikel wird nützlich sein für beginnende Trader und EA-Autoren.
Marktdiagnosen durch Impulse Marktdiagnosen durch Impulse
In dem Artikel wird ein Versuch unternommen, die Intensität von bestimmten Märkten und ihrer Zeitsegmente zu visualisieren, um deren Regelmäßigkeiten und Verhaltensmuster zu erkennen.