Conversione di script da MetaTrader 4 su NetTradeX Consulenti | IFCM Italy
IFC Markets Online CFD Broker

Conversione di script da MetaTrader 4 su NetTradeX Consulenti

Introduzione

Un gran numero degli advisor e script sono stati creati per la piattaforma di trading MetaTrader 4 . Prima, i trader che volevano usare per la compatibilità di lingue MQL4 e NTL+. Questa libreria consente di semplificare il processo di conversione di script in NTL+ lingua per il loro successivo avvio a NetTradeX Consulenti del terminale. A causa delle differenze tra piattaforme MetaTrader e NetTradeX (e tra le lingue MQL4 e NTL+), come regola generale, è necessario apportare alcune piccole modifiche convertito script. La parte principale dell'adattamento è effettuata da MQL4.ntl libreria, incluso nel NetTradeX Consulenti del terminale; tuttavia, lo sviluppatore, potrebbe essere necessario modificare il suo script per l'avvio. In questo articolo verrà illustrata come utilizzare le funzioni di libreria e, inoltre, che le modifiche devono essere apportate.

Principi di base per lavorare con MQL4.ntl biblioteca

Quindi, prima di iniziare il lavoro, si dovrebbe avere una completamente debug di script in linguaggio MQL4. Quali misure dovrebbero essere adottate al fine di trasformare il codice in uno script funzionante NTL+?

Passo 1 – prima di tutto, è necessario creare un nuovo file di script nella struttura degli Script della finestra Navigator in NetTradeX Consulenti del terminale. Il file deve essere nella cartella di Consulenti o di pubblica Utilità, a seconda del suo scopo. Successivamente, è necessario copiare l'intero testo dello script in un file in linguaggio MQL4.

Passo 2 - connessione di MQL4.ntl libreria. Per questo, aggiungi la riga #includere "Biblioteche\MQL4.ntl" all'inizio del file. Va detto subito che non c'è bisogno di compilare MQL4.ntl biblioteca stessa e nessun file eseguibile è necessario per le funzioni di libreria per lavorare. Che la libreria non è destinato indipendente di lancio e viene utilizzato per scopi ausiliari.

Passo 3 – un tentativo di compilare lo script generato. Per che nell'editor di codice, fai clic sul pulsante di Compilazione o premi F7. Molto probabilmente, il compilatore verrà visualizzato un elenco di errori e avvisi che vogliamo eliminare, passo per passo. Adesso due momenti chiavi di nostro interesse: se il compilatore ha rilevato la libreria e se tutte le funzioni speciali sono nel nostro script.

Se il compilatore non è in grado di rilevare i file di libreria, sarà visualizzato il messaggio "Impossibile aprire il file di script". In questo caso, assicurati che MQL4.ntl nel percorso stabilito nelle direttive #include, e il suo nome è specificato.

Ci sono funzioni speciali nel linguaggio MQL4 che hanno un nome predefinito: init(), start(), deinit(). Per il lancio in NetTradeX Consulenti terminale di tutte queste funzioni deve essere determinato. Tuttavia, in molti script una delle funzioni di loro, o entrambi, init() e deinit(), potrebbe essere mancante. In tal caso il compilatore informano "No matching firme per 'init()'" o "No matching firme per 'deinit()'". In questo caso si dovrebbe aggiungere init() e deinit() funzioni con il solo operatore return 0;

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

La prima tappa non può che essere considerata come eseguita con successo, se i messaggi "Impossibile aprire il file di script" e "Nessuna corrispondenza delle firme e 'init()'" / "No matching firme per 'deinit()'" sono mancanti. Ora, si può passare alla eliminazione dei problemi locali.

Messaggi comuni di compilatore, le cause e le modalità della loro eliminazione

In questa sezione si descrivono i messaggi del compilatore, generati nel processo di script di adattamento, e le decisioni pratiche sarà dato per eliminare le incompatibilità nel codice.

No matching signatures to Print

Un tale errore è causato dal fatto che in NTL+ l'implementazione di funzioni con un numero variabile di proprietà non è consentito. In questo caso sarà necessario modificare la funzione in modo che il numero di proprietà nella chiamata corrisponde esattamente con il numero di parametri per la sua definizione. La funzione Print() dovrebbe avere solo un parametro di input. In questo modo, invece di Print (param 1, param 2, param 3) а concatenazione deve essere prodotta - Print(param 1+ param 2+ param 3).

Unexpected token 'unrecognized token'

Uno dei motivi di questo messaggio è il tentativo di collegare il file di libreria di MQL4 lingua attraverso le direttive #include. NTL+ lingua non opera con tali librerie, che è il motivo per cui l'utilizzo di questi file è impossibile, e quelle linee dovrebbero essere eliminati dal programma.

'True'/'False' is not declared

Nomi di logico variabili in NTL+ di iniziare con piccole lettere, che è il motivo per cui basta sostituire "True" con "true" e "False" con "false".

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

La barra variabile in MQL4 è destinata per determinare la quantità di barre nel grafico corrente. In NTL+ lingua esiste un omonimo oggetto di Bar, che è il motivo per cui in libreria MQL4.ntl la variabile "bar" (con piccola lettera b) è aggiunta, restituendo la quantità di barre per il grafico corrente. È quello che dovrebbe essere utilizzato nello script invece di Bar.

Deve restituire un valore

Questo messaggio viene visualizzato quando l'operatore “ritorno” è chiamato senza valore di ritorno. Allo stesso tempo, la funzione di questo operatore viene utilizzato, viene dichiarata con un diverso void valore di ritorno. Durante la visualizzazione di questo messaggio, è necessario sia per correggere la funzione stessa o specificare il valore per ritorno.

L'uso del numero Magico (Magic number)

L'uso di numeri di Magia non è supportato nella versione corrente di lingua NTL+. Per tutte le posizioni aperte il valore zero di numeri di magia è tornato. A livello di script in linguaggio MQL4 si raccomanda di prestare particolare attenzione all'uso di numeri di Magia in operatori condizionali. Spesso, non è sufficiente cancellare o commentare la funzione OrderMagicNumber(), se non è necessario per identificare le posizioni, prodotta dall'advisor.

L'uso di variabili statiche

In NTL+ la parola chiave “statico” non è utilizzato. Se necessario, per salvare il valore delle variabili tra il lancio di funzioni, tali variabili devono essere globale (senza la parola chiave static), metterli in funzione. Se lo si desidera, è possibile aggiungere un modificatore extern, nel caso in cui queste proprietà sono supposti per essere modificato dall'utente durante il lancio o il lavoro di script.

Specificare la dimensione del lotto

Nella versione attuale dimensione del lotto di ogni strumento è di 100 000 unità, che è il motivo per cui se si utilizza lo strumento con diverse dimensioni del lotto, specifica separatamente corrispondente variabile e necessario assegnare il valore della dimensione del lotto ad esso, se è diverso da 100 000.

Varie tipologie di lavori con i file DLL

Lavorando con i file DLL viene eseguito in modo diverso in NetTradeX Consulenti e MetaTrader4 terminali. In MQL4 descrizione completa della funzione del modulo di DLL è necessario, e in NTL+ tale descrizione non è necessario. Invece di indicare

#import "nome di file o di modulo"
    Descrizione di function1;
    Descrizione di function2;
    Descrizione di functionN;
#import

Devi semplicemente creare l'oggetto dll random_identifier("name_of_file _or_module "); e chiama la funzione che ti serve
identifier.Cal ("name_of_function", parameters_of_functions_ separated by_commas);
or
identifier. CallProc("name_of_function", parameters_of _function _separated_by_commas);

Il controllo delle parole chiave del linguaggio

In MQL4 e NTL+ ci sono diverse parole chiavi. Gli Advisor nella lingua MQL4 possono usare i nomi di variabili o funzioni che non sono disponibili in NTL+ linguaggio e viceversa. Il compilatore è in grado, per esempio, la visualizzazione di un messaggio di Attesa " (' per una linea in cui l'uso di parentesi non è previsto. Uno dei possibili motivi è la coincidenza del nome della variabile con una delle parole chiave. In caso di coincidenza, è necessario sostituire il nome della variabile con un altro in tutte le sedi in codice di un programma. La combinazione di tasti CTRL+H editor serve per la chiamata rapida di Sostituire la finestra.

Float value truncated in implicit convertion to integer

Questo avviso viene visualizzato durante il tentativo di assegnare "float" o "doppio valore" a "int" variabile. La correzione di questa incompatibilità non è richiesto per lanciare lo script, ma è opportuno farlo. Conversione da "doppia" a "int" e da "float" a "int" deve essere eseguita in modo esplicito. Per esempio, per la variabile d del tipo "double" avrà il seguente modulo int(d).

Assenza di conversione automatica dal bool ad int e viceversa

Conversione automatica conversione di int i; bool b = true; i=b; è impossibile in NTL+. In questo caso viene visualizzata il messaggio “non è Possibile convertire in modo implicito 'bool' a 'int'”. Che è il motivo per cui se avete bisogno di questo tipo di conversione è possibile utilizzare la seguente costruzione:

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

In NTL+ è necessario eseguire la conversione di oggetti da "datetime" ad un "int". variable. Può essere eseguito nel seguente modo int i; datetime d; i=int(d);

Costanti di colore

In MQL4 un numero di costanti possono essere usati per il lavoro con i colori degli oggetti di primitive grafiche. Questo tipo di costanti può essere sostituito con uno dei 16 colori di base, per esempio, specificando Bianco o Nero. L'unica eccezione è l'uso del colore in grafica indicatori. Se un colore che non è riconosciuto da NTL+ viene utilizzato, è necessario specificare il colore da RGB componenti. Per esempio, per il colore di Tomato la specifica sarà come questo: color Tomato = 0xFF6347

Operazioni con gli array di dati

In MQL4 e NTL+ lavorando con gli array di dati viene eseguito in modo diverso. In NTL+ la dichiarazione come type name[] viene utilizzato solo per l'indicatore di matrici. Per salvare altri dati di tutte le matrici sono dichiarate nel modulo di array "type" name; or array "type" name (size) . Così, invece di string symb[3] = {"EURUSD", "GBPUSD", "AUDCAD"}; dovrebbe essere usatoarray "string" symb= {"EURUSD", "GBPUSD", "AUDCAD"};

Le funzionalità non supportate

Alcuni funzioni non sono supportati in NTL+. Tali funzioni devono essere eliminati o la logica di funzionamento dello script dovrebbe essere modificato in modo da utilizzare NTL+ costruzioni. In caso di utilizzo di tali funzioni, il seguente messaggio verrà visualizzato nella rivista 'La funzione non è supportata" o "No matching firme per nome_funzione'.

Elenco di alcune funzioni non supportate:

  • SendMail()
  • gruppo di funzioni onArray
  • funzioni FileOpenHistory, FileIsLineEnding
  • gruppo di funzioni "objects" e object properties
  • per le seguenti modalità la funzione MarketInfo restituisce il valore zero:
    • MODE_SWAPLONG
    • MODE_SWAPSHORT
    • MODE_STARTING
    • MODE_EXPIRATION
    • MODE_MINLOT
    • MODE_LOTSTEP
    • MODE_SWAPTYPE
    • MODE_PROFITCALCMODE
    • MODE_MARGINCALCMODE
    • MODE_MARGININIT
    • MODE_MARGINHEDGED
    • MODE_FREEZELEVEL
  • operatore goto
  • funzione per calcolare l'indicatore personalizzato iCustom
  • gruppo di funzioni per lavorare con finestre (Window functions), MessageBox
  • TerminalCompany(), TerminalName(), TerminalPath()
  • #property parametri

Sintesi

In questo articolo abbiamo introdotto tipiche difficoltà incontrate nella conversione degli script da MetaTrader sul NetTradeX. Questo processo è notevolmente semplificato con MQL4.ntl biblioteca, fornita insieme con il terminale. Il vantaggio di questa libreria è completamente aperta codice che gli sviluppatori possono modificare o aggiungere a sua discrezione. A nostra volta, noi non riposa sugli allori e aggiungere nuove funzioni e aggiornamento di quelle esistenti in biblioteca per facilitare il processo di conversione.

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