Discussion de l'article "Systèmes de trading simples utilisant des indicateurs de sémaphore"

 

Un nouvel article Systèmes de trading simples utilisant des indicateurs de sémaphore a été publié :

Si nous examinons en profondeur tout système de trading complexe, nous verrons qu’il est basé sur un ensemble de signaux de trading simples. Par conséquent, il n’est pas nécessaire que les développeurs novices commencent à écrire des algorithmes complexes immédiatement. Cet article fournit un exemple de système de trading qui utilise des indicateurs de sémaphore pour effectuer des transactions.

Les indicateurs de sémaphore ou de signal sont de simples détecteurs qui indiquent les moments d’entrée ou de sortie du marché. Dans le cas où il y a un signal d’entrée à la barre actuelle, une étiquette appropriée apparaît sur un graphique de symboles. Cette étiquette peut ensuite être utilisée comme condition pour effectuer une transaction.

Il existe de nombreux indicateurs de ce type, mais l’essence même du système de trading original basé sur de tels indicateurs n’a pas changé du tout. Par conséquent, c’est une bonne idée de l’implémenter sous la forme la plus simple et la plus universelle. Cela permettra une utilisation plus poussée du résultat obtenu lors de l’utilisation d’indicateurs similaires sans modifications considérables.

Fig.1. Indicateur de signal sémaphore ASCtrend

Auteur : Nikolay Kositsin

 
L'article est très clair.
Une petite remarque en passant : il y a une faute de frappe mécanique dans le fragment de code donné dans l'exemple, qui a été copié-collé :
//---- Déclarer des variables locales
   double TrendVelue[2];
 

J'ai compilé quelques signaux et redémarré, comme "Candles_SmoothedSignal.mqh" (..MQL5\Include\Expert\MySignals\Candles_SmoothedSignal.mqh), mais MetaEditor ne peut pas le voir pour créer un Conseiller Expert dans l'Assistant.

Comment puis-je résoudre ce problème ?

 

Merci pour cette explication excellente et complète... !


daveM

 

J'ai tout téléchargé et décompressé comme indiqué dans les instructions, mais le testeur donne une erreur sur tous les systèmes :

le testeur s'est arrêté car OnInit a échoué

CExpert::ValidationSettings : erreur dans les paramètres de l'argent

CMoneyFixedLot::ValidationSettings : le montant des lots doit être compris entre 1.000000 et 1000000.000000

Merci de me dire ce qu'il faut modifier.

 

Bonjour !

J'essaie d'ajouter le module de signal de trading ASCtrendSignal (situé dans le fichier compressé mysignals.zip) créé sur la base de l'indicateur ASCtrend (situé dans le fichier compressé indicators.zip) à l'assistant MQL5, mais rien ne fonctionne. Je place le module de signal de trading ASCtrendSignal dans IncludeExpert\Signal, et je place l'indicateur ASCtrend dans le package Indicators, tout semble correct, mais le module ne veut toujours pas s'afficher dans l'assistant MQL5. Voici le code du module de signal de 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"
//+------------------------------------------------------------------+
//| Fichiers inclus|
//+------------------------------------------------------------------+
#property tester_indicator "ASCtrend.ex5"
#include <Expert\ExpertSignal.mqh>
//--- description de l'assistant début
//+------------------------------------------------------------------+ 
//| Déclaration des constantes|
//+------------------------------------------------------------------+ 
#define  OPEN_LONG     80  // La constante qui renvoie la commande d'achat à l'Expert Advisor
#define  OPEN_SHORT    80  // La constante qui renvoie l'ordre de vente à l'Expert Advisor
#define  CLOSE_LONG    40  // La constante qui renvoie la commande de fermeture d'une position longue à l'Expert Advisor
#define  CLOSE_SHORT   40  // La constante qui renvoie la commande de fermeture d'une position courte à l'Expert Advisor
#define  REVERSE_LONG  100 // La constante qui renvoie l'ordre d'inverser une position longue au Conseiller Expert.
#define  REVERSE_SHORT 100 // La constante qui renvoie l'ordre d'inverser une position courte au conseiller expert.
#define  NO_SIGNAL      0  // La constante qui renvoie l'absence de signal à l'Expert Advisor
//+----------------------------------------------------------------------+
//| Description de la classe|
//| Titre=Les signaux basés sur l'indicateur ASCtrend |
//| Type=SignalAdvanced.|
//| Nom=ASCtrend|
//| Classe=CASCtrendSignal|
//| Page=|
//| Paramètre=BuyPosOpen,bool,true,Permission d'acheter |
//| Paramètre=SellPosOpen,bool,true,Permission de vendre |
//| Paramètre=BuyPosClose,bool,true,Permission de sortir d'une position longue.
//| Paramètre=SellPosClose,bool,true,Permission de sortir d'une position courte |
//| Paramètre=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4, Timeframe |
//| Paramètre=RISK,int,4,Niveau de risque|
//| Paramètre=SignalBar,uint,1,Indice de barre pour le signal d'entrée.
//+----------------------------------------------------------------------+
//--- description de l'assistant fin
//+----------------------------------------------------------------------+
//| Classe CASCtrendSignal.|
//| Objet : Classe de générateurs de signaux de trading basés sur l'utilisation de la technologie de l'information et de la communication.
//| ASCtrend indicator values http://www.mql5.com/ru/code/491/.&nbsp;         |
//| est dérivé de la classe CExpertSignal.
//+----------------------------------------------------------------------+
class CASCtrendSignal : public CExpertSignal
  {
protected:
   CiCustom          m_indicator;      // l'objet pour l'accès aux valeurs ASCtrend

   //--- paramètres ajustés
   bool              m_BuyPosOpen;       // autorisation d'achat
   bool              m_SellPosOpen;      // autorisation de vente
   bool              m_BuyPosClose;      // autorisation de sortir d'une position longue
   bool              m_SellPosClose;     // autorisation de sortir d'une position courte
   ENUM_TIMEFRAMES   m_Ind_Timeframe;    // Indicateur ASCtrend timeframe
   uint              m_RISK;             // Niveau de risque
   uint              m_SignalBar;        // indice de barre pour le signal d'entrée

public:
                     CASCtrendSignal();

   //--- méthodes de réglage des paramètres ajustables
   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;        }

   //--- méthode de validation des paramètres ajustables
   virtual bool      ValidationSettings();
   //--- méthode de validation des paramètres ajustables
   virtual bool      InitIndicators(CIndicators *indicators); // initialisation des indicateurs
   //--- méthode de génération de signaux d'entrée sur le marché
   virtual int       LongCondition();
   virtual int       ShortCondition();

   bool              InitASCtrend(CIndicators *indicators);   // Méthode d'initialisation de l'indicateur ASCtrend

protected:

  };
//+------------------------------------------------------------------+
//|CASCtrendSignal constructor.|
//| INPUT : non.|
//| OUTPUT : no.|
//|| REMARQUE : non.|
//+------------------------------------------------------------------+
void CASCtrendSignal::CASCtrendSignal()
  {
//--- définition des paramètres par défaut
   m_BuyPosOpen=true;
   m_SellPosOpen=true;
   m_BuyPosClose=true;
   m_SellPosClose=true;
   
//--- paramètres d'entrée de l'indicateur
   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;
  }
//+------------------------------------------------------------------+
//| Vérification des paramètres ajustables.|
//| INPUT : non.|
//| OUTPUT : true (vrai) si les paramètres sont valides, false (faux) s'ils ne le sont pas.
//|| REMARQUE : non.|
//+------------------------------------------------------------------+
bool CASCtrendSignal::ValidationSettings()
  {
//--- vérification des paramètres
   if(m_RISK<=0)
     {
      printf(__FUNCTION__+": Risk level must be above zero");
      return(false);
     }

//--- achèvement réussi
   return(true);
  }
//+------------------------------------------------------------------+
//| Initialisation des indicateurs et des séries temporelles. ||
//| INPUT : indicateurs - pointeur sur une collection d'objets |
//| d'indicateurs et de séries temporelles.|
//| OUTPUT : true - en cas de succès, sinon - false. || OUTPUT : true - en cas de succès, sinon - false. ||
//|| REMARQUE : non.|
//+------------------------------------------------------------------+
bool CASCtrendSignal::InitIndicators(CIndicators *indicators)
  {
//--- vérification du pointeur
   if(indicators==NULL) return(false);

//--- Initialisation de l'indicateur 
   if(!InitASCtrend(indicators)) return(false);

//--- achèvement réussi
   return(true);
  }
