Здравствуйте,
Этот осциллятор отличный, но у меня с ним проблемы.
Конец сигнальной линии, который рассчитывается по последней свече, не отображается, поэтому он всегда показывает красный цвет в настоящее время. Когда я перезагружаю осциллятор, он на мгновение показывает хорошие значения с концом сигнальной линии, но затем снова переключается на красный цвет (даже если он должен показывать зеленый).
Что я должен сделать, чтобы устранить эту проблему?
Я пытался отладить его заново, но это не помогло.
Приветствую,
InfiniteDesign
Какие наилучшие значения для параметров этого индикатора?
Большое спасибо за этот замечательный индикатор.
Я нашел предыдущую версию такой же интересной и полезной, как и новую, или даже более того.
Не могли бы вы перенести старую версию и на mq5? Я был бы очень признателен, если бы это было возможно.
Будьте здоровы, и спасибо заранее !!!
Здравствуйте,
Этот осциллятор отличный, но у меня с ним проблемы.
Конец сигнальной линии, который рассчитывается по последней свече, не отображается, поэтому он всегда показывает красный цвет в настоящее время. Когда я перезагружаю осциллятор, он на мгновение показывает хорошие значения с концом сигнальной линии, но затем снова переключается на красный цвет (даже если он должен показывать зеленый).
Что я должен сделать, чтобы устранить эту проблему?
Я пытался отладить его заново, но это не помогло.
Приветствую,
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 необходимо поместить * в папку terminal_data_folder\MQL5\Include */ //+------------------------------------------------------------------+ //| Center of Gravity.mq4 | //| Авторские права © 2007, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright «Авторские права © 2007, MetaQuotes Software Corp.» #property link "http://www.metaquotes.net" //---- версия индикатора #property version "1.00" //---- рисование индикатора в отдельном окне #property indicator_separate_window //---- для расчёта и построения индикатора используются три буфера #property indicator_buffers 3 //---- используются два графика #property indicator_plots 2 //+----------------------------------------------+ //| Параметры рисования индикатора | //+----------------------------------------------+ //---- рисование индикатора 1 в виде трёхцветной линии #property indicator_type1 DRAW_COLOR_LINE //---- используется для обозначения трёхцветных линий #property indicator_color1 Gray,Lime,Red //---- Линия индикатора 1 представляет собой непрерывную кривую #property indicator_style1 STYLE_SOLID //---- толщина линии индикатора 1 равна 1 #property indicator_width1 1 //---- отображение надписи индикатора 1 #property indicator_label1 "Center of Gravity" //+----------------------------------------------+ //| Параметры рисования индикатора | //+----------------------------------------------+ //---- рисование индикатора 2 в виде линии #property indicator_type2 DRAW_LINE //---- в качестве цвета линии индикатора используется синий цвет #property indicator_color2 Blue //---- Линия индикатора 2 представляет собой непрерывную кривую #property indicator_style2 STYLE_SOLID //---- толщина линии индикатора 2 равна 1 #property indicator_width2 1 //---- отображение подписи линии индикатора 2 #property indicator_label2 "Signal Line" //---- стиль линии — пунктирная кривая #property indicator_style2 STYLE_DASHDOTDOT //+-----------------------------------+ //| Входные параметры индикаторов | //+-----------------------------------+ enum Applied_price_ //Тип константы { PRICE_CLOSE_ = 1, //PRICE_CLOSE PRICE_OPEN_, //ЦЕНА_ОТКРЫТИЯ PRICE_HIGH_, //PRICE_HIGH PRICE_LOW_, //PRICE_LOW PRICE_MEDIAN_, //СРЕДНЯЯ ЦЕНА PRICE_TYPICAL_, //ТИПИЧНАЯ ЦЕНА PRICE_WEIGHTED_, //ВЗВЕШЕННАЯ ПО ЦЕНЕ PRICE_SIMPLE_,//PRICE_SIMPLE_ PRICE_QUARTER_, //ЦЕНА_КВАРТАЛА_ PRICE_TRENDFOLLOW0_, //PRICE_TRENDFOLLOW0_ PRICE_TRENDFOLLOW1_ //PRICE_TRENDFOLLOW1_ }; input int Period_=10; // Период усреднения индикатора input int SmoothPeriod=3; // Период сглаживания сигнальной линии input ENUM_MA_METHOD MA_Method_=MODE_SMA; // Метод усреднения сигнальной линии input Applied_price_ AppliedPrice=PRICE_CLOSE_;// Константа цены /* , используемые для расчета индикатора (1 — цена закрытия, 2 — цена открытия, 3 — максимальная цена, 4-LOW, 5-MEDIAN, 6-TYPICAL, 7-WEIGHTED, 8-SIMPLE, 9-QUARTER, 10-TRENDFOLLOW, 11-0.5 * TRENDFOLLOW.) */ //+-----------------------------------+ //---- объявление динамических массивов, которые далее //---- будут использоваться в качестве буферов индикаторов double Ext1Buffer[]; double Ext2Buffer[]; double ColorExt2Buffer[]; //---- Определение целочисленных переменных для начала вычисления данных int StartBar; //+------------------------------------------------------------------+ //| Описание функции iPriceSeries | //| Описание класса Moving_Average | //+------------------------------------------------------------------+ #include <SmoothAlgorithms.mqh> //+------------------------------------------------------------------+ //| Функция инициализации пользовательского индикатора | //+------------------------------------------------------------------+ void OnInit() { //---- инициализация констант StartBar=Period_; //---- задать динамический массив MAMABuffer в качестве буфера индикатора SetIndexBuffer(0,Ext1Buffer,INDICATOR_DATA); //---- создание метки для отображения в DataWindow PlotIndexSetString(0,PLOT_LABEL,"Center of Gravity"); //---- сдвиг начала рисования индикатора PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartBar); //---- преобразование динамического массива в буфер индексов цветов SetIndexBuffer(1,ColorExt2Buffer,INDICATOR_COLOR_INDEX); //---- сдвиг начала рисования индикатора PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,StartBar+1); //---- задать динамический массив FAMABuffer в качестве массива индикаторов SetIndexBuffer(2,Ext2Buffer,INDICATOR_DATA); //---- создание метки для отображения в DataWindow PlotIndexSetString(2,PLOT_LABEL,"Signal Line"); //---- сдвиг начала рисования индикатора PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,StartBar+1); //---- инициализация переменной для сокращённого названия индикатора string shortname; StringConcatenate(shortname,"Center of Gravity(",Period_,")"); //---- создание имени для отображения в отдельном подокне и во всплывающей подсказке IndicatorSetString(INDICATOR_SHORTNAME,shortname); //---- установить точность отображения значений индикатора IndicatorSetInteger(INDICATOR_DIGITS,0); //---- } //+------------------------------------------------------------------+ //| Функция итерации пользовательского индикатора | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // количество баров в исторических данных на текущем тике const int prev_calculated,// количество тактов, рассчитанное при предыдущем вызове const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //---- проверка того, достаточно ли количества баров для расчёта if(rates_total<StartBar) return(0); //---- Объявление переменных с плавающей запятой double price_,sma,lwma; //---- Объявление целочисленных переменных int first1,first2,first3,bar; //---- Инициализация индикатора в блоке OnCalculate() if(prev_calculated>rates_total || prev_calculated<=0)// проверка момента первого запуска расчета индикатора { first1=0; // начальное число для расчёта всех тактов первого цикла first2=Period_+1; // начальное число для расчета всех столбцов сигнальных линий first3=Period_+SmoothPeriod+3; // начальное число для расчета всех полос в цикле раскрашивания } else // начальное число для расчета новых баров { first1=prev_calculated-1; first3=first1; } //---- Исправление (дополнение): при вызове функции MASeries с параметром «jelvonal» (Signal Line) параметр «begin» всегда //---- должен быть тот же САМЫЙ постоянный порог надежности (Period_+1) — изначально активный //---- в тикеле ошибочно использовался постоянно меняющийся показатель «first1» (то есть текущий индекс свечи) //---- Установлено, что при каждом «живом» тике значение совпадало с обработанным значением, что привело к путанице в //---- логика класса belső simító-osztály «до какого момента данные можно считать достоверными» — именно из-за этого он работал нестабильно/с ошибками //---- значение на границе, и поэтому оно «исправляется» только после смены TF (полного пересчета). first2=Period_+1; //---- объявление переменных класса Moving_Average static CMoving_Average MA,LWMA,SIGN; //---- Основной цикл расчета оси канала for(bar=first1; bar<rates_total; bar++) { //---- Вызов функции PriceSeries для получения входной ценовой «серии» price_=PriceSeries(AppliedPrice,bar,open,low,high,close); sma=MA.MASeries(0,prev_calculated,rates_total,Period_,MODE_SMA,price_,bar,false); lwma=LWMA.MASeries(0,prev_calculated,rates_total,Period_,MODE_LWMA,price_,bar,false); Ext1Buffer[bar]=sma*lwma/_Point; Ext2Buffer[bar]=SIGN.MASeries(first2,prev_calculated,rates_total,SmoothPeriod,MA_Method_,Ext1Buffer[bar],bar,false); } //---- Основной цикл раскрашивания сигнальной линии for(bar=first3; bar<rates_total; bar++) { ColorExt2Buffer[bar]=0; if(Ext1Buffer[bar]<Ext2Buffer[bar]) ColorExt2Buffer[bar]=2; else ColorExt2Buffer[bar]=1; } //---- return(rates_total); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования


Центр гравитации Элерса - Center of Gravity J. F. Ehlers:
Центр гравитации является осциллятором, разработанным Джоном Элерсом и представленном в майском выпуске журнала "Stocks & Commodities" (2002г.).
Центр гравитации имеет по существу нулевое отставание и позволяет четко определять поворотные моменты. Этот индикатор является результатом исследования Элерсом адаптивных фильтров. Индикатор "центр гравитации" позволяет идентифицировать главные разворотные точки почти без отставания.
Идея вычисления центра гравитации выросла из наблюдения за тем, каково отставание различных фильтров с конечной импульсной характеристикой (КИХ) в соответствии с относительной амплитудой коэффициентов фильтров. Простая средняя скользящая (SMA) является КИХ-фильтром, где все коэффициенты имеют одно и тоже значение. В результате центром гравитации SMA является точный центр фильтра. Взвешенная средняя скользящая (WMA) представляет собой КИХ-фильтр, где последнее ценовое изменение взвешено по длине фильтра, предпоследнее ценовое изменение взвешено по меньшей длине фильтра и так далее.
Автор: Nikolay Kositsin