Umwandlung von Skripts von MetaTrader 4 zu NetTradeX Advisors | IFCM Germany
IFC Markets - Forex Währungshandel

Umwandlung von Skripts von MetaTrader 4 zu NetTradeX Advisors

Einführung

Eine große Zahl von Beratern und Skripten sind für die MetaTrader 4 Handelsplattform geschaffen worden. Vorher mussten die Trader, die diese Skripten auf der NetTradeX Plattform verwenden wollten, den Quellcode völlig bearbeiten, was auch viel Zeit genommen hatte. Um diese Aufgabe zu erleichtern, wurde eine Bibliothek für die Vereinbarkeit von MQL4 und NTL + Sprachen geschaffen worden. Diese Bibliothek erlaubt, den Umwandlungsprozess von Skripten in NTL + Sprache für ihren nachfolgenden Start im Terminal NetTradeX Advisors zu vereinfachen. Wegen der Unterschiede zwischen den Plattformen MetaTrader und NetTradeX (und Sprachen MQL4 und NTL +) müssen Sie in der Regel einige kleine Änderungen in umgewandelten Skripten machen. Die Hauptrolle dieser Anpassung wird von der MQL4.ntl Bibliothek aufgenommen. Die Bibliothek ist im Terminal NetTradeX Advisors eingeschlossen, jedoch muss der Entwickler möglicherweise seine Skripts für den Start modifizieren. In diesem Artikel ist es gezeigt, wie man Funktionen von dieser Bibliothek verwendet und zusätzlich welche Änderungen vorgenommen werden sollten.

Kernprinzipien der Arbeit mit der MQL4.ntl Bibliothek

Also, vor dem Start der Hauptarbeit sollten Sie ein völlig fehlerloses Skript auf der MQL4 Sprache haben. Welche Schritte sollten gemacht werden, um diesen Code in eine Arbeitsskript NTL + zu verwandeln?

1. Schritt: Zuerst sollten Sie eine neue Skriptdatei im Baum Scripts im Fenster Navigator des Terminals NetTradeX Advisors schaffen. Die Datei selbst sollte abhängig von seinem Zweck im Folder Advisors oder Utilities sein. Später sollten Sie den ganzen Text des Skripts in diese Datei auf der MQL4 Sprache kopieren.

2. Schritt: Anschluss der MQL4.ntl Bibliothek. Dafür fügen Sie am Anfang Ihrer Datei die Zeile #include "Libraries\MQL4.ntl" hinzu. Bemerken Sie bitte, dass es keine Notwendigkeit gibt, MQL4.ntl Bibliothek selbst zu kompilieren und für die Arbeit der Funktionen keine lauffähige Datei aus der Bibliothek erforderlich ist. Diese Bibliothek ist für den unabhängigen Start nicht beabsichtigt und wird zu Hilfszwecken verwendet.

3. Schritt: Versuch, das erzeugte Skript zu kompilieren. Dafür klicken Sie im Coderedakteur auf die Taste Compile oder drücken Sie die Taste F7. Am wahrscheinlichsten wird der Kompilator eine Liste von Fehlern und Warnungen, die wir Schritt für Schritt beseitigen werden, zeigen. In diesem Augenblick sind wir an zwei Schlüsselmomente interessiert: Ob der Kompilator die Bibliothek entdeckt hat und ob alle speziellen Funktionen in unserem Skript vorhanden sind.

Wenn der Kompilator nicht imstande ist, die Datei der Bibliothek zu entdecken, wird die Nachricht "Failed to open script file" gezeigt. Stellen Sie in diesem Fall sicher, dass MQL4.ntl im in den Direktiven angegebene #include Pfad liegt und sein Name richtig ist.

Auf der MQL4 Sprache gibt es drei spezielle Funktionen mit vorherbestimmten Namen: init(), start(), deinit(). Für den Start im Terminal NetTradeX Advisors sollten alle diese Funktionen bestimmt werden. Jedoch in manchen Skripten können eine der Funktionen oder beide, init() und deinit() fehlen. In solchen Fallen werden Sie durch den Kompilator "No matching signatures to 'init()'" oder "No matching signatures to 'deinit()'" informiert. In diesem Fall sollten Sie die Funktionen init() und deinit() Funktionen mit dem einzigen Operator return 0 hinzufügen;

int init()
{
	return 0;
}
int deinit()
{
	return 0;
}

Die erste Stufe ist erfolgreich, wenn folgende Meldungen "Failed to open script file" und "No matching signatures to 'init()'" / "No matching signatures to 'deinit()'" fehlen. Jetzt beseitigen wir die lokalen Probleme.

Allgemeine Meldungen des Kompilators, die Ursachen und Wege ihrer Beseitigung

In dieser Abteilung werden die allgemeinen Meldungen während des Prozesses der Skriptanpassung des Kompilators beschreiben und es werden praktische Entscheidungen für deren Beseitigung gegeben.

No matching signatures to Print

