Discussione sull’articolo "Sistemi di Trading Semplici che Utilizzano Indicatori Semaforici"

 

Il nuovo articolo Sistemi di Trading Semplici che Utilizzano Indicatori Semaforici è stato pubblicato:

Se esaminiamo nel dettaglio qualsiasi sistema di trading complesso, vedremo che si basa su una serie di semplici segnali di trading. Pertanto, non è necessario che gli sviluppatori alle prime armi inizino immediatamente a scrivere algoritmi complessi. Questo articolo fornisce un esempio di un sistema di trading che utilizza indicatori semaforici per eseguire operazioni.

Gli indicatori semaforici o di segnali sono semplici rilevatori che indicano i momenti di entrata o di uscita dal mercato. Nel caso in cui vi sia un segnale di entrata sulla barra corrente, un'etichetta appropriata viene visualizzata su un grafico a simboli. Questa etichetta può, quindi, essere utilizzata come condizione per l'esecuzione di un’operazione.

Ci sono molti indicatori di questo tipo, ma l'essenza stessa del sistema di trading originale basato su tali indicatori non è cambiata affatto. Pertanto, è una buona idea implementarlo nella forma più semplice e universale. Ciò consentirà un ulteriore utilizzo del risultato ottenuto quando si lavora con indicatori simili senza notevoli alterazioni.

Fig.1. Indicatore di segnale semaforico ASCtrend

Autore: Nikolay Kositsin

 
L'articolo è molto chiaro.
Una piccola osservazione: c'è un errore meccanico nel frammento di codice riportato nell'esempio, che è stato copiato:
//---- Dichiarare le variabili locali
   double TrendVelue[2];
 

Ho compilato alcuni segnali e riavvio, come "Candles_SmoothedSignal.mqh" (..MQL5\Include\Expert\MySignals\Candles_SmoothedSignal.mqh), ma MetaEditor non riesce a vederlo per creare un Expert Advisor nella procedura guidata.

Come posso risolvere il problema?

 

Grazie per questa eccellente ed esauriente spiegazione...!


daveM

 

Ho scaricato e scompattato tutto come indicato nelle istruzioni, ma il tester dà un errore su tutti i sistemi:

il tester si è fermato perché OnInit non è riuscito

CExpert::ValidationSettings: errore parametri denaro

CMoneyFixedLot::ValidationSettings: l'importo del lotto deve essere compreso tra 1,000000 e 1000000,000000.

Per favore, ditemi cosa modificare.

 

Salve!

Sto cercando di aggiungere il modulo del segnale di trading ASCtrendSignal (che si trova nel file compresso mysignals.zip) creato sulla base dell'indicatore ASCtrend (che si trova nel file compresso indicators.zip) al Wizard MQL5, ma non funziona nulla. Posiziono il modulo del segnale di trading ASCtrendSignal in Include\Expert\Signal, e inserisco l'indicatore ASCtrend nel pacchetto Indicators, tutto sembra essere corretto, ma il modulo continua a non voler essere visualizzato nel Wizard MQL5. Ecco il codice del modulo del segnale di trading ASCtrendSignal:

//+------------------------------------------------------------------+
//|ASCtrendSignal.mqh |
//|Copyright © 2011, Nikolay Kositsin | 
//|Khabarovsk, farria@mail.redcom.ru | 
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Nikolay Kositsin".
#property link      "farria@mail.redcom.ru"
//+------------------------------------------------------------------+
//| File inclusi|
//+------------------------------------------------------------------+
#property tester_indicator "ASCtrend.ex5"
#include <Expert\ExpertSignal.mqh>
//--- avvio della descrizione della procedura guidata
//+------------------------------------------------------------------+ 
//| Dichiarazione delle costanti|
//+------------------------------------------------------------------+ 
#define  OPEN_LONG     80  // La costante per la restituzione del comando di acquisto all'Expert Advisor
#define  OPEN_SHORT    80  // La costante per la restituzione del comando di vendita all'Expert Advisor
#define  CLOSE_LONG    40  // La costante per restituire all'Expert Advisor il comando di chiusura di una posizione lunga.
#define  CLOSE_SHORT   40  // La costante per restituire all'Expert Advisor il comando di chiusura di una posizione corta.
#define  REVERSE_LONG  100 // La costante per restituire all'Expert Advisor il comando di inversione di una posizione long.
#define  REVERSE_SHORT 100 // La costante per restituire all'Expert Advisor il comando di inversione di una posizione corta.
#define  NO_SIGNAL      0  // La costante per restituire all'Expert Advisor l'assenza di un segnale
//+----------------------------------------------------------------------+
//| Descrizione della classe|
//| Titolo=I segnali basati sull'indicatore ASCtrend |
//| Tipo=SegnaleAvanzato.|
//| Nome=ASCtrend|
//| Classe=CASCtrendSignal|
//| Pagina=|
//| Parametro=BuyPosOpen,bool,true,Autorizzazione all'acquisto |
//| Parametro=SellPosOpen,bool,true,Autorizzazione alla vendita |
//| Parametro=BuyPosClose,bool,true,Permesso di uscire da una posizione lunga |
//| Parametro=SellPosClose,bool,true,Permesso di uscire da una posizione corta |
//| Parametro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe |
//| Parametro=RISK,int,4,Livello di rischio|
//| Parametro=SignalBar,uint,1,indice della barra per il segnale di entrata |
//+----------------------------------------------------------------------+
//--- descrizione della procedura guidata fine
//+----------------------------------------------------------------------+
//| Classe CASCtrendSignal.|
//| Scopo: Classe di generatori di segnali di trading basati su |
//| ASCtrend indicator values http://www.mql5.com/ru/code/491/.&nbsp;         |
//| È derivato dalla classe CExpertSignal.
//+----------------------------------------------------------------------+
class CASCtrendSignal : public CExpertSignal
  {
protected:
   CiCustom          m_indicator;      // l'oggetto per l'accesso ai valori di ASCtrend

   //--- parametri adattati
   bool              m_BuyPosOpen;       // permesso di acquisto
   bool              m_SellPosOpen;      // permesso di vendita
   bool              m_BuyPosClose;      // permesso di uscire da una posizione lunga
   bool              m_SellPosClose;     // permesso di uscire da una posizione corta
   ENUM_TIMEFRAMES   m_Ind_Timeframe;    // Timeframe dell'indicatore ASCtrend
   uint              m_RISK;             // Livello di rischio
   uint              m_SignalBar;        // indice della barra per il segnale di entrata

public:
                     CASCtrendSignal();

   //--- metodi di impostazione dei parametri regolabili
   void               BuyPosOpen(bool value)                  { m_BuyPosOpen=value;       }
   void               SellPosOpen(bool value)                 { m_SellPosOpen=value;      }
   void               BuyPosClose(bool value)                 { m_BuyPosClose=value;      }
   void               SellPosClose(bool value)                { m_SellPosClose=value;     }
   void               Ind_Timeframe(ENUM_TIMEFRAMES value)    { m_Ind_Timeframe=value;    }
   void               RISK(uint value)                        { m_RISK=value;             }
   void               SignalBar(uint value)                   { m_SignalBar=value;        }

   //--- metodo di validazione dei parametri regolabili
   virtual bool      ValidationSettings();
   //--- metodo di validazione dei parametri regolabili
   virtual bool      InitIndicators(CIndicators *indicators); // inizializzazione degli indicatori
   //--- metodo di generazione dei segnali di ingresso nel mercato
   virtual int       LongCondition();
   virtual int       ShortCondition();

   bool              InitASCtrend(CIndicators *indicators);   // Metodo di inizializzazione dell'indicatore ASCtrend

protected:

  };
