Индикаторы: Центр гравитации Элерса - Center of Gravity J. F. Ehlers

 

Центр гравитации Элерса - Center of Gravity J. F. Ehlers:

Центр гравитации является осциллятором, разработанным Джоном Элерсом и представленном в майском выпуске журнала "Stocks & Commodities" (2002г.).

Центр гравитации имеет по существу нулевое отставание и позволяет четко определять поворотные моменты. Этот индикатор является результатом исследования Элерсом адаптивных фильтров. Индикатор "центр гравитации" позволяет идентифицировать главные разворотные точки почти без отставания.

Идея вычисления центра гравитации выросла из наблюдения за тем, каково отставание различных фильтров с конечной импульсной характеристикой (КИХ) в соответствии с относительной амплитудой коэффициентов фильтров. Простая средняя скользящая (SMA) является КИХ-фильтром, где все коэффициенты имеют одно и тоже значение. В результате центром гравитации SMA является точный центр фильтра. Взвешенная средняя скользящая (WMA) представляет собой КИХ-фильтр, где последнее ценовое изменение взвешено по длине фильтра, предпоследнее ценовое изменение взвешено по меньшей длине фильтра и так далее.

Индикатор Center Of Gravity

Автор: Nikolay Kositsin

 
пригодился! ...ещё бы знать критерии изменения окраски
 

Здравствуйте,

Этот осциллятор отличный, но у меня с ним проблемы.

Конец сигнальной линии, который рассчитывается по последней свече, не отображается, поэтому он всегда показывает красный цвет в настоящее время. Когда я перезагружаю осциллятор, он на мгновение показывает хорошие значения с концом сигнальной линии, но затем снова переключается на красный цвет (даже если он должен показывать зеленый).

Что я должен сделать, чтобы устранить эту проблему?

Я пытался отладить его заново, но это не помогло.

Приветствую,

InfiniteDesign

 
Как он считает, этот индикатор , который работает с мехором и символом и таймфреймом.
Какие наилучшие значения для параметров этого индикатора?
 

Большое спасибо за этот замечательный индикатор.

Я нашел предыдущую версию такой же интересной и полезной, как и новую, или даже более того.

Не могли бы вы перенести старую версию и на mq5? Я был бы очень признателен, если бы это было возможно.


Будьте здоровы, и спасибо заранее !!!

 
Этот показатель недетерминирован. Запросите одни и те же точки данных дважды, в разное время, и вы получите разные ответы. Дрейф больше ближе к текущему времени. Несоответствие может достигать 3,7 x 10^-04.
 
InfiniteDesign:

Здравствуйте,

Этот осциллятор отличный, но у меня с ним проблемы.

Конец сигнальной линии, который рассчитывается по последней свече, не отображается, поэтому он всегда показывает красный цвет в настоящее время. Когда я перезагружаю осциллятор, он на мгновение показывает хорошие значения с концом сигнальной линии, но затем снова переключается на красный цвет (даже если он должен показывать зеленый).

Что я должен сделать, чтобы устранить эту проблему?

Я пытался отладить его заново, но это не помогло.

Приветствую,

InfiniteDesign

У меня та же проблема...
 

Я пытался создать Сигнал из этого индикатора, но не смог...

Есть помощь?


//+------------------------------------------------------------------+
//|COG.mqh |
//|Бруно Пио |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Bruno Pio"
#property link      "http://www.mql5.com"
#property version   "1.00"
#include "..\ExpertSignal.mqh"   // CExpertSignal находится в файле ExpertSignal
#property tester_indicator "CenterOfGravity.ex5"
// начало описания мастера
//+------------------------------------------------------------------+
//| Описание класса|
//| Название=Сигналы центра тяжести|
//| Type=SignalAdvanced|
//| Name=My_COG|
//| ShortName=CG|
//| Class=COG|
//| Страница=Не нужна|
//| Параметр=Period_,int,10, Период усреднения индикатора |
//| Параметр=SmoothPeriod, int, 3, Период сглаживания сигнальной линии |
//| Параметр=MA_Method_,ENUM_MA_METHOD,MODE_EMA,Signal Method |
//| Параметр=AppliedPrice, int, 1, константа цены |
//+------------------------------------------------------------------+
// описание мастера end
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
class COG : public CExpertSignal
  {
private:
CiCustom             m_COG;               // Индикатор как объект
//--- Настраиваемые параметры модуля
   int               m_Period_;           // Период усреднения индикатора
   int               m_SmoothPeriod;      // Период сглаживания сигнальной линии 
   ENUM_MA_METHOD    m_MA_Method_;        // Метод усреднения сигнальных линий
   int               m_AppliedPrice;      // Постоянная цена
public:
                     COG(void);
                    ~COG(void);
//--- Проверка корректности входных данных
   bool              ValidationSettings();
//--- Создание индикаторов и временных рядов для модуля сигналов
   bool              InitIndicators(CIndicators *indicators);
//--- Доступ к данным индикатора
   double            CG(const int index)                 const { return(m_COG.GetData(0,index)); }
   double            Signal(const int index)             const { return(m_COG.GetData(1,index)); }   
//--- Проверка условий покупки и продажи
   virtual int       LongCondition();
   virtual int       ShortCondition();
//--- Методы для установки
   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:
   //--- Создание индикатора
   bool              CreateCOG(CIndicators *indicators);



  };
