Jump to content






Photo
- - - - -

MQL5 für Anfänger: Wie verwende ich Indikatoren in meinem Expert Advisor

Posted by FinGeR , in Codesnips, Know-How, MetaTrader 5 23. September 2013 · 2,842 views

Einführung
Beim programmieren eines Expert Advisors kommt es selten vor das man keine Standart Indikatoren benutzt. Sie sind sehr beliebt beim Programmieren von Trading Strategien, sowohl für den Anfänger als auch fortgeschrittene Entwickler. Den Aufbau von Standart Indikatoren zu verstehen ist nicht schwer, und Ziel dieses Tutorials. Wir lernen wie man die Funktionen verwenden für das Arbeiten mit den integrierten Standard Indikatoren.
 
Grundlagen für die Verwendung von Funktionen der Standard Indikatoren
Zum Abrufen der Indikator Daten, erstellen wir eine Verbindung über eine Variable zur Indikator Funktion. Der zweckt dieser Verbindung auch "Handle" genannt ist die Zuordnung einer Instanz des Indikators mit den festgelegten Eingabeparametern. Durch diesen Handle haben wir Zugriff auf die Pufferdaten des Indikators und können sie zu weiteren Berechnung benutzten.
 
Betrachten wir ein Beispiel:
// MQL5 Code

double      MA[];                // array für den Indikator iMA
int         MA_handle;           // handle zu dem indikator iMA
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- erstelle den handle zum iMA
   MA_handle=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   //--- füllt den array MA[] mit den Aktuellen Daten des iMA
   //--- Kopiert 100 Element (Bar)
   CopyBuffer(MA_handle,0,0,100,MA);
   //--- Setzt den Index der Elemente als Reihe, wie MQL4
   ArraySetAsSeries(MA,true);  
   //--- hier kann man mit den Daten aus den MA[] arbeiten als Beispiel: 
   if(MA[0]>MA[1])
      {
      //--- eigene Berechnungen
      }
   }
  Wie wir sehen, ist es ganz einfach. In diesem Beispiel sehen wir die Verwendung des iMA (Moving Average) Indikators - der wohl beliebteste Indikator bei den Trader.
 
 
Der Handle zu einem Indikator sollte innerhalb der Funktion OnInit() erstellt werden.
  • Wir setzen die Indexierung der Elemente als Reihe, wie in MQL4 - Das bedeutet, In unserem Beispiel haben wir die Elemente als Zeitserie. Mit anderen Worten, die aktuelle Bar(welche noch tickt...) hat immer Index[0], die vorherige Bar hat Index[1] usw. 
  • Warum benutzten wir Indexierung ? Für den Komfort und die optimale Umsetzung des Algorithmus. Die MQL5 Sprache ermöglicht die bequeme Indexierung  für den Programmierer.
  • Warum ist es besser den Handle zu einem Indikator innerhalb der Funktion OnInit () zu erstellen? Natürlich kann man ihn überall im Programm erstellen, da gibt es keine expliziten Verbote. Allerdings gibt es ein starkes Argument zu Gunsten der vorgeschlagenen Art. Die Funktion OnInit () wird nur ein einziges mal, beim Start des Experten Advisors aufgerufen.
Den Handle zu einem Indikator in der OnInit() Funktion aufzurufen ist völlig ausreichend, wenn die Parameter des Indikators nicht verändert werden. Für den Fall das die Indikator Parameter geändert werden müssen, ist es möglich, sie wieder zu initialisieren, innerhalb einer anderen Funktion, zum Beispiel in der Funktion onTick().
 
Programmierlektion
Fast jeder Expert Advisor ist für die Durchführung von Handels Operationen nicht nur auf den Demo Konto entworfen, sondern auch auf einem realen Konto. Wenn du ruig schlafen willst, während dein Expert Advisor handelt, solltest du auf alle Möglichkeiten die beim Traden passieren können, vorbereitet sein. Sogar hoch qualifizierte Entwickler von automatisierten Handelssystemen machen oft ärgerliche Fehler. Und der Preis für solche Fehler kann sehr hoch sein!
 
 
© --
Übersetzung von Alexander Piechotta alias FinGeR
Leider ist die Übersetzung des gesamten Beitrags nicht gestattet.
Quelle, Englische Fortsetzung : Continue Reading...

  • 2