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
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á!
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
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); }
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso


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