Programmare un expert advisor: Alert su incrocio medie mobili

Programmare expert advisor

Continuiamo i nostri articoli su MQL4 creando, e spiegandone le fasi, un semplice Expert Advisor che restituisce un alert avvertendo dell’incrocio di due medie mobili.

L’expert viene sviluppato per semplice scopo didattico, quindi non è adatto all’uso nel mercato, ma propone vari elementi utili per la realizzazione di sistemi di trading più complessi .

Nella realizzazione di qualsiasi Expert Advisor, è una regola basilare di ogni sistema di programmazione software, avere chiaro cosa si vuole fare. Il metodo migliore è quello di pianificare su carta l’algoritmo che si vuole poi trasformare in codice riportando i vari passaggi, dall’inizio fino al raggiungimento degli obiettivi.

Per chi non ha dimestichezza con i termini informatici, per algoritmo si intende “una sequenza logica di istruzioni elementari (univocamente interpretabili) che, eseguite in un ordine stabilito, permettono la soluzione di un problema in un numero finito di passi”.

In pratica non è nient’altro che quello che noi facciamo ogniqualvolta eseguiamo un operazione e nel nostro specifico caso, quello della creazione di un Expert Advisor , dobbiamo avere ben chiari tutti i passaggi da seguire, le condizioni da applicare il tutto prima dell’inizio della scrittura del codice.

Per prima cosa definiamo come deve agire il nostro EA. Per la nostra prova ci affidiamo all’incrocio di due medie mobili, una EMA a 5 periodi e una WMA a 75 periodi, quindi il primo passaggio sarà quello di definire questi parametri, poi entriamo nel vivo dell’algoritmo con una funzione di controllo.

Noi vogliamo che quando EMA5 incrocia verso l’alto WMA75 ci dia un alert che propone l’apertura di una posizione Long, quando invece invece EMA5 incrocia WMA75 verso il basso ci dia un alert che propone l’apertura di una posizione Short.

Ora passiamo alle spiegazioni…

Le prime righe sono delle semplici intestazioni di commento e i preprocessori che definiscono le note di copyright. L’expert vero e proprio inizia con la riga int start {

La prima cosa che abbiamo fatto è definire le variabili assegnando il relativo valore e qui necessita di alcune spiegazioni. Le variabili definite hanno come identificatore EMA5Precedente, WMA75Precedente, EMA5Attuale e WMA75Attuale , vedremo poi perché sono state create quattro variabili, e il valore è dato dalla funzione iMA().

La funzione iMA() viene utilizzata per assegnare al valore di una variabile quello della media mobile corrispondente seguendo il costrutto seguente: double iMA(Simbolo,Timeframe,Periodo,ma_shift,Metodo,Prezzo applicato,scostamento);

Simbolo – Il cross di riferimento, se si assegna il valore NULL si fa riferimento al grafico a cui viene applicato l’EA;

TimeFrame – Il Time Frame di riferimento può assumere i valori: PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1, 0 ( assegna il come valore il timeframe del grafico );

Periodo – Il periodo di riferimento della media mobile;

Metodo – Il tipo di media mobile di riferimento può assumere i seguenti valori: MODE_SMA — per SMA, MODE_EMA — per EMA, MODE_SMMA — per SMMA, MODE_LWMA — per LWMA;

Prezzo applicato – La modalità di calcolo per il valore di riferimento, infatti può essere assegnato sia il valore di apertura, di chiusura, il massimo, il minimo, il prezzo medio e altri parametri. Nel nostro caso abbiamo optato per il prezzo di chiusura della candela.

Scostamento – Questo parametro è molto importante in quanto vi si definisce quale candela, rispetto alla presente, deve essere presa come riferimento per il calcolo del valore. Il valore 0 assegna la candela attuale, il valore 1 si riferisce a quella precedente e così via.

Nel nostro caso noi abbiamo assunto i valori di EMA5 e WMA75 sia riferiti alla candela precedente che attuale. Perché tutto ciò? Per verificare l’avvenuto incrocio si è ricorsi ad un controllo incrociato condizionato all’interno di una funzione if().

Quello che è stato fatto è portare a paragone EMA5Precedente e WMA75Precedente verificandone le posizioni l’una rispetto all’altra.

La funzione if() verifica la condizione: se nella candela precedente EMA5 era inferiore a WMA75 e ora EMA5 è superiore a WMA75 allora vuol dire che c’è stato un incrocio al rialzo e da l’avvio all’alert di riferimento. Se invece: nella candela precedente EMA5 era superiore a WMA75 e ora EMA5 è inferiore a WMA75 allora vuol dire che c’è stato un incrocio al ribasso e da l’avvio all’alert di riferimento.

Spero che questo primo tutorial sia stato semplice da capire, man mano aggiungeremo nuovi elementi sempre più complessi e introdurremo nuove funzioni spiegandone i concetti sempre nell’obiettivo didattico dell’iniziativa.

Apri un conto di trading

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *