Le medie mobili sono uno strumento che si presta ad essere utilizzato in molte strategie di trading. In questo articolo (...) CONTINUA A LEGGERE...
Chi usa degli Expert Advisor per il trading automatico sulla Metatrader 4 molto probabilmente ha un grande problema: (...) CONTINUA A LEGGERE...
Le medie mobili sono uno strumento che si presta ad essere utilizzato in molte strategie di trading. In questo articolo vedrai un esempio come creare un semplicissimo expert advisor basato proprio su questo semplice indicatore.
Strategia: Impostiamo una simple moving average a N periodi. Entreremo in Long quando i prezzi sfondano la media dal basso verso l’ alto ed entreremo invece in Short quando i prezzi sfondano la media dall’ alto verso il basso. Per evitare troppi falsi segnali ci baseremo sulla chiusura delle candele: la posizione verrà effettivamente aperta solo quando la chiusura dell’ ultima candela sarà posta dall’ altra sponda della media.
Apriamo il nostro Editor Mql dal menu Strumenti/Scrittore Linguaggio Metaquotes. La prima cosa da fare è rendere impostabile dall’ esterno il periodo della media mobile, in modo da dare al nostro Expert Advisor un minimo di flessibilità. A questo scopo ci posizioniamo sotto queste due righe
#property copyright "Marco FoxTrade"
#property link ""e dichiariamo la variabile periodo, che sarà editabile direttamente al lancio dell’ EA.
extern int periodo_media=100;
extern double lotto=0.1;La variabile lotto ci dar‡ la possibilit‡ di scegliere il lotto dei trade che verranno aperti. Un consiglio che mi sento di darti Ë di lasciare uno spazio "a capo" dopo i due #property e le due righe di codice appena scritte. Questo piccolo accorgimento ti permette di separare due porzioni di codice che non hanno nulla a che fare tra di loro, migliorando cosÏ la leggibilit‡ del codice stesso.
Il passo successivo Ë rendere l’ EA capace di capire dove si trova il prezzo rispetto alla media mobile, in modo che possa aprire le posizioni in modo corretto. A questo scopo andiamo due volte a capo e dichiariamo una variabile globale che terr‡ in memoria lo "stato" del prezzo
int posizione_prezzo; int barre_totali;
la variabile barre_totali verr‡ spiegata in seguito. Successivamente ci posizioniamo all’ interno della funzione init() e scriviamo il seguente codice all’ interno delle parentesi graffe come indicato qui sotto
init()
{
barre_totali=Bars;
if(Close[1]>iMA(Symbol(),Period(),periodo_media,0,0,0,1))
{
posizione_prezzo=1;
}
else
{
posizione_prezzo=-1;
}
}In queste poche righe abbiamo detto al nostro EA che se la chiusura della precedente candela, indicata da Close[1], Ë Maggiore della media calcolata sulla barra precedente, posizione_prezzo=1, altrimenti posizione_prezzo=-1. In questo modo il nostro programma sapr‡ se la chiusura precedente si trova sopra o sotto la media mobile. La moving average ( in questo caso abbiamo usato la media semplice ) viene calcolata attraverso la funzione iMA().
Fatto questo dobbiamo dire ora al nostro EA di controllare, alla chiusura di ogni barra, se la candela precedente ha chiuso dal lato opposto della media. Scriviamo quindi un’ altra porzione di codice in start(), come segue
start()
{
double media_mobile;
if(barre_totali<Bars)
{
barre_totali=Bars;
media_mobile=iMA(Symbol(),Period(),periodo_media,0,0,0,1);
if(posizione_prezzo==1 && Close[1]<media_mobile)
{
OrderSend(Symbol(),1,lotto,Bid,30,Bid+500*MarketInfo(Symbol(),MODE_POINT),Bid-500*MarketInfo(Symbol(),MODE_SPREAD));
posizione_prezzo=-1;
}
else if(posizione_prezzo==-1 && Close[1]>media_mobile)
{
OrderSend(Symbol(),0,lotto,Ask,30,Bid-500*MarketInfo(Symbol(),MODE_POINT),Bid+500*MarketInfo(Symbol(),MODE_SPREAD));
posizione_prezzo=1;
}
}
}Quest’ ultima porzione di codice si può riassumere così:
1) controllo nuova barra: essendo che la funzione start() viene chiamata all’ arrivo di ogni singolo tick Ë necessario fare in modo di eseguire il nostro codice solo all’ arrivo di una nuova candela. Nell’ init() abbiamo posto che barre_totali=Bars, ossia barre_totali viene posto uguale al numero di barre ( Bars ) presenti attualmente sul grafico. Ogni volta che viene aggiunta una nuova barra si avr‡ che Bars viene automaticamente incrementato di uno dal Metatrader: con questo if controlliamo quindi se il numero di barre precedentemente registrato Ë minore delle barre attualmente presenti nel grafico. In caso affermativo viene eseguito il codice successivo, tra cui l’ aggiornamento del valore barre_totali per fare in modo che sino alla prossima nuova barra l’ EA con compia altre azioni. 2) A questo punto calcoliamo la media_mobile con la funzione iMA(), compiamo due controlli ed eventualmente inviamo un ordine.
if (posizione_prezzo==1 && Close[1] Questa riga controlla che ci siano i requisiti per aprire una posizione short: se posizione_prezzo==1
( quindi il prezzo era sopra alla media ) e se Close[1] 3)Infine è necessario aggiornare la variabile posizione_prezzo ponendola a -1 o a 1. Se l’ entrata Ë stata in
short significa che attualmente il prezzo Ë sotto la media e quindi poniamo posizione_prezzo=-1: questo far‡ in modo
che la prossima operazione sar‡ aperta in long. Se l’ entrata invece Ë stata in long vale l’ esatto contrario: la
prossima operazione potr‡ essere aperta soltanto in short. Ad ogni apertura si avr‡ quindi un aggiornamento di
posizione_prezzo che ci permetter‡ di aprire il trade nel senso corretto. Per una trattazione pi˘ completa sulle funzioni di media mobile e di invio degli ordini puoi consultare i relativi
articoli sulla funzione Ordersend e sulla funzione iMA. Riceverai nella tua casella una rassegna quotidiana dei migliori articoli.Vuoi ricevere gli aggiornamenti di Forexinfo.it via Email?