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.
Post correlati
- Dematus: Il Sistema di Trading per MetaTrader 5
- MQL5 Wizard: Creare Trading Signals con Morning/Evening Stars e MFI per MetaTrader 5
- Utilizzare MQL5 Wizard per generare segnali di trading: Hammer e Hanging Man con CCI
- Guida all'Utilizzo del MQL5 Wizard: Trading con Pattern di Candele e Indice CCI
- MQL5 Wizard: Strategia di Trading con Dark Cloud Cover/Piercing Line e RSI