Indicatori: Centro di gravità di Ehlers - Centro di gravità J. F. Ehlers

 

Centro di gravità di Ehlers - Centro di gravità J. F. Ehlers:

Il Centro di gravità è un oscillatore sviluppato da John Ehlers e pubblicato nel numero di maggio 2002 di Stocks & Commodities.

Centro di gravità di Ehlers - Centro di gravità J. F. Ehlers

Author: Nikolay Kositsin

 
È utile! ... Vorrei conoscere i criteri per il cambio di colore.
 

Salve,

Questo oscillatore è ottimo, ma ho dei problemi con esso.

La fine della linea del segnale, che è calcolata dall'ultima candela, non viene mostrata, quindi mostra sempre il rosso al momento attuale. Quando resetto l'oscillatore, per un momento mostra valori buoni con la fine della linea del segnale, ma poi torna al rosso (anche se deve mostrare il verde).

Cosa devo fare per eliminare questo problema?

Ho provato a rifare il debug ma non è servito.

Saluti,

InfiniteDesign

 
Secondo lui questo indicatore funziona con mehor , simbolo e timeframe.
Quali sono i valori migliori per i parametri di questo indicatore?
 

Grazie mille per questo grande indicatore.

Ho trovato la versione precedente altrettanto interessante e utile di quella nuova, se non addirittura di più...

Potreste per favore portare il vecchio indicatore anche su mq5? Apprezzerei molto se si potesse fare.


Salute e grazie in anticipo!!!

 
Questo indicatore non è deterministico. Se si chiedono gli stessi dati due volte, in momenti diversi, si otterranno risposte diverse. La deriva è maggiore se ci si avvicina all'ora corrente. L'incongruenza può arrivare a 3,7 x 10^-04.
 
InfiniteDesign:

Salve,

Questo oscillatore è ottimo, ma ho dei problemi con esso.

La fine della linea del segnale, che è calcolata dall'ultima candela, non viene mostrata, quindi mostra sempre il rosso al momento attuale. Quando resetto l'oscillatore, per un momento mostra valori buoni con la fine della linea del segnale, ma poi torna al rosso (anche se deve mostrare il verde).

Cosa devo fare per eliminare questo problema?

Ho provato a rifare il debug ma non è servito.

Saluti,

InfiniteDesign

Ho lo stesso problema...
 

Ho provato a creare un segnale da questo indicatore, ma non ci sono riuscito...

Qualche aiuto?


//+------------------------------------------------------------------+
//|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 si trova nel file ExpertSignal
#property tester_indicator "CenterOfGravity.ex5"
// avvio della descrizione della procedura guidata
//+------------------------------------------------------------------+
//| Descrizione della classe|
//| Titolo=Segnali del centro di gravità|
//| Tipo=SegnaleAvanzato|
//| Nome=Mio_COG|
//| Nome breve=CG|
//| Classe=COG|
//| Pagina=Non necessario|
//| Parametro=Periodo_,int,10,Periodo di mediazione dell'indicatore.
//| Parametro=SmoothPeriod,int,3,Periodo di lisciatura della linea del segnale |
//| Parametro=MA_Method_,ENUM_MA_METHOD,MODE_EMA,Signal Method |
//| Parametro=Prezzo applicato,int,1,Prezzo costante |
//+------------------------------------------------------------------+
// descrizione della procedura guidata fine
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
class COG : public CExpertSignal
  {
private:
CiCustom             m_COG;               // L'indicatore come oggetto
//--- Parametri configurabili del modulo
   int               m_Period_;           // Periodo di mediazione dell'indicatore
   int               m_SmoothPeriod;      // Periodo di lisciatura della linea del segnale 
   ENUM_MA_METHOD    m_MA_Method_;        // Metodo di mediazione della linea del segnale
   int               m_AppliedPrice;      // Costante di prezzo
public:
                     COG(void);
                    ~COG(void);
//--- Verifica della correttezza dei dati in ingresso
   bool              ValidationSettings();
//--- Creazione di indicatori e serie temporali per il modulo dei segnali
   bool              InitIndicators(CIndicators *indicators);
//--- Accesso ai dati dell'indicatore
   double            CG(const int index)                 const { return(m_COG.GetData(0,index)); }
   double            Signal(const int index)             const { return(m_COG.GetData(1,index)); }   
//--- Verifica delle condizioni di acquisto e vendita
   virtual int       LongCondition();
   virtual int       ShortCondition();
//--- Metodi per impostare
   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:
   //--- Creazione dell'indicatore
   bool              CreateCOG(CIndicators *indicators);



  };