//+------------------------------------------------------------------+
//| Конструктор|
//+------------------------------------------------------------------+
COG::COG(void) :           m_Period_(10),                // Период усреднения индикатора
                           m_SmoothPeriod(3),            // Период сглаживания сигнальной линии 
                           m_MA_Method_(MODE_EMA),       // Метод усреднения сигнальных линий
                           m_AppliedPrice(1)             // Постоянная цена
  {
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
COG::~COG()
  {
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Проверяет входные параметры и возвращает true, если все в порядке |
//+------------------------------------------------------------------+
bool COG:: ValidationSettings()
  {
   //--- Вызовите метод базового класса
   if(!CExpertSignal::ValidationSettings())  return(false);
   //--- Проверяем периоды, количество баров для расчета МА >=1
   if(m_Period_<1)
     {
      PrintFormat("Incorrect value set for one of the period! Period_=%d",
                  m_Period_);
      return false;
     }
//--- Проверяем периоды, количество баров для расчета МА >=1
   if(m_SmoothPeriod<1)
     {
      PrintFormat("Incorrect value set for one of the period! m_SmoothPeriod=%d",
                  m_SmoothPeriod);
      return false;
     }
//--- Тип сглаживания Fast MA должен быть одним из четырех значений перечисления
   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 должна быть действительной
   if(m_AppliedPrice<1 || m_AppliedPrice>11) 
     {
      PrintFormat("Invalid type of Price!");
      return false;
     }
//--- Все проверки завершены, все в порядке
   return true;
  }
//+------------------------------------------------------------------+
//| Создает индикаторы|
//| Вход: указатель на коллекцию индикаторов |
//| Выходные данные: true в случае успеха, иначе false |
//+------------------------------------------------------------------+
bool COG::InitIndicators(CIndicators *indicators)
  {
//--- Стандартная проверка коллекции индикаторов на наличие NULL
   if(indicators==NULL) return(false);
//--- Инициализация индикаторов и временных рядов в дополнительных фильтрах
   if(!CExpertSignal::InitIndicators(indicators)) return(false);
//--- Создание наших индикаторов
   if(!CreateCOG(indicators))                  return(false);   
//--- Достигли этой части, значит, функция выполнена успешно, возвращаем true
   return(true);
  }
//+------------------------------------------------------------------+
//| Создает индикатор "COG".|
//+------------------------------------------------------------------+
bool COG::CreateCOG(CIndicators *indicators)
  {
//--- Проверка указателя
   if(indicators==NULL) return(false);
//--- Добавление объекта в коллекцию
   if(!indicators.Add(GetPointer(m_COG)))
     {
      printf(__FUNCTION__+": Error adding an object of the COG");
      return(false);
     }
//--- Установка параметров 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_;                 // Период
   parameters[2].type=TYPE_INT;
   parameters[2].integer_value=m_SmoothPeriod;            // Период сглаживания сигнальной линии
   parameters[3].type=TYPE_INT;
   parameters[3].integer_value=m_MA_Method_;              // Метод усреднения сигнальных линий
   parameters[4].type=TYPE_INT;
   parameters[4].integer_value=m_AppliedPrice;            // Постоянная цена
//--- Инициализация объекта 
   if(!m_COG.Create(m_symbol.Name(),0,IND_CUSTOM,5,parameters))
     {
      printf(__FUNCTION__+": Error initializing the object of the COG");
      return(false);
     }
//--- Количество буферов
   if(!m_COG.NumBuffers(2)) return(false);
//--- Достигли этой части, значит, функция выполнена успешно, возвращаем true
   return(true);
  }
//+------------------------------------------------------------------+
//| Возвращает силу сигнала покупки.|
//+------------------------------------------------------------------+
int COG::LongCondition()
  {
   int signal=0;
//--- Для работы с тиками idx=0, для работы с сформированными барами idx=1
   int idx=StartIndex();
//--- Значения COGs на последнем сформированном баре
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- Значения COG на предпоследнем сформированном баре
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//---If CG > Signal && CG-1 < Signal-1
   if((last_fast_value>last_slow_value) && (prev_fast_value<prev_slow_value))
     {
      signal=100; // Есть сигнал к покупке
     }
//--- Верните значение сигнала
   return(signal);
  }
//+------------------------------------------------------------------+
//| Возвращает силу сигнала продажи.|
//+------------------------------------------------------------------+
int COG::ShortCondition()
  {
   int signal=0;
//--- Для работы с тиками idx=0, для работы с сформированными барами idx=1
   int idx=StartIndex();
//--- Значения COGs на последнем сформированном баре
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- Значения COG на предпоследнем сформированном баре
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//---If CG < Signal && CG-1 > Signal-1
   if((last_fast_value<last_slow_value) && (prev_fast_value>prev_slow_value))
     {
      signal=100; // Есть сигнал к продаже
     }
//--- Верните значение сигнала
   return(signal);
  }
 
интересная вещь.. нужно определиться с алгоритмом в боевых условиях
 

Индикатор компилируется без ошибок:

и он работает -

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

Только нужно использовать исправленный файл smoothalgorithms.mqh - смотрите пост


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