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
Cuáles son los mejores valores para los parámetros de este indicador?
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
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); }
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso


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