Indicateurs: Centre de gravité Ehlers - Centre de gravité J. F. Ehlers

 

Centre de gravité Ehlers - Centre de gravité J. F. Ehlers:

Le centre de gravité est un oscillateur mis au point par John Ehlers et présenté dans le numéro de mai 2002 de Stocks & Commodities.

Centre de gravité Ehlers - Centre de gravité J. F. Ehlers

Author: Nikolay Kositsin

 
C'est utile ! ...J'aimerais connaître les critères de changement de couleur.
 

Bonjour,

Cet oscillateur est très bien, mais j'ai des problèmes avec lui.

La fin de la ligne de signal, qui est calculée par la dernière bougie n'est pas affichée, donc il affiche toujours du rouge à l'heure actuelle. Lorsque je réinitialise l'oscillateur, il affiche de bonnes valeurs pendant un moment avec la fin de la ligne de signal, mais il repasse ensuite au rouge, (même s'il doit afficher le vert).

Que dois-je faire pour éliminer ce problème ?

J'ai essayé de le redéboguer mais cela n'a pas aidé.

Salutations,

InfiniteDesign

 
A son avis cet indicateur qui fonctionne avec mehor et symbole et timeframe.
Quelles sont les meilleures valeurs pour les paramètres de cet indicateur ?
 

Merci beaucoup pour cet excellent indicateur.

J'ai trouvé la version précédente aussi intéressante et utile que la nouvelle, voire même plus...

Pourriez-vous, s'il vous plaît, porter l'ancienne version sur mq5 également ? J'apprécierais grandement que cela soit fait.


Merci d'avance !

 
Cet indicateur n'est pas déterministe. Demandez les mêmes points de données deux fois, à des moments différents, et vous obtiendrez des réponses différentes. La dérive est plus importante lorsque l'on se rapproche de l'heure actuelle. L'incohérence peut atteindre 3,7 x 10^-04.
 
InfiniteDesign:

Bonjour,

Cet oscillateur est très bien, mais j'ai des problèmes avec lui.

La fin de la ligne de signal, qui est calculée par la dernière bougie n'est pas affichée, donc il affiche toujours du rouge à l'heure actuelle. Lorsque je réinitialise l'oscillateur, il affiche de bonnes valeurs pendant un moment avec la fin de la ligne de signal, mais il repasse ensuite au rouge, (même s'il doit afficher le vert).

Que dois-je faire pour éliminer ce problème ?

J'ai essayé de le redéboguer mais cela n'a pas aidé.

Salutations,

InfiniteDesign

J'ai le même problème...
 

J'ai essayé de créer un signal à partir de cet indicateur, mais je n'y suis pas parvenu...

Une aide ?


//+------------------------------------------------------------------+
//|COG.mqh |
//|Bruno Pio |
//| http ://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Bruno Pio"
#property link      "http://www.mql5.com"
#property version   "1.00"
#include "..\ExpertSignal.mqh"   // CExpertSignal se trouve dans le fichier ExpertSignal
#property tester_indicator "CenterOfGravity.ex5"
// description de l'assistant début
//+------------------------------------------------------------------+
//| Description de la classe|
//| Titre=Signaux du centre de gravité|
//| Type=SignalAdvanced|
//| Nom=Mon_COG|
//| Nom court=CG|
//| Classe=COG|
//| Page=Non nécessaire|
//| Paramètre=Période_,int,10,Période de calcul de la moyenne de l'indicateur.
//| Paramètre=SmoothPeriod,int,3,Période de lissage de la ligne de signal |
//| Paramètre=MA_Method_,ENUM_MA_METHOD,MODE_EMA,Méthode de signal |
//| Paramètre=PrixAppliqué,int,1,Constante de prix |
//+------------------------------------------------------------------+
// description de l'assistant end
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
class COG : public CExpertSignal
  {
private:
CiCustom             m_COG;               // L'indicateur en tant qu'objet
//--- Paramètres configurables du module
   int               m_Period_;           // Période de calcul de la moyenne de l'indicateur
   int               m_SmoothPeriod;      // Période de lissage de la ligne de signal 
   ENUM_MA_METHOD    m_MA_Method_;        // Méthode de calcul de la moyenne de la ligne de signal
   int               m_AppliedPrice;      // Constante de prix
public:
                     COG(void);
                    ~COG(void);
//--- Vérification de l'exactitude des données d'entrée
   bool              ValidationSettings();
//--- Création d'indicateurs et de séries temporelles pour le module de signaux
   bool              InitIndicators(CIndicators *indicators);
//--- Accès aux données de l'indicateur
   double            CG(const int index)                 const { return(m_COG.GetData(0,index)); }
   double            Signal(const int index)             const { return(m_COG.GetData(1,index)); }   
//--- Vérification des conditions d'achat et de vente
   virtual int       LongCondition();
   virtual int       ShortCondition();
//--- Méthodes de paramétrage
   void              Period_(int value)               { m_Period_=value;        }
   void              SmoothPeriod(int value)          { m_SmoothPeriod=value;   }
   void              MA_Method_(ENUM_MA_METHOD value) { m_MA_Method_=value;     }
   void              AppliedPrice(int value)          { m_AppliedPrice=value;   }
protected:
   //--- Création d'un indicateur
   bool              CreateCOG(CIndicators *indicators);



  };
//+------------------------------------------------------------------+
//| Constructeur|
//+------------------------------------------------------------------+
COG::COG(void) :           m_Period_(10),                // Période de calcul de la moyenne de l'indicateur
                           m_SmoothPeriod(3),            // Période de lissage de la ligne de signal 
                           m_MA_Method_(MODE_EMA),       // Méthode de calcul de la moyenne de la ligne de signal
                           m_AppliedPrice(1)             // Constante de prix
  {
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
COG::~COG()
  {
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Vérifie les paramètres d'entrée et renvoie true si tout est OK |
//+------------------------------------------------------------------+
bool COG:: ValidationSettings()
  {
   //--- Appeler la méthode de la classe de base
   if(!CExpertSignal::ValidationSettings())  return(false);
   //--- Périodes de contrôle, nombre de barres pour le calcul du MA >=1
   if(m_Period_<1)
     {
      PrintFormat("Incorrect value set for one of the period! Period_=%d",
                  m_Period_);
      return false;
     }
//--- Périodes de contrôle, nombre de barres pour le calcul du MA >=1
   if(m_SmoothPeriod<1)
     {
      PrintFormat("Incorrect value set for one of the period! m_SmoothPeriod=%d",
                  m_SmoothPeriod);
      return false;
     }
//--- Le type de lissage Fast MA doit être l'une des quatre valeurs de l'énumération
   if(m_MA_Method_!=MODE_SMA && m_MA_Method_!=MODE_EMA && m_MA_Method_!=MODE_SMMA && m_MA_Method_!=MODE_LWMA)
     {
      PrintFormat("Invalid type of smoothing of the fast MA!");
      return false;
     }
//--- m_AppliedPrice doit être valide
   if(m_AppliedPrice<1 || m_AppliedPrice>11) 
     {
      PrintFormat("Invalid type of Price!");
      return false;
     }
//--- Toutes les vérifications sont terminées, tout va bien
   return true;
  }
//+------------------------------------------------------------------+
//| Crée des indicateurs|
//| Entrée : un pointeur vers une collection d'indicateurs.
//| Sortie : true si succès, sinon false |
//+------------------------------------------------------------------+
bool COG::InitIndicators(CIndicators *indicators)
  {
//--- Contrôle standard de la collection d'indicateurs pour NULL
   if(indicators==NULL) return(false);
//--- Initialisation des indicateurs et des séries temporelles dans les filtres supplémentaires
   if(!CExpertSignal::InitIndicators(indicators)) return(false);
//--- Création de nos indicateurs
   if(!CreateCOG(indicators))                  return(false);   
//--- Cette partie a été atteinte, la fonction a donc réussi, renvoyer vrai
   return(true);
  }
//+------------------------------------------------------------------+
//| Crée l'indicateur "COG".|
//+------------------------------------------------------------------+
bool COG::CreateCOG(CIndicators *indicators)
  {
//--- Vérification du pointeur
   if(indicators==NULL) return(false);
//--- Ajout d'un objet à la collection
   if(!indicators.Add(GetPointer(m_COG)))
     {
      printf(__FUNCTION__+": Error adding an object of the COG");
      return(false);
     }
//--- Paramètres de réglage du COG
   MqlParam parameters[5];
//---
   parameters[0].type=TYPE_STRING;
   parameters[0].string_value="CenterOfGravity.ex5";
   parameters[1].type=TYPE_INT;
   parameters[1].integer_value=m_Period_;                 // Période
   parameters[2].type=TYPE_INT;
   parameters[2].integer_value=m_SmoothPeriod;            // Période de lissage de la ligne de signal
   parameters[3].type=TYPE_INT;
   parameters[3].integer_value=m_MA_Method_;              // Méthode de calcul de la moyenne de la ligne de signal
   parameters[4].type=TYPE_INT;
   parameters[4].integer_value=m_AppliedPrice;            // Constante de prix
//--- Initialisation de l'objet 
   if(!m_COG.Create(m_symbol.Name(),0,IND_CUSTOM,5,parameters))
     {
      printf(__FUNCTION__+": Error initializing the object of the COG");
      return(false);
     }
//--- Nombre de tampons
   if(!m_COG.NumBuffers(2)) return(false);
//--- Cette partie a été atteinte, la fonction a donc réussi, renvoyer vrai
   return(true);
  }
//+------------------------------------------------------------------+
//| Renvoie la force du signal d'achat|
//+------------------------------------------------------------------+
int COG::LongCondition()
  {
   int signal=0;
//--- Pour le fonctionnement avec des ticks idx=0, pour le fonctionnement avec des barres formées idx=1
   int idx=StartIndex();
//--- Valeurs des COG à la dernière barre formée
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- Valeurs des COG à l'avant-dernière barre formée
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//---Si CG > Signal && CG-1 < Signal-1
   if((last_fast_value>last_slow_value) && (prev_fast_value<prev_slow_value))
     {
      signal=100; // Il y a un signal d'achat
     }
//--- Retourner la valeur du signal
   return(signal);
  }
//+------------------------------------------------------------------+
//| Renvoie la force du signal de vente|
//+------------------------------------------------------------------+
int COG::ShortCondition()
  {
   int signal=0;
//--- Pour le fonctionnement avec des ticks idx=0, pour le fonctionnement avec des barres formées idx=1
   int idx=StartIndex();
//--- Valeurs des COG à la dernière barre formée
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- Valeurs des COG à l'avant-dernière barre formée
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//---Si CG < Signal && CG-1 > Signal-1
   if((last_fast_value<last_slow_value) && (prev_fast_value>prev_slow_value))
     {
      signal=100; // Il y a un signal de vente
     }
//--- Retourner la valeur du signal
   return(signal);
  }
 
chose intéressante... il faut décider de l'algorithme dans des conditions de combat
 

L'indicateur est compilé sans erreur :

et il fonctionne -

------------------

Il faut juste utiliser le fichier smoothalgorithms.mqh - voir post


Indicators: T3Taotra_HTF
Indicators: T3Taotra_HTF
  • 2016.06.30
  • www.mql5.com
T3Taotra_HTF: Author: Nikolay Kositsin...