//+------------------------------------------------------------------+
//| Initialisation de l'indicateur ASCtrend.|
//| INPUT : indicateurs - pointeur sur une collection d'objets |
//| d'indicateurs et de séries temporelles.|
//| OUTPUT : true - en cas de succès, sinon - false. || OUTPUT : true - en cas de succès, sinon - false. ||
//|| REMARQUE : non.|
//+------------------------------------------------------------------+
bool CASCtrendSignal::InitASCtrend(CIndicators *indicators)
  {
//--- vérification du pointeur
   if(indicators==NULL) return(false);

//--- ajouter un objet à la collection
   if(!indicators.Add(GetPointer(m_indicator)))
     {
      printf(__FUNCTION__+": error of adding the object");
      return(false);
     }

//--- réglage des paramètres de l'indicateur
   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;

//--- Initialisation de l'objet 
   if(!m_indicator.Create(m_symbol.Name(),m_Ind_Timeframe,IND_CUSTOM,2,parameters))
     {
      printf(__FUNCTION__+": object initialization error");
      return(false);
     }
     
//--- nombre de tampons
   if(!m_indicator.NumBuffers(2)) return(false);
   
//--- L'indicateur ASCtrend a été initialisé avec succès
   return(true);
  }
//+------------------------------------------------------------------+
//| Vérification des conditions d'ouverture d'une position longue et d'une position de change.
//| et fermeture d'un court|
//| INPUT :no|
//| OUTPUT : Poids du vote de 0 à 100|
//|| REMARQUE : non.|
//+------------------------------------------------------------------+
int CASCtrendSignal::LongCondition()
  {
//--- le signal d'achat est déterminé par le tampon 1 de l'indicateur ASCtrend
   double Signal=m_indicator.GetData(1,m_SignalBar);

//--- obtention d'un signal de négociation 
   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);
        }
     }

//--- recherche de signaux pour clôturer une position courte
   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);
     }

//--- pas de signal de négociation
   return(NO_SIGNAL);
  }
//+------------------------------------------------------------------+
//| Vérification des conditions d'ouverture d'une position courte et |
//| fermeture d'un long dossier|
//| INPUT :no|
//| OUTPUT : Poids du vote de 0 à 100|
//|| REMARQUE : non.|
//+------------------------------------------------------------------+
int CASCtrendSignal::ShortCondition()
  {
//--- le signal de vente est déterminé par le tampon 0 de l'indicateur ASCtrend
   double Signal=m_indicator.GetData(0,m_SignalBar);
   
//--- obtention d'un signal de négociation
   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);
        }
     }

//--- recherche de signaux pour clôturer une position longue
   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);
     }

//--- pas de signal de négociation 
   return(NO_SIGNAL);
  }
//+------------------------------------------------------------------+

Pouvez-vous me dire quel est le problème ?

Cordialement, Vladimir

 
MrBrooklin:

Bonjour !

J'essaie d'ajouter le module de signal de trading ASCtrendSignal (situé dans le fichier compressé mysignals.zip) créé sur la base de l'indicateur ASCtrend (situé dans le fichier compressé indicators.zip) à l'assistant MQL5, mais rien ne fonctionne. Je place le module de signal de trading ASCtrendSignal dans IncludeExpert\Signal, et je place l'indicateur ASCtrend dans le package Indicators, tout semble correct, mais le module ne veut toujours pas s'afficher dans l'assistant MQL5. Voici le code du module de signal de trading ASCtrendSignal :

Pouvez-vous me dire quel est le problème ?

Cordialement, Vladimir

Je voudrais ajouter que ce même problème se produit avec d'autres modules de signaux de trading écrits sur la base d'indicateurs. Apparemment, ils ont le même problème. Merci de m'aider à résoudre ces problèmes.

Cordialement, Vladimir.

P.S. Certains indicateurs que j'ai décompressés à partir du fichier compressé indicators.zip sont installés sur le terminal et fonctionnent normalement.

 

C'est l'ordre qui compte :

// description de l'assistant début
//+----------------------------------------------------------------------+
//| Description de la classe|
//| Titre=Les signaux basés sur l'indicateur ASCtrend |
//| Type=SignalAdvanced.|
//| Nom=ASCtrend|
//| Classe=CASCtrendSignal|
//| Page=|
//| Paramètre=BuyPosOpen,bool,true,Permission d'acheter |
//| Paramètre=SellPosOpen,bool,true,Permission de vendre |
//| Paramètre=BuyPosClose,bool,true,Permission de sortir d'une position longue.
//| Paramètre=SellPosClose,bool,true,Permission de sortir d'une position courte |
//| Paramètre=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4, Timeframe |
//| Paramètre=RISK,int,4,Niveau de risque|
//| Paramètre=SignalBar,uint,1,Indice de barre pour le signal d'entrée.
//+----------------------------------------------------------------------+
// description de l'assistant end

pas

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

et entre le début et la fin, seulement un bloc de service - pas de variables ni de substitutions de macros.


C'est ainsi que le module doit commencer :

//+------------------------------------------------------------------+
//|ASCtrendSignal.mqh |
//|Copyright © 2011, Nikolay Kositsin |
//|Khabarovsk, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Nikolay Kositsin.
#property link      "farria@mail.redcom.ru"
//+------------------------------------------------------------------+
//| Fichiers inclus|
//+------------------------------------------------------------------+
//#propriété tester_indicateur "ASCtrend.ex5"
#include <Expert\ExpertSignal.mqh>
// description de l'assistant début
//+----------------------------------------------------------------------+
//| Description de la classe|
//| Titre=Les signaux basés sur l'indicateur ASCtrend |
//| Type=SignalAdvanced.|
//| Nom=ASCtrend|
//| Classe=CASCtrendSignal|
//| Page=|
//| Paramètre=BuyPosOpen,bool,true,Permission d'acheter |
//| Paramètre=SellPosOpen,bool,true,Permission de vendre |
//| Paramètre=BuyPosClose,bool,true,Permission de sortir d'une position longue.
//| Paramètre=SellPosClose,bool,true,Permission de sortir d'une position courte |
//| Paramètre=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4, Timeframe |
//| Paramètre=RISK,int,4,Niveau de risque|
//| Paramètre=SignalBar,uint,1,Indice de barre pour le signal d'entrée.
//+----------------------------------------------------------------------+
// description de l'assistant end
//+------------------------------------------------------------------+
//| Déclaration des constantes|
//+------------------------------------------------------------------+
#define  OPEN_LONG     80  // La constante qui renvoie la commande d'achat à l'Expert Advisor
#define  OPEN_SHORT    80  // La constante qui renvoie l'ordre de vente à l'Expert Advisor
#define  CLOSE_LONG    40  // La constante qui renvoie la commande de fermeture d'une position longue à l'Expert Advisor
#define  CLOSE_SHORT   40  // La constante qui renvoie la commande de fermeture d'une position courte à l'Expert Advisor
#define  REVERSE_LONG  100 // La constante qui renvoie l'ordre d'inverser une position longue au Conseiller Expert.
#define  REVERSE_SHORT 100 // La constante qui renvoie l'ordre d'inverser une position courte au conseiller expert.
#define  NO_SIGNAL      0  // La constante qui renvoie l'absence de signal à l'Expert Advisor
//+----------------------------------------------------------------------+
//| Classe CASCtrendSignal.|
//| Objet : Classe de générateurs de signaux de trading basés sur l'utilisation de la technologie de l'information et de la communication.
//| ASCtrend indicator values http://www.mql5.com/ru/code/491/.&nbsp;         |
//| est dérivé de la classe CExpertSignal.
//+----------------------------------------------------------------------+
class CASCtrendSignal : public CExpertSignal
  {

recharger MetaEditor après avoir effectué des modifications

 
Vladimir Karputov:

C'est l'ordre qui compte :

pas

et entre le début et la fin, seulement un bloc de service - pas de variables ni de substitutions de macros.


C'est ainsi qu'un module doit commencer :

recharger MetaEditor après avoir effectué des modifications

Merci, Vladimir !

Tout a fonctionné.

Cordialement, Vladimir.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Discussion autour de l'article "Systèmes de trading simples utilisant des indicateurs sémaphores"

Vladimir Karputov, 2019.10.30 08:50

L'ordre est important :

 // description de l'assistant début
//+----------------------------------------------------------------------+
//| Description de la classe|
//| Titre=Les signaux basés sur l'indicateur ASCtrend |
//| Type=SignalAdvanced|
//| Nom=ASCtrend|
//| Classe=CASCtrendSignal|
//| Page=|
//| Paramètre=BuyPosOpen,bool,true,Permission d'acheter |
//| Paramètre=SellPosOpen,bool,true,Permission de vendre |
//| Paramètre=BuyPosClose,bool,true,Permission de sortir d'une position longue.
//| Paramètre=SellPosClose,bool,true,Permission de sortir d'une position courte |
//| Paramètre=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4, Timeframe |
//| Paramètre=RISK,int,4,Niveau de risque|
//| Paramètre=SignalBar,uint,1,Indice de barre pour le signal d'entrée.
//+----------------------------------------------------------------------+
// description de l'assistant end 

mais pas

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

et entre le début et la fin, seulement le bloc de service - pas de variables ni de substitutions de macros.


C'est le début que le module devrait avoir :

 //+------------------------------------------------------------------+
//|ASCtrendSignal.mqh |
//|Copyright © 2011, Nikolay Kositsin |
//|Khabarovsk, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2011, Nikolay Kositsin".
#property  link        "farria@mail.redcom.ru"
//+------------------------------------------------------------------+
//| Fichiers inclus|
//+------------------------------------------------------------------+
//#propriété tester_indicateur "ASCtrend.ex5"
#include  <Expert\ExpertSignal.mqh>
// description de l'assistant début
//+----------------------------------------------------------------------+
//| Description de la classe|
//| Titre=Les signaux basés sur l'indicateur ASCtrend |
//| Type=SignalAdvanced|
//| Nom=ASCtrend|
//| Classe=CASCtrendSignal|
//| Page=|
//| Paramètre=BuyPosOpen,bool,true,Permission d'acheter |
//| Paramètre=SellPosOpen,bool,true,Permission de vendre |
//| Paramètre=BuyPosClose,bool,true,Permission de sortir d'une position longue.
//| Paramètre=SellPosClose,bool,true,Permission de sortir d'une position courte |
//| Paramètre=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4, Timeframe |
//| Paramètre=RISK,int,4,Niveau de risque|
//| Paramètre=SignalBar,uint,1,Indice de barre pour le signal d'entrée.
//+----------------------------------------------------------------------+
// description de l'assistant end
//+------------------------------------------------------------------+
//| Déclaration des constantes|
//+------------------------------------------------------------------+
#define  OPEN_LONG     80    // La constante qui renvoie la commande d'achat à l'Expert Advisor
#define  OPEN_SHORT     80    // La constante qui renvoie l'ordre de vente à l'Expert Advisor
#define  CLOSE_LONG     40    // La constante qui renvoie la commande de fermeture d'une position longue à l'Expert Advisor
#define  CLOSE_SHORT   40    // La constante qui renvoie la commande de fermeture d'une position courte à l'Expert Advisor
#define  REVERSE_LONG   100 // La constante qui renvoie l'ordre d'inverser une position longue au Conseiller Expert
#define  REVERSE_SHORT 100 // La constante qui renvoie l'ordre d'inverser une position courte au conseiller expert.
#define  NO_SIGNAL       0    // La constante qui renvoie l'absence de signal à l'Expert Advisor
//+----------------------------------------------------------------------+
//| Classe CASCtrendSignal.|
//| Objet : Classe de générateurs de signaux de trading basés sur l'utilisation de la technologie de l'information et de la communication.
//| ASCtrend indicator values http://www.mql5.com/ru/code/491/.&nbsp;         |
//| Est dérivé de la classe CExpertSignal.|
//+----------------------------------------------------------------------+
class CASCtrendSignal : public CExpertSignal
  {

redémarrer le MetaEditor après avoir fait des changements