Trading Sistematico

MQL5 Wizard: Crea Signal Trading con Hammer e Hanging Man + Stochastic per MetaTrader 5
MetaTrader5
MQL5 Wizard: Crea Signal Trading con Hammer e Hanging Man + Stochastic per MetaTrader 5

Il MQL5 Wizard offre la possibilità di creare Expert Advisor predefiniti basati sulle classi della libreria standard fornite con il terminale cliente. Questo strumento è fantastico per testare rapidamente le tue idee di trading; tutto ciò che serve è creare la tua classe di segnali di trading. La struttura di questa classe e un esempio possono essere trovati nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L'idea di base è semplice: la classe dei segnali di trading deriva da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi personalizzati. Esiste un libro intitolato "Strategie dei Migliori Trader" (in russo), in cui vengono esaminate numerose strategie di trading. Qui ci concentreremo sui pattern di candlestick di inversione, confermati da indicatori come Stochastic, CCI, MFI e RSI. Il modo migliore è creare una classe separata, derivata da CExpertSignal, per controllare la formazione di pattern di candlestick. Per confermare i segnali di trading generati dai pattern di candlestick, è sufficiente scrivere una classe, derivata da CCandlePattern, e aggiungere le funzionalità necessarie (ad esempio, la conferma tramite oscillatori). Qui considereremo i segnali basati sul pattern di candlestick di inversione "Hammer/Hanging Man", confermati dall'indicatore Stochastic. Il modulo dei segnali di trading si basa sulla classe CCandlePattern, un semplice esempio del suo utilizzo per la creazione di segnali di trading con pattern di candlestick. 1. Pattern di Candlestick di Inversione "Hammer" e "Hanging Man" 1.1. Hammer Il "Hammer" è un candlestick con un corpo piccolo e una lunga ombra inferiore, formato dopo un movimento di prezzo al ribasso. Il pattern "Hammer" indica la fine di un trend ribassista. Il colore del corpo del candlestick non è importante, ma un hammer rialzista indica un potenziale rialzista maggiore. Il corpo del pattern "Hammer" si forma spesso vicino al minimo della candela precedente. Una lunga ombra inferiore e una breve ombra superiore portano a un maggiore potenziale del pattern di inversione. Fig. 1. Pattern di candlestick 'Hammer' Il riconoscimento del pattern "Hammer" è implementato nel metodo CheckPatternHammer() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern "Hammer" candlestick    | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer()   { //--- Hammer    if((MidPoint(1)(High(1)-(High(1)-Low(1)/3.0)) && // corpo nella parte superiore 1/3       (Close(1)(High(1)-(High(1)-Low(1)/3.0)) && // corpo nella parte superiore 1/3       (Close(1)>Close(2)) && (Open(1)>Open(2))))                  // gap corpo       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) della classe CCandlePattern viene utilizzato per controllare la formazione del pattern "Hanging Man". 2. Segnali di Trading Confermati dall'Indicatore Stochastic I segnali di trading per aprire posizioni long o short devono essere confermati dall'oscillatore Stochastic. La linea %D deve essere maggiore/minore dei livelli critici corrispondenti (30 o 70). La chiusura delle posizioni aperte dipende dai valori dell'indicatore %D. Può essere effettuata in due casi: se la linea %D ha raggiunto il livello critico opposto (80 per posizione long e 20 per posizione short) se il segnale inverso non è confermato (quando la linea %D raggiunge i seguenti livelli: 20 per posizione long e 80 per posizione short) Fig. 3. Pattern 'Hammer', confermato dall'indicatore Stochastic int CH_HM_Stoch::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere la posizione short (restituisce 40); int CH_HM_Stoch::ShortCondition() - controlla le condizioni per aprire una posizione short (restituisce 80) e chiudere la posizione long (restituisce 40). 2.1. Aprire posizione long / Chiudere posizione short La formazione del pattern "Hammer" deve essere confermata dall'indicatore Stochastic: StochSignal(1)>20) && (StochSignal(2)>80) && (StochSignal(2)

2011.03.21
Guida all'uso del MQL5 Wizard: segnali di trading con Bullish e Bearish Harami + RSI
MetaTrader5
Guida all'uso del MQL5 Wizard: segnali di trading con Bullish e Bearish Harami + RSI

Il MQL5 Wizard è uno strumento potente che ti permette di creare Expert Advisor (EA) pronti all'uso, sfruttando le classi della libreria standard fornite con il terminale client. In questo post, scopriremo come utilizzarlo per generare segnali di trading basati sui pattern di candlestick Bullish Harami e Bearish Harami, confermati dall'indicatore RSI. L'idea di base è semplice: creiamo una classe di segnali di trading derivata da CExpertSignal. Dovrai sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con le tue logiche. Un libro interessante che potresti considerare è "Strategie dei migliori trader". Qui vengono analizzate diverse strategie di trading, ma noi ci concentreremo sui pattern di inversione delle candlestick, confermati da oscillatori come Stochastic, CCI, MFI e RSI. Per confermare i segnali generati dai pattern di candlestick, puoi creare una classe separata derivata da CExpertSignal, che gestisce la formazione dei pattern. Per facilitare questa operazione, utilizzeremo la classe CCandlePattern come esempio. 1. Pattern di inversione Bullish Harami e Bearish Harami 1.1. Bullish Harami Il pattern Bullish Harami si forma in un trend ribassista quando una grande candlestick è seguita da una più piccola, il cui corpo si trova all'interno del range verticale del corpo più grande. Questo pattern indica che il trend in discesa potrebbe invertire, suggerendo un buon momento per entrare in posizione long. La seconda candlestick apre con un gap in alto. Più piccola è la seconda candlestick (bianca), maggiore è la probabilità di inversione. Fig. 1. Pattern di candlestick "Bullish Harami" Il riconoscimento del pattern "Bullish Harami" è implementato nel metodo CheckPatternBullishHarami() della classe CCandlePattern. //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candlestick "Bullish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami()   { //--- Bullish Harami    if((Close(1)>Open(1))      && // l'ultima candlestick completata è bullish      ((Open(2)-Close(2)>AvgBody(1))      && // la candlestick precedente è bearish      ((Close(1)<Open(2))      && // il prezzo di chiusura della candlestick bullish è inferiore al prezzo di apertura della candlestick bearish       (Open(1)>Close(2)))             && // il prezzo di apertura della candlestick bullish è superiore al prezzo di chiusura della candlestick bearish       (MidPoint(2)<CloseAvg(2)))      // down trend       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) della classe CCandlePattern è utilizzato per controllare la formazione del pattern "Bullish Harami". 1.2. Bearish Harami Il pattern Bearish Harami si forma in un trend rialzista quando una grande candlestick è seguita da una più piccola, il cui corpo è all'interno del range verticale del corpo più grande. Questo pattern suggerisce che il trend in salita potrebbe invertire, rappresentando un buon momento per entrare in posizione short. La seconda candlestick apre con un gap in basso. Anche in questo caso, più piccola è la seconda candlestick (nera), maggiore è la probabilità di inversione. Fig. 2. Pattern di candlestick "Bearish Harami" Il riconoscimento del pattern "Bearish Harami" è implementato nel metodo CheckPatternBearishHarami() della classe CCandlePattern. //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candlestick "Bearish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami()   { //--- Bearish Harami    if((Close(1)<Open(1))      && // l'ultima candlestick completata è bearish      ((Close(2)-Open(2)>AvgBody(1))      && // la candlestick precedente è bullish      ((Close(1)>Open(2))      && // il prezzo di chiusura della candlestick bearish è superiore al prezzo di apertura della candlestick bullish       (Open(1)<Close(2)))             && // il prezzo di apertura della candlestick bearish è inferiore al prezzo di chiusura della candlestick bullish       (MidPoint(2)>CloseAvg(2)))      // up trend       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) della classe CCandlePattern è utilizzato per controllare la formazione del pattern "Bearish Harami". 2. Segnali di trading confermati dall'indicatore RSI I segnali di trading per aprire posizioni long o short devono essere confermati dall'indicatore RSI. Il valore dell'RSI deve essere inferiore o superiore ai livelli critici (40 per posizione long e 60 per posizione short). La chiusura delle posizioni aperte dipende dai valori dell'RSI. Questo può accadere in due casi: se l'RSI ha raggiunto il livello critico opposto (70 per posizione long e 30 per posizione short) se il segnale di inversione non è confermato (quando l'RSI raggiunge i seguenti livelli: 30 per posizione long e 70 per posizione short) Fig. 3. Pattern "Bullish Harami" confermato dall'indicatore RSI int CBH_BH_RSI::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere la posizione short (restituisce 40); int CBH_BH_RSI::ShortCondition() - controlla le condizioni per aprire una posizione short (restituisce 80) e chiudere la posizione long (restituisce 40). 2.1. Apertura di posizione long / Chiusura posizione short La formazione del pattern "Bullish Harami" deve essere confermata dall'indicatore RSI: RSI(1)<40 (il valore dell'RSI dell'ultima candlestick completata deve essere inferiore a 40). La posizione short deve essere chiusa se l'indicatore RSI ha superato verso l'alto i livelli critici 70 o 30. //+------------------------------------------------------------------+ //| Controlla le condizioni per entrare ed uscire dal mercato | //+------------------------------------------------------------------+ int CBH_BH_RSI::LongCondition()   {    int result=0;    //--- idx può essere utilizzato per determinare la modalità di lavoro dell'EA    int idx   =StartIndex();    //--- controllo delle condizioni per aprire posizione long    //--- formazione del pattern Bullish Harami e RSI<30   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (RSI(1)<40))      result=80;    //--- controllo delle condizioni per chiudere posizione short    //--- crossover della linea di segnale dei livelli di overbought/oversold (verso l'alto 30, verso l'alto 70)   if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))      result=40;    //--- restituisce il risultato    return(result);   } 2.2. Apertura di posizione short / Chiusura posizione long La formazione del pattern "Bearish Harami" deve essere confermata dall'indicatore RSI: RSI(1)>60 (il valore dell'RSI dell'ultima candlestick completata deve essere superiore a 60). La posizione long deve essere chiusa se l'indicatore RSI ha superato verso il basso i livelli critici 70 o 30. //+------------------------------------------------------------------+ //| Controlla le condizioni per entrare ed uscire dal mercato | //+------------------------------------------------------------------+ int CBH_BH_RSI::ShortCondition()   {    int result=0;    //--- idx può essere utilizzato per determinare la modalità di lavoro dell'EA    int idx   =StartIndex();    //--- controllo delle condizioni per aprire posizione short    //--- formazione del pattern Bearish Harami e RSI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (RSI(1)>60))      result=80;    //--- controllo delle condizioni per chiudere posizione long    //--- crossover della linea di segnale dei livelli di overbought/oversold (verso il basso 70, verso il basso 30)   if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))      result=40;    //--- restituisce il risultato    return(result);   } 2.3. Creazione dell'Expert Advisor con MQL5 Wizard La classe CBH_BH_RSI non è inclusa nelle classi della libreria standard. Per utilizzarla, è necessario scaricare il file acml_rsi.mqh e salvarlo nel percorso client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto per il file acandlepatterns.mqh. Dopo il riavvio di MetaEditor, potrai usarli in MQL5 Wizard. Per creare un Expert Advisor, lancia il MQL5 Wizard: Fig. 4. Creazione dell'Expert Advisor con MQL5 Wizard Specifica il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo di che, dovrai selezionare i moduli di segnali di trading utilizzati. Fig. 6. Proprietà dei segnali dell'Expert Advisor In questo caso utilizziamo solo un modulo di segnali di trading. Aggiungiamo il modulo di segnali basato su Bullish Harami/Bearish Harami confermato da RSI: Fig. 7. Proprietà dei segnali dell'Expert Advisor Modulo di segnali di trading aggiunto: Fig. 8. Proprietà dei segnali dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma useremo "Trailing Stop non utilizzato": Fig. 9. Proprietà di trailing dell'Expert Advisor Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume fisso": Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, che si troverà in Expert_ABH_BH_RSI.mq5, salvato nella cartella terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato sono: //--- input per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore di soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =10;     // Valore di soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un'operazione input double         Signal_StopLevel       =50.0;   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0   // Livello di Take Profit (in punti) deve essere sostituito con: //--- input per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore di soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =20;     // Valore di soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un'operazione input double         Signal_StopLevel       =0.0    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose permettono di specificare i livelli di soglia per l'apertura e la chiusura delle posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe dei segnali di trading abbiamo specificato i valori fissi della soglia: Apertura posizione: 80; Chiusura posizione: 40; L'Expert Advisor, generato da MQL5 Wizard, apre e chiude posizioni utilizzando i "voti" dei moduli di segnali di trading. Anche il voto del modulo principale (che funge da contenitore, composto da tutti i moduli aggiunti) è utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale sono utilizzati anche nell'"averaging" dei voti. Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fatto quando impostiamo i valori delle soglie. Per questo motivo, le soglie di apertura e chiusura devono essere impostate a 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati a 0, ciò significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere. 2.4. Risultati della backtest storica Analizziamo la backtest dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.11, PeriodRSI=37, MA_period=7). Durante la creazione dell'Expert Advisor, abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), e l'algoritmo di Trailing Stop non è stato utilizzato (Trailing non utilizzato). Fig. 11. Risultati del test dell'Expert Advisor, basato su Bullish Harami/Bearish Harami + RSI Il miglior set di parametri di input può essere trovato utilizzando il Strategy Tester del terminale client di MetaTrader 5. Il codice dell'Expert Advisor, creato con MQL5 Wizard, è allegato in expert_aml_rsi.mq5.

2011.03.17
MQL5 Wizard: Creare Expert Advisor per Segnali di Trading con Bullish Harami, Bearish Harami e MFI
MetaTrader5
MQL5 Wizard: Creare Expert Advisor per Segnali di Trading con Bullish Harami, Bearish Harami e MFI

Il MQL5 Wizard è uno strumento potentissimo che ti permette di creare Expert Advisor già pronti, basati sulle classi della Libreria Standard fornita con il terminale client (puoi trovare i dettagli su Creazione di Expert Advisor Pronti in MQL5 Wizard). Questa funzionalità ti consente di testare rapidamente le tue idee di trading, creando una classe di segnali di trading personalizzata. La struttura di questa classe e un esempio possono essere trovati nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L'idea di base è semplice: la classe dei segnali di trading deriva da CExpertSignal. Dovrai sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi personalizzati. Esiste un libro intitolato "Strategie dei Migliori Trader" (in russo), che analizza molte strategie di trading. Qui ci concentreremo sui modelli di candlestick di inversione, confermati da indicatori come Stochastic, CCI, MFI e RSI. Il modo migliore è creare una classe separata, derivata da CExpertSignal, per controllare la formazione dei modelli di candlestick. Per confermare i segnali di trading generati dai modelli di candlestick, è sufficiente scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, la conferma tramite oscillatori). In questo articolo ci concentreremo sui segnali basati sui modelli di candlestick di inversione "Bullish Harami / Bearish Harami", confermati dall'indicatore Market Facilitation Index (MFI). Il modulo di segnali di trading è basato sulla classe CCandlePattern, un semplice esempio del suo utilizzo per creare segnali di trading con modelli di candlestick. 1. Modelli di Candlestick di Inversione: "Bullish Harami" e "Bearish Harami" 1.1. Bullish Harami Il modello di inversione Bullish Harami si forma in un trend ribassista quando una grande candlestick è seguita da una candlestick più piccola il cui corpo è all'interno dell'intervallo verticale del corpo più grande. Questo modello indica che il trend ribassista potrebbe essere in fase di inversione, segnalando che è un buon momento per entrare in posizione lunga. La seconda candlestick si apre con un gap rialzista. Fig. 1. Modello di candlestick 'Bullish Harami' La riconoscibilità del modello "Bullish Harami" è implementata nel metodo CheckPatternBullishHarami() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del modello di candlestick "Bullish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami()   { //--- Bullish Harami    if((Close(1)>Open(1))              && // l'ultima candlestick completata è bullish (candlestick bianca)      ((Open(2)-Close(2)>AvgBody(1))  && // la candlestick precedente è bearish, il suo corpo è maggiore rispetto alla media (long black)      ((Close(1)<Open(2))              && // il prezzo di chiusura della candlestick bullish è inferiore al prezzo di apertura della candlestick bearish       (Open(1)>Close(2)))             && // il prezzo di apertura della candlestick bullish è superiore al prezzo di chiusura della candlestick bearish       (MidPoint(2)<CloseAvg(2)))         // trend ribassista       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) della classe CCandlePattern è utilizzato per controllare la formazione del modello "Bullish Harami". 1.2. Bearish Harami Il modello di inversione Bearish Harami si forma in un trend rialzista quando una grande candlestick è seguita da una candlestick più piccola il cui corpo è all'interno dell'intervallo verticale del corpo più grande. Questo modello indica che il trend rialzista potrebbe essere in fase di inversione, segnalando che è un buon momento per entrare in posizione corta. La seconda candlestick si apre con un gap ribassista. Più piccola è la seconda (candlestick nera), maggiore è la probabilità di inversione. Fig. 2. Modello di candlestick 'Bearish Harami' La riconoscibilità del modello "Bearish Harami" è implementata nel metodo CheckPatternBearishHarami() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del modello di candlestick "Bearish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami()   { //--- Bearish Harami    if((Close(1)<Open(1))              && // l'ultima candlestick completata è bearish (candlestick nera)      ((Close(2)-Open(2)>AvgBody(1))  && // la candlestick precedente è bullish, il suo corpo è maggiore rispetto alla media (long white)      ((Close(1)>Open(2))              && // il prezzo di chiusura della candlestick bearish è superiore al prezzo di apertura della candlestick bullish       (Open(1)<Close(2)))             && // il prezzo di apertura della candlestick bearish è inferiore al prezzo di chiusura della candlestick bullish       (MidPoint(2)>CloseAvg(2)))         // trend rialzista       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) della classe CCandlePattern è utilizzato per controllare la formazione del modello "Bearish Harami". 2. Segnali di Trading Confermati dall'Indicatore MFI I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'indicatore MFI. Il valore dell'indicatore MFI deve essere inferiore a 40 (per posizioni lunghe) o superiore a 60 (per posizioni corte). La chiusura della posizione aperta dipende dai valori dell'indicatore MFI. Può avvenire in 2 casi: se l'MFI ha raggiunto il livello critico opposto (70 per posizioni lunghe e 30 per posizioni corte) se il segnale di inversione non è confermato (quando l'indicatore MFI raggiunge i seguenti livelli: 30 per posizioni lunghe e 70 per posizioni corte) Fig. 3. Modello 'Bullish Harami', confermato dall'indicatore MFI int CBH_BH_MFI::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40); int CBH_BH_MFI::ShortCondition() - controlla le condizioni per aprire una posizione corta (restituisce 80) e chiudere la posizione lunga (restituisce 40). 2.1. Aprire Posizione Lunga / Chiudere Posizione Corta La formazione del modello "Bullish Harami" deve essere confermata dall'indicatore MFI: MFi(1)<40 (il valore dell'indicatore MFI dell'ultima candlestick completata deve essere inferiore a 40). La posizione corta deve essere chiusa se l'indicatore MFI ha superato i livelli critici (70 o 30). //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato | //| 1) Entrata nel mercato (apri posizione lunga, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione corta, risultato=40) | //+------------------------------------------------------------------+ int CBH_BH_MFI::LongCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo alle barre di notizie   int idx   =StartIndex(); //--- controllo delle condizioni per aprire la posizione lunga //--- formazione del modello Bullish Harami e MFI<40   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (MFI(1)<40))      result=80; //--- controllo delle condizioni per chiudere la posizione corta //--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (rialzista 30, rialzista 70)   if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))      result=40; //--- ritorna il risultato    return(result);   } 2.2. Aprire Posizione Corta / Chiudere Posizione Lunga La formazione del modello "Bearish Harami" deve essere confermata dall'indicatore MFI: MFI(1)>60 (il valore dell'indicatore MFI dell'ultima candlestick completata deve essere superiore a 60). La posizione lunga deve essere chiusa se l'indicatore MFI ha superato i livelli critici (70 o 30). //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato | //| 1) Entrata nel mercato (apri posizione corta, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40) | //+------------------------------------------------------------------+ int CBH_BH_MFI::ShortCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo alle barre di notizie   int idx   =StartIndex(); //--- controllo delle condizioni per aprire la posizione corta //--- formazione del modello Bearish Harami e MFI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (MFI(1)>60))      result=80; //--- controllo delle condizioni per chiudere la posizione lunga //--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (rialzista 70, ribassista 30)    if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))      result=40; //--- ritorna il risultato    return(result);   } 2.3. Creare Expert Advisor utilizzando MQL5 Wizard La classe CBH_BH_MFI non è inclusa nelle classi della Libreria Standard, per utilizzarla è necessario scaricare il file abh_bh_mfi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso dovrebbe essere fatto con il file acandlepatterns.mqh. Potrai utilizzarlo in MQL5 Wizard dopo aver riavviato il MetaEditor. Per creare un Expert Advisor, avvia il MQL5 Wizard: Fig. 4. Creazione Expert Advisor con MQL5 Wizard Specifichiamo il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo di che dobbiamo selezionare i moduli dei segnali di trading utilizzati. Fig. 6. Proprietà dei segnali dell'Expert Advisor Nel nostro caso utilizziamo solo un modulo di segnali di trading. Aggiungiamo il modulo di segnali: Segnali basati su Bullish Harami / Bearish Harami confermati da MFI Fig. 7. Proprietà dei segnali dell'Expert Advisor Modulo di segnali di trading aggiunto: Fig. 8. Proprietà dei segnali dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma noi utilizzeremo "Trailing Stop non usato": Fig. 9. Proprietà di money management dell'Expert Advisor Per quanto riguarda le proprietà di money management, utilizzeremo "Trading con volume fisso": Fig. 10. Proprietà di money management dell'Expert Advisor Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_ABH_BH_MFI.mq5, che verrà salvato nella cartella terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato sono: //--- input per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =10;     // Valore soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un'operazione input double         Signal_StopLevel       =50.0;   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0;  // Livello di Take Profit (in punti) devono essere sostituiti con: //--- input per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =20;     // Valore soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un'operazione input double         Signal_StopLevel       =0.0    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose consentono di specificare i livelli soglia per aprire e chiudere le posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe dei segnali di trading abbiamo specificato i valori fissi della soglia: Aprire posizione: 80; Chiudere posizione: 40. L'Expert Advisor, generato da MQL5 Wizard, apre e chiude posizioni utilizzando i "voti" provenienti dai moduli di segnali di trading. Il voto del modulo principale (come contenitore, che consiste di tutti i moduli aggiunti) viene utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale vengono utilizzati anche per la media dei voti. Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fattore quando impostiamo i valori soglia. Questo significa che i ThresholdOpen e ThresholdClose devono essere impostati rispettivamente a 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati a 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno verificate. 2.4. Risultati del Backtesting Storico Consideriamo un backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.16, PeriodMFI=37, MA_period=11). Per la creazione dell'Expert Advisor abbiamo utilizzato un volume fisso (Trading a Lotto Fisso, 0.1), l'algoritmo di Trailing Stop non è stato utilizzato (Trailing non utilizzato). Fig. 11. Risultati del test dell'Expert Advisor, basato su Bullish Harami / Bearish Harami + MFI Il miglior set di parametri di input può essere trovato utilizzando il Strategy Tester del terminale client MetaTrader 5. Il codice dell'Expert Advisor, creato dal MQL5 Wizard è allegato in expert_abh_bh_mfi.mq5.

2011.03.17
MQL5 Wizard: Crea il Tuo Expert Advisor con Segnali Bullish e Bearish Harami + CCI
MetaTrader5
MQL5 Wizard: Crea il Tuo Expert Advisor con Segnali Bullish e Bearish Harami + CCI

Il MQL5 Wizard ti consente di creare facilmente Expert Advisor (EA) basati sulle classi della libreria standard fornite con il terminale cliente. Questo strumento è perfetto per testare rapidamente le tue idee di trading, basta creare la tua classe di segnali di trading. La struttura di questa classe e un esempio possono essere trovati nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. In sostanza, la classe di segnali di trading deriva da CExpertSignal. È necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i propri metodi. Un libro interessante è "Strategie dei Migliori Trader" (in russo), che analizza diverse strategie di trading. Noi ci concentreremo sui modelli di candele di inversione, confermati da indicatori come Stochastic, CCI, MFI e RSI. La soluzione migliore è creare una classe separata, derivata da CExpertSignal, per verificare la formazione dei modelli di candele. Per confermare i segnali di trading generati dai modelli di candele, basta scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, conferma tramite oscillatori). Focalizziamoci sui segnali basati sui modelli di candele di inversione "Bullish Harami" e "Bearish Harami", confermati dall'indicatore CCI. Il modulo di segnali di trading si basa sulla classe CCandlePattern, che offre un esempio semplice di utilizzo per la creazione di segnali di trading con i modelli di candele. 1. Modelli di Candele Bullish Harami e Bearish Harami 1.1. Bullish Harami Il modello di inversione Bullish Harami si forma in un trend ribassista, quando una grande candela è seguita da una candela più piccola il cui corpo è situato all'interno dell'intervallo verticale del corpo più grande. Questo pattern indica che il trend ribassista potrebbe invertirsi, segnalando che è un buon momento per entrare in posizione long. La seconda candela si apre con un gap in alto. Più piccola è la seconda candela (bianca), maggiore è la probabilità di inversione. Fig. 1. Modello di candela "Bullish Harami" Il riconoscimento del modello "Bullish Harami" è implementato nel metodo CheckPatternBullishHarami() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del modello di candela "Bullish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami()   { //--- Bullish Harami    if((Close(1)>Open(1))              && // l'ultima candela completata è bullish (giornata bianca)      ((Open(2)-Close(2)>AvgBody(1))  && // la candela precedente è bearish, il suo corpo è maggiore della media (lunga nera)      ((Close(1)<Open(2))              && // il prezzo di chiusura della candela bullish è inferiore al prezzo di apertura della candela bearish       (Open(1)>Close(2)))             && // il prezzo di apertura della candela bullish è superiore al prezzo di chiusura della candela bearish       (MidPoint(2)<CloseAvg(2)))         // trend ribassista       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) della classe CCandlePattern è utilizzato per verificare la formazione del modello di candela "Bullish Harami". 1.2. Bearish Harami Il modello di inversione Bearish Harami si forma in un trend rialzista, quando una grande candela è seguita da una candela più piccola il cui corpo è situato all'interno dell'intervallo verticale del corpo più grande. Questo pattern indica che il trend rialzista potrebbe invertirsi, segnalando che è un buon momento per entrare in posizione short. La seconda candela si apre con un gap in basso. Più piccola è la seconda (nera) candela, maggiore è la probabilità di inversione. Fig. 2. Modello di candela "Bearish Harami" Il riconoscimento del modello "Bearish Harami" è implementato nel metodo CheckPatternBearishHarami() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del modello di candela "Bearish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami()   { //--- Bearish Harami    if((Close(1)<Open(1))              && // l'ultima candela completata è bearish (giornata nera)      ((Close(2)-Open(2)>AvgBody(1))  && // la candela precedente è bullish, il suo corpo è maggiore della media (lunga bianca)      ((Close(1)>Open(2))              && // il prezzo di chiusura della candela bearish è superiore al prezzo di apertura della candela bullish       (Open(1)<Close(2)))             && // il prezzo di apertura della candela bearish è inferiore al prezzo di chiusura della candela bullish       (MidPoint(2)>CloseAvg(2)))         // trend rialzista       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) della classe CCandlePattern è utilizzato per verificare la formazione del modello di candela "Bearish Harami". 2. Segnali di Trading Confermati dall'Indicatore CCI I segnali di trading per aprire posizioni long o short devono essere confermati dall'indicatore CCI. Il valore del CCI deve essere maggiore/minore dei livelli critici (-50 per la posizione long e 50 per la posizione short). La chiusura della posizione aperta dipende dai valori del CCI. Può avvenire in 2 casi: se la linea CCI ha raggiunto il livello critico opposto (80 per la posizione long e -80 per la posizione short) se il segnale inverso non è confermato (quando il CCI raggiunge i seguenti livelli: -80 per la posizione long e 80 per la posizione short) Fig. 3. Modello "Bullish Harami", confermato dall'indicatore CCI int CBH_BH_CCI::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere la posizione short (restituisce 40); int CBH_BH_CCI::ShortCondition() - controlla le condizioni per aprire una posizione short (restituisce 80) e chiudere la posizione long (restituisce 40). 2.1. Aprire Posizione Long / Chiudere Posizione Short La formazione del modello "Bullish Harami" deve essere confermata dall'indicatore CCI: CCI(1)<-50 (il valore del CCI dell'ultima candela completata deve essere inferiore a -50). La posizione short deve essere chiusa se l'indicatore CCI ha attraversato verso l'alto il livello critico -80 o verso il basso il livello critico 80. //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato | //| 1) Ingresso nel mercato (apri la posizione long, risultato=80) | //| 2) Uscita dal mercato (chiudi la posizione short, risultato=40) | //+------------------------------------------------------------------+ int CBH_BH_CCI::LongCondition()   {    int result=0; //--- idx può essere utilizzato per determinare la modalità di lavoro dell'EA //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo nei nuovi barre    int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione long //--- formazione del modello Bullish Harami e CCI<-50    if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (CCI(1)<-50))      result=80; //--- controllo delle condizioni per chiudere la posizione short //--- crossover della linea del segnale dei livelli di ipercomprato/iper-venduto (verso il basso -80, verso l'alto -80)    if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80

2011.03.17
Creare Expert Advisor con MQL5 Wizard: Segnali di Trading basati su Bullish e Bearish Harami con Stochastic
MetaTrader5
Creare Expert Advisor con MQL5 Wizard: Segnali di Trading basati su Bullish e Bearish Harami con Stochastic

Il MQL5 Wizard è uno strumento fantastico per creare Expert Advisor (EA) già pronti, sfruttando le classi della libreria standard fornite con il terminale client. Ti permette di testare le tue idee di trading in modo rapido; basta creare la tua classe di segnali di trading. Puoi trovare la struttura di questa classe e un esempio nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L'idea principale è la seguente: la classe di segnali di trading deriva da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i propri metodi. Esiste un libro intitolato "Strategie dei migliori trader" (in russo), che analizza molte strategie di trading. Noi ci concentreremo sui modelli di candele di inversione, confermati dagli oscillatori Stochastic, CCI, MFI e RSI. Il modo migliore è creare una classe separata, derivata da CExpertSignal, per controllare la formazione dei modelli di candele. Per confermare i segnali di trading generati dai modelli di candele, basta scrivere una classe, derivata da CCandlePattern, e aggiungere le funzionalità necessarie (ad esempio, conferma da parte degli oscillatori). In questo articolo considereremo i segnali basati sui modelli di inversione "Bullish Harami/Bearish Harami", confermati dall'indicatore Stochastic. Il modulo di segnali di trading si basa sulla classe CCandlePattern, che è un semplice esempio del suo utilizzo per creare segnali di trading con i modelli di candele. 1. Modelli di candele di inversione "Bullish Harami" e "Bearish Harami" 1.1. Bullish Harami Il modello di inversione Bullish Harami si forma in un trend ribassista quando una grande candela è seguita da una candela più piccola il cui corpo è collocato all'interno dell'intervallo verticale del corpo più grande. Questo modello indica che il trend calante (downtrend) potrebbe invertirsi, segnalando che è un buon momento per entrare in posizione long. La seconda candela apre con un gap verso l'alto. Più piccola è la seconda candela (bianca), maggiore è la probabilità di inversione. Fig. 1. Modello di candela "Bullish Harami" Il riconoscimento del modello "Bullish Harami" è implementato nel metodo CheckPatternBullishHarami() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del modello di candela "Bullish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami()   { //--- Bullish Harami    if((Close(1)>Open(1))              && // l'ultima barra completata è bullish (giornata bianca)      ((Open(2)-Close(2)>AvgBody(1))  && // la candela precedente è ribassista, il suo corpo è maggiore della media (grande nera)      ((Close(1)<Open(2))              && // il prezzo di chiusura della candela bullish è inferiore al prezzo di apertura della candela ribassista       (Open(1)>Close(2)))              && // il prezzo di apertura della candela bullish è superiore al prezzo di chiusura della candela ribassista       (MidPoint(2)<CloseAvg(2)))         // trend ribassista       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) della classe CCandlePattern viene utilizzato per controllare la formazione del modello di candela "Bullish Harami". 1.2. Bearish Harami Il modello di inversione Bearish Harami si forma in un trend rialzista quando una grande candela è seguita da una candela più piccola il cui corpo è collocato all'interno dell'intervallo verticale del corpo più grande. Questo modello indica che il trend crescente (uptrend) potrebbe invertirsi, segnalando che è un buon momento per entrare in posizione short. La seconda candela apre con un gap verso il basso. Più piccola è la seconda candela (nera), maggiore è la probabilità di inversione. Fig. 2. Modello di candela "Bearish Harami" Il riconoscimento del modello "Bearish Harami" è implementato nel metodo CheckPatternBearishHarami() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del modello di candela "Bearish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami()   { //--- Bearish Harami    if((Close(1)<Open(1))              && // l'ultima barra completata è ribassista (giornata nera)      ((Close(2)-Open(2)>AvgBody(1))  && // la candela precedente è bullish, il suo corpo è maggiore della media (grande bianca)      ((Close(1)>Open(2))              && // il prezzo di chiusura della candela ribassista è superiore al prezzo di apertura della candela bullish      (Open(1)<Close(2)))              && // il prezzo di apertura della candela ribassista è inferiore al prezzo di chiusura della candela bullish       (MidPoint(2)>CloseAvg(2)))         // up trend       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) della classe CCandlePattern viene utilizzato per controllare la formazione del modello di candela "Bearish Harami". 2. Segnali di trading, confermati dall'indicatore Stochastic I segnali di trading per aprire posizioni long o short devono essere confermati dall'oscillatore Stochastic. La linea %D deve essere superiore/inferiore ai relativi livelli critici (30 o 70). La chiusura della posizione aperta dipende dai valori dell'indicatore %D. Può avvenire in 2 casi: se la linea %D ha raggiunto il livello critico opposto (80 per posizione long e 20 per posizione short) se il segnale inverso non è confermato (quando la linea %D raggiunge i seguenti livelli: 20 per posizione long e 80 per posizione short) Fig. 3. Modello di candela "Bearish Harami", confermato dall'indicatore Stochastic Il controllo delle condizioni di trading per l'ingresso e l'uscita è implementato in due metodi: int CBH_BH_Stoch::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere la posizione short (restituisce 40); int CBH_BH_Stoch::ShortCondition() - controlla le condizioni per aprire una posizione short (restituisce 80) e chiudere la posizione long (restituisce 40). 2.1. Aprire posizione long/Chiudere posizione short La formazione del modello "Bullish Harami" deve essere confermata dall'indicatore Stochastic: StochSignal(1)<30 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima barra completata deve essere inferiore a 30). La posizione short deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha attraversato verso l'alto i livelli 20 o 80. //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato | //| 1) Ingresso nel mercato (apri posizione long, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione short, risultato=40) | //+------------------------------------------------------------------+ int CBH_BH_Stoch::LongCondition()   {    int result=0; //--- idx può essere utilizzato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo durante le barre delle notizie   int idx   =StartIndex(); //--- controllo delle condizioni per aprire posizione long //--- formazione del modello Bullish Harami e linea di segnale<30   if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (StochSignal(1)<30))      result=80; //--- controllo delle condizioni per chiudere posizione short //--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (verso il basso 20, verso l'alto 80)    if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||        ((StochSignal(1)>80) && (StochSignal(2)<80))))      result=40; //--- restituisci il risultato    return(result);   } 2.2. Aprire posizione short/Chiudere posizione long La formazione del modello "Bearish Harami" deve essere confermata dall'indicatore Stochastic: StochSignal(1)>70 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima barra completata deve essere superiore a 70). La posizione long deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha attraversato verso il basso i livelli 80 o 20. //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato | //| 1) Ingresso nel mercato (apri posizione short, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione long, risultato=40) | //+------------------------------------------------------------------+ int CBH_BH_Stoch::ShortCondition()   {    int result=0; //--- idx può essere utilizzato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo durante le barre delle notizie   int idx   =StartIndex(); //--- controllo delle condizioni per aprire posizione short //--- formazione del modello Bearish Harami e linea di segnale>70   if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (StochSignal(1)>70))      result=80; //--- controllo delle condizioni per chiudere posizione long //--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (verso il basso 80, verso l'alto 20)    if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||        ((StochSignal(1)<20) && (StochSignal(2)>20))))      result=40; //--- restituisci il risultato    return(result);   } 2.3. Creazione di un Expert Advisor utilizzando MQL5 Wizard La classe CBH_BH_Stoch non è inclusa nelle classi della Libreria Standard, per utilizzarla, è necessario scaricare il file acbh_bh_stoch.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. La stessa cosa deve essere fatta con il file candlepatterns.mqh. Puoi utilizzarlo in MQL5 Wizard dopo aver riavviato il MetaEditor. Per creare un Expert Advisor, lancia MQL5 Wizard: Fig. 4. Creazione di un Expert Advisor usando MQL5 Wizard Specifichiamo il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo di che, dobbiamo selezionare i moduli di segnali di trading utilizzati. Fig. 6. Proprietà del segnale dell'Expert Advisor Nel nostro caso utilizziamo solo un modulo di segnali di trading. Aggiungiamo il modulo Segnali basati su Bullish Harami/Bearish Harami confermati da Stochastic: Fig. 7. Proprietà del segnale dell'Expert Advisor Modulo di segnali di trading aggiunto: Fig. 8. Proprietà del segnale dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma utilizzeremo "Trailing Stop non utilizzato": Fig. 9. Proprietà di trailing dell'Expert Advisor Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume di trading fisso": Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, che si troverà in Expert_ABH_BH_Stoch.mq5, salvato in terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato: //--- input per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =10;     // Valore soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un'operazione input double         Signal_StopLevel       =50.0;   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0  // Livello di Take Profit (in punti)deve essere sostituito con: //--- input per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =20     // Valore soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0    // Livello di prezzo per eseguire un'operazione input double         Signal_StopLevel       =0.0    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose consentono di specificare i livelli soglia per l'apertura e la chiusura delle posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe di segnali di trading abbiamo specificato i valori fissi della soglia: Apri posizione: 80; Chiudi posizione: 40. L'Expert Advisor, generato da MQL5 Wizard, apre e chiude posizioni utilizzando le "voti" dai moduli di segnali di trading. Il voto del modulo principale (come contenitore, consiste di tutti i moduli aggiunti) viene utilizzato anche, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale vengono utilizzati anche nell' "averaging" dei voti. Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fatto quando impostiamo i valori delle soglie. A causa di questo fatto, le soglie ThresholdOpen e ThresholdClose devono essere impostate come 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati su 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere. 2.4. Risultati del backtesting storico Consideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5). Nella creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), non è stato utilizzato l'algoritmo Trailing Stop (Trailing not used). Fig. 11. Risultati del test dell'Expert Advisor, basato su Bullish/Bearish Harami + Stochastic Il miglior set di parametri di input può essere trovato utilizzando il Strategy Tester del terminale client di MetaTrader 5.Il codice dell'Expert Advisor, creato da MQL5 Wizard, è allegato in expert_abh_bh_stoch.mq5.

2011.03.16
Generazione di Expert Advisor con MQL5 Wizard: segnali di trading basati su Bullish e Bearish Engulfing + RSI
MetaTrader5
Generazione di Expert Advisor con MQL5 Wizard: segnali di trading basati su Bullish e Bearish Engulfing + RSI

Il MQL5 Wizard è uno strumento fantastico che permette di creare Expert Advisor pronti all'uso, basati sulle classi della libreria standard fornite con il terminale client. Grazie a questo strumento, puoi testare rapidamente le tue idee di trading, basta creare la tua propria classe di segnali di trading. Puoi trovare la struttura di questa classe e un esempio nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading.L'idea generale è semplice: la classe dei segnali di trading deriva da CExpertSignal. Dovrai sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi.Un libro interessante che consiglio è "Strategie dei migliori trader" (in russo), dove vengono trattate molte strategie di trading. Qui ci concentreremo sui modelli di candele di inversione, confermati da oscillatori come Stochastic, CCI, MFI e RSI.Il modo migliore è creare una classe separata derivata da CExpertSignal per controllare la formazione dei modelli di candele. Per confermare i segnali di trading generati dai modelli di candele, basta scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, conferma tramite oscillatori).In questo articolo, ci concentreremo sui segnali basati sul modello di candele di inversione "Bullish Engulfing/Bearish Engulfing", confermati dall'indicatore RSI. Il modulo di segnali di trading si basa sulla classe CCandlePattern, che offre un semplice esempio di utilizzo per la creazione di segnali di trading con modelli di candele.1. Bullish Engulfing e Bearish Engulfing1.1. Bullish EngulfingIl modello di inversione "Bullish Engulfing" si forma in una fase di downtrend quando una piccola candela nera è seguita da una grande candela bianca che la sovrasta completamente ("engulfs"). Le ombre (code) della piccola candela sono corte, permettendo al corpo della grande candela di coprire l'intera candela del giorno precedente.Fig. 1. Modello di candela "Bullish Engulfing"Il riconoscimento del modello "Bullish Engulfing" è implementato nel metodo CheckPatternBullishEngulfing() della classe CCandlePattern://+------------------------------------------------------------------+ //| Controlla la formazione del modello di candela "Bullish Engulfing" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing()   { //--- Bullish Engulfing    if((Open(2)>Close(2))             &&  // la candela precedente è ribassista       (Close(1)-Open(1)>AvgBody(1))  &&  // il corpo della candela rialzista è superiore alla media del corpo       (Close(1)>Open(2))             &&  // il prezzo di chiusura della candela rialzista è superiore al prezzo di apertura della candela ribassista       (MidOpenClose(2)<CloseAvg(2))  &&  // fase di downtrend       (Open(1)<Close(2)))                // il prezzo di apertura della candela rialzista è inferiore al prezzo di chiusura della candela ribassista       return(true); //---    return(false);   }Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) della classe CCandlePattern viene utilizzato per verificare la formazione del modello di candela "Bullish Engulfing".1.2. Bearish EngulfingIl modello di inversione "Bearish Engulfing" si forma in una fase di uptrend quando una piccola candela bianca è seguita da una grande candela nera che la sovrasta completamente. Le ombre (code) della piccola candela sono corte, consentendo al corpo della grande candela di coprire l'intera candela del giorno precedente.Fig. 2. Modello di candela "Bearish Engulfing"Il riconoscimento del modello "Bearish Engulfing" è implementato nel metodo CheckPatternBearishEngulfing() della classe CCandlePattern://+------------------------------------------------------------------+ //| Controlla la formazione del modello di candela "Bearish Engulfing" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing()   { //--- Bearish Engulfing    if((Open(2)<Close(2))            &&  // la candela precedente è rialzista       (Open(1)-Close(1)>AvgBody(1)) &&  // il corpo della candela è superiore alla media del corpo       (Close(1)<Open(2))            &&  // il prezzo di chiusura della candela ribassista è inferiore al prezzo di apertura della candela rialzista       (MidOpenClose(2)>CloseAvg(2)) &&  // fase di uptrend       (Open(1)>Close(2)))               // il prezzo di apertura della candela ribassista è superiore al prezzo di chiusura della candela rialzista       return(true); //---    return(false);   }Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) della classe CCandlePattern viene utilizzato per verificare la formazione del modello di candela "Bearish Engulfing".2. Segnali di trading, confermati dall'indicatore RSII segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'indicatore RSI. Il valore dell'RSI deve essere inferiore o superiore ai livelli critici (40 per una posizione lunga e 60 per una posizione corta).La chiusura delle posizioni aperte dipende dai valori dell'RSI. Ciò può avvenire in 2 casi: se l'RSI ha raggiunto il livello critico opposto (70 per una posizione lunga e 30 per una posizione corta)se il segnale inverso non è confermato (quando l'RSI raggiunge i seguenti livelli: 30 per una posizione lunga e 70 per una posizione corta)Fig. 3. Modello "Bullish Engulfing", confermato dall'indicatore RSIint CBE_BE_RSI::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40);int CBE_BE_RSI::ShortCondition() - controlla le condizioni per aprire una posizione corta (restituisce 80) e chiudere la posizione lunga (restituisce 40).2.1. Aprire posizione lunga / Chiudere posizione cortaLa formazione del modello "Bullish Engulfing" deve essere confermata dall'indicatore RSI: RSI(1)<40 (il valore dell'RSI dell'ultima barra completata deve essere inferiore a 40).La posizione corta deve essere chiusa se l'indicatore RSI ha superato in alto i livelli critici 70 o 30.//+------------------------------------------------------------------+ //| Controlla le condizioni per l'entrata e l'uscita dal mercato | //| 1) Entrata nel mercato (apri posizione lunga, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione corta, risultato=40) | //+------------------------------------------------------------------+ int CBE_BE_RSI::LongCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'EA //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo durante le barre di notizie    int idx   =StartIndex(); //--- controllando le condizioni per aprire una posizione lunga //--- formazione del modello Bullish Engulfing e RSI<30   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (RSI(1)<40))      result=80; //--- controllando le condizioni per chiudere posizione corta //--- crossover della linea segnale dei livelli di ipercomprato/ipersoldato (verso l'alto 30, verso l'alto 70)   if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))      result=40; //--- restituisci il risultato    return(result);   }2.2. Aprire posizione corta / Chiudere posizione lungaLa formazione del modello "Bearish Engulfing" deve essere confermata dall'indicatore RSI: RSI(1)>60 (il valore dell'indicatore RSI dell'ultima barra completata deve essere superiore a 60).La posizione lunga deve essere chiusa se l'indicatore RSI ha superato verso il basso i livelli critici 70 o 30.//+------------------------------------------------------------------+ //| Controlla le condizioni per l'entrata e l'uscita dal mercato | //| 1) Entrata nel mercato (apri posizione corta, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40) | //+------------------------------------------------------------------+ int CBE_BE_RSI::ShortCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'EA //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo durante le barre di notizie    int idx   =StartIndex(); //--- controllando le condizioni per aprire una posizione corta //--- formazione del modello Bearish Engulfing e RSI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (RSI(1)>60))      result=80; //--- controllando le condizioni per chiudere posizione lunga //--- crossover della linea segnale dei livelli di ipercomprato/ipersoldato (verso il basso 70, verso il basso 30)    if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))      result=40; //--- restituisci il risultato    return(result);   }2.3. Creare un Expert Advisor utilizzando MQL5 WizardLa classe CBE_BE_RSI non è inclusa nelle classi della libreria standard, per utilizzarla è necessario scaricare il file acml_rsi.mqh (vedi allegati) e salvarlo nella cartella terminal_client_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto con il file acandlepatterns.mqh. Puoi utilizzare questi file in MQL5 Wizard dopo aver riavviato MetaEditor.Per creare un Expert Advisor, avvia MQL5 Wizard:Fig. 4. Creazione di Expert Advisor con MQL5 WizardSpecifichiamo il nome dell'Expert Advisor:Fig. 5. Proprietà generali dell'Expert AdvisorDopo di che dobbiamo selezionare i moduli di segnali di trading utilizzati.Fig. 6. Proprietà del segnale dell'Expert AdvisorNel nostro caso utilizziamo solo un modulo di segnali di trading.Aggiungiamo il modulo di segnali di trading: Segnali basati su Bullish Engulfing/Bearish Engulfing confermati da RSI:Fig. 7. Proprietà del segnale dell'Expert AdvisorModulo di segnali di trading aggiunto:Fig. 8. Proprietà del segnale dell'Expert AdvisorPuoi selezionare qualsiasi proprietà di trailing, ma utilizzeremo "Trailing Stop non utilizzato":Fig. 9. Proprietà di trailing dell'Expert AdvisorPer quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume di scambio fisso":Fig. 10. Proprietà di gestione del denaro dell'Expert AdvisorPremendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_ABE_BE_RSI.mq5, che sarà salvato in terminal_data_folder\MQL5\Experts\.I parametri di input predefiniti dell'Expert Advisor generato sono://--- input per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore soglia segnale per aprire [0...100] input int            Signal_ThresholdClose  =10     // Valore soglia segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0    // Livello di prezzo per eseguire un'operazione input double         Signal_StopLevel       =50.0   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0   // Livello di Take Profit (in punti)devono essere sostituiti con://--- input per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore soglia segnale per aprire [0...100] input int            Signal_ThresholdClose  =20     // Valore soglia segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0    // Livello di prezzo per eseguire un'operazione input double         Signal_StopLevel       =0.0    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti)I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose consentono di specificare i livelli soglia per l'apertura e la chiusura delle posizioni.Nel codice dei metodi LongCondition() e ShortCondition() della classe dei segnali di trading abbiamo specificato valori fissi per le soglie:Aprire posizione: 80;Chiudere posizione: 40.L'Expert Advisor, generato dal MQL5 Wizard, apre e chiude le posizioni utilizzando i "voti" dei moduli di segnali di trading. Il voto del modulo principale (come contenitore, consiste di tutti i moduli aggiunti) viene utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0.I risultati dei voti del modulo principale vengono utilizzati anche per la media dei "voti". Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fattore nella definizione dei valori delle soglie. A causa di questo, le ThresholdOpen e ThresholdClose devono essere impostate rispettivamente a 40=(0+80)/2 e 20=(0+40)/2.I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati su 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere.2.4. Risultati del backtesting storicoConsideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.04, PeriodRSI=11, MA_period=5).Nella creazione dell'Expert Advisor abbiamo utilizzato un volume fisso (Trading Fixed Lot, 0.1), l'algoritmo di Trailing Stop non è stato utilizzato (Trailing non utilizzato).Fig. 11. Risultati del test dell'Expert Advisor, basato su Bullish Engulfing/Bearish Engulfing + RSIIl miglior set di parametri di input può essere trovato utilizzando il Strategy Tester del terminale client MetaTrader 5.Il codice dell'Expert Advisor, creato dal MQL5 Wizard, è allegato in expert_abe_be_rsi.mq5.

2011.03.10
MQL5 Wizard: Strategie di Trading con Pattern Candlestick e MFI
MetaTrader5
MQL5 Wizard: Strategie di Trading con Pattern Candlestick e MFI

Il MQL5 Wizard è uno strumento potente per creare Expert Advisor già pronti, sfruttando le classi della Libreria Standard fornite con il terminale client. Questo ti consente di testare rapidamente le tue idee di trading, basta creare una tua classe di segnali di trading. La struttura di questa classe e un esempio possono essere trovati nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L'idea generale è la seguente: la classe di segnali di trading deriva da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i propri metodi. Esiste un libro intitolato "Strategie dei Migliori Trader" (in russo), dove vengono considerate molte strategie di trading; qui ci concentreremo sui pattern di inversione delle candele, confermati dagli oscillatori Stochastic, CCI, MFI e RSI. Il modo migliore è creare una classe separata, derivata da CExpertSignal, per controllare la formazione dei pattern delle candele. Per confermare i segnali di trading generati dai pattern delle candele, è sufficiente scrivere una classe, derivata da CCandlePattern, e aggiungere lì le funzionalità necessarie (ad esempio, conferma tramite oscillatori). Qui considereremo i segnali basati sul pattern di inversione candlestick "Bullish Engulfing/Bearish Engulfing", confermati dall'indicatore Market Facilitation Index (MFI). Il modulo di segnali di trading si basa sulla classe CCandlePattern, un esempio semplice del suo utilizzo per la creazione di segnali di trading con pattern di candele. 1. Pattern di Inversione "Bullish Engulfing" e "Bearish Engulfing" 1.1. Bullish Engulfing Il pattern "Bullish Engulfing" si forma in un trend ribassista quando una piccola candela nera è seguita da una grande candela bianca che oscura completamente ("inghiotte") la candela del giorno precedente. Le ombre (code) della piccola candela sono corte, il che consente al corpo della grande candela di coprire l'intera candela del giorno precedente. Fig. 1. Pattern "Bullish Engulfing" Il riconoscimento del pattern "Bullish Engulfing" è implementato nel metodo CheckPatternBullishEngulfing() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern "Bullish Engulfing"| //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing()   { //--- Bullish Engulfing    if((Open(2)>Close(2))             &&  // la candela precedente è ribassista       (Close(1)-Open(1)>AvgBody(1))  &&  // il corpo della candela rialzista è superiore alla media del corpo       (Close(1)>Open(2))             &&  // il prezzo di chiusura della candela rialzista è superiore al prezzo di apertura della candela ribassista       (MidOpenClose(2)<CloseAvg(2))  &&  // trend ribassista       (Open(1)<Close(2)))                // il prezzo di apertura della candela rialzista è inferiore al prezzo di chiusura della ribassista       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) della classe CCandlePattern viene utilizzato per controllare la formazione del pattern "Bullish Engulfing". 1.2. Bearish Engulfing Il pattern "Bearish Engulfing" si forma in un trend rialzista quando una piccola candela bianca è seguita da una grande candela nera che oscura completamente ("inghiotte") la candela del giorno precedente. Le ombre (code) della piccola candela sono corte, il che consente al corpo della grande candela di coprire l'intera candela del giorno precedente. Fig. 2. Pattern "Bearish Engulfing" Il riconoscimento del pattern "Bearish Engulfing" è implementato nel metodo CheckPatternBearishEngulfing() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern "Bearish Engulfing"| //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing()   { //--- Bearish Engulfing    if((Open(2)<Close(2))             &&  // la candela precedente è rialzista       (Open(1)-Close(1)>AvgBody(1)) &&  // il corpo della candela è superiore alla media del corpo       (Close(1)<Open(2))            &&  // il prezzo di chiusura della candela ribassista è inferiore al prezzo di apertura della candela rialzista       (MidOpenClose(2)>CloseAvg(2)) &&  // trend rialzista       (Open(1)>Close(2)))               // il prezzo di apertura della candela ribassista è superiore al prezzo di chiusura della rialzista       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) della classe CCandlePattern viene utilizzato per controllare la formazione del pattern "Bearish Engulfing". 2. Segnali di Trading, Confermati dall'Indicatore MFI I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'indicatore MFI. Il valore dell'indicatore MFI deve essere inferiore a 40 (per posizioni lunghe) o superiore a 60 (per posizioni corte). La chiusura delle posizioni aperte dipende dai valori dell'indicatore MFI. Può avvenire in 2 casi: se l'MFI ha raggiunto il livello critico opposto (70 per posizione lunga e 30 per posizione corta) se il segnale inverso non è confermato (quando l'indicatore MFI raggiunge i seguenti livelli: 30 per posizione lunga e 70 per posizione corta) Fig. 3. Pattern "Bullish Engulfing", confermato dall'indicatore MFI int CBE_BE_MFI::LongCondition() - controlla le condizioni per aprire una posizione lunga (ritorna 80) e chiudere quella corta (ritorna 40); int CBE_BE_MFI::ShortCondition() - controlla le condizioni per aprire una posizione corta (ritorna 80) e chiudere quella lunga (ritorna 40). 2.1. Aprire Posizione Lunga/Chiudere Posizione Corta La formazione del pattern "Bullish Engulfing" deve essere confermata dall'indicatore MFI: MFi(1)<40 (il valore dell'indicatore MFI dell'ultima barra completata deve essere inferiore a 40). La posizione corta deve essere chiusa se l'indicatore MFI ha superato i livelli critici (70 o 30). //+------------------------------------------------------------------+ //| Controlla le condizioni per entrare e uscire dal mercato| //| 1) Entrata nel mercato (apri posizione lunga, risultato=80)| //| 2) Uscita dal mercato (chiudi posizione corta, risultato=40)| //+------------------------------------------------------------------+ int CBE_BE_MFI::LongCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso EA controlla le condizioni di trading solo alle barre di notizie   int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione lunga //--- formazione del pattern Bullish Engulfing e MFI<40   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (MFI(1)<40))      result=80; //--- controllo delle condizioni per chiudere posizione corta //--- crossover della linea di segnale dei livelli di ipercomprato/ipervenduto (verso l'alto 30, verso l'alto 70)   if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))      result=40; //--- ritorna il risultato    return(result);   } 2.2. Aprire Posizione Corta/Chiudere Posizione Lunga La formazione del pattern "Bearish Engulfing" deve essere confermata dall'indicatore MFI: MFI(1)>60 (il valore dell'indicatore MFI dell'ultima barra completata deve essere superiore a 60). La posizione lunga deve essere chiusa se l'indicatore MFI ha superato i livelli critici (70 o 30). //+------------------------------------------------------------------+ //| Controlla le condizioni per entrare e uscire dal mercato| //| 1) Entrata nel mercato (apri posizione corta, risultato=80)| //| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40)| //+------------------------------------------------------------------+ int CBE_BE_MFI::ShortCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso EA controlla le condizioni di trading solo alle barre di notizie   int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione corta //--- formazione del pattern Bearish Engulfing e MFI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (MFI(1)>60))      result=80; //--- controllo delle condizioni per chiudere posizione lunga //--- crossover della linea di segnale dei livelli di ipercomprato/ipervenduto (verso l'alto 70, verso il basso 30)    if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))      result=40; //--- ritorna il risultato    return(result);   } 2.3. Creare un Expert Advisor utilizzando MQL5 Wizard La classe CBE_BE_MFI non è inclusa nelle classi della Libreria Standard, per utilizzarla è necessario scaricare il file abe_be_mfi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto con il file acandlepatterns.mqh. Puoi utilizzarlo in MQL5 Wizard dopo il riavvio di MetaEditor. Per creare un Expert Advisor, avvia il MQL5 Wizard: Fig. 4. Creazione di un Expert Advisor con MQL5 Wizard Specifica il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo di che dobbiamo selezionare i moduli di segnali di trading utilizzati. Fig. 6. Proprietà dei segnali dell'Expert Advisor Nel nostro caso utilizziamo solo un modulo di segnali di trading. Aggiungiamo il modulo Segnali basati su Bullish Engulfing/Bearish Engulfing confermati da MFI: Fig. 7. Proprietà dei segnali dell'Expert Advisor Modulo di segnali di trading aggiunto: Fig. 8. Proprietà dei segnali dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma utilizzeremo "Trailing Stop non utilizzato": Fig. 9. Proprietà di trailing dell'Expert Advisor Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume fisso": Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_ABE_BE_MFI.mq5, che sarà salvato nella cartella terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato: //--- inputs per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =10;     // Valore soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =50.0;   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0    // Livello di Take Profit (in punti) devono essere sostituiti con: //--- inputs per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =20;     // Valore soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =0.0    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose consentono di specificare i livelli di soglia per aprire e chiudere le posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe di segnali di trading, abbiamo specificato i valori fissi delle soglie: Apri posizione: 80; Chiudi posizione: 40. L'Expert Advisor, generato dal MQL5 Wizard, apre e chiude le posizioni utilizzando i "voti" dei moduli di segnali di trading. Il voto del modulo principale (come contenitore, consiste di tutti i moduli aggiunti) è anch'esso utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale sono anche utilizzati nell'"averaging" dei voti. Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fattore nella impostazione dei valori soglia. Per questo motivo, ThresholdOpen e ThresholdClose devono essere impostati come 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati a 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere. 2.4. Risultati del Backtesting Storico Consideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.16, PeriodMFI=37, MA_period=5). Nella creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading a Lotto Fisso, 0.1), l'algoritmo di Trailing Stop non è stato utilizzato (Trailing non utilizzato). Fig. 11. Risultati del test dell'Expert Advisor, basato su Bullish Engulfing /Bearish Engulfing + MFI Il miglior set di parametri di input può essere trovato utilizzando il Tester di Strategie del terminal client di MetaTrader 5. Il codice dell'Expert Advisor, creato con MQL5 Wizard, è allegato in expert_abe_be_mfi.mq5.

2011.03.10
MQL5 Wizard: Crea segnali di trading con Bullish e Bearish Engulfing + CCI
MetaTrader5
MQL5 Wizard: Crea segnali di trading con Bullish e Bearish Engulfing + CCI

Il MQL5 Wizard è uno strumento fantastico per creare Expert Advisor pronti all'uso, utilizzando le classi della libreria standard fornite con il terminale client (per ulteriori dettagli, puoi dare un'occhiata a Creare Expert Advisors in MQL5 Wizard). Con questo strumento, puoi testare rapidamente le tue idee di trading, creando una classe di segnali di trading personalizzati. La struttura di questa classe e un esempio sono disponibili nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L'idea di base è semplice: la classe dei segnali di trading deriva da CExpertSignal. Dovrai sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi. Esiste un libro intitolato "Strategie dei migliori trader" (in russo), che analizza molte strategie di trading. Qui ci concentreremo sui modelli di candela di inversione, confermati da Stochastic, CCI, MFI e RSI. Il miglior approccio è creare una classe separata, derivata da CExpertSignal, per verificare la formazione dei modelli di candela. Per confermare i segnali di trading generati dai modelli di candela, è sufficiente scrivere una classe, derivata da CCandlePattern, e aggiungere le caratteristiche necessarie (ad esempio, conferma tramite oscillatori). Qui considereremo i segnali basati sui modelli di candela di inversione "Bullish Engulfing/Bearish Engulfing", confermati dall'indicatore CCI. Il modulo dei segnali di trading si basa sulla classe CCandlePattern, un semplice esempio del suo utilizzo per la creazione di segnali di trading con modelli di candela. 1. Modelli di candela di inversione: "Bullish Engulfing" e "Bearish Engulfing" 1.1. Bullish Engulfing Il modello di inversione "Bullish Engulfing" si forma in un trend ribassista quando una piccola candela nera è seguita da una grande candela bianca che la copre completamente. Le ombre della piccola candela sono corte, permettendo al corpo della grande candela di coprire completamente la candela del giorno precedente. Fig. 1. Modello di candela "Bullish Engulfing" Il riconoscimento del modello "Bullish Engulfing" è implementato nel metodo CheckPatternBullishEngulfing() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del modello di candela "Bullish Engulfing" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing()   { //--- Bullish Engulfing    if((Open(2)>Close(2))             &&  // la candela precedente è ribassista       (Close(1)-Open(1)>AvgBody(1))  &&  // il corpo della candela rialzista è superiore alla media       (Close(1)>Open(2))             &&  // il prezzo di chiusura della candela rialzista è superiore al prezzo di apertura della candela ribassista       (MidOpenClose(2)<CloseAvg(2))  &&  // trend ribassista       (Open(1)<Close(2)))                // il prezzo di apertura della candela rialzista è inferiore al prezzo di chiusura della candela ribassista       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) della classe CCandlePattern viene utilizzato per controllare la formazione del modello "Bullish Engulfing". 1.2. Bearish Engulfing Il modello "Bearish Engulfing" si forma in un trend rialzista quando una piccola candela bianca è seguita da una grande candela nera che la copre completamente. Anche in questo caso, le ombre della piccola candela sono corte, permettendo al corpo della grande candela di coprire completamente la candela del giorno precedente. Fig. 2. Modello di candela "Bearish Engulfing" Il riconoscimento del modello "Bearish Engulfing" è implementato nel metodo CheckPatternBearishEngulfing() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del modello di candela "Bearish Engulfing" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing()   { //--- Bearish Engulfing    if((Open(2)<Close(2))            &&  // la candela precedente è rialzista       (Open(1)-Close(1)>AvgBody(1)) &&  // il corpo della candela è superiore alla media       (Close(1)<Open(2))            &&  // il prezzo di chiusura della candela ribassista è inferiore al prezzo di apertura della candela rialzista       (MidOpenClose(2)>CloseAvg(2)) &&  // trend rialzista       (Open(1)>Close(2)))               // il prezzo di apertura della candela ribassista è superiore al prezzo di chiusura della candela rialzista       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) della classe CCandlePattern viene utilizzato per controllare la formazione del modello "Bearish Engulfing". 2. Segnali di trading confermati dall'indicatore CCI I segnali di trading per aprire posizioni long o short devono essere confermati dall'indicatore CCI. Il valore del CCI deve essere superiore/inferiore ai livelli critici (-50 per la posizione long e 50 per la posizione short). La chiusura delle posizioni aperte dipende dai valori del CCI. Può avvenire in 2 casi: se la linea CCI ha raggiunto il livello critico opposto (80 per la posizione long e -80 per la posizione short) se il segnale inverso non è confermato (quando il CCI raggiunge i seguenti livelli: -80 per la posizione long e 80 per la posizione short) Fig. 3. Modello "Bullish Engulfing", confermato dall'indicatore CCI int CBE_BE_CCI::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere una posizione short (restituisce 40); int CBE_BE_CCI::ShortCondition() - controlla le condizioni per aprire una posizione short (restituisce 80) e chiudere una posizione long (restituisce 40). 2.1. Aprire posizione long/Chiudere posizione short La formazione del modello "Bullish Engulfing" deve essere confermata dall'indicatore CCI: CCI(1)<-50 (il valore del CCI dell'ultima barra completata deve essere inferiore a -50). La posizione short deve essere chiusa se l'indicatore CCI ha attraversato verso l'alto il livello critico -80 o verso il basso il livello critico 80. //+------------------------------------------------------------------+ //| Controlla le condizioni di ingresso e uscita dal mercato | //| 1) Entrata nel mercato (apri posizione long, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione short, risultato=40) | //+------------------------------------------------------------------+ int CBE_BE_CCI::LongCondition()   {    int result=0; //--- idx può essere utilizzato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso EA controlla le condizioni di trading solo alle barre di notizie    int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione long //--- formazione del modello Bullish Engulfing e CCI<-50    if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (CCI(1)<-50))      result=80; //--- controllo delle condizioni per chiudere la posizione short //--- crossover della linea del segnale dei livelli di ipercomprato/ipersoldato (verso il basso -80, verso il basso -80)    if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))      result=40; //--- restituisce il risultato    return(result);   } 2.2. Aprire posizione short/Chiudere posizione long La formazione del modello "Bearish Engulfing" deve essere confermata dall'indicatore CCI: CCI(1)>50 (il valore dell'indicatore CCI dell'ultima barra completata deve essere superiore a 50). La posizione long deve essere chiusa se l'indicatore CCI ha attraversato verso il basso il livello -80 o 80. //+------------------------------------------------------------------+ //| Controlla le condizioni per ingresso e uscita dal mercato | //| 1) Entrata nel mercato (apri posizione short, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione long, risultato=40) | //+------------------------------------------------------------------+ int CBE_BE_CCI::ShortCondition()   {    int result=0; //--- idx può essere utilizzato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso EA controlla le condizioni di trading solo alle barre di notizie    int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione short //--- formazione del modello Bearish Engulfing e CCI>50    if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (CCI(1)>50))      result=80; //--- controllo delle condizioni per chiudere la posizione long //--- crossover della linea del segnale dei livelli di ipercomprato/ipersoldato (verso l'alto -80, verso l'alto 80)    if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))      result=40; //--- restituisce il risultato    return(result);   } 2.3. Creare un Expert Advisor usando MQL5 Wizard La classe CBE_BE_CCI non è inclusa nelle classi della libreria standard, per utilizzarla, è necessario scaricare il file acbe_be_cci.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto con il file candlepatterns.mqh. Puoi usarlo in MQL5 Wizard dopo aver riavviato il MetaEditor. Per creare un Expert Advisor, lancia il MQL5 Wizard: Fig. 4. Creazione Expert Advisor usando MQL5 Wizard Specifichiamo il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo, dobbiamo selezionare i moduli di segnali di trading utilizzati. Fig. 6. Proprietà dei segnali dell'Expert Advisor Nel nostro caso, utilizziamo solo un modulo di segnali di trading. Aggiungiamo il modulo di trading: Segnali basati su Bullish Engulfing/Bearish Engulfing confermati da CCI: Fig. 7. Proprietà dei segnali dell'Expert Advisor Modulo dei segnali di trading aggiunto: Fig. 8. Proprietà dei segnali dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma utilizzeremo "Trailing Stop non utilizzato": Fig. 9. Proprietà di trailing dell'Expert Advisor Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume fisso": Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_ABE_BE_CCI.mq5, che sarà salvato nel terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato: //--- input per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore soglia segnale per aprire [0...100] input int            Signal_ThresholdClose  =10;     // Valore soglia segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un'operazione input double         Signal_StopLevel       =50.0;   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0    // Livello di Take Profit (in punti) devono essere sostituiti con: //--- input per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore soglia segnale per aprire [0...100] input int            Signal_ThresholdClose  =20;     // Valore soglia segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0    // Livello di prezzo per eseguire un'operazione input double         Signal_StopLevel       =0.0    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose consentono di specificare i livelli soglia per l'apertura e la chiusura delle posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe dei segnali di trading abbiamo specificato i valori fissi della soglia: Posizione aperta: 80; Chiusura della posizione: 40. L'Expert Advisor, generato dal MQL5 Wizard, apre e chiude le posizioni utilizzando i "voti" dei moduli di segnali di trading. Il voto del modulo principale (come contenitore, contiene tutti i moduli aggiunti) è anch'esso utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale sono utilizzati anche nella media dei "voti". Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tener conto di questo fatto quando impostiamo i valori soglia. A causa di questo fatto, i ThresholdOpen e ThresholdClose devono essere impostati rispettivamente a 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati a 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere. 2.4. Risultati del backtesting storico Consideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.16, PeriodCCI=49, MA_period=11). Nel creare l'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), l'algoritmo di Trailing Stop non è utilizzato (Trailing non utilizzato). Fig. 11. Risultati del test dell'Expert Advisor, basato su Bullish Engulfing/Bearish Engulfing + CCI Il miglior set di parametri di input può essere trovato utilizzando il Strategy Tester del terminale client MetaTrader 5. Il codice dell'Expert Advisor, creato dal MQL5 Wizard, è allegato in expert_abe_be_cci.mq5.

2011.03.10
MQL5 Wizard: Crea segnali di trading con Bullish e Bearish Engulfing + Stochastic
MetaTrader5
MQL5 Wizard: Crea segnali di trading con Bullish e Bearish Engulfing + Stochastic

Il MQL5 Wizard offre la possibilità di creare Expert Advisors già pronti basati sulle classi della libreria standard fornite con il terminale cliente. Se sei interessato a verificare rapidamente le tue idee di trading, tutto quello che devi fare è creare una tua classe di segnali di trading. La struttura di questa classe e un esempio possono essere trovati nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L’idea generale è semplice: la classe dei segnali di trading deriva da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi personalizzati. Esiste un libro intitolato "Strategie dei migliori trader" (in russo), in cui vengono considerate molte strategie di trading. Qui ci concentreremo sui pattern di inversione delle candele, confermati dagli oscillatori Stochastic, CCI, MFI e RSI. Il miglior approccio è creare una classe separata derivata da CExpertSignal per controllare la formazione di pattern di candele. Per confermare i segnali di trading generati dai pattern di candele, è sufficiente scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, la conferma tramite oscillatori). In questo articolo, analizzeremo i segnali basati sui pattern di inversione "Bullish Engulfing/Bearish Engulfing", confermati dall'indicatore Stochastic. Il modulo di segnali di trading si basa sulla classe CCandlePattern, un semplice esempio del suo utilizzo per la creazione di segnali di trading con i pattern di candele. 1. Pattern di inversione "Bullish Engulfing" e "Bearish Engulfing"1.1. Bullish Engulfing Il pattern di inversione "Bullish Engulfing" si forma in una fase di ribasso quando una piccola candela nera è seguita da una grande candela bianca che oscura completamente ("inghiotte") la candela del giorno precedente. Le ombre (code) della piccola candela sono corte, permettendo al corpo della grande candela di coprire l'intera candela del giorno precedente. Fig. 1. Pattern di candela 'Bullish Engulfing' Il riconoscimento del pattern "Bullish Engulfing" è implementato nel metodo CheckPatternBullishEngulfing() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candela "Bullish Engulfing" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing()   { //--- Bullish Engulfing    if((Open(2)>Close(2))             &&  // la candela precedente è ribassista       (Close(1)-Open(1)>AvgBody(1))  &&  // il corpo della candela rialzista è superiore al valore medio del corpo       (Close(1)>Open(2))             &&  // il prezzo di chiusura della candela rialzista è superiore al prezzo di apertura della candela ribassista       (MidOpenClose(2)<CloseAvg(2))  &  // fase di ribasso       (Open(1)<Close(2)))                // il prezzo di apertura della candela rialzista è inferiore al prezzo di chiusura della candela ribassista       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) della classe CCandlePattern è utilizzato per controllare la formazione del pattern di candela "Bullish Engulfing". 1.2. Bearish Engulfing Il pattern di inversione "Bearish Engulfing" si forma in una fase di rialzo quando una piccola candela bianca è seguita da una grande candela nera che oscura completamente ("inghiotte") la candela del giorno precedente. Le ombre (code) della piccola candela sono corte, permettendo al corpo della grande candela di coprire l'intera candela del giorno precedente. Fig. 2. Pattern di candela 'Bearish Engulfing' Il riconoscimento del pattern "Bearish Engulfing" è implementato nel metodo CheckPatternBearishEngulfing() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candela "Bearish Engulfing" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing()   { //--- Bearish Engulfing    if((Open(2)<Close(2))            &&  // la candela precedente è rialzista       (Open(1)-Close(1)>AvgBody(1)) &&  // il corpo della candela è superiore al valore medio del corpo       (Close(1)<Open(2))            &&  // il prezzo di chiusura della candela ribassista è inferiore al prezzo di apertura della candela rialzista       (MidOpenClose(2)>CloseAvg(2)) &&  // fase di rialzo       (Open(1)>Close(2)))               // il prezzo di apertura della candela ribassista è superiore al prezzo di chiusura della candela rialzista       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) della classe CCandlePattern è utilizzato per controllare la formazione del pattern di candela "Bearish Engulfing". 2. Segnali di trading, confermati dall'indicatore Stochastic I segnali di trading per aprire una posizione long o short devono essere confermati dall'oscillatore Stochastic. La linea %D deve essere maggiore/minore dei corrispondenti livelli critici (30 o 70). La chiusura delle posizioni aperte dipende dai valori dell'indicatore %D. Questo può avvenire in 2 casi: se la linea %D ha raggiunto il livello critico opposto (80 per posizione long e 20 per posizione short) se il segnale inverso non è confermato (quando la linea %D raggiunge i seguenti livelli: 20 per posizione long e 80 per posizione short) Fig. 3. Pattern 'Bullish Engulfing', confermato dall'indicatore Stochastic Il controllo delle condizioni di trading per l'ingresso e l'uscita è implementato in due metodi: int CBE_BE_Stoch::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere una posizione short (restituisce 40); int CBE_BE_Stoch::ShortCondition() - controlla le condizioni per aprire una posizione short (restituisce 80) e chiudere una posizione long (restituisce 40). 2.1. Apertura posizione long/Chiusura posizione short La formazione del pattern "Bullish Engulfing" deve essere confermata dall'indicatore Stochastic: StochSignal(1)<30 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima barra completata deve essere inferiore a 30). La posizione short deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha incrociato verso l'alto i livelli 20 o 80. //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato                 | //| 1) Ingresso nel mercato (apri posizione long, risultato=80)            | //| 2) Uscita dal mercato (chiudi posizione short, risultato=40)          | //+------------------------------------------------------------------+ int CBE_BE_Stoch::LongCondition()   {    int result=0; //--- idx può essere utilizzato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo alle barre di notizie    int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione long //--- formazione del pattern Bullish Engulfing e linea di segnale<30   if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (StochSignal(1)<30))      result=80; //--- controllo delle condizioni per chiudere posizione short //--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (verso il basso 20, verso l'alto 80)    if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||        ((StochSignal(1)>80) && (StochSignal(2)<80))))      result=40; //--- restituisci il risultato    return(result);   } 2.2. Apertura posizione short/Chiusura posizione long La formazione del pattern "Bearish Engulfing" deve essere confermata dall'indicatore Stochastic: StochSignal(1)>70 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima barra completata deve essere superiore a 70). La posizione long deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha incrociato verso il basso i livelli 80 o 20. //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato                 | //| 1) Ingresso nel mercato (apri posizione short, risultato=80)           | //| 2) Uscita dal mercato (chiudi posizione long, risultato=40)          | //+------------------------------------------------------------------+ int CBE_BE_Stoch::ShortCondition()   {    int result=0; //--- idx può essere utilizzato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo alle barre di notizie    int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione short //--- formazione del pattern Bearish Engulfing e linea di segnale>70   if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (StochSignal(1)>70))      result=80; //--- controllo delle condizioni per chiudere posizione long //--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (verso il basso 80, verso l'alto 20)    if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||        ((StochSignal(1)<20) && (StochSignal(2)>20))))      result=40; //--- restituisci il risultato    return(result);   } 2.3. Creazione di un Expert Advisor utilizzando MQL5 Wizard La classe CBE_BE_Stoch non è inclusa nelle classi della Libreria Standard; per utilizzarla, è necessario scaricare il file acbe_be_stoch.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. La stessa operazione deve essere eseguita con il file candlepatterns.mqh. Puoi utilizzarlo in MQL5 Wizard dopo il riavvio di MetaEditor. Per creare un Expert Advisor, avvia il MQL5 Wizard: Fig. 4. Creazione di un Expert Advisor utilizzando MQL5 Wizard Specifichiamo il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo di che dobbiamo selezionare i moduli di segnali di trading utilizzati. Fig. 6. Proprietà dei segnali dell'Expert Advisor Nel nostro caso utilizziamo solo un modulo di segnali di trading. Aggiungendo il modulo di segnali basato su "Bullish Engulfing/Bearish Engulfing confermato da Stochastic": Fig. 7. Proprietà dei segnali dell'Expert Advisor Modulo di segnali di trading aggiunto: Fig. 8. Proprietà dei segnali dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma noi utilizzeremo "Trailing Stop non utilizzato": Fig. 9. Proprietà di trailing dell'Expert Advisor Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume fisso": Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, che si troverà in terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato: //--- input per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore soglia segnale per aprire [0...100] input int            Signal_ThresholdClose  =10;     // Valore soglia segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =50.0;   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0;  // Livello di Take Profit (in punti) devono essere sostituiti con: //--- input per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore soglia segnale per aprire [0...100] input int            Signal_ThresholdClose  =20;     // Valore soglia segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =0.0;    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose permettono di specificare i livelli soglia per l'apertura e la chiusura delle posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe dei segnali di trading abbiamo specificato i valori fissi della soglia: Posizione aperta: 80; Posizione chiusa: 40. L'Expert Advisor, generato dal MQL5 Wizard, apre e chiude le posizioni utilizzando i "voti" dei moduli di segnali di trading. Il voto del modulo principale (come contenitore, consiste di tutti i moduli aggiunti) viene utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale vengono anche utilizzati nell'"averaging" dei voti. Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fatto quando impostiamo i valori delle soglie. A causa di questo fatto, ThresholdOpen e ThresholdClose devono essere impostati a 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati a 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere. 2.4. Risultati del backtesting storico Consideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5). Nella creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), l'algoritmo di Trailing Stop non è stato utilizzato (Trailing non utilizzato). Fig. 11. Risultati del test dell'Expert Advisor, basato su Bullish/Bearish Engulfing + Stochastic Il miglior insieme di parametri di input può essere trovato utilizzando il Strategy Tester del terminale cliente MetaTrader 5. Il codice dell'Expert Advisor, creato dal MQL5 Wizard, è allegato in expert_abe_be_stoch.mq5.

2011.03.10
MQL5 Wizard: Strategia di Trading con Dark Cloud Cover/Piercing Line e RSI
MetaTrader5
MQL5 Wizard: Strategia di Trading con Dark Cloud Cover/Piercing Line e RSI

Il MQL5 Wizard è uno strumento fantastico per creare Expert Advisor pronti all'uso, basati su classi della libreria standard fornite con il terminale client (dai un'occhiata all'articolo Creare Expert Advisor con MQL5 Wizard per ulteriori dettagli). Ti permette di testare rapidamente le tue idee di trading, basta creare la tua classe di segnali di trading. La struttura di questa classe e un esempio possono essere trovati nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L'idea generale è la seguente: la classe dei segnali di trading deriva da CExpertSignal. È necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi. Un libro interessante è "Strategie dei migliori trader" (in russo), dove si analizzano molte strategie di trading. Focusiamoci sui pattern di inversione delle candele, confermati da Stochastic, CCI, MFI e RSI. Il modo migliore è creare una classe separata, derivata da CExpertSignal, per controllare la formazione dei pattern delle candele. Per confermare i segnali di trading generati dai pattern, basta scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, conferma tramite oscillatori). Qui consideriamo i segnali basati sui pattern di inversione "Dark Cloud Cover/Piercing Line", confermati dall'indicatore RSI. Il modulo di segnali di trading si basa sulla classe CCandlePattern, che rappresenta un esempio semplice del suo utilizzo per la creazione di segnali di trading con i pattern delle candele. 1. Pattern di inversione "Dark Cloud Cover" e "Piercing Line" 1.1. Dark Cloud Cover Si tratta di un pattern di inversione ribassista che si verifica alla fine di un trend rialzista. Si forma una lunga candela bianca il primo giorno e si crea un gap al rialzo il secondo giorno. Tuttavia, il secondo giorno chiude al di sotto del punto medio del primo giorno. Figura 1. Pattern di candela 'Dark Cloud Cover' Il riconoscimento del pattern "Dark Cloud Cover" è implementato nel metodo CheckPatternDarkCloudCover() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candela 'Dark Cloud Cover' | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover()   { //--- Dark Cloud Cover    if((Close(2)-Open(2)>AvgBody(1))  && // (lunga candela bianca)       (Close(1)<Close(2))            && //       (Close(1)>Open(2))             && // (chiusura all'interno del corpo precedente)       (MidOpenClose(2)>CloseAvg(1))  && // (trend rialzista)       (Open(1)>High(2)))                // (apertura a nuovi massimi)       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) della classe CCandlePattern viene utilizzato per controllare la formazione del pattern "Dark Cloud Cover". 1.2. Piercing Line Il gap al ribasso del secondo giorno perpetua il trend ribassista. Tuttavia, la chiusura del secondo giorno è al di sopra del punto medio del corpo del primo giorno. Questo suggerisce ai ribassisti che potrebbe formarsi un fondo. Questa azione di prezzo non è facilmente discernibile usando i grafici a barre come lo è con i grafici a candele. Maggiore è la penetrazione della chiusura del secondo giorno nel corpo del primo giorno, più probabile sarà il successo del segnale di inversione. Fig. 2. Pattern di candela 'Piercing Line' Il riconoscimento del pattern "Piercing Line" è implementato nel metodo CheckPatternPiercingLine() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candela 'Piercing Line' | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine()   { //--- Piercing Line    if((Close(1)-Open(1)>AvgBody(1)) && // (lunga candela bianca)       (Open(2)-Close(2)>AvgBody(1)) && // (lunga candela nera)       (Close(1)>Close(2))           && //         (Close(1)<Open(2))            && // (chiusura all'interno del corpo precedente)       (MidOpenClose(2)<CloseAvg(2)) && // (trend ribassista)       (Open(1)<Low(2)))                // (apertura inferiore al precedente minimo)       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) della classe CCandlePattern viene utilizzato per controllare la formazione del pattern "Piercing Line". 2. Segnali di trading, confermati dall'indicatore RSI I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'indicatore RSI. Il valore di RSI deve essere inferiore/maggiore ai livelli critici (40 per posizioni lunghe e 60 per posizioni corte). La chiusura delle posizioni aperte dipende dai valori di RSI. Si può effettuare in due casi: se RSI ha raggiunto il livello critico opposto (70 per posizioni lunghe e 30 per posizioni corte) se il segnale di inversione non è confermato (quando RSI raggiunge i seguenti livelli: 30 per posizioni lunghe e 70 per posizioni corte) Fig. 3. Pattern 'Dark Cloud Cover', confermato dall'indicatore RSI int CDC_PL_RSI::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40); int CDC_PL_RSI::ShortCondition() - controlla le condizioni per aprire una posizione corta (restituisce 80) e chiudere la posizione lunga (restituisce 40). 2.1. Aprire posizione lunga/Chiudere posizione corta La formazione del pattern "Piercing Line" deve essere confermata dall'indicatore RSI: RSI(1)<40 (il valore dell'RSI dell'ultima barra chiusa deve essere inferiore a 40). La posizione corta deve essere chiusa se l'indicatore RSI ha attraversato verso l'alto i livelli critici 70 o 30. //+------------------------------------------------------------------+ //| Controlla le condizioni per entrare ed uscire dal mercato         | //| 1) Entrata nel mercato (apri posizione lunga, risultato=80)        | //| 2) Uscita dal mercato (chiudi posizione corta, risultato=40)         | //+------------------------------------------------------------------+ int CDC_PL_RSI::LongCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo alle nuove barre   int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione lunga //--- formazione del pattern Piercing Line e RSI<30   if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (RSI(1)<40))      result=80; //--- controllo delle condizioni per chiudere la posizione corta //--- incrocio della linea di segnale dei livelli di ipercomprato/ipervenduto (verso l'alto 30, verso l'alto 70)   if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))      result=40; //--- restituisci il risultato    return(result);   } 2.2. Aprire posizione corta/Chiudere posizione lunga La formazione del pattern "Dark Cloud Cover" deve essere confermata dall'indicatore RSI: RSI(1)>60 (il valore dell'RSI dell'ultima barra chiusa deve essere maggiore di 60). La posizione lunga deve essere chiusa se l'indicatore RSI ha attraversato verso il basso i livelli critici 70 o 30. //+------------------------------------------------------------------+ //| Controlla le condizioni per entrare ed uscire dal mercato         | //| 1) Entrata nel mercato (apri posizione corta, risultato=80)         | //| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40)        | //+------------------------------------------------------------------+ int CDC_PL_RSI::ShortCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo alle nuove barre   int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione corta //--- formazione del pattern Dark Cloud Cover e RSI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1)>60))      result=80; //--- controllo delle condizioni per chiudere la posizione lunga //--- incrocio della linea di segnale dei livelli di ipercomprato/ipervenduto (verso il basso 70, verso il basso 30)   if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))      result=40; //--- restituisci il risultato    return(result);   } 2.3. Creare un Expert Advisor utilizzando MQL5 Wizard La classe CDC_PL_RSI non è inclusa nelle classi della Libreria Standard, per utilizzarla, è necessario scaricare il file adc_pl_rsi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso dovrebbe essere fatto con il file acandlepatterns.mqh. Puoi utilizzarlo in MQL5 Wizard dopo aver riavviato il MetaEditor. Per creare un Expert Advisor, avvia MQL5 Wizard: Fig. 4. Creazione di un Expert Advisor utilizzando MQL5 Wizard Specifichiamo il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo di che dobbiamo selezionare i moduli dei segnali di trading utilizzati. Fig. 6. Proprietà del segnale dell'Expert Advisor Nel nostro caso utilizziamo solo un modulo di segnali di trading. Aggiungendo il modulo Segnali basati su Dark Cloud Cover/Piercing Line confermati da RSI: Fig. 7. Proprietà del segnale dell'Expert Advisor Modulo di segnali di trading aggiunto: Fig. 8. Proprietà del segnale dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma noi utilizzeremo "Trailing Stop non utilizzato": Fig. 9. Proprietà di gestione del denaro dell'Expert Advisor Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume di scambio fisso": Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, che sarà salvato in terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato: //--- input per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore soglia per aprire [0...100] input int            Signal_ThresholdClose  =10;     // Valore soglia per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =50.0;   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0;  // Livello di Take Profit (in punti) deve essere sostituito con: //--- input per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore soglia per aprire [0...100] input int            Signal_ThresholdClose  =20;     // Valore soglia per chiudere [0...100] input double         Signal_PriceLevel      =0.0    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =0.0    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose consentono di specificare i livelli soglia per l'apertura e la chiusura delle posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe segnali di trading abbiamo specificato i valori fissi della soglia: Aprire posizione: 80; Chiudere posizione: 40. L'Expert Advisor, generato dal MQL5 Wizard, apre e chiude le posizioni utilizzando i "voti" dai moduli di segnali di trading. Anche il voto del modulo principale (come contenitore, che consiste di tutti i moduli aggiunti) viene utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale sono utilizzati anche per la media dei "voti". Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fatto quando impostiamo i valori soglia. A causa di questo fatto, i ThresholdOpen e ThresholdClose devono essere impostati come 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati a 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere. 2.4. Risultati del backtesting storico Consideriamo il backtesting dell'Expert Advisor sui dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.02.23, PeriodRSI=20, MA_period=14). Nella creazione dell'Expert Advisor abbiamo utilizzato un volume fisso (Trading Fixed Lot, 0.1), l'algoritmo di trailing stop non è stato utilizzato (Trailing non utilizzato). Fig. 11. Risultati del test dell'Expert Advisor, basato su Dark Cloud Cover/Piercing Line + RSI Il miglior set di parametri di input può essere trovato utilizzando il Tester di Strategie del terminale client MetaTrader 5. Il codice dell'Expert Advisor, creato dal MQL5 Wizard è allegato in expert_ad_pl_rsi.mq5.

