- Esecuzione dei Programmi
- Trade Permission
- Eventi Terminale Client
- Risorse
- Chiamata delle funzioni importate
- Errori di Runtime
- Testare Strategie di Trading
Risorse
Uso di immagini e suoni in programmi mql5
I programmi in MQL5 permettono di lavorare con i file audio e grafica:
- PlaySound() riproduce un file audio;
- ObjectCreate() permette di creare interfacce utente utilizzando gli oggetti grafici OBJ_BITMAP e OBJ_BITMAP_LABEL.
PlaySound()
Esempio di chiamata della funzione PlaySound():
//+--------------------------------------------------------------------------------+
|
L'esempio mostra come riprodurre i suoni di 'Ok.wav' file e 'timeout.wav', che sono inclusi nel pacchetto terminale standard. Questi file si trovano nella cartella terminal_directory\Sounds. Qui terminal_directory vi è la cartella, da cui viene avviato Terminale Client MetaTrader 5. La posizione della directory del terminale può essere scoperta da un programma MQL5 nel modo seguente:
//--- Cartella, in cui sono memorizzati i dati del terminale
|
È possibile utilizzare i file audio non solo dalla cartella terminal_directory\Sounds, ma anche da qualsiasi sottocartella che si trova terminal_data_directory\MQL5. Si può scoprire il percorso della directory dei dati del terminale dal menu del terminale "File" -> "Apri" dati del terminale o con il metodo del programma:
//--- Cartella, in cui sono memorizzati i dati del terminale
|
Ad esempio, se il file audio Demo.wav si trova nella terminal_data_directory\MQL5\Files, allora la chiamata di PlaySound() dovrebbe essere scritta nel modo seguente:
//--- suona Demo.wav dalla cartella terminal_directory_data\MQL5\Files\Demo.wav
|
Si prega di notare che nel commento il percorso del file è scritto usando una barra inversa "\", e nella funzione invece viene usato "\\" .
Quando si specifica il percorso, usare sempre e solo la doppia barra rovesciata come separatore, in quanto una singola barra rovesciata è un simbolo di controllo per il compilatore quando si tratta di stringhe costanti e caratteri costanti nel codice sorgente del programma.
Chiama la funzione PlaySound() con parametro NULL per fermare la riproduzione:
//--- la chiamata di PlaySound() con il parametro NULL ferma la riproduzionne
|
ObjectCreate()
Esempio di un Expert Advisor, che crea un'etichetta grafica (OBJ_BITMAP_LABEL) utilizzando la funzione ObjectCreate().
string label_name="currency_label"; // nome dell'oggetto OBJ_BITMAP_LABEL
|
La creazione e configurazione dell'oggetto grafico denominato currency_label è svolta nella funzione OnInit(). I percorsi dei file grafici si trovano nelle variabili globalieuro e dollaro, una doppia backslash viene utilizzata come separatore:
string euro ="\\Images\\euro.bmp"; // percorso al file terminal_data_directory\MQL5\Images\euro.bmp
|
I file si trovano nella cartella terminal_data_directory\MQL5\Images.
L'oggetto OBJ_BITMAP_LABEL è in realtà un bottone, che visualizza una delle due immagini, a seconda dello stato del bottone (premuto o non premuto): euro.bmp o dollar.bmp.
La grandelzza del bottone con un'interfaccia grafica viene automaticamente adattata alla dimensione dell'immagine. L'immagine viene modificata con un clic del tasto sinistro del mouse sull'oggetto OBJ_BITMAP_LABEL (deve essere impostata nelle proprietà "Disattivare la selezione"). L'oggetto OBJ_BITMAP viene creato nello stesso modo - viene utilizzato per creare lo sfondo con un'immagine necessaria.
Il valore della proprietà OBJPROP_BMPFILE, che è responsabile per l'aspetto degli oggetti OBJ_BITMAP e OBJ_BITMAP_LABEL, può essere modificato in modo dinamico. Questo permette di creare diverse interfacce utente interattive per programmi mql5.
Comprese le risorse per i file eseguibili durante la compilazione dei programmi mql5 #
Un programma mql5 può necessitare di un sacco di differenti risorse scaricabili sotto forma di file immagine ed audio. Al fine di eliminare la necessità di trasferire tutti i file quando si sposta un file eseguibile in MQL5, la direttiva del compilatore #resource deve essere utilizzata:
#resource percorso_al_file_risorsa |
Il comando #resource indica al compilatore che la risorsa nel percorso specificato path_to_resource_file dovrebbe essere inclusa nel file eseguibile EX5. Così tutte le immagini e suoni necessari possono essere posto direttamente in un file EX5, in modo che non vi sia alcuna necessità di trasferire separatamente i file utilizzati in esso, se si desidera eseguire il programma su un terminale diverso. Qualsiasi file EX5 può contenere le risorse, e qualsiasi programma EX5 può utilizzare le risorse da un altro programma EX5.
I file in formato BMP e WAV vengono automaticamente compressi prima di includerli in un file EX5. Questo indica che in aggiunta alla creazione di programmi completi in MQL5, l'utilizzo di risorse consente inoltre di ridurre la grandezza totale dei file necessari utilizzando immagini e suoni, rispetto al solito modo di scrittura del programma MQL5.
La grandezza del file di risorse non deve superare i 16 Mb.
Ricerca di risorse specificate da un compilatore
Una risorsa viene inserita con il comando #resource "<percorso ad un file risorsa>"
#resource "<percorso_ad_un_file_risorse>" |
La lunghezza della stringa costante <path_to_resource_file> non deve superare i 63 caratteri.
Il compilatore cerca per una risorsa nel percorso specificato nel seguente ordine:
- se il separatore barra rovesciata "\" (scritto come "\\") è posto all'inizio del percorso, esso ricerca per il resource relativo alla directory terminal_data_directory\MQL5\,
- se non c'è backslash, esso cerca la risorsa relativa alla posizione del file di origine, in cui è scritta la risorsa.
Il percorso delle risorse non può contenere le sottostringhe "..\\" e ":\\".
Esempi di integrazione delle risorse:
//--- specifiche corrette delle risorse
|
Uso delle risorse
Nome risorsa
Dopo che una risorsa viene dichiarata mediante la direttiva #resource, essa può essere utilizzata in qualsiasi parte di un programma. Il nome della risorsa è il suo percorso senza backslash all'inizio della riga, che imposta il percorso della risorsa. Per usare le tue risorse nel codice, il contrassegno speciale "::" deve essere aggiunto prima il nome della risorsa.
Esempi:
//--- esempi di specifiche risorse e dei loro nomi nei commenti
|
Occorre notare che quando si impostano immagini da una risorsa agli oggetti OBJ_BITMAP e OBJ_BITMAP_LABEL, il valore della proprietà OBJPROP_BMPFILE non può essere modificato manualmente. Ad esempio, per la creazione di OBJ_BITMAP_LABEL utilizziamo le risorse euro.bmp e dollar.bmp.
#resource "\\Images\\euro.bmp"; // euro.bmp si trova in terminal_data_directory\MQL5\Images\
|
Quando si visualizzano le proprietà di questo oggetto, vedremo che la proprietà BitMap File (On) e BitMap File (Off) sono disattivate e non possono essere cambiate manualmente:
Utilizzando le risorse di altri programmi mql5
Vi è un altro vantaggio della risorsa utilizzando - in un qualsiasi programma MQL5, risorse di un altro file EX5 . Così le risorse da un file EX5 possono essere usate in molti altri programmi mql5.
Per utilizzare il nome di risorsa da un altro file, dovrebbe essere specificato come <path_EX5_file_name>::<resource_name> . Ad esempio, si supponga che lo script Draw_Triangles_Script.mq5 contiene una risorsa di un'immagine nel file triangle.bmp:
#resource "\\Files\\triangle.bmp" |
Allora il suo nome, per l'utilizzo nello script stesso, sarà tipo "File\triangle.bmp", e per usarlo, "::" deve essere aggiunto al nome della risorsa.
//--- utilizzo risorsa nello script
|
Per poter utilizzare la stessa risorsa da un altro programma, ad esempio da un Expert Advisor, abbiamo bisogno di aggiungere al nome della risorsa il percorso del relativo file da EX5 terminal_data_directory\MQL5\ ed il nome del file EX5 dello script, il EX5 file - Draw_Triangles_Script.ex5. Si supponga che lo script si trovi nella cartella standard terminal_data_directory\MQL5\Scripts\, dunque la chiamata deve essere scritta come segue:
//--- Utilizzando una risorsa da uno script in un EA
|
Se il percorso del file eseguibile non è specificato quando si chiama la risorsa da un altro EX5, il file eseguibile viene cercato nella stessa cartella che contiene il programma che chiama la risorsa. Ciò significa che se un Expert Advisor richiede una risorsa da Draw_Triangles_Script.ex5 senza specificazione del percorso, in questo modo:
//--- chiamata script di risorsa in un EA senza specificare il percorso
|
allora il file verrà ricercato per la cartella terminal_data_directory\MQL5\Experts\, se gli Expert Advisor sono memorizzati in terminal_data_directory\MQL5\Experts\.
Funzionamento con indicatore personalizzato incluso come risorsa
Uno o più indicatori personalizzati possono essere necessari per il funzionamento delle applicazioni MQL5. Tutti possono essere inclusi nel codice di un programma MQL5 eseguibile. L'inclusione di indicatori come risorse semplifica la distribuzione delle applicazioni.
Di seguito è riportato un esempio di inclusione ed utilizzazione dell'indicatore personalizzato SampleIndicator.ex5 che si trova in terminal_data_folder\MQL5\Indicators\ directory:
//+------------------------------------------------------------------+
|
Il caso quando un indicatore personalizzato nella funzione OnInit() crea una o più copie di se stesso e richiede una speciale considerazione. Si prega di tenere presente che la risorsa deve essere specificata nel seguente modo: <path_EX5_file_name>::<resource_name>.
Ad esempio, se l'indicatore SampleIndicator.ex5 è incluso per SampleEA.ex5 Expert Advisor come una risorsa, il percorso a sé specificato al momento della chiamata della iCustom() enlla funzione di inizializzazione dell' indicatore personalizzato appare nel seguente modo: "\\Experts\\SampleEA.ex5::Indicators\\SampleIndicator.ex5".. Quando questo percorso è impostato in modo esplicito, l'indicatore personalizzato SampleIndicator.ex5 è rigidamente collegato all' Expert Advisor SampleEA.ex5 e perde la capacità di lavorare in modo indipendente.
Il percorso di per sé può essere ricevuto tramite la funzione GetRelativeProgramPath(). L'esempio del suo utilizzo è il seguente:
//+------------------------------------------------------------------+
|
Variabili di risorsa #
Le risorse possono essere dichiarate utilizzando le variabili di risorsa e trattati come se fossero variabili del tipo appropriato. Formato Dichiarazione:
#resource percorso_al_file_risorsa as tipo_variabile_risorsa nome_variabile_risorsa |
Dichiarazioni di esempio:
#resource "data.bin" as int ExtData[] // dichiara l'array numerico contenente i dati dal file data.bin
|
In caso di tale dichiarazione, la risorsa dati può essere indirizzata solo attraverso la variabile, l'auto indirizzamento via "::<rsource name>" non funziona.
#resource "\\Images\\euro.bmp" as bitmap euro[][]
|
Risultato di esecuzione Script – solo due OBJ_BITMAP_LABEL oggetti su tre sono stati creati. L'immagine del primo oggetto ha la striscia rossa nel mezzo.
Un importante vantaggio di applicare le risorse è che i file di risorse vengono compressi automaticamente prima di essere inclusi in un file eseguibile EX5 prima della compilazione. Così, l'uso delle variabili di risorse consente di mettere tutti i dati necessari direttamente nel file eseguibile EX5, nonché ridurre il numero e la dimensione totale dei file rispetto al modo tradizionale di scrivere programmi MQL5.
L'utilizzo delle variabili di risorse è particolarmente conveniente per i prodotti editoriali nel Market.
Caratteristiche
- La speciale risorsa variabile di tipo bitmapinforma il compilatore che la risorsa è un'immagine. Tali variabili ricevono il tipo uint.
- L'array del tipo di variabile risorsa bitmappuò avere due dimensioni. In questo caso, la dimensione dell'array è definita come [altezza_immagine] [larghezza_immagine]. Se non viene specificato un array ad una dimensione, il numero di elementi è pari ad altezza_immagine * larghezza_immagine.
- Durante il download di immagini a 24 bit, il componente canale alfa è impostato a 255 per tutti i pixel dell'immagine.
- Quando si scarica un'immagine a 32 bit senza il canale alfa, la componente canale alfa è anche impostata a 255 per tutti i pixel dell'immagine.
- Quando si scarica un'immagine a 32 bit con il canale alfa, i pixel non vengono elaborati in alcun modo.
- La grandezza del file di risorse non può superare i 128 Mb.
- Il rilevamento automatico di codifica presenza da BOM (header) viene eseguita per i file di stringa. Se BOM è assente, la codifica è definita dal contenuto del file. Sono supportati i file nei ANSI, UTF-8 e UTF-16. Tutte le stringhe vengono convertite in Unicode durante la lettura dei dati dai file.
OpenCL programs
L'utilizzo delle variabili stringa risorsa può facilitare notevolmente lo sviluppo di alcuni programmi. Ad esempio, si è in grado di scrivere un codice di un programma OpenCL in un file CL separato e poi includerlo come una stringa nella vostre risorse MQL5 del programma.
#resource "seascape.cl" as string cl_program
|
In questo esempio, si sarebbe dovuto scrivere l'intero codice come un'unica grande stringa se non sono stati usati variabili risorsecl_program.
Vedi anche
ResourceCreate(), ResourceSave(), PlaySound(), ObjectSetInteger(), ChartApplyTemplate(), Funzioni con i Files