//+------------------------------------------------------------------+
//Costruttore diASCtrendSignal.|
//| INPUT: no.|
//| OUTPUT: no.|
//|| RIMPROVERO: no.|
//+------------------------------------------------------------------+
void CASCtrendSignal::CASCtrendSignal()
  {
//--- impostazione dei parametri predefiniti
   m_BuyPosOpen=true;
   m_SellPosOpen=true;
   m_BuyPosClose=true;
   m_SellPosClose=true;
   
//--- parametri di ingresso dell'indicatore
   m_Ind_Timeframe=PERIOD_H4;
   m_RISK=4;
//--- 
   m_SignalBar=1;
   m_used_series=USE_SERIES_OPEN+USE_SERIES_HIGH+USE_SERIES_LOW+USE_SERIES_CLOSE;
  }
//+------------------------------------------------------------------+
//| Verifica dei parametri regolabili.|
//| INPUT: no.|
//| OUTPUT: vero se le impostazioni sono valide, falso - se non lo sono. ||
//|| RIMPROVERO: no.|
//+------------------------------------------------------------------+
bool CASCtrendSignal::ValidationSettings()
  {
//--- controllo dei parametri
   if(m_RISK<=0)
     {
      printf(__FUNCTION__+": Risk level must be above zero");
      return(false);
     }

//--- completamento riuscito
   return(true);
  }
//+------------------------------------------------------------------+
//| Inizializzazione degli indicatori e delle serie temporali.
//| INPUT: indicatori - puntatore a una collezione di oggetti |
//| di indicatori e serie temporali.|
//| OUTPUT: true - in caso di successo, altrimenti - false. || OUTPUT: true - in caso di successo, altrimenti - false. ||
//|| RIMPROVERO: no.|
//+------------------------------------------------------------------+
bool CASCtrendSignal::InitIndicators(CIndicators *indicators)
  {
//--- controllo del puntatore
   if(indicators==NULL) return(false);

//--- inizializzazione dell'indicatore 
   if(!InitASCtrend(indicators)) return(false);

//--- completamento riuscito
   return(true);
  }
//+------------------------------------------------------------------+
//| Inizializzazione dell'indicatore ASCtrend.|
//| INPUT: indicatori - puntatore a una collezione di oggetti |
//| di indicatori e serie temporali.|
//| OUTPUT: true - in caso di successo, altrimenti - false. || OUTPUT: true - in caso di successo, altrimenti - false. ||
//|| RIMPROVERO: no.|
//+------------------------------------------------------------------+
bool CASCtrendSignal::InitASCtrend(CIndicators *indicators)
  {
//--- controllo del puntatore
   if(indicators==NULL) return(false);

//--- aggiunta di un oggetto alla collezione
   if(!indicators.Add(GetPointer(m_indicator)))
     {
      printf(__FUNCTION__+": error of adding the object");
      return(false);
     }

//--- impostazione dei parametri dell'indicatore
   MqlParam parameters[2];
   
   parameters[0].type=TYPE_STRING;
   parameters[0].string_value="ASCtrend.ex5";
   
   parameters[1].type=TYPE_INT;
   parameters[1].integer_value=m_RISK;

//--- inizializzazione dell'oggetto 
   if(!m_indicator.Create(m_symbol.Name(),m_Ind_Timeframe,IND_CUSTOM,2,parameters))
     {
      printf(__FUNCTION__+": object initialization error");
      return(false);
     }
     
//--- numero di buffer
   if(!m_indicator.NumBuffers(2)) return(false);
   
//--- Indicatore ASCtrend inizializzato con successo
   return(true);
  }
//+------------------------------------------------------------------+
//| Verifica delle condizioni per l'apertura di una posizione lunga e
//| e chiuderne uno breve|
//| INPUT:no|
//| USCITA: Peso del voto da 0 a 100|
//|| RIMPROVERO: no.|
//+------------------------------------------------------------------+
int CASCtrendSignal::LongCondition()
  {
//--- il segnale di acquisto è determinato dal buffer 1 dell'indicatore ASCtrend
   double Signal=m_indicator.GetData(1,m_SignalBar);

//--- ottenere un segnale di trading 
   if(Signal && Signal!=EMPTY_VALUE)
     {
      if(m_BuyPosOpen)
        {
         if(m_SellPosClose) return(REVERSE_SHORT);
         else return(OPEN_LONG);
        }
      else
        {
         if(m_SellPosClose) return(CLOSE_SHORT);
        }
     }

//--- ricerca di segnali per la chiusura di una posizione corta
   if(!m_SellPosClose) return(NO_SIGNAL);

   int Bars_=Bars(m_symbol.Name(),m_Ind_Timeframe);

   for(int bar=int(m_SignalBar); bar<Bars_; bar++)
     {
      Signal=m_indicator.GetData(0,bar);
      if(Signal && Signal!=EMPTY_VALUE) return(NO_SIGNAL);

      Signal=m_indicator.GetData(1,bar);
      if(Signal && Signal!=EMPTY_VALUE) return(CLOSE_SHORT);
     }

//--- nessun segnale di trading
   return(NO_SIGNAL);
  }