2011.02.25
MQL5 Wizard: Segnali di Trading con Dark Cloud Cover e Piercing Line + MFI
MetaTrader5
MQL5 Wizard: Segnali di Trading con Dark Cloud Cover e Piercing Line + MFI

Il MQL5 Wizard è uno strumento fantastico per creare Expert Advisor (EA) già pronti basati sulle classi della libreria standard inclusa nel terminale client. Ti permette di testare rapidamente le tue idee di trading, basta creare una classe per i tuoi segnali di trading. Puoi trovare la struttura di questa classe e un esempio nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L'idea generale è la seguente: la classe dei segnali di trading deriva da CExpertSignal. Dovrai sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi personalizzati. Esiste un libro intitolato "Strategie dei Migliori Trader" (in russo), che esplora molte strategie di trading. Qui ci concentreremo sui modelli di candlestick di inversione, confermati da Stochastic, CCI, MFI e RSI. Il modo migliore è creare una classe separata, derivata da CExpertSignal per controllare la formazione dei modelli di candlestick. Per confermare i segnali di trading generati dai modelli di candlestick, è sufficiente scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, la conferma tramite oscillatori). Qui considereremo i segnali basati su modelli di candlestick di inversione "Dark Cloud Cover" e "Piercing Line", confermati dall'indicatore Market Facilitation Index (MFI). Il modulo dei segnali di trading si basa sulla classe CCandlePattern, che rappresenta un semplice esempio del suo utilizzo per la creazione di segnali di trading con modelli di candlestick. 1. Modelli di candlestick di inversione "Dark Cloud Cover" e "Piercing Line" 1.1. Dark Cloud Cover Il "Dark Cloud Cover" è un modello di inversione ribassista che si verifica alla fine di un trend rialzista. Si forma una lunga candela bianca nel primo giorno e si crea un gap al rialzo nel secondo giorno. Tuttavia, il secondo giorno chiude sotto il punto medio del primo giorno. Fig. 1. Modello di candlestick "Dark Cloud Cover" Il riconoscimento del modello "Dark Cloud Cover" è implementato nel metodo CheckPatternDarkCloudCover() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del modello di candlestick "Dark Cloud Cover" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover()   { //--- Dark Cloud Cover    if((Close(2)-Open(2)>AvgBody(1))  && // (lunga candela bianca)       (Close(1)<Close(2))            && //       (Close(1)>Open(2))              && // (chiude all'interno del corpo precedente)       (MidOpenClose(2)>CloseAvg(1))  && // (trend rialzista)       (Open(1)>High(2)))                // (apre a un nuovo massimo)       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) della classe CCandlePattern è utilizzato per controllare la formazione del modello di candlestick "Dark Cloud Cover". 1.2. Piercing Line Il gap al ribasso nel secondo giorno mantiene il trend ribassista. Tuttavia, la chiusura del secondo giorno avviene sopra il punto medio del corpo del primo giorno. Questo suggerisce ai ribassisti che potrebbe formarsi un minimo. Questa azione di prezzo è molto meno riconoscibile con i grafici a barre rispetto a quanto lo sia con i grafici a candlestick. Maggiore è la penetrazione della chiusura nel corpo del primo giorno, maggiore sarà la probabilità che il segnale di inversione abbia successo. Fig. 2. Modello di candlestick "Piercing Line" Il riconoscimento del modello "Piercing Line" è implementato nel metodo CheckPatternPiercingLine() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del modello di candlestick "Piercing Line" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine()   { //--- Piercing Line    if((Close(1)-Open(1)>AvgBody(1)) && // (lunga candela bianca)       (Open(2)-Close(2)>AvgBody(1)) && // (lunga candela nera)       (Close(1)>Close(2))           && //         (Close(1)<Open(2))            && // (chiude all'interno del corpo precedente)       (MidOpenClose(2)<CloseAvg(2)) && // (trend ribassista)       (Open(1)<Low(2)))                // (apre sotto il minimo precedente)       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) della classe CCandlePattern è utilizzato per controllare la formazione del modello di candlestick "Piercing Line". 2. Segnali di Trading Confermati dall'Indicatore MFI I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'indicatore MFI. Il valore dell'indicatore MFI deve essere inferiore a 40 (per posizioni lunghe) o superiore a 60 (per posizioni corte). La chiusura delle posizioni aperte dipende dai valori dell'indicatore MFI. Può avvenire in due casi: se l'MFI ha raggiunto il livello critico opposto (70 per posizioni lunghe e 30 per posizioni corte) se il segnale di inversione non è confermato (quando l'indicatore MFI raggiunge i seguenti livelli: 30 per posizioni lunghe e 70 per posizioni corte) Fig. 3. Modello "Dark Cloud Cover" confermato dall'indicatore MFI int CDC_PL_MFI::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40); int CDC_PL_MFI::ShortCondition() - controlla le condizioni per aprire una posizione corta (restituisce 80) e chiudere la posizione lunga (restituisce 40). 2.1. Aprire posizione lunga/Chiudere posizione corta La formazione del modello "Morning Star" deve essere confermata dall'indicatore MFI: MFI(1)<40 (il valore dell'indicatore MFI dell'ultima barra completata deve essere inferiore a 40). La posizione corta deve essere chiusa se l'indicatore MFI ha attraversato verso l'alto i livelli critici (70 o 30). //+------------------------------------------------------------------+ //| Controlla le condizioni per entrare ed uscire dal mercato | //| 1) Ingresso nel mercato (apri posizione lunga, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione corta, risultato=40) | //+------------------------------------------------------------------+ int CDC_PL_MFI::LongCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso EA controlla le condizioni di trading a ogni tick //--- idx=1 - in questo caso EA controlla le condizioni di trading solo a barre di notizie   int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione lunga //--- formazione del modello Piercing Line e MFI<40   if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (MFI(1)<40))      result=80; //--- controllo delle condizioni per chiudere la posizione corta //--- crossover della linea di segnale sui livelli di overbought/oversold (verso l'alto 30, verso l'alto 70)   if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))      result=40; //--- restituisci il risultato    return(result);   } 2.2. Aprire posizione corta/Chiudere posizione lunga La formazione del modello "Dark Cloud Cover" deve essere confermata dall'indicatore MFI: MFI(1)>60 (il valore dell'indicatore MFI dell'ultima barra completata deve essere superiore a 60). La posizione lunga deve essere chiusa se l'indicatore MFI ha attraversato verso l'alto i livelli critici (70 o 30). //+------------------------------------------------------------------+ //| Controlla le condizioni per entrare ed uscire dal mercato | //| 1) Ingresso nel mercato (apri posizione corta, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40) | //+------------------------------------------------------------------+ int CDC_PL_MFI::ShortCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso EA controlla le condizioni di trading a ogni tick //--- idx=1 - in questo caso EA controlla le condizioni di trading solo a barre di notizie   int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione corta //--- formazione del modello Dark Cloud Cover e MFI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (MFI(1)>60))      result=80; //--- controllo delle condizioni per chiudere la posizione lunga //--- crossover della linea di segnale sui livelli di overbought/oversold (verso l'alto 70, verso il basso 30)    if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))      result=40; //--- restituisci il risultato    return(result);   } 2.3. Creare Expert Advisor usando MQL5 Wizard La classe CDC_PL_MFI non è inclusa nelle classi della libreria standard; per utilizzarla, è necessario scaricare il file adc_pl_mfi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto con il file acandlepatterns.mqh. Puoi usarlo in MQL5 Wizard dopo il riavvio del MetaEditor. Per creare un Expert Advisor, avvia MQL5 Wizard: Fig. 4. Creazione di Expert Advisor usando MQL5 Wizard Specifichiamo il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo di che dobbiamo selezionare i moduli di segnali di trading utilizzati. Fig. 6. Proprietà dei segnali dell'Expert Advisor Nel nostro caso utilizziamo solo un modulo di segnali di trading. Aggiungiamo il modulo di segnali Basato su Dark Cloud Cover/Piercing Line confermato da MFI: Fig. 7. Proprietà dei segnali dell'Expert Advisor Modulo di segnali di trading aggiunto: Fig. 8. Proprietà dei segnali dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma utilizzeremo "Trailing Stop non utilizzato": Fig. 9. Proprietà di trailing dell'Expert Advisor Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume fisso": Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor Cliccando sul pulsante "Fine", otterremo il codice dell'Expert Advisor generato, che si troverà in Expert_ADC_PL_MFI.mq5, salvato nella cartella terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato: //--- input per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore di soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =10     // Valore di soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =50.0   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0   // Livello di Take Profit (in punti) devono essere sostituiti con: //--- input per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore di soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =20     // Valore di soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =0.0    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose consentono di specificare i livelli di soglia per aprire e chiudere posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe dei segnali di trading abbiamo specificato i valori fissi della soglia: Aprire posizione: 80; Chiudere posizione: 40. L'Expert Advisor generato dal MQL5 Wizard apre e chiude le posizioni utilizzando i "voti" dai moduli di segnali di trading. Anche il voto del modulo principale (come contenitore, consiste di tutti i moduli aggiunti) viene utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale vengono utilizzati anche nell'"averaging" dei voti. Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fatto quando impostiamo i valori soglia. A causa di questo fatto, i ThresholdOpen e ThresholdClose devono essere impostati come 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati su 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno veritiere. 2.4. Risultati del backtesting storico Esaminiamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=11). Per la creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), l'algoritmo Trailing Stop non è utilizzato (Trailing non utilizzato). Fig. 11. Risultati del test dell'Expert Advisor basato su Dark Cloud Cover/Piercing Line + MFI Il miglior set di parametri di input può essere trovato utilizzando il Strategy Tester del terminale client di MetaTrader 5. Il codice dell'Expert Advisor, creato dal MQL5 Wizard, è allegato nel file expert_adc_pl_mfi.mq5.

2011.02.25
MQL5 Wizard: Crea Expert Advisor per segnali di trading basati su Dark Cloud Cover e Piercing Line con CCI
MetaTrader5
MQL5 Wizard: Crea Expert Advisor per segnali di trading basati su Dark Cloud Cover e Piercing Line con CCI

Il MQL5 Wizard offre la possibilità di creare Expert Advisor pronti all'uso, utilizzando le classi della libreria standard incluse con il terminale client (puoi trovare ulteriori dettagli nell'articolo Creazione di Expert Advisor pronti all'uso con MQL5 Wizard). Questo strumento ti permette di verificare rapidamente le tue idee di trading, basta creare la tua classe di segnali di trading. La struttura di tale classe e un esempio sono disponibili nell'articolo MQL5 Wizard: Come creare un modulo di segnali di trading. L'idea di base è la seguente: la classe dei segnali di trading deriva da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi personalizzati. Esiste un libro che tratta molte strategie di trading: "Strategie dei migliori trader" (in russo). Qui ci concentreremo sui pattern candlestick di inversione, confermati da Stochastic, CCI, MFI e RSI oscillatori. Il modo migliore è creare una classe separata, derivata da CExpertSignal, per controllare la formazione dei pattern candlestick. Per confermare i segnali di trading generati dai pattern candlestick, è sufficiente scrivere la classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, conferma da parte degli oscillatori). In questo articolo considereremo i segnali basati sui pattern di inversione "Dark Cloud Cover/Piercing Line" confermati dall'indicatore CCI. Il modulo di segnali di trading si basa sulla classe CCandlePattern, che è un semplice esempio del suo utilizzo per creare segnali di trading con i pattern candlestick. 1. Pattern di inversione "Dark Cloud Cover" e "Piercing Line" 1.1. Dark Cloud Cover Si tratta di un pattern di inversione ribassista che si verifica alla fine di un trend rialzista. Il primo giorno si forma una lunga candela bianca e il secondo giorno si crea un gap rialzista. Tuttavia, il secondo giorno chiude al di sotto del punto medio del primo giorno. Fig. 1. Pattern candlestick "Dark Cloud Cover" Il riconoscimento del pattern "Dark Cloud Cover" è implementato nel metodo CheckPatternDarkCloudCover() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern candlestick "Dark Cloud Cover" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover()   { //--- Dark Cloud Cover    if((Close(2)-Open(2)>AvgBody(1))  && // (candela bianca lunga)       (Close(1)<Close(2))            && //       (Close(1)>Open(2))             && // (chiusura all'interno del corpo precedente)       (MidOpenClose(2)>CloseAvg(1))  && // (trend rialzista)       (Open(1)>High(2)))                // (apertura a un nuovo massimo)       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) della classe CCandlePattern è utilizzato per verificare la formazione del pattern "Dark Cloud Cover". 1.2. Piercing Line Il gap ribassista del secondo giorno continua il trend ribassista. Tuttavia, la chiusura del secondo giorno è sopra il punto medio del corpo del primo giorno. Questo suggerisce ai ribassisti che potrebbe formarsi un minimo. Questa azione di prezzo non è così facilmente riconoscibile usando i grafici a barre come lo è con i grafici candlestick. Maggiore è la penetrazione della chiusura del secondo giorno nel corpo del primo giorno, maggiore sarà la probabilità che il segnale di inversione abbia successo. Fig. 2. Pattern candlestick "Piercing Line" Il riconoscimento del pattern "Piercing Line" è implementato nel metodo CheckPatternPiercingLine() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern candlestick "Piercing Line" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine()   { //--- Piercing Line    if((Close(1)-Open(1)>AvgBody(1)) && // (candela bianca lunga)       (Open(2)-Close(2)>AvgBody(1)) && // (candela nera lunga)       (Close(1)>Close(2))           && //         (Close(1)<Open(2))            && // (chiusura all'interno del corpo precedente)       (MidOpenClose(2)<CloseAvg(2)) && // (trend ribassista)       (Open(1)<Low(2)))                // (apertura al di sotto del precedente minimo)       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) della classe CCandlePattern è utilizzato per verificare la formazione del pattern "Piercing Line". 2. Segnali di trading, confermati dall'indicatore CCI I segnali di trading per aprire posizioni long o short devono essere confermati dall'indicatore CCI. Il valore del CCI deve essere superiore/inferiore ai livelli critici (-50 per la posizione long e 50 per la posizione short). La chiusura delle posizioni aperte dipende dai valori del CCI. Può avvenire in 2 casi: se la linea CCI ha raggiunto il livello critico opposto (80 per la posizione long e -80 per la posizione short) se il segnale inverso non è confermato (quando il CCI raggiunge i seguenti livelli: -80 per la posizione long e 80 per la posizione short) Fig. 3. Pattern "Dark Cloud Cover", confermato dall'indicatore CCI int CDC_PL_CCI::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere la posizione short (restituisce 40); int CDC_PL_CCI::ShortCondition() - controlla le condizioni per aprire una posizione short (restituisce 80) e chiudere la posizione long (restituisce 40). 2.1. Aprire una posizione long/Chiudere una posizione short La formazione del pattern "Piercing Line" deve essere confermata dall'indicatore CCI : CCI(1)<-50 (il valore del CCI dell'ultima barra completata deve essere inferiore a -50). La posizione short deve essere chiusa se l'indicatore CCI ha oltrepassato verso l'alto il livello critico -80 o oltrepassato verso il basso il livello critico 80. //+------------------------------------------------------------------+ //| Controlla le condizioni per entrare ed uscire dal mercato | //| 1) Entrata nel mercato (apri posizione long, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione short, risultato=40) | //+------------------------------------------------------------------+ int CDC_PL_CCI::LongCondition()   {    int result=0; //--- idx può essere utilizzato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo nelle barre di notizie    int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione long //--- formazione del pattern Piercing Line e CCI<-50    if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (CCI(1)<-50))      result=80; //--- controllo delle condizioni per chiudere la posizione short //--- crossover della linea del segnale dei livelli di overbought/oversold (verso il basso -80, verso l'alto -80)    if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))      result=40; //--- restituisci il risultato    return(result);   } 2.2. Aprire una posizione short/Chiudere una posizione long La formazione del pattern "Dark Cloud Cover" deve essere confermata dall'indicatore CCI: CCI(1)>50 (il valore dell'indicatore CCI dell'ultima barra completata deve essere superiore a 50). La posizione long deve essere chiusa se l'indicatore CCI ha oltrepassato verso il basso i livelli -80 o 80. //+------------------------------------------------------------------+ //| Controlla le condizioni per entrare ed uscire dal mercato | //| 1) Entrata nel mercato (apri posizione short, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione long, risultato=40) | //+------------------------------------------------------------------+ int CDC_PL_CCI::ShortCondition()   {    int result=0; //--- idx può essere utilizzato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo nelle barre di notizie    int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione short //--- formazione del pattern Dark Cloud Cover e CCI>50    if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (CCI(1)>50))      result=80; //--- controllo delle condizioni per chiudere la posizione long //--- crossover della linea del segnale dei livelli di overbought/oversold (verso il basso -80, verso l'alto 80)    if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))      result=40; //--- restituisci il risultato    return(result);   } 2.3. Creazione di un Expert Advisor utilizzando MQL5 Wizard La classe CDC_PL_CCI non è inclusa nelle classi della libreria standard, per utilizzarla, è necessario scaricare il file acdc_pl_cci.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso vale per il file candlepatterns.mqh. Puoi utilizzarlo in MQL5 Wizard dopo il riavvio di MetaEditor. Per creare un Expert Advisor, lancia MQL5 Wizard: Fig. 4. Creazione di Expert Advisor utilizzando MQL5 Wizard Specifichiamo il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo di che, dobbiamo selezionare i moduli dei segnali di trading utilizzati. Fig. 6. Proprietà del segnale dell'Expert Advisor Nel nostro caso utilizziamo solo un modulo di segnali di trading. Aggiungiamo il modulo di segnali di trading: Segnali basati su Dark Cloud Cover/Piercing Line confermati da CCI: Fig. 7. Proprietà del segnale dell'Expert Advisor Modulo di segnali di trading aggiunto: Fig. 8. Proprietà del segnale dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma noi utilizzeremo "Trailing Stop non utilizzato": Fig. 9. Proprietà di trailing dell'Expert Advisor Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume di scambio fisso": Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_ADC_PL_CCI.mq5, che sarà salvato in terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato: //--- parametri di input per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =10;     // Valore soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =50.0;   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0;  // Livello di Take Profit (in punti)deve essere sostituito con: //--- parametri di input per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =20;     // Valore soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =0.0    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose consentono di specificare i livelli soglia per l'apertura e la chiusura delle posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe dei segnali di trading, abbiamo specificato i valori fissi della soglia: Posizione aperta: 80; Posizione chiusa: 40. L'Expert Advisor, generato da MQL5 Wizard, apre e chiude le posizioni utilizzando i "voti" dei moduli di segnali di trading. Il voto del modulo principale (come contenitore, consiste di tutti i moduli aggiunti) è anche utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale sono anche utilizzati nell'"averaging" dei voti. Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo aspetto quando impostiamo i valori soglia. A causa di questo fatto, i valori ThresholdOpen e ThresholdClose devono essere impostati a 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati a 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere. 2.4. Risultati del backtesting storico Consideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.16). Nella creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), l'algoritmo di Trailing Stop non è utilizzato (Trailing non utilizzato). Fig. 11. Risultati del test dell'Expert Advisor, basato su Dark Cloud Cover/Piercing Line + CCI Il miglior set di parametri di input può essere trovato utilizzando il Tester di Strategie del terminale client MetaTrader 5. Il codice dell'Expert Advisor, creato da MQL5 Wizard, è allegato in expert_adc_pl_cci.mq5.

2011.02.25
Utilizzare MQL5 Wizard per Trading con Dark Cloud Cover e Piercing Line
MetaTrader5
Utilizzare MQL5 Wizard per Trading con Dark Cloud Cover e Piercing Line

Il MQL5 Wizard è uno strumento potente che consente di creare Expert Advisor (EA) pronti all'uso basati sulle classi della libreria standard fornite con il terminale client (puoi trovare ulteriori dettagli nell'articolo Creare Expert Advisor Pronti con MQL5 Wizard). Grazie a questo strumento, puoi testare rapidamente le tue idee di trading, basta creare la tua classe di segnali di trading. Puoi trovare la struttura di questa classe e un esempio nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L'idea generale è la seguente: la classe dei segnali di trading deriva da CExpertSignal, e quindi è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i propri metodi. Esiste un libro "Strategie dei migliori trader" (in russo) in cui vengono esaminate molte strategie di trading. Noi ci concentreremo sui pattern di candlestick di inversione, confermati da Stochastic, CCI, MFI e RSI. Il metodo migliore consiste nel creare una classe separata, derivata da CExpertSignal, per verificare la formazione dei pattern di candlestick. Per confermare i segnali di trading generati dai pattern di candlestick, basta scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, la conferma tramite oscillatori). Qui ci concentreremo sui segnali basati sul pattern di candlestick di inversione "Dark Cloud Cover/Piercing Line", confermati dall'indicatore Stochastic. Il modulo di segnali di trading si basa sulla classe CCandlePattern, ed è un semplice esempio del suo utilizzo per la creazione di segnali di trading con pattern di candlestick. 1. Pattern di Inversione: "Dark Cloud Cover" e "Piercing Line" 1.1. Dark Cloud Cover È un pattern di inversione ribassista che si verifica alla fine di un trend rialzista. Un lungo candlestick bianco si forma il primo giorno e si crea un gap al rialzo il secondo giorno. Tuttavia, il secondo giorno chiude sotto il punto medio del primo giorno. Fig. 1. Pattern di candlestick "Dark Cloud Cover" Il riconoscimento del pattern "Dark Cloud Cover" è implementato nel metodo CheckPatternDarkCloudCover() della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candlestick "Dark Cloud Cover" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover()   { //---Dark Cloud Cover    if((Close(2)-Open(2)>AvgBody(1))  && // (candlestick bianco lungo)       (Close(1)<Close(2))            && //        (Close(1)>Open(2)             && //(chiusura all'interno del corpo precedente)       (MidOpenClose(2)>CloseAvg(1))  && // (trend rialzista)       (Open(1)>High(2)))                // (apertura ad un nuovo massimo)       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) della classe CCandlePattern è utilizzato per controllare la formazione del pattern di candlestick "Dark Cloud Cover". 1.2. Piercing Line Il gap al ribasso del secondo giorno perpetua il trend ribassista. Tuttavia, la chiusura del secondo giorno è sopra il punto medio del corpo del primo giorno. Questo suggerisce ai ribassisti che potrebbe formarsi un minimo. Questa azione di prezzo non è così evidente utilizzando i grafici a barre come lo è con i grafici a candlestick. Maggiore è la penetrazione della chiusura del secondo giorno nel corpo del primo giorno, maggiore sarà la probabilità che il segnale di inversione abbia successo. Fig. 2. Pattern di candlestick "Piercing Line" Il riconoscimento del pattern "Piercing Line" è implementato nel metodo CheckPatternPiercingLine() della classe CCandlePattern://+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candlestick "Piercing Line" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine()   { //---Piercing Line    if((Close(1)-Open(1)>AvgBody(1)) && // (candlestick bianco lungo)       (Open(2)-Close(2)>AvgBody(1)) && // (candlestick nero lungo)       (Close(1)>Close(2))           && //       (Close(1)<Open(2)            && // (chiusura all'interno del corpo precedente)       (MidOpenClose(2)<CloseAvg(2)) && // (trend ribassista)       (Open(1)<Low(2)))                // (apertura sotto il minimo precedente)       return(true); //---    return(false);   }Il metodo CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) della classe CCandlePattern è utilizzato per controllare la formazione del pattern di candlestick "Piercing Line". 2. Segnali di Trading, Confermati dall'Indicatore Stochastic I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'oscillatore Stochastic. La linea %D deve essere maggiore/minore dei livelli critici corrispondenti (30 o 70). La chiusura delle posizioni aperte dipende dai valori dell'indicatore %D. Può avvenire in 2 casi: se la linea %D ha raggiunto il livello critico opposto (80 per la posizione lunga e 20 per la posizione corta)se il segnale inverso non è confermato (quando la linea %D raggiunge i seguenti livelli: 20 per la posizione lunga e 80 per la posizione corta) Fig. 3. Pattern "Dark Cloud Cover", confermato dall'indicatore Stochastic 2.1. Aprire posizione lunga/Chiudere posizione corta La formazione del pattern "Piercing Line" deve essere confermata dall'indicatore Stochastic: StochSignal(1)<30 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima barra completata deve essere inferiore a 30).La posizione corta deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha incrociato verso l'alto i livelli 20 o 80. //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato | //| 1) Entrata nel mercato (apri posizione lunga, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione corta, risultato=40) | //+------------------------------------------------------------------+ int CDC_PL_Stoch::LongCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading a ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo a barre nuove   int idx   =StartIndex(); //--- controllo delle condizioni per aprire posizione lunga //--- formazione del pattern di Piercing Line e linea di segnale<30   if (CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (StochSignal(1)<30))      result=80; //--- controllo delle condizioni per chiudere posizione corta //--- incrocio della linea di segnale nei livelli di ipercomprato/ipervenduto (verso il basso 20, verso l'alto 80)    if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||        ((StochSignal(1)>80) && (StochSignal(2)<80))))      result=40; //--- ritorna il risultato    return(result);   } 2.2. Aprire posizione corta/Chiudere posizione lunga La formazione del pattern "Dark Cloud Cover" deve essere confermata dall'indicatore Stochastic: StochSignal(1)>70 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima barra completata deve essere maggiore di 70).La posizione lunga deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha incrociato verso il basso i livelli 80 o 20. //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato | //| 1) Entrata nel mercato (apri posizione corta, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40) | //+------------------------------------------------------------------+ int CDC_PL_Stoch::ShortCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading a ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo a barre nuove   int idx   =StartIndex(); //--- controllo delle condizioni per aprire posizione corta //--- formazione del pattern di Dark Cloud Cover e linea di segnale>70   if (CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (StochSignal(1)>70))      result=80; //--- controllo delle condizioni per chiudere posizione lunga //--- incrocio della linea di segnale nei livelli di ipercomprato/ipervenduto (verso il basso 80, verso l'alto 20)    if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||        ((StochSignal(1)<20) && (StochSignal(2)>20))))      result=40; //--- ritorna il risultato    return(result);   } 2.3. Creare un Expert Advisor utilizzando MQL5 Wizard La classe CDC_PL_Stoch non è inclusa nelle classi della libreria standard, per utilizzarla è necessario scaricare il file adc_pl_stoch.mqh (vedi allegati) e salvarlo nella cartella terminal_data_client\MQL5\Include\Expert\Signal\MySignals. Lo stesso dovrebbe essere fatto con il file candlepatterns.mqh. Puoi usarlo in MQL5 Wizard dopo il riavvio del MetaEditor. Per creare un Expert Advisor, avvia il MQL5 Wizard: Fig. 4. Creazione di un Expert Advisor usando MQL5 Wizard Specifichiamo il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo di che dobbiamo selezionare i moduli di segnali di trading utilizzati. Fig. 6. Proprietà dei segnali dell'Expert Advisor Nel nostro caso utilizziamo solo un modulo di segnali di trading. Aggiungiamo il modulo di segnali Basato su Dark Cloud Cover/Piercing Line confermato da Stochastic: Fig. 7. Proprietà dei segnali dell'Expert Advisor Modulo di segnali di trading aggiunto: Fig. 8. Proprietà dei segnali dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma noi utilizzeremo "Trailing Stop non utilizzato": Fig. 9. Proprietà di money management dell'Expert Advisor Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume fisso": Fig. 10. Proprietà di money management dell'Expert Advisor Cliccando sul pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_ADC_PL_Stoch.mq5, che sarà salvato in terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato: //--- input per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore soglia del segnale da aprire [0...100] input int            Signal_ThresholdClose  =10     // Valore soglia del segnale da chiudere [0...100] input double         Signal_PriceLevel      =0.0    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =50.0   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0  // Livello di Take Profit (in punti) deve essere sostituito con: //--- input per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore soglia del segnale da aprire [0...100] input int            Signal_ThresholdClose  =20     // Valore soglia del segnale da chiudere [0...100] input double         Signal_PriceLevel      =0.0    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =0.0    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose consentono di specificare i livelli soglia per l'apertura e la chiusura delle posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe dei segnali di trading abbiamo specificato i valori fissi della soglia: Apertura posizione: 80; Chiusura posizione: 40. L'Expert Advisor, generato da MQL5 Wizard, apre e chiude posizioni utilizzando i "voti" dei moduli di segnali di trading. Il voto del modulo principale (come contenitore, è composto da tutti i moduli aggiunti) è utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale vengono utilizzati anche nell'averaging dei "voti". Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fatto quando impostiamo i valori delle soglie. A causa di questo fatto, le soglie di apertura e chiusura devono essere impostate come 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati a 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere. 2.4. Risultati del backtesting storico Esaminiamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.02.02, PeriodK=9, PeriodD=5, PeriodSlow=20, MA_period=27). Durante la creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading con Lotto Fisso, 0.1), l'algoritmo di Trailing Stop non è stato utilizzato (Trailing non utilizzato). Fig. 11. Risultati del test dell'Expert Advisor, basato su Dark Cloud Cover/Piercing Line + Stochastic Il miglior set di parametri di input può essere trovato utilizzando il Tester di Strategia del terminale client MetaTrader 5. Il codice dell'Expert Advisor, creato da MQL5 Wizard, è allegato in expert_adc_pl_stoch.mq5.

2011.02.25
MQL5 Wizard: Crea Trading Signals con 3 Corvi Neri/3 Soldati Bianchi e RSI
MetaTrader5
MQL5 Wizard: Crea Trading Signals con 3 Corvi Neri/3 Soldati Bianchi e RSI

Il MQL5 Wizard è un ottimo strumento che ti permette di generare Expert Advisor pronti all'uso, basati sulle classi della libreria standard fornita con il terminale client. Se vuoi dare un'occhiata a come creare un Expert Advisor, puoi consultare l'articolo Creare Expert Advisor Pronti con MQL5 Wizard per tutti i dettagli. Con MQL5 Wizard, puoi testare rapidamente le tue idee di trading; tutto ciò che devi fare è creare la tua classe di segnali di trading. La struttura di questa classe e un esempio sono disponibili nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L'idea generale è questa: la classe dei segnali di trading deriva da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi. Un libro interessante che consiglio è "Strategie dei Migliori Trader" (in russo), dove vengono trattate molte strategie di trading. Qui ci concentreremo sui pattern di inversione delle candele, confermati da oscillatori come Stochastic, CCI, MFI e RSI. Il modo migliore è creare una classe separata, derivata da CExpertSignal, per controllare la formazione dei pattern delle candele. Per confermare i segnali di trading generati dai pattern delle candele, è sufficiente scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, conferma tramite oscillatori). Adesso vediamo i segnali basati sul pattern di inversione "3 Corvi Neri/3 Soldati Bianchi", confermato dall'indicatore Relative Strength Index (RSI). Il modulo di segnali di trading è basato sulla classe CCandlePattern, che offre un esempio semplice per la creazione di segnali di trading con i pattern delle candele. 1. Pattern di inversione "3 Corvi Neri" e "3 Soldati Bianchi" 1.1. 3 Corvi Neri Un pattern di candele ribassista utilizzato per prevedere l'inversione dell'attuale trend rialzista. Questo pattern è composto da tre candele consecutive con corpo lungo che hanno chiuso più in basso rispetto al giorno precedente, con ogni apertura che avviene all'interno del corpo della candela precedente. Fig. 1. Pattern di candele '3 Corvi Neri' Il riconoscimento del pattern "3 Corvi Neri" è implementato nel metodo CheckPatternThreeBlackCrows della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candele "3 Corvi Neri" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows()   { //--- 3 Corvi Neri    if((Open(3)-Close(3)>AvgBody(1)) && // (long black)       (Open(2)-Close(2)>AvgBody(1)) &&       (Open(1)-Close(1)>AvgBody(1)) &&       (MidPoint(2)<MidPoint(3))     && // (midpoint più bassi)       (MidPoint(1)<MidPoint(2)))         return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) della classe CCandlePattern è utilizzato per verificare la formazione del pattern di candele "3 Corvi Neri". 1.2. Pattern di candele 3 Soldati Bianchi Un pattern di candele rialzista usato per prevedere l'inversione dell'attuale trend ribassista. Questo pattern è composto da tre candele consecutive con corpo lungo che hanno chiuso più in alto rispetto al giorno precedente, con ogni apertura che avviene all'interno del corpo della candela precedente. Il pattern è valido fintanto che la candela del secondo giorno si apre nella metà superiore dell'intervallo del primo giorno. Entro la fine del secondo giorno, deve chiudere vicino al suo massimo, lasciando un'ombra superiore molto piccola o addirittura inesistente. Lo stesso pattern viene quindi ripetuto il terzo giorno. Fig. 2. Pattern di candele '3 Soldati Bianchi' Qui c'è il metodo per il riconoscimento del pattern "3 Soldati Bianchi": //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candele "3 Soldati Bianchi" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers()   {    //--- 3 Soldati Bianchi    if((Close(3)-Open(3)>AvgBody(1)) && // lungo bianco       (Close(2)-Open(2)>AvgBody(1)) &&       (Close(1)-Open(1)>AvgBody(1)) &&       (MidPoint(2)>MidPoint(3))     && // midpoints più alti       (MidPoint(1)>MidPoint(2)))       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) della classe CCandlePattern è utilizzato per verificare la formazione del pattern di candele "3 Soldati Bianchi". 2. Segnali di trading, confermati dall'indicatore RSI I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'indicatore RSI. Il valore dell'RSI deve essere inferiore/maggiore ai livelli critici (40 per posizione lunga e 60 per posizione corta). La chiusura delle posizioni aperte dipende dai valori dell'RSI. Può avvenire in 2 casi: se l'RSI ha raggiunto il livello critico opposto (70 per posizione lunga e 30 per posizione corta) se il segnale inverso non è confermato (quando l'RSI raggiunge i seguenti livelli: 30 per posizione lunga e 70 per posizione corta) Fig. 3. Pattern '3 Corvi Neri', confermato dall'indicatore Stochastic int CML_RSI::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40); int CML_RSI::ShortCondition() - controlla le condizioni per aprire una posizione corta (restituisce 80) e chiudere la posizione lunga (restituisce 40). 2.1. Aprire posizione lunga/Chiudere posizione corta La formazione del pattern "3 Soldati Bianchi" deve essere confermata dall'indicatore RSI: RSI(1)<40 (il valore dell'RSI dell'ultima barra completata deve essere inferiore a 40). La posizione corta deve essere chiusa se l'indicatore RSI ha superato verso l'alto i livelli critici 70 o 30. //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato                 | //| 1) Ingresso nel mercato (apri posizione lunga, risultato=80)                  | //| 2) Uscita dal mercato (chiudi posizione corta, risultato=40)                 | //+------------------------------------------------------------------+ int CBC_WS_RSI::LongCondition()   {    int result=0; //--- idx può essere utilizzato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo durante le barre di notizie   int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione lunga //--- formazione del pattern 3 Soldati Bianchi e RSI<30   if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (RSI(1)<40))      result=80; //--- controllo delle condizioni per chiudere posizione corta //--- crossover della linea di segnale sopra/sotto i livelli di ipercomprato/iper-venduto (verso l'alto 30, verso l'alto 70)   if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))      result=40; //--- restituisci il risultato    return(result);   } 2.2. Aprire posizione corta/Chiudere posizione lunga La formazione del pattern "3 Corvi Neri" deve essere confermata dall'indicatore RSI: RSI(1)>60 (il valore dell'RSI dell'ultima barra completata deve essere maggiore di 60). La posizione lunga deve essere chiusa se l'indicatore RSI ha incrociato verso il basso i livelli critici 70 o 30. //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato                 | //| 1) Ingresso nel mercato (apri posizione corta, risultato=80)                 | //| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40)                  | //+------------------------------------------------------------------+ int CBC_WS_RSI::ShortCondition()   {    int result=0; //--- idx può essere utilizzato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo durante le barre di notizie   int idx   =StartIndex(); //--- controllo delle condizioni per aprire posizione corta //--- formazione del pattern 3 Corvi Neri e RSI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (RSI(1)>60))      result=80; //--- controllo delle condizioni per chiudere posizione lunga //--- crossover della linea di segnale sotto/sopra i livelli di ipercomprato/iper-venduto (verso il basso 70, verso il basso 30)    if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))      result=40; //--- restituisci il risultato    return(result);   } 2.3. Creare un Expert Advisor utilizzando MQL5 Wizard La classe CML_RSI non è inclusa nelle classi della Libreria Standard; per utilizzarla, è necessario scaricare il file acml_rsi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto con il file candlepatterns.mqh. Puoi utilizzarlo in MQL5 Wizard dopo il riavvio del MetaEditor. Per creare un Expert Advisor, avvia il MQL5 Wizard: Fig. 4. Creazione dell'Expert Advisor usando MQL5 Wizard Specifichiamo il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo di che, dobbiamo selezionare i moduli dei segnali di trading utilizzati. Fig. 6. Proprietà del segnale dell'Expert Advisor Nel nostro caso utilizziamo solo un modulo di segnali di trading. Aggiungiamo il modulo di Segnali basati su 3 Corvi Neri/3 Soldati Bianchi: Fig. 7. Proprietà del segnale dell'Expert Advisor Modulo di segnali di trading aggiunto: Fig. 8. Proprietà del segnale dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma utilizzeremo "Trailing Stop non usato": Fig. 9. Proprietà di money management dell'Expert Advisor Per quanto riguarda le proprietà di money management, utilizzeremo "Trading con volume fisso": Fig. 10. Proprietà di money management dell'Expert Advisor Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_ABC_WS_RSI.mq5, che sarà salvato nella cartella terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato: //--- input per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =10;     // Valore soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un'operazione input double         Signal_StopLevel       =50.0;   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0   // Livello di Take Profit (in punti) devono essere sostituiti con: //--- input per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =20;     // Valore soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0    // Livello di prezzo per eseguire un'operazione input double         Signal_StopLevel       =0.0    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose permettono di specificare i livelli soglia per l'apertura e la chiusura delle posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe dei segnali di trading, abbiamo specificato i valori fissi della soglia: Apri posizione: 80; Chiudi posizione: 40. L'Expert Advisor, generato dal MQL5 Wizard, apre e chiude le posizioni usando i "voti" dai moduli di segnali di trading. Il voto del modulo principale (che funge da contenitore, consiste di tutti i moduli aggiunti) viene anch'esso utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale vengono anche utilizzati per la media dei "voti". Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fatto quando impostiamo i valori soglia. A causa di questo fatto, le soglie di apertura e chiusura devono essere impostate a 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati a 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere. 2.4. Risultati del backtesting storico Vediamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.02.02, PeriodRSI=37, MA_period=51). Durante la creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), l'algoritmo di Trailing Stop non è stato utilizzato (Trailing not used). Fig. 11. Risultati del test dell'Expert Advisor, basato su 3 Corvi Neri/3 Soldati Bianchi + RSI Il miglior set di parametri di input può essere trovato utilizzando il Strategy Tester del terminale client MetaTrader 5. Il codice dell'Expert Advisor, creato dal MQL5 Wizard, è allegato in expert_abc_ws_rsi.mq5.

2011.02.18
Guida all'Utilizzo di MQL5 Wizard per i Segnali di Trading: 3 Black Crows/3 White Soldiers + MFI
MetaTrader5
Guida all'Utilizzo di MQL5 Wizard per i Segnali di Trading: 3 Black Crows/3 White Soldiers + MFI

Il MQL5 Wizard è uno strumento fantastico che consente di creare Expert Advisor (EA) pronti all’uso basati sulle classi della libreria standard fornita con il terminale client di MetaTrader 5. Questo strumento permette di testare rapidamente le tue idee di trading, basta creare la tua classe di segnali di trading. La struttura di questa classe e un esempio possono essere trovati nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L'idea di base è la seguente: la classe di segnali di trading è derivata da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi personalizzati. Esiste un libro intitolato "Strategie dei migliori trader" (in russo) che tratta di molte strategie di trading. In questo articolo, ci concentreremo sui pattern di candlestick di inversione, confermati dagli oscillatori Stochastic, CCI, MFI e RSI. Il metodo migliore è creare una classe separata, derivata da CExpertSignal, per verificare la formazione dei pattern di candlestick. Per confermare i segnali di trading generati dai pattern di candlestick, è sufficiente scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, la conferma da parte degli oscillatori). In questo articolo, considereremo i segnali basati sul pattern di candlestick di inversione "3 Black Crows/3 White Soldiers", confermati dall'indicatore Market Facilitation Index (MFI). Il modulo di segnali di trading è basato sulla classe CCandlePattern, un semplice esempio del suo utilizzo per la creazione di segnali di trading con pattern di candlestick. 1. Pattern di candlestick "3 Black Crows" e "3 White Soldiers" 1.1. 3 Black Crows Il pattern di candlestick ribassista "3 Black Crows" viene utilizzato per prevedere l'inversione dell'attuale trend rialzista. Questo pattern è composto da tre candlestick consecutive con corpo lungo che si sono chiuse al di sotto del giorno precedente, con l'apertura di ogni sessione che avviene all'interno del corpo della candela precedente. Fig. 1. Pattern di candlestick "3 Black Crows" Il riconoscimento del pattern "3 Black Crows" è implementato nel metodo CheckPatternThreeBlackCrows della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candlestick '3 Black Crows' | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() { //--- 3 Black Crows if((Open(3)-Close(3)>AvgBody(1)) && // (long black) return(true); //--- return(false); } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) della classe CCandlePattern viene utilizzato per verificare la formazione del pattern "3 Black Crows". 1.2. Pattern di candlestick "3 White Soldiers" Il pattern di candlestick rialzista "3 White Soldiers" viene utilizzato per prevedere l'inversione dell'attuale trend ribassista. Questo pattern è composto da tre candlestick consecutive con corpo lungo che si sono chiuse al di sopra del giorno precedente, con l'apertura di ogni sessione che avviene all'interno del corpo della candela precedente. Il pattern è valido finché la candela del giorno due si apre nella metà superiore dell'intervallo del giorno uno. Alla fine del giorno due, deve chiudere vicino al suo massimo, lasciando una piccola o inesistente ombra superiore. Lo stesso pattern viene ripetuto nel giorno tre. Fig. 2. Pattern di candlestick "3 White Soldiers" Ecco il metodo per il riconoscimento del pattern "3 White Soldiers": //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candlestick '3 White Soldiers' | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers() { //--- 3 White Soldiers if((Close(3)-Open(3)>AvgBody(1)) && // long white return(true); //--- return(false); } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) della classe CCandlePattern viene utilizzato per verificare la formazione del pattern "3 White Soldiers". 2. Segnali di trading confermati dall'indicatore MFI I segnali di trading per aprire posizioni long o short devono essere confermati dall'indicatore MFI. Il valore dell'indicatore MFI deve essere inferiore a 40 (per posizioni long) o superiore a 60 (per posizioni short). La chiusura della posizione aperta dipende dai valori dell'indicatore MFI. Ciò può avvenire in 2 casi: se l'MFI ha raggiunto il livello critico opposto (70 per posizione long e 30 per posizione short) se il segnale inverso non è confermato (quando l'indicatore MFI raggiunge i seguenti livelli: 30 per posizione long e 70 per posizione short) Fig. 3. Pattern "3 Black Crows", confermato dall'indicatore MFI int CBC_WS_MFI::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere la posizione short (restituisce 40); int CBC_WS_MFI::ShortCondition() - controlla le condizioni per aprire una posizione short (restituisce 80) e chiudere la posizione long (restituisce 40). 2.1. Aprire posizione long/Chiudere posizione short La formazione del pattern "3 White Soldiers" deve essere confermata dall'indicatore MFI: MFi(1)<40 (il valore dell'indicatore MFI dell'ultima barra completata deve essere inferiore a 40). La posizione short deve essere chiusa se l'indicatore MFI ha superato verso l'alto i livelli critici (70 o 30). //+------------------------------------------------------------------+ //| Controlla le condizioni per l'entrata e l'uscita dal mercato | //| 1) Entrata nel mercato (apri posizione long, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione short, risultato=40) | //+------------------------------------------------------------------+ int CBC_WS_MFI::LongCondition() { int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'EA //--- idx=0 - in questo caso l'EA controlla le condizioni di trading a ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo ai bar di notizie int idx   =StartIndex(); //--- controllo delle condizioni per aprire posizione long //--- formazione del pattern 3 White Soldiers e MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (MFI(1)<40)) result=80; //--- controllo delle condizioni per chiudere posizione short //--- crossover della linea segnale dei livelli overbought/oversold (verso l'alto 30, verso l'alto 70) if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- ritorna il risultato return(result); } 2.2. Aprire posizione short/Chiudere posizione long La formazione del pattern "3 Black Crows" deve essere confermata dall'indicatore MFI: MFI(1)>60 (il valore dell'indicatore MFI dell'ultima barra completata deve essere superiore a 60). La posizione long deve essere chiusa se l'indicatore MFI ha superato verso l'alto i livelli critici (70 o 30). //+------------------------------------------------------------------+ //| Controlla le condizioni per l'entrata e l'uscita dal mercato | //| 1) Entrata nel mercato (apri posizione short, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione long, risultato=40) | //+------------------------------------------------------------------+ int CBC_WS_MFI::ShortCondition() { int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'EA //--- idx=0 - in questo caso l'EA controlla le condizioni di trading a ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo ai bar di notizie int idx   =StartIndex(); //--- controllo delle condizioni per aprire posizione short //--- formazione del pattern 3 Black Crows e MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (MFI(1)>60)) result=80; //--- controllo delle condizioni per chiudere posizione long //--- crossover della linea segnale dei livelli overbought/oversold (verso l'alto 70, verso il basso 30) if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) result=40; //--- ritorna il risultato return(result); } 2.3. Creare un Expert Advisor utilizzando MQL5 Wizard La classe CBC_WS_MFI non è inclusa nelle classi della libreria standard, per utilizzarla è necessario scaricare il file abc_ws_mfi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso dovrebbe essere fatto con il file acandlepatterns.mqh. Puoi utilizzarlo nel MQL5 Wizard dopo aver riavviato il MetaEditor. Per creare un Expert Advisor, avvia il MQL5 Wizard: Fig. 4. Creazione Expert Advisor utilizzando MQL5 Wizard Specifichiamo il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo di che, dobbiamo selezionare i moduli di segnali di trading utilizzati. Fig. 6. Proprietà del segnale dell'Expert Advisor Nel nostro caso utilizziamo solo un modulo di segnali di trading. Aggiungendo il modulo di segnali "Segnali basati su 3 Black Crows/3 White Soldiers confermati da MFI": Fig. 7. Proprietà del segnale dell'Expert Advisor Modulo di segnali di trading aggiunto: Fig. 8. Proprietà del segnale dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma utilizzeremo "Trailing Stop non utilizzato": Fig. 9. Proprietà di trailing dell'Expert Advisor Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume fisso": Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, posizionato in Expert_ABC_WS_MFI.mq5, che sarà salvato nella cartella terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato: //--- input per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore di soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =10;     // Valore di soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =50.0;   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0;  // Livello di Take Profit (in punti) deve essere sostituito con: //--- input per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore di soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =20;     // Valore di soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =0.0;    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose consentono di specificare i livelli di soglia per l'apertura e la chiusura delle posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe di segnali di trading abbiamo specificato i valori fissi della soglia: Apertura posizione: 80; Chiusura posizione: 40. L'Expert Advisor, generato dal MQL5 Wizard, apre e chiude posizioni utilizzando i "voti" dai moduli di segnali di trading. Il voto del modulo principale (come contenitore, consiste di tutti i moduli aggiunti) viene utilizzato anche, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale sono utilizzati anche nell'"averaging" dei voti. Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fatto quando impostiamo i valori delle soglie. A causa di questo fatto, ThresholdOpen e ThresholdClose devono essere impostati come 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati a 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere. 2.4. Risultati del backtesting storico Consideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.16, PeriodMFI=37, MA_period=13). Nella creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), l'algoritmo di Trailing Stop non è utilizzato (Trailing non utilizzato). Fig. 11. Risultati del test dell'Expert Advisor, basato sui 3 Black Crows/3 White Soldiers + MFI Il miglior set di parametri di input può essere trovato utilizzando il Strategy Tester del terminale client di MetaTrader 5. Il codice dell'Expert Advisor, creato dal MQL5 Wizard, è allegato in expert_abc_ws_mfi.mq5.

2011.02.18
Guida all'Utilizzo del MQL5 Wizard: Trading con Pattern di Candele e Indice CCI
MetaTrader5
Guida all'Utilizzo del MQL5 Wizard: Trading con Pattern di Candele e Indice CCI

Il MQL5 Wizard è uno strumento fantastico che ti permette di creare Expert Advisor (EA) pronti all’uso basati sulle classi della libreria standard fornita con il terminale client (dai un’occhiata a Creazione di Expert Advisor nel MQL5 Wizard per maggiori dettagli). Ti consente di testare rapidamente le tue idee di trading, basta creare la tua classe di segnali di trading. Puoi trovare la struttura di questa classe e un esempio nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L'idea di base è questa: la classe dei segnali di trading deriva da CExpertSignal. È necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi. Esiste un libro "Strategie dei migliori trader" (in russo), dove vengono analizzate molte strategie di trading; noi ci concentreremo sui pattern di inversione delle candele, confermati dagli oscillatori Stocastico, CCI, MFI e RSI. Il modo migliore è creare una classe separata, derivata da CExpertSignal, per controllare la formazione dei pattern di candele. Per confermare i segnali di trading generati dai pattern di candele, basta scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, conferma tramite oscillatori). In questa guida considereremo i segnali basati sul pattern di inversione delle candele "3 Black Crows/3 White Soldiers", confermati dall'indicatore Commodity Channel Index. Il modulo dei segnali di trading si basa sulla classe CCandlePattern, che offre un semplice esempio di utilizzo per la creazione di segnali di trading con i pattern di candele. 1. I pattern di inversione delle candele "3 Black Crows" e "3 White Soldiers" 1.1. 3 Black Crows Un pattern di candele ribassista utilizzato per prevedere l'inversione dell'attuale trend rialzista. Questo pattern è composto da tre candele lunghe consecutive che hanno chiuso inferiori alla giornata precedente, con l'apertura di ogni sessione che si verifica all'interno del corpo della candela precedente. Fig. 1. Pattern di candele '3 Black Crows' Il riconoscimento del pattern "3 Black Crows" è implementato nel metodo CheckPatternThreeBlackCrows della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candele "3 Black Crows" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows()   { //--- 3 Black Crows    if((Open(3)-Close(3)>AvgBody(1)) && // (long black)       (Open(2)-Close(2)>AvgBody(1)) &&       (Open(1)-Close(1)>AvgBody(1)) &&       (MidPoint(2)<MidPoint(3))     && // (lower midpoints)       (MidPoint(1)<MidPoint(2)))         return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) della classe CCandlePattern è utilizzato per controllare la formazione del pattern di candele "3 Black Crows". 1.2. Pattern di candele 3 White Soldiers Un pattern di candele rialzista che viene utilizzato per prevedere l'inversione dell'attuale trend ribassista. Questo pattern è composto da tre candele lunghe consecutive che hanno chiuso superiori alla giornata precedente, con l'apertura di ogni sessione che si verifica all'interno del corpo della candela precedente. Il pattern è valido finché la candela del giorno due apre nella metà superiore dell'intervallo del giorno uno. Alla fine del giorno due, essa dovrebbe chiudere vicino al suo massimo, lasciando un'ombra superiore molto piccola o inesistente. Lo stesso pattern si ripete poi nel giorno tre. Fig. 2. Pattern di candele '3 White Soldiers' Ecco il metodo per il riconoscimento del pattern "3 White Soldiers": //+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candele "3 White Soldiers" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers()   {    //--- 3 White Soldiers    if((Close(3)-Open(3)>AvgBody(1)) && // long white       (Close(2)-Open(2)>AvgBody(1)) &&       (Close(1)-Open(1)>AvgBody(1)) &&       (MidPoint(2)>MidPoint(3))     && // higher midpoints       (MidPoint(1)>MidPoint(2)))       return(true); //---    return(false);   } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) della classe CCandlePattern è utilizzato per controllare la formazione del pattern di candele "3 White Soldiers". 2. Segnali di trading confermati dall'indicatore CCI I segnali di trading per aprire posizioni long o short devono essere confermati dall'indicatore CCI. Il valore del CCI deve essere superiore/inferiore ai livelli critici (-50 per la posizione long e 50 per la posizione short) La chiusura della posizione aperta dipende dai valori del CCI. Può avvenire in due casi: se la linea del CCI ha raggiunto il livello critico opposto (80 per la posizione long e -80 per la posizione short) se il segnale inverso non è confermato (quando il CCI raggiunge i seguenti livelli: -80 per la posizione long e 80 per la posizione short) Fig. 3. Pattern '3 Black Crows' confermato dall'indicatore CCI int CBC_WS_CCI::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere la posizione short (restituisce 40); int CBC_WS_CCI::ShortCondition() - controlla le condizioni per aprire una posizione short (restituisce 80) e chiudere la posizione long (restituisce 40). 2.1. Apertura posizione long/Chiusura posizione short La formazione del pattern "3 Black Crows" deve essere confermata dall'indicatore CCI: CCI(1)<-50 (il valore del CCI dell'ultima barra completata deve essere inferiore a -50). La posizione short deve essere chiusa se l'indicatore CCI ha superato verso l'alto il livello critico -80 o ha attraversato verso il basso il livello critico 80. //+------------------------------------------------------------------+ //| Controlla le condizioni per entrare e uscire dal mercato                 | //| 1) Entrata nel mercato (apri posizione long, risultato=80)                  | //| 2) Uscita dal mercato (chiudi posizione short, risultato=40)                 | //+------------------------------------------------------------------+ int CBC_WS_CCI::LongCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso EA controlla le condizioni di trading solo alle barre di notizie    int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione long //--- formazione del pattern 3 White Soldiers e CCI<-50    if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (CCI(1)<-50))      result=80; //--- controllo delle condizioni per chiudere la posizione short //--- crossover della linea segnale dei livelli di ipercomprato/iper-venduto (verso il basso -80, verso il basso -80)    if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))      result=40; //--- ritorna il risultato    return(result);   } 2.2. Apertura posizione short/Chiusura posizione long La formazione del pattern "3 White Soldiers" deve essere confermata dall'indicatore CCI: CCI(1)>50 (il valore del CCI dell'ultima barra completata deve essere superiore a 50). La posizione long deve essere chiusa se l'indicatore CCI ha attraversato verso il basso i livelli -80 o 80. //+------------------------------------------------------------------+ //| Controlla le condizioni per entrare e uscire dal mercato                 | //| 1) Entrata nel mercato (apri posizione short, risultato=80)                 | //| 2) Uscita dal mercato (chiudi posizione long, risultato=40)                  | //+------------------------------------------------------------------+ int CBC_WS_CCI::ShortCondition()   {    int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso EA controlla le condizioni di trading solo alle barre di notizie    int idx   =StartIndex(); //--- controllo delle condizioni per aprire una posizione short //--- formazione del pattern 3 Black Crows e CCI>50    if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (CCI(1)>50))      result=80; //--- controllo delle condizioni per chiudere la posizione long //--- crossover della linea segnale dei livelli di ipercomprato/iper-venduto (verso il basso -80, verso l'alto 80)    if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))      result=40; //--- ritorna il risultato    return(result);   } 2.3. Creazione di un Expert Advisor utilizzando MQL5 Wizard La classe CBC_WS_CCI non è inclusa nelle classi della Libreria Standard, per utilizzarla è necessario scaricare il file acbc_ws_cci.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto con il file candlepatterns.mqh. Puoi utilizzarlo nel MQL5 Wizard dopo il riavvio del MetaEditor. Per creare un Expert Advisor lancia il MQL5 Wizard: Fig. 4. Creazione di Expert Advisor utilizzando MQL5 Wizard Specifichiamo il nome dell'Expert Advisor: Fig. 5. Proprietà generali dell'Expert Advisor Dopo di che dobbiamo selezionare i moduli di segnali di trading utilizzati. Fig. 6. Proprietà del segnale dell'Expert Advisor Nel nostro caso utilizziamo solo un modulo di segnali di trading. Aggiungendo il modulo di trading: "Segnali basati su 3 Black Crows/3 White Soldiers confermati da CCI": Fig. 7. Proprietà del segnale dell'Expert Advisor Modulo di segnali di trading aggiunto: Fig. 8. Proprietà del segnale dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma noi utilizzeremo "Trailing Stop non utilizzato": Fig. 9. Proprietà di trailing dell'Expert Advisor Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume fisso": Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_ABC_WS_CCI.mq5, che sarà salvato in terminal_data_folder\MQL5\Experts\. I parametri di input predefiniti dell'Expert Advisor generato: //--- inputs per il segnale principale input int            Signal_ThresholdOpen   =10;     // Valore soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =10;     // Valore soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =50.0;   // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =50.0  // Livello di Take Profit (in punti) deve essere sostituito con: //--- inputs per il segnale principale input int            Signal_ThresholdOpen   =40;     // Valore soglia del segnale per aprire [0...100] input int            Signal_ThresholdClose  =20;     // Valore soglia del segnale per chiudere [0...100] input double         Signal_PriceLevel      =0.0    // Livello di prezzo per eseguire un affare input double         Signal_StopLevel       =0.0    // Livello di Stop Loss (in punti) input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti) I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose consentono di specificare i livelli soglia per l'apertura e la chiusura delle posizioni. Nel codice dei metodi LongCondition() e ShortCondition() della classe dei segnali di trading abbiamo specificato i valori fissi della soglia: Aprire posizione: 80; Chiudere posizione: 40. L'Expert Advisor, generato dal MQL5 Wizard apre e chiude le posizioni utilizzando i "voti" dei moduli di segnali di trading. Il voto del modulo principale (come contenitore, esso consiste in tutti i moduli aggiunti) è anche utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0. I risultati dei voti del modulo principale sono anche utilizzati nella media dei "voti". Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fatto quando impostiamo i valori soglia. A causa di questo fatto, ThresholdOpen e ThresholdClose devono essere impostati come 40=(0+80)/2 e 20=(0+40)/2. I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati a 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere. 2.4. Risultati del backtesting storico Vediamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.16, PeriodCCI=37, MA_period=13). Nella creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), l'algoritmo di Trailing Stop non è stato utilizzato (Trailing non utilizzato). Fig. 11. Risultati del test dell'Expert Advisor, basato su 3 Black Crows/3 White Soldiers + CCI Il miglior set di parametri di input può essere trovato utilizzando il Tester di Strategie del terminale client di MetaTrader 5. Il codice dell'Expert Advisor, creato dal MQL5 Wizard è allegato in expert_abc_ws_cci.mq5.

2011.02.18
MQL5 Wizard: Crea EA per Segnali di Trading con 3 Corvi Neri/3 Soldati Bianchi e Stocastico
MetaTrader5
MQL5 Wizard: Crea EA per Segnali di Trading con 3 Corvi Neri/3 Soldati Bianchi e Stocastico

Il MQL5 Wizard è uno strumento prezioso che consente di creare Expert Advisor (EA) pronti all'uso basati sulle classi della libreria standard fornite con il terminale client (per approfondire, leggi Creazione di Expert Advisor in MQL5 Wizard). Questo strumento ti permette di verificare rapidamente le tue idee di trading, basta creare la tua classe di segnali di trading. La struttura di questa classe e un esempio possono essere trovati nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading. L'idea di base è la seguente: la classe dei segnali di trading deriva da CExpertSignal. È necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i propri metodi. Un interessante libro è "Strategie dei Migliori Trader" (in russo), dove vengono trattate molte strategie di trading. Qui ci concentreremo sui modelli di candela di inversione, confermati da Stocastico, CCI, MFI e RSI. Il modo migliore è creare una classe separata, derivata da CExpertSignal, per controllare la formazione dei modelli di candela. Per confermare i segnali di trading generati dai modelli di candela, è sufficiente scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, conferma tramite oscillatori). Qui considereremo i segnali basati sul modello di candela di inversione "3 Corvi Neri/3 Soldati Bianchi", confermato dall'indicatore Stocastico. Il modulo dei segnali di trading è basato sulla classe CCandlePattern, ecco un semplice esempio del suo utilizzo per la creazione di segnali di trading con i modelli di candela. 1. Modelli di candela di inversione: "3 Corvi Neri" e "3 Soldati Bianchi" 1.1. 3 Corvi Neri Un modello di candela ribassista utilizzato per prevedere l'inversione dell'attuale trend rialzista. Questo modello è composto da tre candele consecutive con corpo lungo che si sono chiuse al di sotto del giorno precedente, con ogni apertura che avviene all'interno del corpo della candela precedente. Figura 1. Modello di candela "3 Corvi Neri" Il riconoscimento del modello "3 Corvi Neri" è implementato nel metodo CheckPatternThreeBlackCrows della classe CCandlePattern: //+------------------------------------------------------------------+ //| Controlla la formazione del modello di candela "3 Corvi Neri" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() { //--- 3 Corvi Neri if((Open(3)-Close(3)>AvgBody(1)) && // (long black)       (Open(2)-Close(2)>AvgBody(1)) &&       (Open(1)-Close(1)>AvgBody(1)) &&       (MidPoint(2)<MidPoint(3))     && // (lower midpoints)       (MidPoint(1)<MidPoint(2)))         return(true); //---    return(false); } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) della classe CCandlePattern viene utilizzato per controllare la formazione del modello di candela "3 Corvi Neri". 1.2. 3 Soldati Bianchi Un modello di candela rialzista utilizzato per prevedere l'inversione dell'attuale trend ribassista. Questo modello è composto da tre candele consecutive con corpo lungo che si sono chiuse al di sopra del giorno precedente, con ogni apertura che avviene all'interno del corpo della candela precedente. Il modello è valido fintanto che la candela del giorno due apre nella metà superiore dell'intervallo del giorno uno. Alla fine del giorno due, dovrebbe chiudere vicino al suo massimo, lasciando un'ombra superiore molto piccola o inesistente. Lo stesso modello viene poi ripetuto nel giorno tre. Figura 2. Modello di candela "3 Soldati Bianchi" Ecco il metodo per il riconoscimento del modello "3 Soldati Bianchi": //+------------------------------------------------------------------+ //| Controlla la formazione del modello di candela "3 Soldati Bianchi" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers() { //--- 3 Soldati Bianchi if((Close(3)-Open(3)>AvgBody(1)) && // long white       (Close(2)-Open(2)>AvgBody(1)) &&       (Close(1)-Open(1)>AvgBody(1)) &&       (MidPoint(2)>MidPoint(3))     && // higher midpoints       (MidPoint(1)>MidPoint(2)))        return(true); //---    return(false); } Il metodo CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) della classe CCandlePattern viene utilizzato per controllare la formazione del modello di candela "3 Soldati Bianchi". 2. Segnali di Trading, Confermati dall'Indicatore Stocastico I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'oscillatore Stocastico. La linea %D deve essere maggiore/minore dei corrispondenti livelli critici (30 o 70). La chiusura delle posizioni aperte dipende dai valori dell'indicatore %D. Può avvenire in 2 casi: se la linea %D ha raggiunto il livello critico opposto (80 per posizione lunga e 20 per posizione corta) se il segnale inverso non è confermato (quando la linea %D raggiunge i seguenti livelli: 20 per posizione lunga e 80 per posizione corta) Fig. 3. Modello '3 Soldati Bianchi' confermato dall'indicatore stocastico Controllo delle condizioni di trading per ingresso e uscita è implementato in due metodi: int CBC_WS_Stoch::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e per chiudere la posizione corta (restituisce 40); int CBC_WS_Stoch::ShortCondition() - controlla le condizioni per aprire una posizione corta (restituisce 80) e per chiudere la posizione lunga (restituisce 40). 2.1. Apertura posizione lunga/Chiusura posizione corta La formazione del modello "3 Soldati Bianchi" deve essere confermata dall'oscillatore Stocastico: StochSignal(1)<30 (il valore della linea di segnale dell'indicatore stocastico dell'ultima barra completata deve essere inferiore a 30). La posizione corta deve essere chiusa se la linea di segnale dell'indicatore Stocastico ha superato i livelli 20 o 80 verso l'alto. //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato                  | //| 1) Entrata nel mercato (apertura posizione lunga, risultato=80)            | //| 2) Uscita dal mercato (chiusura posizione corta, risultato=40)           | //+------------------------------------------------------------------+ int CBC_WS_Stoch::LongCondition() { int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo a barre di notizie int idx   =StartIndex(); //--- controllo delle condizioni per aprire posizione lunga //--- formazione del modello 3 Soldati Bianchi e linea di segnale<30 if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (StochSignal(1)<30)) result=80; //--- verifica delle condizioni per chiudere la posizione corta //--- crossover della linea di segnale nei livelli di ipercomprato/ipervenduto (verso il basso 20, verso l'alto 80) if((((StochSignal(1)>20) && (StochSignal(2)<20)) || ((StochSignal(1)>80) && (StochSignal(2)<80)))) result=40; //--- restituisci il risultato return(result); } 2.2. Apertura posizione corta/Chiusura posizione lunga La formazione del modello "3 Corvi Neri" deve essere confermata dall'oscillatore Stocastico: StochSignal(1)>70 (il valore della linea di segnale dell'indicatore stocastico dell'ultima barra completata deve essere maggiore di 70). La posizione lunga deve essere chiusa se la linea di segnale dell'indicatore Stocastico ha incrociato verso il basso i livelli 80 o 20. //+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato                  | //| 1) Entrata nel mercato (apertura posizione corta, risultato=80)            | //| 2) Uscita dal mercato (chiusura posizione lunga, risultato=40)           | //+------------------------------------------------------------------+ int CBC_WS_Stoch::ShortCondition() { int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo a barre di notizie int idx   =StartIndex(); //--- controllo delle condizioni per aprire posizione corta //--- formazione del modello 3 Corvi Neri e linea di segnale>70 if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (StochSignal(1)>70)) result=80; //--- verifica delle condizioni per chiudere la posizione lunga //--- crossover della linea di segnale nei livelli di ipercomprato/ipervenduto (verso il basso 80, verso l'alto 20) if((((StochSignal(1)<80) && (StochSignal(2)>80)) || ((StochSignal(1)<20) && (StochSignal(2)>20)))) result=40; //--- restituisci il risultato return(result); } 2.3. Creazione dell'Expert Advisor utilizzando MQL5 Wizard La classe CBC_WS_Stoch non è inclusa nelle classi della Libreria Standard, per utilizzarla, è necessario scaricare il file acbc_ws_stoch.mqh (vedi allegati) e salvarlo nella cartella terminal_client_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto con il file candlepatterns.mqh. Puoi utilizzarlo in MQL5 Wizard dopo il riavvio di MetaEditor. Per creare un Expert Advisor, avvia il MQL5 Wizard: Figura 4. Creazione dell'Expert Advisor utilizzando MQL5 Wizard Specifica il nome dell'Expert Advisor: Figura 5. Proprietà generali dell'Expert Advisor Dopo di che, dobbiamo selezionare i moduli di segnali di trading utilizzati. Figura 6. Proprietà del segnale dell'Expert Advisor Nel nostro caso utilizziamo solo un modulo di segnali di trading. Aggiunta del modulo di segnali Basato su 3 Corvi Neri/3 Soldati Bianchi confermati da Stocastico: Figura 7. Proprietà del segnale dell'Expert Advisor Modulo dei segnali di trading aggiunto: Figura 8. Proprietà del segnale dell'Expert Advisor Puoi selezionare qualsiasi proprietà di trailing, ma utilizzeremo

2011.02.16
Primo Precedente 56 57 58 59 60 61 62 63 64 Successivo Ultimo