//+------------------------------------------------------------------+
//| Costruttore|
//+------------------------------------------------------------------+
COG::COG(void) :           m_Period_(10),                // Periodo di mediazione dell'indicatore
                           m_SmoothPeriod(3),            // Periodo di lisciatura della linea del segnale 
                           m_MA_Method_(MODE_EMA),       // Metodo di mediazione della linea del segnale
                           m_AppliedPrice(1)             // Costante di prezzo
  {
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
COG::~COG()
  {
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Controlla i parametri di input e restituisce true se tutto è OK |
//+------------------------------------------------------------------+
bool COG:: ValidationSettings()
  {
   //--- Chiamare il metodo della classe base
   if(!CExpertSignal::ValidationSettings())  return(false);
   //--- Controllo dei periodi, numero di barre per il calcolo della MA >=1
   if(m_Period_<1)
     {
      PrintFormat("Incorrect value set for one of the period! Period_=%d",
                  m_Period_);
      return false;
     }
//--- Controllo dei periodi, numero di barre per il calcolo della MA >=1
   if(m_SmoothPeriod<1)
     {
      PrintFormat("Incorrect value set for one of the period! m_SmoothPeriod=%d",
                  m_SmoothPeriod);
      return false;
     }
//--- Il tipo di lisciatura veloce MA deve essere uno dei quattro valori dell'enumerazione
   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 deve essere valido
   if(m_AppliedPrice<1 || m_AppliedPrice>11) 
     {
      PrintFormat("Invalid type of Price!");
      return false;
     }
//--- Tutti i controlli sono stati completati, tutto è ok
   return true;
  }
//+------------------------------------------------------------------+
//| Crea indicatori|
//| Ingresso: un puntatore a una collezione di indicatori |
//| Uscita: true se ha successo, altrimenti false |
//+------------------------------------------------------------------+
bool COG::InitIndicators(CIndicators *indicators)
  {
//--- Controllo standard della collezione di indicatori per NULL
   if(indicators==NULL) return(false);
//--- Inizializzazione degli indicatori e delle serie temporali nei filtri aggiuntivi
   if(!CExpertSignal::InitIndicators(indicators)) return(false);
//--- Creazione degli indicatori
   if(!CreateCOG(indicators))                  return(false);   
//--- Raggiunta questa parte, la funzione ha avuto successo, restituire true
   return(true);
  }
//+------------------------------------------------------------------+
//| Crea l'indicatore "COG|
//+------------------------------------------------------------------+
bool COG::CreateCOG(CIndicators *indicators)
  {
//--- Controllo del puntatore
   if(indicators==NULL) return(false);
//--- Aggiunta di un oggetto alla collezione
   if(!indicators.Add(GetPointer(m_COG)))
     {
      printf(__FUNCTION__+": Error adding an object of the COG");
      return(false);
     }
//--- Impostazione dei parametri del 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_;                 // Periodo
   parameters[2].type=TYPE_INT;
   parameters[2].integer_value=m_SmoothPeriod;            // Periodo di lisciatura della linea del segnale
   parameters[3].type=TYPE_INT;
   parameters[3].integer_value=m_MA_Method_;              // Metodo di mediazione della linea del segnale
   parameters[4].type=TYPE_INT;
   parameters[4].integer_value=m_AppliedPrice;            // Costante di prezzo
//--- Inizializzazione dell'oggetto 
   if(!m_COG.Create(m_symbol.Name(),0,IND_CUSTOM,5,parameters))
     {
      printf(__FUNCTION__+": Error initializing the object of the COG");
      return(false);
     }
//--- Numero di buffer
   if(!m_COG.NumBuffers(2)) return(false);
//--- Raggiunta questa parte, la funzione ha avuto successo, restituire true
   return(true);
  }
//+------------------------------------------------------------------+
//| Restituisce l'intensità del segnale di acquisto|
//+------------------------------------------------------------------+
int COG::LongCondition()
  {
   int signal=0;
//--- Per operazioni con tick idx=0, per operazioni con barre formate idx=1
   int idx=StartIndex();
//--- Valori delle COG all'ultima barra formata
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- Valori delle COG nella penultima barra formata
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//---Se CG > Segnale && CG-1 < Segnale-1
   if((last_fast_value>last_slow_value) && (prev_fast_value<prev_slow_value))
     {
      signal=100; // C'è un segnale di acquisto
     }
//--- Restituzione del valore del segnale
   return(signal);
  }
//+------------------------------------------------------------------+
//| Restituisce la forza del segnale di vendita|
//+------------------------------------------------------------------+
int COG::ShortCondition()
  {
   int signal=0;
//--- Per operazioni con tick idx=0, per operazioni con barre formate idx=1
   int idx=StartIndex();
//--- Valori delle COG all'ultima barra formata
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- Valori delle COG nella penultima barra formata
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//---Se CG < Segnale && CG-1 > Segnale-1
   if((last_fast_value<last_slow_value) && (prev_fast_value>prev_slow_value))
     {
      signal=100; // C'è un segnale di vendita
     }
//--- Restituzione del valore del segnale
   return(signal);
  }
 
Interessante... occorre determinare l'algoritmo in condizioni di combattimento.
 

L'indicatore viene compilato senza errori:

e funziona -

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

Basta usare il file smoothalgorithms.mqh fisso - guarda il post


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