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
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 !
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 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); }
J'ai exactement le même problème...
C'est un indicateur génial (surtout si l'on tient compte des tendances à plus long terme). Je vous envoie la version améliorée, dont la fin n'est plus simplement rouge, et qui s'actualise correctement sur le graphique en temps réel.
Un modérateur a corrigé la mise en forme cette fois-ci. Veuillez formater correctement le code à l'avenir ; les messages contenant du code mal formaté risquent d'être supprimés.
/* * Le fichier SmoothAlgorithms.mqh doit être placé * dans terminal_data_folder\MQL5\Include */ //+------------------------------------------------------------------+ //| Centre de gravité.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright « Copyright © 2007, MetaQuotes Software Corp. » #property link "http://www.metaquotes.net" //---- version de l'indicateur #property version "1.00" //---- Affichage de l'indicateur dans une fenêtre distincte #property indicator_separate_window //---- Trois tampons sont utilisés pour le calcul et le tracé de l'indicateur #property indicator_buffers 3 //---- deux graphiques sont utilisés #property indicator_plots 2 //+----------------------------------------------+ //| Paramètres de tracé des indicateurs | //+----------------------------------------------+ //---- Affichage de l'indicateur 1 sous la forme d'une ligne tricolore #property indicator_type1 DRAW_COLOR_LINE //---- utilisé pour les couleurs de ligne tricolores #property indicator_color1 Gray,Lime,Red //---- La ligne de l'indicateur 1 est une courbe continue #property indicator_style1 STYLE_SOLID //---- l'épaisseur du trait de l'indicateur 1 est égale à 1 #property indicator_width1 1 //---- affichage de l'étiquette de l'indicateur 1 #property indicator_label1 "Center of Gravity" //+----------------------------------------------+ //| Paramètres de tracé des indicateurs | //+----------------------------------------------+ //---- Affichage de l'indicateur 2 sous forme de ligne #property indicator_type2 DRAW_LINE //---- La couleur bleue est utilisée pour la ligne d'indicateur #property indicator_color2 Blue //---- La ligne de l'indicateur 2 est une courbe continue #property indicator_style2 STYLE_SOLID //---- L'épaisseur de la ligne de l'indicateur 2 est égale à 1 #property indicator_width2 1 //---- affichage de l'étiquette 2 de la ligne d'indicateur #property indicator_label2 "Signal Line" //---- le style de la ligne est une courbe en points et tirets #property indicator_style2 STYLE_DASHDOTDOT //+-----------------------------------+ //| Paramètres d'entrée des indicateurs | //+-----------------------------------+ enum Applied_price_ //Type de constante { PRICE_CLOSE_ = 1, //PRICE_CLOSE PRICE_OPEN_, //COÛT D'OUVERTURE PRICE_HIGH_, //PRICE_HIGH PRICE_LOW_, //PRICE_LOW PRICE_MEDIAN_, //PRIX_MÉDIAN PRICE_TYPICAL_, //PRIX_TYPE PRICE_WEIGHTED_, //POIDS DU PRIX PRICE_SIMPLE_,//PRICE_SIMPLE_ PRICE_QUARTER_, //PRIX_TRIMESTRIEL_ PRICE_TRENDFOLLOW0_, //PRICE_TRENDFOLLOW0_ PRICE_TRENDFOLLOW1_ //PRICE_TRENDFOLLOW1_ }; input int Period_=10; // Période de lissage de l'indicateur input int SmoothPeriod=3; // Période de lissage de la ligne de signal input ENUM_MA_METHOD MA_Method_=MODE_SMA; // Méthode de moyennage des lignes de signal input Applied_price_ AppliedPrice=PRICE_CLOSE_;// Constante de prix /* , utilisé pour le calcul de l'indicateur ( 1-COURS DE CLÔTURE, 2-COURS D'OUVERTURE, 3-COURS HAUT, 4-LOW, 5-MEDIAN, 6-TYPICAL, 7-WEIGHTED, 8-SIMPLE, 9-QUARTER, 10-TRENDFOLLOW, 11-0,5 * TRENDFOLLOW.) */ //+-----------------------------------+ //---- Déclaration de tableaux dynamiques qui, par la suite, //---- sera utilisé comme tampons indicateurs double Ext1Buffer[]; double Ext2Buffer[]; double ColorExt2Buffer[]; //---- Déclaration des variables entières pour le début du calcul des données int StartBar; //+------------------------------------------------------------------+ //| Description de la fonction iPriceSeries | //| Description de la classe Moving_Average | //+------------------------------------------------------------------+ #include <SmoothAlgorithms.mqh> //+------------------------------------------------------------------+ //| Fonction d'initialisation d'un indicateur personnalisé | //+------------------------------------------------------------------+ void OnInit() { //---- initialisation des constantes StartBar=Period_; //---- Définir le tableau dynamique MAMABuffer comme tampon d'indicateurs SetIndexBuffer(0,Ext1Buffer,INDICATOR_DATA); //---- Création d'une étiquette à afficher dans DataWindow PlotIndexSetString(0,PLOT_LABEL,"Center of Gravity"); //---- décalage du début du tracé de l'indicateur PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartBar); //---- Conversion d'un tableau dynamique en tampon d'index de couleurs SetIndexBuffer(1,ColorExt2Buffer,INDICATOR_COLOR_INDEX); //---- décalage du début du tracé de l'indicateur PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,StartBar+1); //---- Définir le tableau dynamique FAMABuffer comme tableau d'indicateurs SetIndexBuffer(2,Ext2Buffer,INDICATOR_DATA); //---- Création d'une étiquette à afficher dans DataWindow PlotIndexSetString(2,PLOT_LABEL,"Signal Line"); //---- décalage du début du tracé de l'indicateur PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,StartBar+1); //---- Initialisation des variables pour le nom abrégé de l'indicateur string shortname; StringConcatenate(shortname,"Center of Gravity(",Period_,")"); //---- Création d'un nom destiné à s'afficher dans une sous-fenêtre distincte et dans une info-bulle IndicatorSetString(INDICATOR_SHORTNAME,shortname); //---- Définir la précision d'affichage des valeurs de l'indicateur IndicatorSetInteger(INDICATOR_DIGITS,0); //---- } //+------------------------------------------------------------------+ //| Fonction d'itération de l'indicateur personnalisé | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // nombre de barres dans l'historique à l'instant actuel const int prev_calculated,// nombre de barres calculé lors de l'appel précédent const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //---- Vérification que le nombre de barres est suffisant pour le calcul if(rates_total<StartBar) return(0); //---- Déclaration de variables à virgule flottante double price_,sma,lwma; //---- Déclaration de variables de type entier int first1,first2,first3,bar; //---- Initialisation de l'indicateur dans le bloc OnCalculate() if(prev_calculated>rates_total || prev_calculated<=0)// Vérification du premier lancement du calcul d'un indicateur { first1=0; // nombre de départ pour le calcul de toutes les mesures de la première boucle first2=Period_+1; // nombre de départ pour le calcul de toutes les barres des lignes de signal first3=Period_+SmoothPeriod+3; // nombre de départ pour le calcul de toutes les barres de la boucle de coloration } else // nombre de départ pour le calcul des nouvelles barres { first1=prev_calculated-1; first3=first1; } //---- CORRECTION (complémentaire) : le paramètre « begin » d'un appel de la série MASeries via une ligne de signal (jelvonal) est toujours //---- Il faut que ce soit le même seuil de fiabilité « CONSTANT » (Period_+1) – tel qu’il était à l’origine //---- Le compteur pointait par erreur vers la variable « first1 », qui change constamment (c'est-à-dire vers l'index de bougie actuel) //---- Ce qui a été défini, et qui correspondait à chaque tick en temps réel à la bougie traitée, a semé la confusion dans le //---- La logique de la classe « simító » de Belsó concernant la question « jusqu’à quand les données sont-elles fiables ? » – c’est pour cette raison qu’elle était instable/défectueuse //---- la valeur actuelle de la ligne de référence, qui n'est donc « corrigée » qu'après un changement de TF (recalcul complet). first2=Period_+1; //---- Déclaration des variables de la classe Moving_Average static CMoving_Average MA,LWMA,SIGN; //---- Cycle principal de calcul de la ligne médiane du canal for(bar=first1; bar<rates_total; bar++) { //---- Appel de la fonction PriceSeries pour récupérer la « série » de cours d'entrée price_=PriceSeries(AppliedPrice,bar,open,low,high,close); sma=MA.MASeries(0,prev_calculated,rates_total,Period_,MODE_SMA,price_,bar,false); lwma=LWMA.MASeries(0,prev_calculated,rates_total,Period_,MODE_LWMA,price_,bar,false); Ext1Buffer[bar]=sma*lwma/_Point; Ext2Buffer[bar]=SIGN.MASeries(first2,prev_calculated,rates_total,SmoothPeriod,MA_Method_,Ext1Buffer[bar],bar,false); } //---- Boucle principale de coloration de la ligne de signal for(bar=first3; bar<rates_total; bar++) { ColorExt2Buffer[bar]=0; if(Ext1Buffer[bar]<Ext2Buffer[bar]) ColorExt2Buffer[bar]=2; else ColorExt2Buffer[bar]=1; } //---- return(rates_total); } //+------------------------------------------------------------------+
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation


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.
Author: Nikolay Kositsin