Diese Art des Fehlers wird durch die Tatsache verursacht, dass in der Sprache NTL + die Durchführung von Funktionen mit der variablen Zahl von Eigenschaften nicht erlaubt ist. In diesem Fall ist es erforderlich, die Funktion so zu ändern, dass die Zahl von Eigenschaften im Aufruf genau der Zahl in seiner Definition entspricht. Der Funktion Print() sollte nur einen Inputparameter haben. So statt Print (Parameter 1, Parameter 2, Parameter 3) braucht man eine Konkatenation - Print (Parameter 1 + Parameter 2 + Parameter 3) durchzuführen.

Unexpected token '(unrecognized token)'

Einer der Gründe für diese Meldung ist der Versuch durch die Direktive #include die Dateien der Bibliothek der MQL4 Sprache zu verbinden. Die Sprache NTL + funktioniert mit solchen Bibliotheken nicht, deshalb ist der Gebrauch dieser Dateien unmöglich. Diese Linien sollten vom Programm gelöscht werden.

'True'/'False' is not declared

Namen von logischen Variablen in NTL + fangen mit kleinen Buchstaben an, ersetzen Sie deshalb "True" durch "true" und "False" durch "false".

No conversion from '_bars&' to 'int' available

Die variablen Bars in MQL4 sind für die Bestimmung der Menge von Bars im aktuellen Chart. In der Sprache NTL + existiert ein homonymer Objekt Bars, deshalb wurde in der Bibliothek MQL4.ntl variable bars (mit kleinem Buchstaben b) hinzugefügt. Es gibt die Menge von Bars für das aktuelle Chart zurück. Genau das brauchen Sie in Ihrem Skript statt Bars zu verwenden.

Must return a value

Diese Meldung wird gezeigt, wenn der Operator “return” ohne Rückwert aufgerufen wird. Dabei wird die Funktion, bei der dieser Operator verwendet wird, mit einem verschiedenen vom void Rückwert erklärt. In diesem Fall sollen Sie entweder die Funktion selbst korrigieren oder den Wert für return angeben.

Use of Magic number

Der Gebrauch von Zauberzahlen wird in der jetzigen Version von der NTL + Sprache nicht unterstützt. Für alle Offenstellungen wird der Nullwert von Zauberzahlen zurückgegeben. In den Skripten auf der MQL4 Sprache wird es empfohlen, besondere Aufmerksamkeit dem Gebrauch von Zauberzahlen in bedingten Operatoren zu geben. Häufig ist es genug die Funktion OrderMagicNumber() einfach zu löschen oder OrderMagicNumber zu kommentieren (), wenn Sie keine Positionen zu identifizieren brauchen, die von diesem Berater erzeugt sind.

Gebrauch von static Variablen

In NTL + wird das Schlüsselwort “static” nicht verwendet. Um den Wert von Variablen zwischen den Starten von Funktionen zu speichern, sollten solche Variablen global (ohne Schlüsselwort static) gemacht werden. Beim Wunsch können Sie einen Modifikator extern hinzufügen, wenn diese Eigenschaften vom Benutzer während des Starts oder Arbeitens des Beraters geändert werden sollen.

Bestimmung der Lotgröße

In der jetzigen Version beträgt die Lotgröße jedes Instrumentes 100000 Einheiten, deshalb, wenn Sie das Instrument mit den verschiedenen Losgrößen verwenden, geben Sie getrennt entsprechende Variable an und teilen Sie notwendigen Wert der Losgröße dazu zu, wenn es sich von 100000 unterscheidet.

Arbeit mit den DLL-Dateien

Die Arbeit mit DLL-Dateien wird in den Terminalen NetTradeX Advisors und MetaTrader4 auf verschiedener Weise durchgeführt. In der MQL4-Sprache ist die ausführliche Beschreibung der Funktion vom DLL-Modul notwendig, in NTL + ist solche Beschreibung nicht erforderlich.

#import "Name der Datei oder des Moduls"
    Beschreibung der Funktion function1;
    Beschreibung der Funktion function2;
    Beschreibung der Funktion functionN;
#import

Es ist notwendig einfach Dll-Objekt random_identifier("Name_von_Datei _oder_Modul"); zu schaffen; und die Funktion, die Sie brauchen durch
identifier.Cal ("Name_der_Funktion", Parameters_der_Funktionen_ getrennt_mit_Kommas);
oder
identifier. CallProc("Name_der_Funktion", Parameters_der_Funktion _getrennt_mit_Kommas);

Überprüfung von Schlüsselwörtern der Sprache

In MQL4 und NTL + gibt es Unterschiede in Schlüsselwörtern. Advisors (Berater) in der MQL4-Sprache können Namen von Variablen oder Funktionen verwenden, die in NTL + Sprache und umgekehrt nicht verfügbar sind. Der Kompilator kann zum Beispiel eine Meldung Expected zeigen '(' für die Linie, in der der Gebrauch von Klammern nicht erwartet wird. Einer von möglichen Gründen kann die Übereinstimmung des Variablennamens mit einem der Schlüsselwörter sein. In solchen Fallen ist es notwendig, den Variablennamen durch einen anderen in allen Stellen im Programmcode zu ersetzen. Die Schlüsselkombination CTRL+H im Redakteur dient für den schnellen Aufruf des Fensters Replace.

