Indicadores: Centro de Gravedad J. F. Ehlers

 

Centro de Gravedad J. F. Ehlers:

El centro de gravedad es el oscilador desarrollado por John Ehlers y presentado en la revista "Acciones y Materias Primas" (Mayo, 2002).

Fig.1 Indicador Centro de Gravedad

Autor: Nikolay Kositsin

 
¡Es útil! ...Me gustaría saber los criterios para el cambio de color.
 

Hola,

Este oscilador es una gran, pero tengo problemas con él.

El final de la línea de señal, que se calcula por la última vela no se muestra, por lo que siempre muestra rojo en el momento actual. Cuando reinicio el oscilador muestra buenos valores por un momento con el final de la línea de señal, pero luego cambia de nuevo a rojo, (incluso si tiene que mostrar verde).

¿Qué debo hacer para eliminar este problema?

He intentado volver a depurarlo pero no ha servido de nada.

Saludos,

InfiniteDesign

 
En su opinión este indicador que funciona con mehor y símbolo y timeframe.
Cuáles son los mejores valores para los parámetros de este indicador?
 

Muchísimas gracias por este magnífico indicador.

La versión anterior me pareció tan interesante y útil como la nueva, o incluso más.

¿Podrías por favor portar el antiguo a mq5 también? Te lo agradecería mucho.


¡¡Saludos, y gracias de antemano !!

 
Este indicador no es determinista. Pregunte dos veces por los mismos puntos de datos, a horas distintas, y obtendrá respuestas diferentes. La desviación es mayor cerca de la hora actual. La inconsistencia puede ser tan grande como 3,7 x 10^-04.
 
InfiniteDesign:

Hola,

Este oscilador es una gran, pero tengo problemas con él.

El final de la línea de señal, que se calcula por la última vela no se muestra, por lo que siempre muestra rojo en el momento actual. Cuando reinicio el oscilador muestra buenos valores por un momento con el final de la línea de señal, pero luego cambia de nuevo a rojo, (incluso si tiene que mostrar verde).

¿Qué debo hacer para eliminar este problema?

He intentado volver a depurarlo pero no ha servido de nada.

Saludos,

InfiniteDesign

Tengo el mismo problema...
 

He intentado crear una Señal a partir de este indicador, pero no he podido...

¿Alguna ayuda?


//+------------------------------------------------------------------+
//|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á en el archivo ExpertSignal
#property tester_indicator "CenterOfGravity.ex5"
// descripción del asistente inicio
//+------------------------------------------------------------------+
//| Descripción de la clase|
//| Título=Señales del centro de gravedad|
//| Type=SignalAdvanced|
//| Nombre=Mi_COG|
//| ShortName=CG|
//| Class=COG|
//| Página=No es necesario|
//| Parámetro=Periodo_,int,10,Indicador periodo de promediación |
//| Parameter=SmoothPeriod,int,3,Periodo de suavizado de la línea de señal |
//| Parameter=MA_Method_,ENUM_MA_METHOD,MODE_EMA,Signal Method |
//| Parameter=PrecioAplicado,int,1,Precio constante ||
//+------------------------------------------------------------------+
// descripción del asistente fin
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
class COG : public CExpertSignal
  {
private:
CiCustom             m_COG;               // El indicador como objeto
//--- Parámetros configurables del módulo
   int               m_Period_;           // Periodo medio del indicador
   int               m_SmoothPeriod;      // Periodo de suavizado de la línea de señal 
   ENUM_MA_METHOD    m_MA_Method_;        // Método de promediado de la línea de señal
   int               m_AppliedPrice;      // Precio constante
public:
                     COG(void);
                    ~COG(void);
//--- Comprobación de la exactitud de los datos de entrada
   bool              ValidationSettings();
//--- Creación de indicadores y series temporales para el módulo de señales
   bool              InitIndicators(CIndicators *indicators);
//--- Acceso a los datos del 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)); }   
//--- Comprobación de las condiciones de compra y venta
   virtual int       LongCondition();
   virtual int       ShortCondition();
//--- Métodos para fijar
   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:
   //--- Crear indicador
   bool              CreateCOG(CIndicators *indicators);



  };