//+------------------------------------------------------------------+
//| Verifica delle condizioni per l'apertura di una posizione corta e
//| chiusura di una lunga|
//| INPUT:no|
//| USCITA: Peso del voto da 0 a 100|
//|| RIMPROVERO: no.|
//+------------------------------------------------------------------+
int CASCtrendSignal::ShortCondition()
  {
//--- il segnale di vendita è determinato dal buffer 0 dell'indicatore ASCtrend
   double Signal=m_indicator.GetData(0,m_SignalBar);
   
//--- ottenere un segnale di trading
   if(Signal && Signal!=EMPTY_VALUE)
     {
      if(m_SellPosOpen)
        {
         if(m_BuyPosClose) return(REVERSE_LONG);
         else return(OPEN_SHORT);
        }
      else
        {
         if(m_BuyPosClose) return(CLOSE_LONG);
        }
     }

//--- ricerca di segnali per la chiusura di una posizione lunga
   if(!m_BuyPosClose) return(NO_SIGNAL);

   int Bars_=Bars(m_symbol.Name(),m_Ind_Timeframe); // Здесь код исправлен с учетом подсказки от Владимира Карпутова: Symbol() заменен на m_symbol.Name()
   for(int bar=int(m_SignalBar); bar<Bars_; bar++)
     {
      Signal=m_indicator.GetData(1,bar);
      if(Signal && Signal!=EMPTY_VALUE) return(NO_SIGNAL);

      Signal=m_indicator.GetData(0,bar);
      if(Signal && Signal!=EMPTY_VALUE) return(CLOSE_LONG);
     }

//--- nessun segnale di trading 
   return(NO_SIGNAL);
  }
//+------------------------------------------------------------------+

Potete per favore dirmi quale può essere il problema?

Saluti, Vladimir

 
MrBrooklin:

Ciao!

Sto cercando di aggiungere il modulo del segnale di trading ASCtrendSignal (che si trova nel file compresso mysignals.zip) creato sulla base dell'indicatore ASCtrend (che si trova nel file compresso indicators.zip) al Wizard MQL5, ma non funziona nulla. Posiziono il modulo del segnale di trading ASCtrendSignal in Include\Expert\Signal, e inserisco l'indicatore ASCtrend nel pacchetto Indicators, tutto sembra essere corretto, ma il modulo continua a non voler essere visualizzato nel Wizard MQL5. Ecco il codice del modulo del segnale di trading ASCtrendSignal:

Potete dirmi quale potrebbe essere il problema?

Saluti, Vladimir

Vorrei aggiungere che questo stesso problema si verifica con altri moduli di segnali di trading scritti sulla base di indicatori. A quanto pare, hanno lo stesso problema. Vi prego di aiutarmi a risolvere questi problemi.

Saluti, Vladimir.

P.S. Alcuni indicatori che ho scompattato dal file compresso indicators.zip sono installati sul terminale e funzionano normalmente.

 

È l'ordine che conta:

// avvio della descrizione della procedura guidata
//+----------------------------------------------------------------------+
//| Descrizione della classe|
//| Titolo=I segnali basati sull'indicatore ASCtrend |
//| Tipo=SegnaleAvanzato.|
//| Nome=ASCtrend|
//| Classe=CASCtrendSignal|
//| Pagina=|
//| Parametro=BuyPosOpen,bool,true,Autorizzazione all'acquisto |
//| Parametro=SellPosOpen,bool,true,Autorizzazione alla vendita |
//| Parametro=BuyPosClose,bool,true,Autorizzazione a uscire da una posizione lunga |
//| Parametro=SellPosClose,bool,true,Permesso di uscire da una posizione corta |
//| Parametro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe |
//| Parametro=RISK,int,4,Livello di rischio|
//| Parametro=SignalBar,uint,1,indice della barra per il segnale di entrata |
//+----------------------------------------------------------------------+
// descrizione della procedura guidata fine

non

//--- wizard description start
//--- wizard description end

e tra l'inizio e la fine solo un blocco di servizio, senza variabili o sostituzioni di macro.


Questo è il modo in cui il modulo dovrebbe iniziare:

//+------------------------------------------------------------------+
//|ASCtrendSignal.mqh |
//|Copyright © 2011, Nikolay Kositsin |
//|Khabarovsk, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Nikolay Kositsin".
#property link      "farria@mail.redcom.ru"
//+------------------------------------------------------------------+
//| File inclusi|
//+------------------------------------------------------------------+
//#property tester_indicator "ASCtrend.ex5"
#include <Expert\ExpertSignal.mqh>
// avvio della descrizione della procedura guidata
//+----------------------------------------------------------------------+
//| Descrizione della classe|
//| Titolo=I segnali basati sull'indicatore ASCtrend |
//| Tipo=SegnaleAvanzato.|
//| Nome=ASCtrend|
//| Classe=CASCtrendSignal|
//| Pagina=|
//| Parametro=BuyPosOpen,bool,true,Autorizzazione all'acquisto |
//| Parametro=SellPosOpen,bool,true,Autorizzazione alla vendita |
//| Parametro=BuyPosClose,bool,true,Autorizzazione a uscire da una posizione lunga |
//| Parametro=SellPosClose,bool,true,Permesso di uscire da una posizione corta |
//| Parametro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe |
//| Parametro=RISK,int,4,Livello di rischio|
//| Parametro=SignalBar,uint,1,indice della barra per il segnale di entrata |
//+----------------------------------------------------------------------+
// descrizione della procedura guidata fine
//+------------------------------------------------------------------+
//| Dichiarazione delle costanti|
//+------------------------------------------------------------------+
#define  OPEN_LONG     80  // La costante per la restituzione del comando di acquisto all'Expert Advisor
#define  OPEN_SHORT    80  // La costante per la restituzione del comando di vendita all'Expert Advisor
#define  CLOSE_LONG    40  // La costante per restituire all'Expert Advisor il comando di chiusura di una posizione lunga.
#define  CLOSE_SHORT   40  // La costante per restituire all'Expert Advisor il comando di chiusura di una posizione corta.
#define  REVERSE_LONG  100 // La costante per restituire all'Expert Advisor il comando di inversione di una posizione long.
#define  REVERSE_SHORT 100 // La costante per restituire all'Expert Advisor il comando di inversione di una posizione corta.
#define  NO_SIGNAL      0  // La costante per restituire all'Expert Advisor l'assenza di un segnale
//+----------------------------------------------------------------------+
//| Classe CASCtrendSignal.|
//| Scopo: Classe di generatori di segnali di trading basati su |
//| ASCtrend indicator values http://www.mql5.com/ru/code/491/.&nbsp;         |
//| È derivato dalla classe CExpertSignal.
//+----------------------------------------------------------------------+
class CASCtrendSignal : public CExpertSignal
  {

ricaricare MetaEditor dopo aver effettuato le modifiche

 
Vladimir Karputov:

È l'ordine che conta:

non

e tra l'inizio e la fine solo un blocco di servizio, senza variabili o sostituzioni di macro.


Questo è il modo in cui un modulo dovrebbe iniziare:

ricaricare MetaEditor dopo aver effettuato le modifiche

Grazie, Vladimir!

Tutto ha funzionato.

Saluti, Vladimir.

 

Forum sul trading, sui sistemi di trading automatizzati e sulla verifica delle strategie di trading

Discussione dell'articolo "Semplici sistemi di trading che utilizzano indicatori semaforici"

Vladimir Karputov, 2019.10.30 08:50

L'ordine è importante:

 // avvio della descrizione della procedura guidata
//+----------------------------------------------------------------------+
//| Descrizione della classe|
//| Titolo=I segnali basati sull'indicatore ASCtrend |
//| Tipo=SegnaleAvanzato|
//| Nome=ASCtrend|
//| Classe=CASCtrendSignal|
//| Pagina=|
//| Parametro=BuyPosOpen,bool,true,Autorizzazione all'acquisto |
//| Parametro=SellPosOpen,bool,true,Autorizzazione a vendere |
//| Parametro=BuyPosClose,bool,true,Autorizzazione a uscire da una posizione lunga |
//| Parametro=SellPosClose,bool,true,Permesso di uscire da una posizione corta |
//| Parametro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe |
//| Parametro=RISK,int,4,Livello di rischio|
//| Parametro=SignalBar,uint,1,indice della barra per il segnale di entrata |
//+----------------------------------------------------------------------+
// descrizione della procedura guidata fine 

ma non

 //--- wizard description start
//--- wizard description end 

e tra l'inizio e la fine solo il blocco di servizio, senza variabili e sostituzioni di macro.


Questo è l'inizio che il modulo dovrebbe avere:

 //+------------------------------------------------------------------+
//|ASCtrendSignal.mqh |
//|Copyright © 2011, Nikolay Kositsin |
//|Khabarovsk, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2011, Nikolay Kositsin"
#property  link        "farria@mail.redcom.ru"
//+------------------------------------------------------------------+
//| File inclusi|
//+------------------------------------------------------------------+
//#property tester_indicator "ASCtrend.ex5"
#include  <Expert\ExpertSignal.mqh>
// avvio della descrizione della procedura guidata
//+----------------------------------------------------------------------+
//| Descrizione della classe|
//| Titolo=I segnali basati sull'indicatore ASCtrend |
//| Tipo=SegnaleAvanzato|
//| Nome=ASCtrend|
//| Classe=CASCtrendSignal|
//| Pagina=|
//| Parametro=BuyPosOpen,bool,true,Autorizzazione all'acquisto |
//| Parametro=SellPosOpen,bool,true,Autorizzazione a vendere |
//| Parametro=BuyPosClose,bool,true,Autorizzazione a uscire da una posizione lunga |
//| Parametro=SellPosClose,bool,true,Permesso di uscire da una posizione corta |
//| Parametro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe |
//| Parametro=RISK,int,4,Livello di rischio|
//| Parametro=SignalBar,uint,1,indice della barra per il segnale di entrata |
//+----------------------------------------------------------------------+
// descrizione della procedura guidata fine
//+------------------------------------------------------------------+
//| Dichiarazione delle costanti|
//+------------------------------------------------------------------+
#define  OPEN_LONG     80    // La costante per la restituzione del comando di acquisto all'Expert Advisor
#define  OPEN_SHORT     80    // La costante per la restituzione del comando di vendita all'Expert Advisor
#define  CLOSE_LONG     40    // La costante per restituire all'Expert Advisor il comando di chiusura di una posizione lunga.
#define  CLOSE_SHORT   40    // La costante per restituire all'Expert Advisor il comando di chiusura di una posizione corta.
#define  REVERSE_LONG   100 // La costante per restituire all'Expert Advisor il comando di inversione di una posizione long.
#define  REVERSE_SHORT 100 // La costante per restituire all'Expert Advisor il comando di inversione di una posizione corta.
#define  NO_SIGNAL       0    // La costante per restituire all'Expert Advisor l'assenza di un segnale
//+----------------------------------------------------------------------+
//| Classe CASCtrendSignal.|
//| Scopo: Classe di generatori di segnali di trading basati su |
//| ASCtrend indicator values http://www.mql5.com/ru/code/491/.&nbsp;         |
//| È derivato dalla classe CExpertSignal.|
//+----------------------------------------------------------------------+
class CASCtrendSignal : public CExpertSignal
  {

riavviare il MetaEditor dopo aver apportato le modifiche.