Обсуждение статьи "Синхронизация нескольких графиков по одному инструменту на разных таймфреймах"

 

Опубликована статья Синхронизация нескольких графиков по одному инструменту на разных таймфреймах:

Часто, чтобы принимать решения о совершении сделок, в процессе торговли приходится одновременно анализировать графики на нескольких таймфреймах. При этом на графиках есть объекты графического анализа. Наносить одни и те же объекты на все графики неудобно. В этой статье я предлагаю автоматизировать клонирование объектов по графикам.

Работу нашего индикатора можно разделить на два блока.

  1. При запуске индикатора открытые графики фильтруются по символу. Проверяется наличие индикатора на открытых графиках соответствующего инструмента. Все объекты текущего графика клонируются на  отобранные графики.
  2. Блок-схема процесса инициализации.

  3. Обработка событий графика. Когда появляется событие создания или изменения графического объекта, программа считывает с графика информацию об измененном объекте и передает эти данные на все графики из ранее созданного списка.

Автор: Dmitriy Gizlyk

 
Хорошая статья, особенно для тех, кто использует технический анализ и создает много объектов на разных графиках. Графические объекты синхронизировать удалось, за это спасибо автору, в качестве дальнейшего развития данной темы можно синхронизировать индикаторы, созданные на различных графиках. Только вот вопрос, актуальна ли такая задача? Возможно не требуется переносить индикатор с одинаковыми параметрами на другой таймфрейм, а нужно изменить их. Еще думаю пригодилась бы функция "отвязки" от клонирования, т. е. "отвязанный" объект не переносился на другие графики. 
 
Не могли бы Вы сделать такой для МТ4? Желательно с фильтром по объектам (клонировать только горизонтальные или трендовые...) Для мт4 есть подобный, но код закрыт, фильтр не приделать.
 

При 8ми открытых графиках одно иструмента с разными ТФ индикатор заметно тормозит и подвешивает МТ, например свеже-нарисованный квадрат приходит на другие чарты с 5-10 секундной задержкой. В чем может быть причина?

Спасибо!

 
Kofa:
Не могли бы Вы сделать такой для МТ4? Желательно с фильтром по объектам (клонировать только горизонтальные или трендовые...) Для мт4 есть подобный, но код закрыт, фильтр не приделать.

Для использования на МТ4 достаточно заменить расширение файла индикатора с mq5 на mq4 и перекомпилировать индикатор.
Для добавление фильтрации объектов нужно добавить параметры

sinput bool    CloneHLine     =  true;
sinput bool    CloneVLine     =  true;
sinput bool    CloneTrend     =  true;
sinput bool    CloneRectangle =  true;

и скорректировать OnChartEvent с добавлением функции CheckToClone

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   string message1=NULL;
   string message2=NULL;
   int total=0;
