Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Facebook!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bibliotheken

MQL4 nach MQL5 Kompatibilitäts-Bibliothek - Bibliothek für den MetaTrader 5

Ansichten:
1373
Rating:
(49)
Veröffentlicht:
2016.06.27 15:40
Aktualisiert:
2016.11.22 07:34
mql4compat.mqh (54.62 KB) ansehen
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Diese Bibliothek bietet die Möglichkeit, die meisten Skripte und Indikatoren für MetaTrader 4 auf dem MetaTrader 5 laufen zu lassen. Die meisten Funktionen werden schon unterstützt und nur die Handelslogik nicht, weil die Handelsmechanismen neu geschrieben werden müssen.

Diese Bibliothek deckt die meisten Funktionen mit Ausnahme von Handelsmechanismen der EAs ab. Auch für die Fehlerbehandlung unter MQL5 gibt es alternative Funktionen mit der Endung MQL4. Die meisten hätten einen Namenskonflikt, da sie mit dem selben Namen auch in MQL5 existieren. Der Originalartikel hat nur eine Skelett-Bibliothek, diese Version verfügt über mehr MQL4 Funktionen.  Bitte suchen Sie im Quellcode mit dem Muster "MQL4" nach den spezifischen Funktionsnamen.

TODO:  EA Handelsmechanismen, um Order zu senden und kontrollieren. Einige Funktionen gelten universell und erzeugen entsprechende Fehlermeldungen im Log. Der Rückgabewert solcher Funktionen ist immer -1.

Installation:

Kopieren Sie mql4compat.mqh in das Include Verzeichnis (es liegt in Ihrem Windows Benutzer Roaming Profile).

In Ihrem MQL4 EA/indicator/library/script ergänzen Sie bitte nach der #property Definition:


 

#include <mql4compat.mqh>

 Ändern Sie die MQL4 Funktionen:

int init() to int OnInit()
int deinit() to void OnDeinit(const int reason);
int start() in script to void OnStart();
int start() in  indicator to:
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

Und das return() in der letzten Zeile ändern Sie bitte in:

   return(rates_total);

