Indikatoren: "Center of Gravity" von J. F. Ehlers

 

"Center of Gravity" von J. F. Ehlers:

Der "Center of Gravity" (Gravitätszentrum) ist ein Oszillator, der von John Ehlers entwickelt und im Magazin "Stocks & Commodities" (Mai, 2002) veröffentlicht wurde.

Fig.1 Center Of Gravity indicator

Autor: Nikolay Kositsin

 
Das ist nützlich! ... Ich würde gerne die Kriterien für den Farbwechsel kennen.
 

Hallo,

Dieser Oszillator ist ein toller Oszillator, aber ich habe Probleme damit.

Das Ende der Signallinie, die durch die letzte Kerze berechnet wird, wird nicht angezeigt, also zeigt er immer rot zum jetzigen Zeitpunkt. Wenn ich den Oszillator zurücksetze, zeigt er für einen Moment mit dem Ende der Signallinie gute Werte an, schaltet dann aber wieder auf rot um (auch wenn er eigentlich grün anzeigen müsste).

Was sollte ich tun, um dieses Problem zu beheben?

Ich habe versucht, ihn neu zu debuggen, aber das hat nicht geholfen.

Grüßt,

InfiniteDesign

 
Seiner Meinung nach dieser Indikator , der mit mehor und Symbol und Zeitrahmen funktioniert.
Was die besten Werte für die Parameter dieses Indikators?
 

Vielen herzlichen Dank für diesen großartigen Indikator.

Ich fand die vorherige Version genauso interessant und nützlich wie die neue, oder sogar noch mehr.

Könnten Sie bitte den alten Indikator auch auf mq5 portieren? Ich würde es sehr zu schätzen wissen, wenn das möglich wäre.


Prost und vielen Dank im Voraus!

 
Dieser Indikator ist nicht-deterministisch. Fragt man zweimal nach denselben Datenpunkten zu unterschiedlichen Zeiten, erhält man unterschiedliche Antworten. Die Abweichung ist größer, je näher der aktuelle Zeitpunkt liegt. Die Unstimmigkeit kann bis zu 3,7 x 10^-04 betragen.
 
InfiniteDesign:

Hallo,

Dieser Oszillator ist ein toller Oszillator, aber ich habe Probleme damit.

Das Ende der Signallinie, die durch die letzte Kerze berechnet wird, wird nicht angezeigt, also zeigt er immer rot zum jetzigen Zeitpunkt. Wenn ich den Oszillator zurücksetze, zeigt er für einen Moment mit dem Ende der Signallinie gute Werte an, schaltet dann aber wieder auf rot um (auch wenn er eigentlich grün anzeigen müsste).

Was sollte ich tun, um dieses Problem zu beheben?

Ich habe versucht, ihn neu zu debuggen, aber das hat nicht geholfen.

Grüßt,

InfiniteDesign

Ich habe das gleiche Problem...
 

Ich habe versucht, ein Signal aus diesem Indikator zu erstellen, aber es ist mir nicht gelungen...

Kann mir jemand helfen?


//+------------------------------------------------------------------+
//|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 ist in der Datei ExpertSignal
#property tester_indicator "CenterOfGravity.ex5"
// Assistentenbeschreibung Start
//+------------------------------------------------------------------+
//| Beschreibung der Klasse|
//| Titel=Signale des Schwerpunkts|
//| Typ=SignalAdvanced|
//| Name=Mein_COG|
//| Kurzname=CG|
//| Klasse=COG|
//| Seite=Nicht benötigt|
//| Parameter=Period_,int,10,Indikator Mittelungszeitraum |
//| Parameter=Glättungsperiode,int,3,Glättungsperiode der Signalleitung |
//| Parameter=MA_Methode_,ENUM_MA_METHOD,MODE_EMA,Signalmethode |
//| Parameter=AngewandterPreis,int,1,Preiskonstante |
//+------------------------------------------------------------------+
// Beschreibung des Assistenten Ende
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
class COG : public CExpertSignal
  {
private:
CiCustom             m_COG;               // Der Indikator als Objekt
//--- Konfigurierbare Modulparameter
   int               m_Period_;           // Mittelungszeitraum des Indikators
   int               m_SmoothPeriod;      // Glättungszeitraum der Signalleitung 
   ENUM_MA_METHOD    m_MA_Method_;        // Mittelungsmethode für Signalleitungen
   int               m_AppliedPrice;      // Preiskonstante
public:
                     COG(void);
                    ~COG(void);
//--- Überprüfung der Korrektheit der Eingabedaten
   bool              ValidationSettings();
//--- Erstellen von Indikatoren und Zeitreihen für das Modul der Signale
   bool              InitIndicators(CIndicators *indicators);
//--- Zugang zu Indikatordaten
   double            CG(const int index)                 const { return(m_COG.GetData(0,index)); }
   double            Signal(const int index)             const { return(m_COG.GetData(1,index)); }   
//--- Überprüfung der Kauf- und Verkaufsbedingungen
   virtual int       LongCondition();
   virtual int       ShortCondition();
//--- Methoden zur Einstellung
   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:
   //--- Indikator erstellen
   bool              CreateCOG(CIndicators *indicators);



  };
