Присутствует проблема рассинхронизации графиков слева и справа от линии общего времени. Хотелось бы, чтобы на всю ширину графика бары были синхронизирваны по времени.
Предлагаю еще раз разработчикам подумать (возможно, вынести на обсуждение) о возможности визуализации графика с "дырами"-барами и без них. При этом это было бы только визуализация, т.е. "дыры"-бары не были бы доступны в MQL5.
Дмитрий, проще наверно было бы сделать через CHARTEVENT_CLICK вместо зацикливания...
вот пример синхронизации графиков одной валюты
//------------------------------------------------------------------ OnChartEvent void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) { if (id==CHARTEVENT_CLICK) { long cid=ChartFirst(); long fbar=ChartGetInteger(ChartID(), CHART_FIRST_VISIBLE_BAR); datetime tm[], tm1[]; int rez=CopyTime(Symbol(), Period(), 0, fbar, tm); if (rez<fbar) return; while (cid!=-1) { ChartSetInteger(cid, CHART_AUTOSCROLL, false); ChartSetInteger(cid, CHART_SHIFT, false); if (cid!=ChartID() && ChartSymbol(cid)==Symbol()) { rez=CopyTime(ChartSymbol(cid), ChartPeriod(cid), TimeCurrent(), tm[0], tm1); if (rez<0) break; ChartNavigate(cid, CHART_END, rez-ChartGetInteger(cid, CHART_WIDTH_IN_BARS)+2); ChartRedraw(cid); } cid=ChartNext(cid); } } }
и всё!
Дмитрий, проще наверно было бы сделать через CHARTEVENT_CLICK вместо зацикливания...
вот пример синхронизации графиков одной валюты
и всё!
Не все так просто. Ваша функция синхронизирует бары по левому краю графика, это не очень удобно для визуального изучения истории. Еще должно быть отключено смещение графика, тоже не очень удобно (хотя, дело вкуса). Добавили бы разработчики возможность получения и установки отступа от правого края или вообще навигацию по времени, многие функции сделаны в таком универсальном стиле, что можно передавать номер бара или время. Еще событие обрабатывается только для для того графика, на котором работает скрипт.
----------------------------------------------------------------------------------------------------------------
OnChartEvent
OnChartEvent() является обработчиком группы событий ChartEvent:
...
...
Функция может вызываться только в экспертах и должна иметь тип void и 4 параметра:
----------------------------------------------------------------------------------------------------------------
Обработка событий работает только в экспертах. На графике может быть только один эксперт, не стоит занимать место эксперта вспомогательными и практически бесполезными. Такое у меня убеждение, что вспомогательные инструменты, не связанные непосредственно с выполнением торговли, не должны делаться в виде экспертов, за редким исключением крайней необходимости.
OnChartEvent
OnChartEvent() является обработчиком группы событий ChartEvent:
...
...
Функция может вызываться только в экспертах и должна иметь тип void и 4 параметра:
----------------------------------------------------------------------------------------------------------------
Обработка событий работает только в экспертах. На графике может быть только один эксперт, не стоит занимать место эксперта вспомогательными и практически бесполезными. Такое у меня убеждение, что вспомогательные инструменты, не связанные непосредственно с выполнением торговли, не должны делаться в виде экспертов, за редким исключением крайней необходимости.
Это уже не так, следите за объявлениями - https://www.mql5.com/ru/forum/23/page4:
MetaTrader 5 Client Terminal build 245
- Terminal: Исправлена ошибка учета свободных маржевых средств в активах (во вкладке Exposure).
- Terminal: Исправлена работа свойства чарта "График сверху" ("Chart on foreground").
- Terminal: Исправлено и переделано окно предпросмотра печати для чарта.
- Terminal: Исправлена ошибка в работе с временными глобальными переменными.
- Terminal:
Объединены панели инструментов "Стандартная" и "Чарты".
- MQL5: Исправления по крешам и сообщениям на форуме
- MQL5: Изменен принцип работы функций Copy* для экспертов и скриптов - теперь функции будут ожидать закачки и построения запрашиваемых данных. Время ожидания запрошенных данных не более 30 секунд. Более подробное описание будет доступно в справке MQL5 в ближайшее время.
- MQL5: Добавлена возможность обработки событий кастомными индикаторами, аналогично экспертам. Более подробное описание будет доступно в справке MQL5 в ближайшее время.
.
Не все так просто. Ваша функция синхронизирует бары по левому краю графика, это не очень удобно для визуального изучения истории.
но ведь можно по любому краю. и дать кнопульки выбора для трейдера - по ценрту, по правому, по левому...
Еще должно быть отключено смещение графика, тоже не очень удобно (хотя, дело вкуса).
Добавили бы разработчики возможность получения и установки отступа от правого края или вообще навигацию по времени, многие функции сделаны в таком универсальном стиле, что можно передавать номер бара или время.
эта возможность кстати есть. CHART_SHIFT_SIZE
посмотрите пример ObjChartSample.mq5
Похоже, что-то не так с CHART_FIRST_VISIBLE_BAR.
Если сделать ChartNavigate() на число число заведомо болшее, чем то, на которе можно прокуртить график, то
ChartGetInteger(ChartID(),CHART_FIRST_VISIBLE_BAR) становится больше, чем Bars(ChartSymbol(ChartID()),ChartPeriod(ChartID())).
Пример в скрипте 2.mq5. Запустить скрипт, подождать немного.
что то мне подсказывает, что терминал не успевает...
так как если запускать скрипт сразу же повторно, то прокатывает все с первого раза.
наверно надо как то контролировать время
может SeriesInfoInteger поможет?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
sChartsSynchroScroll:
Скрипт обеспечивает синхронную прокрутку всех графиков открытых в терминале.
Скрипт нужно запускать только на одном графике. После запуска скрипта на всех графиках под маркерами будут созданы пунктирные линии. При прокрутке любого из графиков будут прокручиваться остальные графики, так, что под этими линиями будут находиться бары с одинаковым временем.
Автор: Дмитрий