
MQL5 Wizard: Creazione di Expert Advisor senza Programmazione
Introduzione
Quando crei sistemi di trading automatizzati è necessario scrivere algoritmi di analisi della situazione di mercato e generazione di segnali di trading, algoritmi di trailing delle tue posizioni aperte, nonché sistemi di gestione del denaro e gestione del rischio.
Una volta scritto il codice dei moduli, il compito più difficile è assemblare tutte le parti ed eseguire il debug del codice sorgente del robot di trading. Qui il ruolo chiave è giocato dall'architettura dell'interazione dei moduli: se è costruita male, la maggior parte del tempo sarà spesa per trovare e correggere gli errori, e se si sostituisce l'algoritmo di qualsiasi modulo porterà a riscrivere l'intero codice sorgente.
In MQL5 l'utilizzo dell'approccio orientato agli oggetti facilita significativamente la scrittura e il test dei sistemi di trading automatizzati.
MetaQuotes Software Corp. ha sviluppato classi per implementare strategie di trading. Ora puoi generare automaticamente il codice degli Expert Advisor direttamente in MetaEditor selezionando i moduli Trade Signals richiesti (attualmente ce ne sono 20), Trailing (4) e Money Management (5). Combinando questi moduli è possibile ottenere molte varianti di sistemi di trading pronti all'uso.
È inoltre possibile utilizzare le proprie classi con l'implementazione di uno qualsiasi di questi moduli. Creali da solo o ordinali tramite il servizio Jobs.
In questo articolo considereremo la generazione automatica del codice sorgente di Expert Advisor utilizzando MQL5 Wizard. E non ci sarà nulla da programmare!
1. Creazione di Robot di Trading Utilizzando Wizard MQL5
Il codice sorgente di Expert Advisor viene generato utilizzando MQL5 Wizard in MetaEditor.
Le classi di base delle strategie di trading si trovano nella cartella '\<client_terminal_directory>\MQL5\Include\Expert\'. Gli algoritmi pronti all'uso delle classi di segnali di trading, le classi di posizioni aperte trailing e le classi di gestione del denaro e del rischio si trovano nelle sottocartelle Signal, Trailing e Money. MQL5 Wizard analizza i file in queste cartelle e li utilizza per generare il codice di Expert Advisor.
Per avviare MQL5 Wizard è necessario fare clic sul pulsante "Nuovo" sulla barra degli strumenti o selezionare "Nuovo" dal menu "File" (o semplicemente premere Ctrl + N):
Fig. 1. Avvio di MQL5 Wizard
Quindi selezionare il tipo di programma che si desidera creare. Nel nostro caso selezionare l'opzione "Expert Advisor (genera)":
Fig. 2. Selezione del Tipo di Programma
Fase 1. Proprietà Generali di Expert Advisor
Successivamente viene visualizzata la finestra di dialogo, in cui è possibile impostare le proprietà generali di Expert Advisor:
Fig. 3. Proprietà Generali di Expert Advisor
Specificate il nome del vostro Expert Advisor, il nome dell'autore e il link al vostro sito web nei campi "Nome", "Autore" e "Link" (rispettivamente).
Expert Advisor ha anche i seguenti parametri di input:
- Simbolo (il tipo di stringa) - Simbolo di lavoro per Expert Advisor.
- Intervallo di tempo (il tipo di intervallo di tempo) - Periodo di tempo di lavoro per Expert Advisor..
Nel passaggio successivo seleziona il tipo di segnali commerciali, su cui l'esperto farà trading.
Fase 2. Seleziona il Modulo dei Segnali di Trading
L'algoritmo di apertura e chiusura delle posizioni è determinato dal modulo dei segnali di trading. I moduli dei segnali di trading contengono regole di apertura/chiusura/inversione delle posizioni.
La libreria standard ha Moduli pronti all’uso segnali di trading:
- CSignalAC - Il modulo di segnali basato su modelli di mercato dell'indicatore Accelerator Oscillator.
- CSignalAMA - Il modulo di segnali basato su modelli di mercato dell'indicatore Adaptive Moving Average.
- CSignalAO - Il modulo di segnali basato su modelli di mercato dell'indicatore Awesome Oscillator.
- CSignalBearsPower - Il modulo di segnali basato su modelli di mercato dell'oscillatore Bears Power.
- CSignalBullsPower - Il modulo di segnali basato su modelli di mercato dell'oscillatore Bulls Power.
- CSignalCCI - Il modulo di segnali basato su modelli di mercato dell'oscillatore Commodity Channel Index.
- CSignalDeM - Il modulo di segnali basato su modelli di mercato dell'oscillatore DeMarker.
- CSignalDEMA - Il modulo di segnali basato su modelli di mercato dell'indicatore Double Exponential Moving Average.
- CSignalEnvelopes - Il modulo di segnali basato su modelli di mercato dell'indicatore Envelopes.
- CSignalFrAMA - Il modulo di segnali basato su modelli di mercato dell'indicatore Media Mobile Adattiva Frattale.
- CSignalITF - Il modulo di filtrazione dei segnali per tempo.
- CSignalMACD - Il modulo di segnali basato su modelli di mercato dell'oscillatore MACD.
- CSignalMA - Il modulo di segnali basato su modelli di mercato dell'indicatore Media Mobile.
- CSignalSAR - Il modulo di segnali basato su modelli di mercato dell'indicatore SAR parabolico.
- CSignalRSI - Il modulo di segnali basato su modelli di mercato dell'oscillatore Relative Strength Index.
- CSignalRVI - Il modulo di segnali basato su modelli di mercato dell'oscillatore Relative Vigor Index.
- CSignalStoch - Il modulo di segnali basato su modelli di mercato dell'oscillatore Stochastic.
- CSignalTRIX - Il modulo di segnali basato su modelli di mercato dell'oscillatore Triple Exponential Average.
- CSignalTEMA - Il modulo di segnali basato su modelli di mercato dell'indicatore Triple Exponential Moving Average.
- CSignalWPR - Il modulo di segnali basato su modelli di mercato dell'oscillatore Williams Percent Range.
Il tipo di segnali commerciali è selezionato dall'elenco a discesa "Nome".
Dopo aver premuto il pulsante Avanti, vedrai una finestra:
Fig. 4. Selezione dei segnali di trading di Expert Advisor
Per aggiungere un modulo di segnali di trading, premere il pulsante "Aggiungi".
Aggiungiamo segnali di trading, basati su indicatore della Media Mobile.
Fig. 5. Seleziona l'Algoritmo dei Segnali di Trading
Ogni modulo di segnali di trading ha i suoi parametri. È possibile utilizzare i valori predefiniti.
Ci sono due modalità di creazione dei parametri. È possibile passare da uno all'altro facendo doppio clic con il pulsante sinistro del mouse sull'icona del parametro. Se il parametro ha l'icona evidenziata , allora sarà disponibile come variabile di input di Expert Advisor. Tali parametri possono inoltre essere utilizzati per l'ottimizzazione esperta in Strategy Tester. Se il parametro ha l'icona grigia
, allora avrà il valore fisso che non è possibile modificare dalle proprietà di Expert Advisor.
Il modulo dei segnali di trading apparirà nell'elenco:
Fig. 6. È stato aggiunto il modulo dei segnali di trading
Fase 3. Seleziona il Modulo delle Posizioni Aperte Trailing
Il passo successivo è selezionare l'algoritmo delle posizioni aperte di trailing (Trailing Stop). L'utilizzo del trailing ti consente di risparmiare il profitto guadagnato.
La Libreria Standard fornisce diversi modi per seguire le posizioni aperte:
- CTrailingNone - Trailing Stop non viene utilizzato.
- CTrailingFixedPips - Trailing Stop basato sul Stop Level.
- CTrailingMA - Trailing Stop basato su MA.
- CTrailingPSAR - Trailing Stop basato su Parabolic SAR.
Nel nostro Expert Advisor selezionare "Trailing Stop in base allo Stop Level":
Fig. 7. Seleziona l'Algoritmo delle Posizioni Aperte Trailing
Questo tipo di trailing ha due parametri: StopLevel e ProfitLevel (in punti per le quotazioni con 2 e 4 cifre dopo la virgola), che verranno utilizzati per seguire le posizioni aperte:
Fig. 9. Impostazione dei Parametri dell'Algoritmo Selezionato delle Posizioni Aperte Trailing
Fase 4. Seleziona il Modulo di Gestione del Denaro e del Rischio
Nell'ultimo passaggio è necessario selezionare il sistema di gestione del denaro e del rischio, che verrà utilizzato nel proprio Expert Advisor.
Lo scopo di questo algoritmo è determinare il volume degli scambi (in lotti) per le operazioni di trading e anche la gestione del rischio. Quando il valore della perdita supera il limite consentito (ad esempio, il 10% del capitale), il modulo di gestione del denaro e del rischio chiuderà forzatamente la posizione non redditizia.
La Libreria Standard fornisce diverse implementazioni pronte all'uso di algoritmi di gestione del denaro e del rischio:
- CMoneyFixedLot - Trading con volume fisso di trade.
- CMoneyFixedMargin - Trading con margine fisso.
- CMoneyFixedRisk - Trading a rischio fisso.
- CMoneyNone - Trading con un volume di trade minimo consentito.
- CMoneySizeOptimized - Trading con volume di trade ottimizzato.
Fig. 9. Seleziona l'Algoritmo di Gestione del Denaro e del Rischio
Seleziona l'algoritmo ‘Trading con volume di trade fisso’.
Il modulo che abbiamo selezionato ha due parametri:
- Lotti - volume di trading in lotti.
- Percentuale - percentuale massima consentita di rischio.
Fig. 10. Impostazione dei Parametri dell'Algoritmo Selezionato di Gestione del Denaro e del Rischio
Dopo aver fatto clic su "Fine", il file TestExpert.mq5 apparirà nella cartella \teminal_data_filder\MQL5\Experts\. Il nome del file corrisponde al nome specificato di Expert Advisor.
2. La Struttura di Expert Advisor Creata Utilizzando MQL5 Wizard.
Il codice sorgente di Expert Advisor, generato dalla procedura guidata MQL5, ha il seguente aspetto:
//+------------------------------------------------------------------+ //| TestExpert.mq5 | //| Copyright 2012, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Include | //+------------------------------------------------------------------+ #include <Expert\Expert.mqh> //--- available signals #include <Expert\Signal\SignalMA.mqh> //--- available trailing #include <Expert\Trailing\TrailingFixedPips.mqh> //--- available money management #include <Expert\Money\MoneyFixedLot.mqh> //+------------------------------------------------------------------+ //| Inputs | //+------------------------------------------------------------------+ //--- inputs for expert input string Expert_Title ="TestExpert"; // Document name ulong Expert_MagicNumber =23689; // bool Expert_EveryTick =false; // //--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in points) input double Signal_TakeLevel =50.0; // Take Profit level (in points) input int Signal_Expiration =4; // Expiration of pending orders (in bars) input int Signal_MA_PeriodMA =85; // Moving Average(85,0,...) Period of averaging input int Signal_MA_Shift =0; // Moving Average(85,0,...) Time shift input ENUM_MA_METHOD Signal_MA_Method =MODE_SMA; // Moving Average(85,0,...) Method of averaging input ENUM_APPLIED_PRICE Signal_MA_Applied =PRICE_CLOSE; // Moving Average(85,0,...) Prices series input double Signal_MA_Weight =1.0; // Moving Average(85,0,...) Weight [0...1.0] //--- inputs for trailing input int Trailing_FixedPips_StopLevel =30; // Stop Loss trailing level (in points) input int Trailing_FixedPips_ProfitLevel=50; // Take Profit trailing level (in points) //--- inputs for money input double Money_FixLot_Percent =10.0; // Percent input double Money_FixLot_Lots =0.1; // Fixed volume //+------------------------------------------------------------------+ //| Global expert object | //+------------------------------------------------------------------+ CExpert ExtExpert; //+------------------------------------------------------------------+ //| Initialization function of the expert | //+------------------------------------------------------------------+ int OnInit() { //--- Initializing expert if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); } //--- Creating signal CExpertSignal *signal=new CExpertSignal; if(signal==NULL) { //--- failed printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(-2); } //--- ExtExpert.InitSignal(signal); signal.ThresholdOpen(Signal_ThresholdOpen); signal.ThresholdClose(Signal_ThresholdClose); signal.PriceLevel(Signal_PriceLevel); signal.StopLevel(Signal_StopLevel); signal.TakeLevel(Signal_TakeLevel); signal.Expiration(Signal_Expiration); //--- Creating filter CSignalMA CSignalMA *filter0=new CSignalMA; if(filter0==NULL) { //--- failed printf(__FUNCTION__+": error creating filter0"); ExtExpert.Deinit(); return(-3); } signal.AddFilter(filter0); //--- Set filter parameters filter0.PeriodMA(Signal_MA_PeriodMA); filter0.Shift(Signal_MA_Shift); filter0.Method(Signal_MA_Method); filter0.Applied(Signal_MA_Applied); filter0.Weight(Signal_MA_Weight); //--- Creation of trailing object CTrailingFixedPips *trailing=new CTrailingFixedPips; if(trailing==NULL) { //--- failed printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(-4); } //--- Add trailing to expert (will be deleted automatically)) if(!ExtExpert.InitTrailing(trailing)) { //--- failed printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(-5); } //--- Set trailing parameters trailing.StopLevel(Trailing_FixedPips_StopLevel); trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel); //--- Creation of money object CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- failed printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(-6); } //--- Add money to expert (will be deleted automatically)) if(!ExtExpert.InitMoney(money)) { //--- failed printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(-7); } //--- Set money parameters money.Percent(Money_FixLot_Percent); money.Lots(Money_FixLot_Lots); //--- Check all trading objects parameters if(!ExtExpert.ValidationSettings()) { //--- failed ExtExpert.Deinit(); return(-8); } //--- Tuning of all necessary indicators if(!ExtExpert.InitIndicators()) { //--- failed printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(-9); } //--- ok return(0); } //+------------------------------------------------------------------+ //| Deinitialization function of the expert | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ExtExpert.Deinit(); } //+------------------------------------------------------------------+ //| "Tick" event handler function | //+------------------------------------------------------------------+ void OnTick() { ExtExpert.OnTick(); } //+------------------------------------------------------------------+ //| "Trade" event handler function | //+------------------------------------------------------------------+ void OnTrade() { ExtExpert.OnTrade(); } //+------------------------------------------------------------------+ //| "Timer" event handler function | //+------------------------------------------------------------------+ void OnTimer() { ExtExpert.OnTimer(); } //+------------------------------------------------------------------+
Il codice di Expert Advisor è costituito da diverse sezioni.
Sezione che descrive le proprietà del programma:
#property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00"
File inclusi:
#include <Expert\Expert.mqh> //--- available signals #include <Expert\Signal\SignalMA.mqh> //--- available trailing #include <Expert\Trailing\TrailingFixedPips.mqh> //--- available money management #include <Expert\Money\MoneyFixedLot.mqh>
Il codice della classe CExpert (la relativa istanza viene utilizzata in Expert Advisor) si trova nel file Expert.mqh.
Il file SignalMA.mqh contiene il codice sorgente della classe di segnali di trading selezionata - CSignalMA. Il file TrailingFixedPips.mqh contiene il codice sorgente della classe dell'algoritmo delle posizioni aperte finale - CTrailingFixedPips. La gestione del denaro e del rischio sarà implementata dalla classe CMoneyFixedLot contenuta nel file MoneyFixedLot.mqh.
Seguono i parametri di input di Expert Advisor:
//--- inputs for expert input string Expert_Title ="TestExpert"; // Document name ulong Expert_MagicNumber =23689; // bool Expert_EveryTick =false; // //--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in points) input double Signal_TakeLevel =50.0; // Take Profit level (in points) input int Signal_Expiration =4; // Expiration of pending orders (in bars) input int Signal_MA_PeriodMA =85; // Moving Average(85,0,...) Period of averaging input int Signal_MA_Shift =0; // Moving Average(85,0,...) Time shift input ENUM_MA_METHOD Signal_MA_Method =MODE_SMA; // Moving Average(85,0,...) Method of averaging input ENUM_APPLIED_PRICE Signal_MA_Applied =PRICE_CLOSE; // Moving Average(85,0,...) Prices series input double Signal_MA_Weight =1.0; // Moving Average(85,0,...) Weight [0...1.0] //--- inputs for trailing input int Trailing_FixedPips_StopLevel =30; // Stop Loss trailing level (in points) input int Trailing_FixedPips_ProfitLevel=50; // Take Profit trailing level (in points) //--- inputs for money input double Money_FixLot_Percent =10.0; // Percent input double Money_FixLot_Lots =0.1; // Fixed volume
I primi tre parametri (Expert_Title, Expert_MagicNumber e Expert_EveryTick) sono generali. Sono sempre presenti indipendentemente dai segnali di trading selezionati, dal trailing, e dagli algoritmi di gestione del denaro e del rischio.
Il parametro stringa Expert_Title specifica il nome di Expert Advisor, Expert_MagicNumber ne specifica l'ID (questo valore verrà utilizzato nei parametri delle richieste commerciali) e il parametro Expert_EveryTick viene utilizzato per impostare la modalità di lavoro di EA. Se Expert_EveryTick è impostato su true, l’Expert Advisor chiamerà le funzioni dell’handler (controllo delle condizioni di trading, commit delle operazioni di trading, posizione aperta trailing) ogni volta che arriva un nuovo tick per il simbolo di lavoro.
Dopo i parametri generali dell’Expert Advisor arrivano i parametri di input per l'algoritmo dei segnali di trading selezionati (nel nostro caso sono i parametri utilizzati nella classe CSignalMA).
Abbiamo selezionato la classe CTrailingStopFixedPips di posizioni aperte trailing. Traccia la posizione aperta a distanza fissa determinata dai livelli di Stop Loss e Take Profit, i cui valori sono definiti in punti "normali" a 2/4 cifre. Quando il prezzo si muove verso la posizione aperta per distanza, che supera il numero di punti fissato dal livello Trailing_FixedPips_StopLevel, Expert Advisor modifica i valori dei livelli stop loss e take profit (se Trailing_FixedPips_ProfitLevel > 0).
I parametri di input Money_FixLot_Percent e Money_FixLot_Lots corrispondono ai parametri dell'algoritmo con lotto di trading fisso, implementato nella classe CMoneyFixedLot. Nel nostro caso il trade verrà eseguito con volume fisso pari al valore di Money_FixLot_Lots.
La classe CMoneyFixedLot implementa anche l'algoritmo di gestione del rischio: se c'è una perdita (come una data percentuale del patrimonio netto corrente) specificata nel parametro Inp_Money_FixLot_Percent, la classe CMoneyFixedLot consiglierà all'Expert Advisor di chiudere forzatamente la posizione non redditizia, e così sarà fatto.
Dopo i parametri di input di Expert Advisor viene dichiarato l'oggetto ExtExpert della classe CExpert:
CExpert ExtExpert;
Questa è l'istanza della classe di strategia di trading.
Essendo un'istanza della classe CExpert, l'oggetto ExtExpert contiene riferimenti a oggetti figlio delle classi CExpertSignal (la classe base dei segnali di trading), CExpertMoney (la classe base di gestione del denaro e del rischio) e CExpertTrailing (la classe base delle posizioni aperte trailing). Inoltre, la classe CExpert contiene istanze delle classi CExpertTrade, SSymbolInfo,CAccountInfo, CPositionInfo, COrderInfo e del container CIndicators.
Per impostare i parametri di Expert Advisor è necessario creare istanze delle classi corrispondenti e specificare i riferimenti agli oggetti creati nella classe ExtExpert.
Consideriamo la funzione OnInit dell'inizializzazione di Expert Advisor. Qui inizializziamo e configuriamo le proprietà della classe ExtExpert.
1. Inizializzazione della classe ExtExpert:
//--- Initializing expert if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); }
L'oggetto ExtExpert viene inizializzato utilizzando il metodo Init. Qui impostiamo il simbolo, l'intervallo di tempo, la bandiera del metodo che chiama ogni tick, l'ID di Expert Advisor e creiamo e inizializziamo anche oggetti privati di classi (in questa fase le classi CExpertSignal, CExpertMoney e CExpertTrailing vengono utilizzate come segnali, trailing e oggetti di gestione del denaro).
Se l'oggetto ExtExpert non viene inizializzato correttamente, Expert Advisor verrà terminato con il codice restituito -1.
2. Creare e configurare le proprietà dell'oggetto Signal
//--- Creating signal CExpertSignal *signal=new CExpertSignal; if(signal==NULL) { //--- failed printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(-2); } //--- ExtExpert.InitSignal(signal); signal.ThresholdOpen(Signal_ThresholdOpen); signal.ThresholdClose(Signal_ThresholdClose); signal.PriceLevel(Signal_PriceLevel); signal.StopLevel(Signal_StopLevel); signal.TakeLevel(Signal_TakeLevel); signal.Expiration(Signal_Expiration); //--- Creating filter CSignalMA CSignalMA *filter0=new CSignalMA; if(filter0==NULL) { //--- failed printf(__FUNCTION__+": error creating filter0"); ExtExpert.Deinit(); return(-3); } signal.AddFilter(filter0); //--- Set filter parameters filter0.PeriodMA(Signal_MA_PeriodMA); filter0.Shift(Signal_MA_Shift); filter0.Method(Signal_MA_Method); filter0.Applied(Signal_MA_Applied); filter0.Weight(Signal_MA_Weight);
La configurazione dell'oggetto dei segnali commerciali consiste in diversi passaggi:
- Creazione dell'oggetto segnale e impostazione dei suoi parametri;
- Creazione del modulo di segnali di trading e la sua aggiunta all'istanza della classe CExpertSignal.
Se l'oggetto ExtExpert non viene inizializzato correttamente, Expert Advisor verrà terminato con il codice restituito (da -2 a -3), che dipende dal passaggio in cui si è verificato un errore.
A seconda di come i parametri sono stati specificati nella procedura guidata MQL5, viene generato il codice appropriato.
//--- Set signal parameters filter0.PeriodMA(85); //--- Parameter was set as fixed in MQL5 Wizard //--- (gray icon - fixed value equal to 85) filter0.SlowPeriod(Signal_MA_Shift); //--- Parameter was set as input variable //--- (blue icon - input parameter of Expert Advisor)
Se il parametro è fisso e il suo valore non differisce dal valore predefinito, non verrà scritto nel codice generato. In tal caso verrà utilizzato il valore predefinito del parametro (specificato nella classe corrispondente).
3. Creare e configurare le proprietà dell'oggetto Trailing
//--- Creation of trailing object CTrailingFixedPips *trailing=new CTrailingFixedPips; if(trailing==NULL) { //--- failed printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(-4); } //--- Add trailing to expert (will be deleted automatically)) if(!ExtExpert.InitTrailing(trailing)) { //--- failed printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(-5); } //--- Set trailing parameters trailing.StopLevel(Trailing_FixedPips_StopLevel); trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);La configurazione dell'oggetto trailing consiste anche in diversi passaggi:
- Creazione di oggetti trailing;
- Aggiunta di trailing all'esperto;
- Impostazione dei parametri trailing.
Se l'oggetto finale non viene inizializzato correttamente, l’Expert Advisor verrà terminato con il codice restituito (da -4 a -5), che dipende dal passaggio in cui si è verificato un errore.
4. Creare e configurare le proprietà dell'oggetto denaro
//--- Creation of money object CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- failed printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(-6); } //--- Add money to expert (will be deleted automatically)) if(!ExtExpert.InitMoney(money)) { //--- failed printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(-7); } //--- Set money parameters money.Percent(Money_FixLot_Percent); money.Lots(Money_FixLot_Lots);
La configurazione dell'oggetto di gestione del denaro e del rischio consiste anche in 4 passaggi:
- Creazione di oggetti monetari;
- Aggiungere denaro all'expert;
- Impostazione dei parametri di denaro.
Se l'oggetto denaro non viene inizializzato correttamente, Expert Advisor verrà terminato con il codice di ritorno (da -6 a -7), che dipende dal passaggio in cui si è verificato un errore.
5. Inizializzare tutti gli indicatori utilizzati nelle classi
//--- Check all trading objects parameters if(!ExtExpert.ValidationSettings()) { //--- failed ExtExpert.Deinit(); return(-8); } //--- Tuning of all necessary indicators if(!ExtExpert.InitIndicators()) { //--- failed printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(-9); } //--- ok return(0);
Dopo aver creato e inizializzato oggetti di segnali di trading, trailing e gestione del denaro, viene chiamato il metodo ValidationSettings() di ExtExpert. Successivamente viene chiamato il metodo InitIndicators() dell'oggetto ExtExpert. Inizializza gli indicatori utilizzati negli oggetti di segnale, trailing e denaro.
La gestione degli eventi OnDeinit, OnTick, OnTrade e OnTimer viene eseguita chiamando i metodi appropriati della classe ExtExpert.
Se si desidera conoscere i dettagli dell'implementazione dei metodi CExpert, è possibile visualizzare il codice sorgente dell'indicatore, che si trova in '\<client_terminal_directory>\MQL5\Include\Expert\expert.mqh'.
3. Controllo di Expert Advisor creato in MetaTrader 5 Strategy Tester
Se sono presenti tutti i componenti della Libreria Standard, il codice di Expert Advisor generato viene compilato correttamente:
Figura 10. Compilazione Riuscita del Codice Sorgente di Expert Advisor Creato in MQL5 Wizard
L'Expert Advisor risultante negozierà secondo algoritmi selezionati di segnali di trading,posizioni aperte trailing e gestione del denaro e del rischio.
Puoi controllare come funziona il tuo sistema di trading appena creato utilizzando Strategy Tester dal client terminal https://www.metatrader5.com/en/trading-platform. Nella figura 11 è possibile vedere i risultati dei test sui dati storici con impostazioni predefinite (EURUSD, H1, 2010.01.01-2011.06.01):
Figura 11. Risultati dei Test di Expert Advisor sui Dati Storici (EURUSD, H1)
Il miglior set di parametri di Expert Advisor può essere trovato dopo ottimizzazione in MetaTrader 5 Strategy Tester.
Conclusione
L'utilizzo delle classi di strategie di trading facilita in modo significativo la creazione e il test delle tue idee di trading. Ora, l'intero codice sorgente dell’Expert Advisor può essere costruito direttamente in MetaEditor utilizzando il MQL5 Wizard sulla base di moduli librerie standard pronte all'uso o dei propri moduli.
Se non vuoi o non puoi scrivere il tuo modulo di segnali di trading, puoi sempre beneficiare del servizio Jobs e ordinare l'intero robot di trading o solo i moduli richiesti. Questo approccio offre ulteriori vantaggi:
- Il costo di sviluppo del modulo separato dovrebbe essere inferiore al costo dell'intero Expert Advisor.
- Il modulo risultante può essere riutilizzato per creare sia un Expert Advisor autonomo che un'intera famiglia di robot di trading (basati su questo modulo) utilizzando la procedura guidata MQL5.
- Il modulo ordinato deve essere rigorosamente conforme ai requisiti aggiuntivi di MQL5 Wizard e questo fornisce un ulteriore controllo sulla qualità del codice.
Tradotto dal russo da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/ru/articles/171





- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso