Обсуждение статьи "Синхронизация нескольких графиков по одному инструменту на разных таймфреймах"
Я хочу синхронизировать уровни поддержки и сопротивления на разных таймфреймах, т.е. поддержка, добавленная на одном таймфрейме, появляется на графиках всех остальных таймфреймов
Здравствуйте,
Как вы добавили уровни сопротивления на график? Например, горизонтальной линией или прямоугольником?
Есть ли способ выбрать клонирование только определенных типов объектов и игнорировать остальные? Кроме того, как бы я клонировал свойства видимости объектов, потому что кажется, что настройки видимости клонированных объектов не копируются и должны быть вручную установлены снова на других графиках.
Большое спасибо
Есть ли способ выбрать клонирование только определенных типов объектов и игнорировать остальные? Кроме того, как бы я клонировал свойства видимости объектов, поскольку, похоже, настройки видимости клонированных объектов не копируются и должны быть вручную установлены снова на других графиках.
Большое спасибо
Здравствуйте, yousurfer.
Если вы хотите выбирать объекты по какому-либо свойству, вы можете добавить его в эту функцию.
string CCopyObject::CreateMessage(long chart) { string result = NULL; int total = ObjectsTotal(chart, 0); for(int i=0;i<total;i++) { string name = ObjectName(chart, i, 0); // // if(!( проверьте свойство объекта для копирования) ) // если вы не хотите копировать этот объект // продолжить;// перейдите к следующему объекту // switch((ENUM_OBJECT)ObjectGetInteger(chart,name,OBJPROP_TYPE)) { case OBJ_HLINE: result+="{NAME="+name+"|TYPE="+IntegerToString(OBJ_HLINE)+"|"+HLineToString(chart, name)+"}"; break; case OBJ_VLINE: result+="{NAME="+name+"|TYPE="+IntegerToString(OBJ_VLINE)+"|"+VLineToString(chart, name)+"}"; break; case OBJ_TREND: result+="{NAME="+name+"|TYPE="+IntegerToString(OBJ_TREND)+"|"+TrendToString(chart, name)+"}"; break; case OBJ_RECTANGLE: result+="{NAME="+name+"|TYPE="+IntegerToString(OBJ_RECTANGLE)+"|"+RectangleToString(chart, name)+"}"; break; } } return result; }
С уважением,
Дмитрий.
При 8ми открытых графиках одно иструмента с разными ТФ индикатор заметно тормозит и подвешивает МТ, например свеже-нарисованный квадрат приходит на другие чарты с 5-10 секундной задержкой. В чем может быть причина?
Спасибо!
Не могли бы Вы сделать такой для МТ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; }
При 8ми открытых графиках одно иструмента с разными ТФ индикатор заметно тормозит и подвешивает МТ, например свеже-нарисованный квадрат приходит на другие чарты с 5-10 секундной задержкой. В чем может быть причина?
Спасибо!
Добрый день.
Дело в том, что индикаторы работают в одном потоке и большое количество любых индикаторов в терминале действительно может замедлять его работу. Тем более работа с графическими элементами довольно трудоемкая для терминала. Для использования на большом количестве графиков я бы рекомендовал переформатировать программу в советник без какой-либо потери функциональности. Но это подойдет только в том случае, если вы одновременно с анализом не используете советники. Т.к. в терминале есть ограничение не более одного советника на один график.
Для использования на МТ4 достаточно заменить расширение файла индикатора с mq5 на mq4 и перекомпилировать индикатор.
Спасибо за быстрый ответ и помощь. В mq4 не все функции поддерживает. ChartIndicatorGet, CloneAllObjects и другие. В общем 9 ошибок при компилировании. В программировании я ноль. Помогите пожалуйста.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Синхронизация нескольких графиков по одному инструменту на разных таймфреймах:
Часто, чтобы принимать решения о совершении сделок, в процессе торговли приходится одновременно анализировать графики на нескольких таймфреймах. При этом на графиках есть объекты графического анализа. Наносить одни и те же объекты на все графики неудобно. В этой статье я предлагаю автоматизировать клонирование объектов по графикам.
Работу нашего индикатора можно разделить на два блока.
Автор: Dmitriy Gizlyk