//+------------------------------------------------------------------+
//| Konstruktor|
//+------------------------------------------------------------------+
COG::COG(void) :           m_Period_(10),                // Mittelungszeitraum des Indikators
                           m_SmoothPeriod(3),            // Glättungszeitraum der Signalleitung 
                           m_MA_Method_(MODE_EMA),       // Mittelungsmethode für Signalleitungen
                           m_AppliedPrice(1)             // Preiskonstante
  {
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
COG::~COG()
  {
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Prüft die Eingabeparameter und gibt true zurück, wenn alles in Ordnung ist.
//+------------------------------------------------------------------+
bool COG:: ValidationSettings()
  {
   //--- Aufruf der Basisklassenmethode
   if(!CExpertSignal::ValidationSettings())  return(false);
   //--- Perioden prüfen, Anzahl der Balken für die Berechnung des MA >=1
   if(m_Period_<1)
     {
      PrintFormat("Incorrect value set for one of the period! Period_=%d",
                  m_Period_);
      return false;
     }
//--- Perioden prüfen, Anzahl der Balken für die Berechnung des MA >=1
   if(m_SmoothPeriod<1)
     {
      PrintFormat("Incorrect value set for one of the period! m_SmoothPeriod=%d",
                  m_SmoothPeriod);
      return false;
     }
//--- Der Typ der schnellen MA-Glättung muss einer der vier Werte der Aufzählung sein
   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 muss gültig sein
   if(m_AppliedPrice<1 || m_AppliedPrice>11) 
     {
      PrintFormat("Invalid type of Price!");
      return false;
     }
//--- Alle Prüfungen sind abgeschlossen, alles ist in Ordnung
   return true;
  }
//+------------------------------------------------------------------+
//| Erstellt Indikatoren|
//| Eingabe: ein Zeiger auf eine Sammlung von Indikatoren
//| Ausgabe: true bei Erfolg, sonst false |
//+------------------------------------------------------------------+
bool COG::InitIndicators(CIndicators *indicators)
  {
//--- Standardprüfung der Sammlung von Indikatoren auf NULL
   if(indicators==NULL) return(false);
//--- Initialisierung von Indikatoren und Zeitreihen in zusätzlichen Filtern
   if(!CExpertSignal::InitIndicators(indicators)) return(false);
//--- Erstellung unserer Indikatoren
   if(!CreateCOG(indicators))                  return(false);   
//--- Erreicht diesen Teil, also war die Funktion erfolgreich, Rückgabe true
   return(true);
  }
//+------------------------------------------------------------------+
//| Erzeugt den Indikator "COG".|
//+------------------------------------------------------------------+
bool COG::CreateCOG(CIndicators *indicators)
  {
//--- Überprüfung des Zeigers
   if(indicators==NULL) return(false);
//--- Hinzufügen eines Objekts zur Sammlung
   if(!indicators.Add(GetPointer(m_COG)))
     {
      printf(__FUNCTION__+": Error adding an object of the COG");
      return(false);
     }
//--- Einstellung der Parameter des 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_;                 // Zeitraum
   parameters[2].type=TYPE_INT;
   parameters[2].integer_value=m_SmoothPeriod;            // Glättungszeitraum der Signalleitung
   parameters[3].type=TYPE_INT;
   parameters[3].integer_value=m_MA_Method_;              // Mittelungsmethode für Signalleitungen
   parameters[4].type=TYPE_INT;
   parameters[4].integer_value=m_AppliedPrice;            // Preiskonstante
//--- Objektinitialisierung 
   if(!m_COG.Create(m_symbol.Name(),0,IND_CUSTOM,5,parameters))
     {
      printf(__FUNCTION__+": Error initializing the object of the COG");
      return(false);
     }
//--- Anzahl der Puffer
   if(!m_COG.NumBuffers(2)) return(false);
//--- Erreicht diesen Teil, also war die Funktion erfolgreich, Rückgabe true
   return(true);
  }
//+------------------------------------------------------------------+
//| Gibt die Stärke des Kaufsignals zurück|
//+------------------------------------------------------------------+
int COG::LongCondition()
  {
   int signal=0;
//--- Bei Betrieb mit Ticks idx=0, bei Betrieb mit geformten Balken idx=1
   int idx=StartIndex();
//--- Werte der COGs beim letzten gebildeten Balken
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- Werte der COGs am vorletzten gebildeten Balken
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//---wenn CG > Signal && CG-1 < Signal-1
   if((last_fast_value>last_slow_value) && (prev_fast_value<prev_slow_value))
     {
      signal=100; // Es gibt ein Signal zum Kauf
     }
//--- Rückgabe des Signalwertes
   return(signal);
  }
//+------------------------------------------------------------------+
//| Gibt die Stärke des Verkaufssignals zurück|
//+------------------------------------------------------------------+
int COG::ShortCondition()
  {
   int signal=0;
//--- Bei Betrieb mit Ticks idx=0, bei Betrieb mit geformten Balken idx=1
   int idx=StartIndex();
//--- Werte der COGs beim letzten gebildeten Balken
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- Werte der COGs am vorletzten gebildeten Balken
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//---wenn CG < Signal && CG-1 > Signal-1
   if((last_fast_value<last_slow_value) && (prev_fast_value>prev_slow_value))
     {
      signal=100; // Es gibt ein Signal zum Verkauf
     }
//--- Rückgabe des Signalwertes
   return(signal);
  }
 
interessante Sache... muss den Algorithmus unter Kampfbedingungen bestimmen
 

Der Indikator wird ohne Fehler kompiliert:

und er funktioniert -

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

Sie müssen nur die feste Datei smoothalgorithms.mqh verwenden - siehe Beitrag


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