//+------------------------------------------------------------------+
//| Constructor|
//+------------------------------------------------------------------+
COG::COG(void) :           m_Period_(10),                // Periodo medio del indicador
                           m_SmoothPeriod(3),            // Periodo de suavizado de la línea de señal 
                           m_MA_Method_(MODE_EMA),       // Método de promediado de la línea de señal
                           m_AppliedPrice(1)             // Precio constante
  {
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
COG::~COG()
  {
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Comprueba los parámetros de entrada y devuelve true si todo está bien ||
//+------------------------------------------------------------------+
bool COG:: ValidationSettings()
  {
   //--- Llamar al método de la clase base
   if(!CExpertSignal::ValidationSettings())  return(false);
   //--- Comprobar periodos, número de barras para el cálculo de la MA >=1
   if(m_Period_<1)
     {
      PrintFormat("Incorrect value set for one of the period! Period_=%d",
                  m_Period_);
      return false;
     }
//--- Comprobar periodos, número de barras para el cálculo de la MA >=1
   if(m_SmoothPeriod<1)
     {
      PrintFormat("Incorrect value set for one of the period! m_SmoothPeriod=%d",
                  m_SmoothPeriod);
      return false;
     }
//--- El tipo de suavizado MA rápido debe ser uno de los cuatro valores de la enumeración
   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 debe ser válido
   if(m_AppliedPrice<1 || m_AppliedPrice>11) 
     {
      PrintFormat("Invalid type of Price!");
      return false;
     }
//--- Todas las comprobaciones se han completado, todo está bien
   return true;
  }
//+------------------------------------------------------------------+
//| Crea indicadores|
//| Entrada: un puntero a una colección de indicadores.
//| Salida: true si tiene éxito, en caso contrario false |
//+------------------------------------------------------------------+
bool COG::InitIndicators(CIndicators *indicators)
  {
//--- Comprobación estándar de la colección de indicadores para NULL
   if(indicators==NULL) return(false);
//--- Inicialización de indicadores y series temporales en filtros adicionales
   if(!CExpertSignal::InitIndicators(indicators)) return(false);
//--- Crear nuestros indicadores
   if(!CreateCOG(indicators))                  return(false);   
//--- Llegó a esta parte, por lo que la función tuvo éxito, devuelva true
   return(true);
  }
//+------------------------------------------------------------------+
//| Crea el indicador "COG"|
//+------------------------------------------------------------------+
bool COG::CreateCOG(CIndicators *indicators)
  {
//--- Comprobación del puntero
   if(indicators==NULL) return(false);
//--- Añadir un objeto a la colección
   if(!indicators.Add(GetPointer(m_COG)))
     {
      printf(__FUNCTION__+": Error adding an object of the COG");
      return(false);
     }
//--- Parametrización 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_;                 // Período
   parameters[2].type=TYPE_INT;
   parameters[2].integer_value=m_SmoothPeriod;            // Periodo de suavizado de la línea de señal
   parameters[3].type=TYPE_INT;
   parameters[3].integer_value=m_MA_Method_;              // Método de promediado de la línea de señal
   parameters[4].type=TYPE_INT;
   parameters[4].integer_value=m_AppliedPrice;            // Precio constante
//--- Inicialización del 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);
//--- Llegó a esta parte, por lo que la función tuvo éxito, devuelva true
   return(true);
  }
//+------------------------------------------------------------------+
//| Devuelve la fuerza de la señal de compra|
//+------------------------------------------------------------------+
int COG::LongCondition()
  {
   int signal=0;
//--- Para operación con ticks idx=0, para operación con barras formadas idx=1
   int idx=StartIndex();
//--- Valores de COGs en la última barra formada
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- Valores de COGs en la penúltima barra formada
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//---Si CG > Señal && CG-1 < Señal-1
   if((last_fast_value>last_slow_value) && (prev_fast_value<prev_slow_value))
     {
      signal=100; // Hay una señal de compra
     }
//--- Devuelve el valor de la señal
   return(signal);
  }
//+------------------------------------------------------------------+
//| Devuelve la fuerza de la señal de venta|
//+------------------------------------------------------------------+
int COG::ShortCondition()
  {
   int signal=0;
//--- Para operación con ticks idx=0, para operación con barras formadas idx=1
   int idx=StartIndex();
//--- Valores de COGs en la última barra formada
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- Valores de COGs en la penúltima barra formada
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//---If CG < Señal && CG-1 > Señal-1
   if((last_fast_value<last_slow_value) && (prev_fast_value>prev_slow_value))
     {
      signal=100; // Hay una señal de venta
     }
//--- Devuelve el valor de la señal
   return(signal);
  }
 
cosa interesante... hay que determinar el algoritmo en condiciones de combate
 

El indicador se compila sin errores:

y funciona -

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

Sólo tiene que utilizar el archivo smoothalgorithms.mqh fijo - mira el post


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