//---
   switch(id)
     {
      case CHARTEVENT_OBJECT_CHANGE:
      case CHARTEVENT_OBJECT_CREATE:
      case CHARTEVENT_OBJECT_DRAG:
        if(!CheckToClone(sparam))
           return;
        message1=CloneObjects.CreateMessage(l_Chart,sparam,0);
        message2=CloneObjects.CreateMessage(l_Chart,sparam,1);
        total=ArraySize(ar_Charts);
        for(int i=0;i<total;i++)
          {
           EventChartCustom(ar_Charts[i],(ushort)id,0,0,message1);
           EventChartCustom(ar_Charts[i],(ushort)id,0,0,message2);
          }
        break;
//---
      case CHARTEVENT_OBJECT_DELETE:
        if(!CheckToClone(sparam))
           return;
        total=ArraySize(ar_Charts);
        for(int i=0;i<total;i++)
           EventChartCustom(ar_Charts[i],(ushort)id,0,0,sparam);
        break;
//---
      case CHARTEVENT_CUSTOM + CHARTEVENT_OBJECT_CHANGE:
      case CHARTEVENT_CUSTOM + CHARTEVENT_OBJECT_CREATE:
      case CHARTEVENT_CUSTOM + CHARTEVENT_OBJECT_DRAG:
        CloneObjects.DrawObjects(l_Chart,sparam);
        ChartRedraw(l_Chart);
        break;
//---
      case CHARTEVENT_CUSTOM + CHARTEVENT_OBJECT_DELETE:
        if(!CheckToClone(sparam))
           return;
        ObjectDelete(l_Chart,sparam);
        ChartRedraw(l_Chart);
        break;
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CheckToClone(string name)
  {
  bool result = false;
   
   if(l_Chart>=0 && ObjectFind(l_Chart,name)==0)
     {
      switch((ENUM_OBJECT)ObjectGetInteger(l_Chart,name,OBJPROP_TYPE))
        {
         case OBJ_HLINE:
           result=CloneHLine;
           break;
         case OBJ_VLINE:
           result=CloneVLine;
           break;
         case OBJ_TREND:
           result=CloneTrend;
           break;
         case OBJ_RECTANGLE:
           result=CloneRectangle;
           break;
        }
     }
   return result;
   }
 
XDiavel:

При 8ми открытых графиках одно иструмента с разными ТФ индикатор заметно тормозит и подвешивает МТ, например свеже-нарисованный квадрат приходит на другие чарты с 5-10 секундной задержкой. В чем может быть причина?

Спасибо!

Добрый день.

Дело в том, что индикаторы работают в одном потоке и большое количество любых индикаторов в терминале действительно может замедлять его работу. Тем более работа с графическими элементами довольно трудоемкая для терминала. Для использования на большом количестве графиков я бы рекомендовал переформатировать программу в советник без какой-либо потери функциональности. Но это подойдет только в том случае, если вы одновременно с анализом не используете советники. Т.к. в терминале есть ограничение не более одного советника на один график.

 
Dmitriy Gizlyk:

Для использования на МТ4 достаточно заменить расширение файла индикатора с mq5 на mq4 и перекомпилировать индикатор.


Спасибо за быстрый ответ и помощь. В mq4 не все функции поддерживает. ChartIndicatorGet, CloneAllObjects и другие. В общем 9 ошибок при компилировании. В программировании я ноль. Помогите пожалуйста.

 
Dmitriy Gizlyk:

Для использования на МТ4 достаточно заменить расширение файла индикатора с mq5 на mq4 и перекомпилировать индикатор.
Для добавление фильтрации объектов нужно добавить параметры

 Здравствуйте, Дмитрий! Помогите, пожалуйста, переделать этот индикатор в мт4, а то я не силен в программировании. Спасибо!

 
Dmitriy Gizlyk:

Для использования на МТ4 достаточно заменить расширение файла индикатора с mq5 на mq4 и перекомпилировать индикатор.
Для добавление фильтрации объектов нужно добавить параметры

и скорректировать OnChartEvent с добавлением функции CheckToClone

Дмитрий, к сожалению такое не проходит. Для MT4 там как-то всё иначе. И очень интересно увидеть как это будет реализовано. Есть идеи, Дмитрий? 

 
Просто обалденный индикатор, пробовал использовать.... но крме прямоугольников, - ничего больше не синхронизирует : ТЕКСТ, ЛИНИИ ФИБО и т.д. :(( Или тут код написан чтоб копировать только геометрические фигуры, а не инструменты анализа ? Подскажите пожалуйста что подправить, чтоб копировало еще Сетку Фибо.
 
Андрей:
Просто обалденный индикатор, пробовал использовать.... но крме прямоугольников, - ничего больше не синхронизирует : ТЕКСТ, ЛИНИИ ФИБО и т.д. :(( Или тут код написан чтоб копировать только геометрические фигуры, а не инструменты анализа ? Подскажите пожалуйста что подправить, чтоб копировало еще Сетку Фибо.

В статье показана технология на примере копирования горизонтальных, вертикальных, трендовых линий и прямоугольников. Сама технология позволяет копировать любые объекты. Для добавления новых типов объектов нужно создать метода для шифрования объекта по аналогии с методом CCloneObjects::HLineToString и добавить вызов нового метода для соответствующего типа объектов в CCloneObjects::CreateMessage 

Причина обращения: