- Trading
- Trading Algoritmico
- Consiglieri NetTradeX
- Conversione di script da MetaTrader 4 su NetTradeX Consulenti
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 PrintUn 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 declaredNomi 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' availableLa 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 valoreQuesto 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 staticheIn 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 lottoNella 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 DLLLavorando 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);
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 integerQuesto 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 viceversaConversione 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 coloreIn 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 datiIn 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 supportateAlcuni 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.