Indicadores: Centro de Gravidade por J. F. Ehlers

 

Centro de Gravidade por J. F. Ehlers:

O oscilador Centro de Gravidade foi desenvolvido por John Ehlers e apresentado na revista "Stocks & Commodities" (Maio, 2002).

Fig.1 Indicador Centro de Gravidade

Autor: Nikolay Kositsin

 
É útil! ...Gostaria de saber os critérios para a mudança de cor.
 

Olá,

Esse oscilador é ótimo, mas tenho problemas com ele.

O final da linha de sinal, que é calculado pelo último candle, não é exibido, portanto, ele sempre mostra a cor vermelha no momento atual. Quando eu reinicio o oscilador, ele mostra bons valores por um momento com o fim da linha de sinal, mas depois volta para o vermelho (mesmo que tenha que mostrar verde).

O que devo fazer para eliminar esse problema?

Tentei refazer a depuração, mas não adiantou.

Saudações,

InfiniteDesign

 
Em sua opinião, esse indicador funciona com mehor , símbolo e período de tempo.
Quais são os melhores valores para os parâmetros desse indicador?
 

Muito obrigado por esse excelente indicador.

Achei a versão anterior tão interessante e útil quanto a nova, ou de fato ainda mais.

Você poderia portar o antigo para o mq5 também? Ficaria muito grato se isso pudesse ser feito.


Abraços e obrigado desde já!

 
Esse indicador não é determinístico. Solicite os mesmos pontos de dados duas vezes, em momentos diferentes, e você obterá respostas diferentes. O desvio é maior perto da hora atual. A inconsistência pode ser tão grande quanto 3,7 x 10^-04.
 
InfiniteDesign:

Olá,

Esse oscilador é ótimo, mas tenho problemas com ele.

O final da linha de sinal, que é calculado pelo último candle, não é exibido, portanto, ele sempre mostra a cor vermelha no momento atual. Quando eu reinicio o oscilador, ele mostra bons valores por um momento com o fim da linha de sinal, mas depois volta para o vermelho (mesmo que tenha que mostrar verde).

O que devo fazer para eliminar esse problema?

Tentei refazer a depuração, mas não adiantou.

Saudações,

InfiniteDesign

Estou com o mesmo problema...
 

Tentei criar um sinal a partir desse indicador, mas não consegui...

Alguma ajuda?


//+------------------------------------------------------------------+
//|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 está no arquivo ExpertSignal
#property tester_indicator "CenterOfGravity.ex5"
// início da descrição do assistente
//+------------------------------------------------------------------+
//| Descrição da classe|
//| Título=Sinais do centro de gravidade|
//| Type=SignalAdvanced|
//| Name=My_COG|
//| ShortName=CG|
//| Class=COG|
//| Página=Não é necessário|
//| Parâmetro=Period_,int,10,Período de cálculo da média do indicador
//| Parâmetro=SmoothPeriod,int,3,Período de suavização da linha de sinal
//| Parâmetro=MA_Method_,ENUM_MA_METHOD,MODE_EMA,Signal Method
//| Parâmetro=AppliedPrice,int,1,Constante de preço
//+------------------------------------------------------------------+
// descrição do assistente fim
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
class COG : public CExpertSignal
  {
private:
CiCustom             m_COG;               // O indicador como um objeto
//--- Parâmetros configuráveis do módulo
   int               m_Period_;           // Período de cálculo da média do indicador
   int               m_SmoothPeriod;      // Período de regularização da linha de sinal 
   ENUM_MA_METHOD    m_MA_Method_;        // Método de cálculo da média da linha de sinal
   int               m_AppliedPrice;      // Constante de preço
public:
                     COG(void);
                    ~COG(void);
//--- Verificação da exatidão dos dados de entrada
   bool              ValidationSettings();
//--- Criação de indicadores e séries temporais para o módulo de sinais
   bool              InitIndicators(CIndicators *indicators);
//--- Acesso aos dados do indicador
   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ção das condições de compra e venda
   virtual int       LongCondition();
   virtual int       ShortCondition();
//--- Métodos de configuração
   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:
   //--- Criação de indicador
   bool              CreateCOG(CIndicators *indicators);



  };