Ändern Sie die Problemfunktionen zwischen MQL4 und MQL5 wegen der veränderten Parameter in dem Sie MQL4 hinten an den Namen hängen:

   int ArrayInitializeMQL4(double &array[], double value)
   int ArrayMaximumMQL4(double &array[], int count=WHOLE_ARRAY, int start=0)
   int ArrayMinimumMQL4(double &array[], int count=WHOLE_ARRAY, int start=0)
   int ArraySortMQL4(double &array[], int count=WHOLE_ARRAY, int start=0, int sort_dir=MODE_ASCEND)
   double CopyBufferMQL4(int handle,int index,int shift)
   double EnvelopesMQL4(string symbol, int tf, int ma_period, int method, int ma_shift, int price, double deviation, int mode, int shift)
   double FileReadDoubleMQL4(int handle, int size=DOUBLE_VALUE)
   bool FileSeekMQL4(long handle, int offset, ENUM_FILE_POSITION origin)
   int IndicatorCountedMQL4(int _prev_calculated=0)
   bool ObjectCreateMQL4(string name, ENUM_OBJECT type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0)
   bool ObjectDeleteMQL4(string name)
   string ObjectDescriptionMQL4(string name)
   int ObjectFindMQL4(string name)
   bool ObjectMoveMQL4(string name, int point, datetime time1, double price1)
   string ObjectNameMQL4(int index)
   int ObjectsDeleteAllMQL4(int window=EMPTY, int type=EMPTY)
   int ObjectsTotalMQL4(int type=EMPTY, int window=-1)
   bool SetIndexBufferMQL4(int index, double &array[])
   string StringConcatenateMQL4(string _str1,string _str2, ... string _str64="")
   int StringGetCharMQL4(string text, int pos)
   string StringSetCharMQL4(string text, int pos, int value)
   double iACMQL4(string symbol, int tf, int shift)
   double iADMQL4(string symbol, int tf, int shift)
   double iADXMQL4(string symbol, int tf, int period, int price, int mode, int shift)
   double iAOMQL4(string symbol, int tf, int shift)
   double iATRMQL4(string symbol, int tf, int period, int shift)
   double iAlligatorMQL4(string symbol, int tf, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int method, int price, int mode, int shift)
   double iBWMFIMQL4(string symbol, int tf, int shift)
   double iBandsMQL4(string symbol, int tf, int period, double deviation, int bands_shift, int method, int mode, int shift)
   double iBearsPowerMQL4(string symbol, int tf, int period, int price, int shift)
   double iBullsPowerMQL4(string symbol, int tf, int period, int price, int shift)
   double iCCIMQL4(string symbol, int tf, int period, int price, int shift)
   double iDeMarkerMQL4(string symbol, int tf, int period, int shift)
   double iForceMQL4(string symbol, int tf, int period, int method, int price, int shift)
   double iFractalsMQL4(string symbol, int tf, int mode, int shift)
   double iGatorMQL4(string symbol, int tf, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int method, int price, int mode, int shift)
   double iIchimokuMQL4(string symbol, int tf, int tenkan_sen, int kijun_sen, int senkou_span_b, int mode, int shift)
   double iMACDMQL4(string symbol, int tf, int fast_ema_period, int slow_ema_period, int signal_period, int price, int mode, int shift)
   double iMAMQL4(string symbol, int tf, int period, int ma_shift, int method, int price, int shift)
   double iMFIMQL4(string symbol, int tf, int period, int shift)
   double iMomentumMQL4(string symbol, int tf, int period, int price, int shift)
   double iOBVMQL4(string symbol, int tf, int price, int shift)
   double iOsMAMQL4(string symbol, int tf, int fast_ema_period, int slow_ema_period, int signal_period, int price, int shift)
   double iRSIMQL4(string symbol, int tf, int period, int price, int shift)
   double iRVIMQL4(string symbol, int tf, int period, int mode, int shift)
   double iSARMQL4(string symbol, int tf, double step, double maximum, int shift)
   double iStdDevMQL4(string symbol, int tf, int ma_period, int ma_shift, int method, int price, int shift)
   double iStochasticMQL4(string symbol, int tf, int Kperiod, int Dperiod, int slowing, int method, int field, int mode, int shift)
   double iWPRMQL4(string symbol, int tf, int period, int shift)

In Indikatoren müssen manuell die Funktion OnInit() und die #property-Direktiven des Header angepasst werden. Weiters muss die Funktion IndicatorCounted() durch eine Variable gleichen Namens ersetzen werden oder Sie ändern sie in die MQL5-Variable prev_calculated:

#define IndicatorCounted IndicatorCountedMQL4(prev_calculated)

In den Nutzer-Indikatoren schauen Sie wie die #property Headers in MQL5 sind und ersetzen Sie bei den Eingabeparametern extern durch input. Nun sind in MQL5 diese jetzt aber Konstanten und jeder Versuch sie zu ändern führt zu einem Fehler. Die Lösung ist, statt dessen zusätzliche temporärer Variablen, auf die Sie dann die Werte der input-Parameter kopieren.

In der ersten Zeile Ihren Quellcodes ergänzen Sie bitte die Funktion zur Initialisierung der MQL4 reservierten Variablen (Nutzer-Indikatoren erzeugen Warnungen wegen der reservierten Variablen OHLC/Time/Volume, wenn sie in OnCalculate() verwendet werden, einfach ignorieren): 

 

// -- Init MQL4 kompatible Umgebung
   InitMQL4Env();

Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/1787

Relative Momentum Index (RMI) Relative Momentum Index (RMI)

Der RMI (Relative Momentum Index) Indikator ist eine verbesserte Version des RSI, das Momentum ist in die Berechnung einbezogen.

Hull_Candles Hull_Candles

Ein Indikator in Form von Kerzen basierend auf dem Heiken-Ashi-Algorithmus und zwei Durchschnitten.

RSIImproved RSIImproved

Ein kombinierter Indikator, konstruiert auf der Basis von zwei RSI Oszillatoren

ImpulseOsMA ImpulseOsMA

Der Indikator zeichnet Bars basierend auf Elders Impuls System.