Float value truncated in implicit convertion to integer

Diese Warnung wird gezeigt, wenn sie versuchen solche Bestimmungen wie ''float'' oder ''double'' zu einer "int" Variable zu geben. Die Korrektur dieser Inkompatibilität ist für den Start des Skripts nicht erforderlich, aber es ist wünschenswert. Die Konvertierung von "double" zum "int" und von "float" zum "int" muss ausführlich durchgeführt sein. Zum Beispiel für die Variable ''d'' des Typs "double" wird es so aussehen: int(d).

Keine automatische Konvertierung von bool zu int und umgekehrt

Automatische Konvertierung von int i; bool b = true; i=b; ist in NTL + unmöglich. In diesem Fall kann sich die Meldung “Es könnete von 'bool' zu 'int'” nicht implizit umgewandelt sein. Deshalb, wenn Sie solche Art der Konvertierung brauchen, können Sie den folgenden Aufbau verwenden:

int Run()
{
	// Konvertierung von bool zu int;
	bool a=false;
	int b = a?1:0;
	
	// Konvertierung von int zu bool
	int c=1;
	bool d = c==0?false:true;
}
Can't implicitly convert from 'datetime' to 'int'

In NTL+ it is needed to perform conversion from "datetime" objects to an "int". variable. It can be performed in the following manner int i; datetime d; i=int(d);

Farbkonstante

In MQL4 können mehrere Konstanten verwendet werden, um mit Objektfarben von geometrischen Primitiven zu arbeiten. Solche Konstanten im Code können einfach mit einer von 16 Grundfarben, zum Beispiel, durch die Wahl von White oder Black ersetzt werden. Die einzige Ausnahme ist der Gebrauch der Farbe in grafischen Indikatoren. Wenn eine Farbe, die durch NTL + nicht anerkannt wird, verwendet wird, ist es erforderlich, die Farbe durch RGB-Komponent anzugeben. Zum Beispiel für die Farbe Tomato wird die Definition: color Tomato = 0xFF6347

Arbeit mit dem Datenfeld

In MQL4 und NTL + wird die Arbeit mit dem Datenfeld ganz anders durchgeführt. In NTL + wird die Deklaration wie Name des Typs[] nur für das Indikatorfeld verwendet. Um andere Daten zu sparen, werden alle Felder im Form array "Typ"-Name; oder array "Typ"-Name (Größe) erklärt. Also, statt string symb[3] = {"EURUSD", "GBPUSD", "AUDCAD"}; ist es notwendig array "string" symb= {"EURUSD", "GBPUSD", "AUDCAD"}; zu verwenden

Ununterstützte Funktionen

Manche Funktionen werden in NTL + nicht unterstützt. Jene Funktionen sollten gelöscht werden oder die Logik von Skripten so ändert, um die Konstruktionen von NTL + zu verwenden. Beim Verwenden solcher Funktionen wird im Journal die folgende Meldung 'The function is not supported' oder 'No matching signatures to function_name'.

Liste von einigen ununterstützten Funktionen:

  • SendMail()
  • Funktionsgruppe onArray
  • Funktionen FileOpenHistory, FileIsLineEnding
  • Funktionsgruppe "objects" und Eigenschaften von Objekten
  • für folgende Moden ergibt die Funktion MarketInfo einen Nullwert:
    • MODE_SWAPLONG
    • MODE_SWAPSHORT
    • MODE_STARTING
    • MODE_EXPIRATION
    • MODE_MINLOT
    • MODE_LOTSTEP
    • MODE_SWAPTYPE
    • MODE_PROFITCALCMODE
    • MODE_MARGINCALCMODE
    • MODE_MARGININIT
    • MODE_MARGINHEDGED
    • MODE_FREEZELEVEL
  • Operator goto
  • Funktion für die Berechnung von benutzerdefiniertem Indikator iCustom
  • Funktionsgruppe für die Arbeit mit den fenstern (Window functions), MessageBox
  • TerminalCompany(), TerminalName(), TerminalPath()
  • #property parameters

Zusammenfassung

In diesem Artikel haben wir typische Schwierigkeiten, die bei dem Umtausch der Skripte von MetaTrader auf NetTradeX auftauchen. Dieser Prozess wird durch die MQL4.ntl Bibliothek, die mit dem Terminal zur Verfügung gestellt wird, beträchtlich vereinfacht. Der Vorteil dieser Bibliothek ist ein völlig offener Code, den der Programmierer ändern oder ergänzen kann. Wir werden auch mit der Zeit neue Funktionen hinzufügen und vorhandene in der Bibliothek aktualisieren, um den Umwandlungsprozess zu erleichtern.

Close support
Call to messenger Call to telegram Call to WhatsApp Call Back