//+------------------------------------------------------------------+
//| Construtor|
//+------------------------------------------------------------------+
COG::COG(void) :           m_Period_(10),                // Período de cálculo da média do indicador
                           m_SmoothPeriod(3),            // Período de regularização da linha de sinal 
                           m_MA_Method_(MODE_EMA),       // Método de cálculo da média da linha de sinal
                           m_AppliedPrice(1)             // Constante de preço
  {
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
COG::~COG()
  {
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Verifica os parâmetros de entrada e retorna true se tudo estiver OK.
//+------------------------------------------------------------------+
bool COG:: ValidationSettings()
  {
   //--- Chame o método da classe base
   if(!CExpertSignal::ValidationSettings())  return(false);
   //--- Períodos de verificação, número de barras para o cálculo da MA >=1
   if(m_Period_<1)
     {
      PrintFormat("Incorrect value set for one of the period! Period_=%d",
                  m_Period_);
      return false;
     }
//--- Períodos de verificação, número de barras para o cálculo da MA >=1
   if(m_SmoothPeriod<1)
     {
      PrintFormat("Incorrect value set for one of the period! m_SmoothPeriod=%d",
                  m_SmoothPeriod);
      return false;
     }
//--- O tipo de suavização Fast MA deve ser um dos quatro valores da enumeração
   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 ser válido
   if(m_AppliedPrice<1 || m_AppliedPrice>11) 
     {
      PrintFormat("Invalid type of Price!");
      return false;
     }
//--- Todas as verificações foram concluídas, tudo está ok
   return true;
  }
//+------------------------------------------------------------------+
//| Cria indicadores|
//| Entrada: um ponteiro para uma coleção de indicadores
//| Saída: verdadeiro se for bem-sucedido, caso contrário, falso
//+------------------------------------------------------------------+
bool COG::InitIndicators(CIndicators *indicators)
  {
//--- Verificação padrão da coleção de indicadores para NULL
   if(indicators==NULL) return(false);
//--- Inicialização de indicadores e séries temporais em filtros adicionais
   if(!CExpertSignal::InitIndicators(indicators)) return(false);
//--- Criando nossos indicadores
   if(!CreateCOG(indicators))                  return(false);   
//--- Chegou a essa parte, então a função foi bem-sucedida, retorne true
   return(true);
  }
//+------------------------------------------------------------------+
//| Cria o indicador "COG".|
//+------------------------------------------------------------------+
bool COG::CreateCOG(CIndicators *indicators)
  {
//--- Verificando o ponteiro
   if(indicators==NULL) return(false);
//--- Adicionando um objeto à coleção
   if(!indicators.Add(GetPointer(m_COG)))
     {
      printf(__FUNCTION__+": Error adding an object of the COG");
      return(false);
     }
//--- Configuração dos parâmetros do 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_;                 // Período
   parameters[2].type=TYPE_INT;
   parameters[2].integer_value=m_SmoothPeriod;            // Período de regularização da linha de sinal
   parameters[3].type=TYPE_INT;
   parameters[3].integer_value=m_MA_Method_;              // Método de cálculo da média da linha de sinal
   parameters[4].type=TYPE_INT;
   parameters[4].integer_value=m_AppliedPrice;            // Constante de preço
//--- Inicialização do objeto 
   if(!m_COG.Create(m_symbol.Name(),0,IND_CUSTOM,5,parameters))
     {
      printf(__FUNCTION__+": Error initializing the object of the COG");
      return(false);
     }
//--- Número de buffers
   if(!m_COG.NumBuffers(2)) return(false);
//--- Chegou a essa parte, então a função foi bem-sucedida, retorne true
   return(true);
  }
//+------------------------------------------------------------------+
//| Retorna a intensidade do sinal de compra|
//+------------------------------------------------------------------+
int COG::LongCondition()
  {
   int signal=0;
//--- Para operação com ticks idx=0, para operação com barras formadas idx=1
   int idx=StartIndex();
//--- Valores de COGs na última barra formada
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- Valores de COGs na penúltima barra formada
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//---Se CG > Sinal && CG-1 < Sinal-1
   if((last_fast_value>last_slow_value) && (prev_fast_value<prev_slow_value))
     {
      signal=100; // Há um sinal para comprar
     }
//--- Retorna o valor do sinal
   return(signal);
  }
//+------------------------------------------------------------------+
//| Retorna a intensidade do sinal de venda|
//+------------------------------------------------------------------+
int COG::ShortCondition()
  {
   int signal=0;
//--- Para operação com ticks idx=0, para operação com barras formadas idx=1
   int idx=StartIndex();
//--- Valores de COGs na última barra formada
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- Valores de COGs na penúltima barra formada
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//---Se CG < Sinal && CG-1 > Sinal-1
   if((last_fast_value<last_slow_value) && (prev_fast_value>prev_slow_value))
     {
      signal=100; // Há um sinal para vender
     }
//--- Retorna o valor do sinal
   return(signal);
  }
 
interessante... é preciso determinar o algoritmo em condições de combate
 

O indicador é compilado sem nenhum erro:

e funciona -

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

Só é necessário usar o arquivo smoothalgorithms.mqh fixo - veja a postagem


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