English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
MQL5 Wizard: Creazione di Expert Advisor senza Programmazione

MQL5 Wizard: Creazione di Expert Advisor senza Programmazione

MetaTrader 5Sistemi di trading | 16 dicembre 2021, 11:22
1 040 0
MetaQuotes
MetaQuotes

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):

Figura 1. Avvio di MQL5 Wizard

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)":

Figura 2. Selezione del Tipo di Programma

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:

Figura 3. 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:

  1. CSignalAC - Il modulo di segnali basato su modelli di mercato dell'indicatore Accelerator Oscillator.
  2. CSignalAMA - Il modulo di segnali basato su modelli di mercato dell'indicatore Adaptive Moving Average.
  3. CSignalAO - Il modulo di segnali basato su modelli di mercato dell'indicatore Awesome Oscillator.
  4. CSignalBearsPower - Il modulo di segnali basato su modelli di mercato dell'oscillatore Bears Power.
  5. CSignalBullsPower - Il modulo di segnali basato su modelli di mercato dell'oscillatore Bulls Power.
  6. CSignalCCI - Il modulo di segnali basato su modelli di mercato dell'oscillatore Commodity Channel Index.
  7. CSignalDeM - Il modulo di segnali basato su modelli di mercato dell'oscillatore DeMarker.
  8. CSignalDEMA - Il modulo di segnali basato su modelli di mercato dell'indicatore Double Exponential Moving Average.
  9. CSignalEnvelopes - Il modulo di segnali basato su modelli di mercato dell'indicatore Envelopes.
  10. CSignalFrAMA - Il modulo di segnali basato su modelli di mercato dell'indicatore Media Mobile Adattiva Frattale.
  11. CSignalITF - Il modulo di filtrazione dei segnali per tempo.
  12. CSignalMACD - Il modulo di segnali basato su modelli di mercato dell'oscillatore MACD.
  13. CSignalMA - Il modulo di segnali basato su modelli di mercato dell'indicatore Media Mobile.
  14. CSignalSAR - Il modulo di segnali basato su modelli di mercato dell'indicatore SAR parabolico.
  15. CSignalRSI - Il modulo di segnali basato su modelli di mercato dell'oscillatore Relative Strength Index.
  16. CSignalRVI - Il modulo di segnali basato su modelli di mercato dell'oscillatore Relative Vigor Index.
  17. CSignalStoch - Il modulo di segnali basato su modelli di mercato dell'oscillatore Stochastic.
  18. CSignalTRIX - Il modulo di segnali basato su modelli di mercato dell'oscillatore Triple Exponential Average.
  19. CSignalTEMA - Il modulo di segnali basato su modelli di mercato dell'indicatore Triple Exponential Moving Average.
  20. 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

    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

    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. Il Modulo dei segnali di trading è stato aggiunto

    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:

    1. CTrailingNone - Trailing Stop non viene utilizzato.
    2. CTrailingFixedPips - Trailing Stop basato sul Stop Level.
    3. CTrailingMA - Trailing Stop basato su MA.
    4. CTrailingPSAR - Trailing Stop basato su Parabolic SAR.  

    Nel nostro Expert Advisor selezionare "Trailing Stop in base allo Stop Level":

    Figura 6. Selezionare l'Algoritmo di Trailing delle Posizioni Open

    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:

    Figura 7. Impostazione dei Parametri dell'Algoritmo Selezionato delle Posizioni di Apertura di Trailing

    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:

    1. CMoneyFixedLot - Trading con volume fisso di trade.
    2. CMoneyFixedMargin - Trading con margine fisso.
    3. CMoneyFixedRisk - Trading a rischio fisso.
    4. CMoneyNone - Trading con un volume di trade minimo consentito.
    5. CMoneySizeOptimized - Trading con volume di trade ottimizzato.

    Figura 8. Seleziona l'Algoritmo di Gestione del Denaro e del Rischio

    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.

    Figura 9. Impostazione dei Parametri dell'Algoritmo Selezionato di Gestione del Denaro e del 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

    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 del Test di Expert Advisor su Dati Storici (EURUSD, H1)

    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

    File allegati |
    testexpert.mq5 (7.49 KB)
    Il Semplice Esempio di Creazione di un Indicatore Utilizzando la Logica Fuzzy Il Semplice Esempio di Creazione di un Indicatore Utilizzando la Logica Fuzzy
    L'articolo è dedicato all'applicazione pratica del concetto di logica fuzzy per l'analisi dei mercati finanziari. Proponiamo l'esempio dell'indicatore che genera segnali basati su due regole fuzzy basate sull'indicatore Envelopes. L'indicatore sviluppato utilizza diversi buffer di indicatori: 7 buffer per i calcoli, 5 buffer per la visualizzazione dei grafici e 2 buffer colore.
    Growing Neural Gas: Implementazione in MQL5 Growing Neural Gas: Implementazione in MQL5
    L'articolo mostra un esempio di come sviluppare un programma MQL5 che implementa l'algoritmo adattivo di clustering chiamato Growing neural gas (GNG). L'articolo è destinato agli utenti che hanno studiato la documentazione linguistica e hanno determinate capacità di programmazione e conoscenze di base nell'area della neuro informatica.
    Crea il tuo Market Watch usando le Classi Standard della Libreria Crea il tuo Market Watch usando le Classi Standard della Libreria
    Il nuovo terminale client MetaTrader 5 e il linguaggio MQL5 offrono nuove opportunità per presentare informazioni visive al trader. In questo articolo, proponiamo un insieme di classi universale ed estensibile, che gestisce tutto il lavoro di organizzazione della visualizzazione delle informazioni di testo arbitrarie sul grafico. Viene presentato l'esempio dell'indicatore Market Watch.
    L'Handler dell'Evento "Nuova Barra" L'Handler dell'Evento "Nuova Barra"
    Il linguaggio di programmazione MQL5 è in grado di risolvere i problemi a un livello completamente nuovo. Anche quei compiti, che hanno già tali soluzioni, grazie alla programmazione orientata agli oggetti possono salire ad un livello superiore. In questo articolo prendiamo un esempio particolarmente semplice di controllo della nuova barra su un grafico, che è stato trasformato in uno strumento piuttosto potente e versatile. Quale strumento? Scoprilo in questo articolo.