Новая версия платформы MetaTrader 5 build 5830: общие улучшения - страница 31

 
Alexey Viktorov #:

Для тех кому нужна новая справка, но нет или отключен WebView2, установочный файл можно скачать с Mail облака

Приветствую, Алексей!

Это разве не такая, чтобы скачивать с обновлениями?

--

https://www.mql5.com/ru/docs

Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
MetaQuotes Language 5 (MQL5) — язык программирования технических индикаторов, торговых роботов и вспомогательных приложений для автоматизации...
 
Vitaly Muzichenko #:

Приветствую, Алексей!

Это разве не такая, чтобы скачивать с обновлениями?

--

Такая, даже лучше. Но с ней в наших условиях тоже не всё удобно. Как минимум, по F1 она не открывается, это и создаёт некоторые неудобства.
 
Vladimir Pastushak # :

Горячие клавиши не работают в Справке 

Ctrl + C ,  Ctrl + V

Виндовс 11 лицензия , регулярно обновляемая. Терминал билд 5836.

Что сделать ? Как заставить работать горячие клавиши ?

Исправлено. Будет доступно в следующей сборке (>5873).
 
fxsaber #:

В MetaEditor набрал слово vector. На этом слове нажал F1. Появилась соответствующая страница справки. Теперь на этой странице пробую найти слово median.

В браузере это выглядит так.


Исправлено (CTRL+F). Будет доступно в следующей сборке (>5873).

 

Недавно использовал две индикаторные панели на одном графике и столкнулся с проблемой, при переключении ТФ одна панель перезаписывает другую.

Это происходит из-за ограничений в классе CAppDialog стандартной библиотеки.

Проблема проявляется в двух местах:

  1. CreateInstanceId() использует rand() для генерации префикса имён объектов. Если два экземпляра индикатора инициализируются близко по времени (например, при переключении таймфрейма), они могут получить одинаковый ID — и объекты на графике конфликтуют по именам. Если добавить в OnInit индикатора MathSrand(GetTickCount()) происходит реже, но происходит.

  2. В CreateIndicator() короткое имя индикатора определяется по позиции в списке (total-1), что ненадёжно – при наличии нескольких индикаторов порядок в списке может не соответствовать ожидаемому, и будет получено чужое имя. Как варианты, читать имя через MQLInfoString(MQL_PROGRAM_NAME) или короткое имя индикатора.

Пока для себя скопировал Dialog.mqhлокально и поправил эти места. Но возник вопрос: в классе уже есть ряд методов, объявленных как protected virtual CreateButtonMinMax(), OnClickButtonClose(), Minimize(), Maximize() и другие. Однако CreateCommon(), CreateExpert(), CreateIndicator() и CreateInstanceId() объявлены как private и не виртуальные — без очевидной причины для такого различия.

Есть ли принципиальные возражения против того, чтобы сделать эти методы protected virtual? Это позволило бы переопределять нужное поведение для случаев использования нескольких панелей на одном графике.



Или как вариант добавить в класс: string m_instance_prefix - по умолчанию "".

void InstancePrefix(const string prefix) { m_instance_prefix = prefix; }

изменить:

string CreateInstanceId(void) { return(m_instance_prefix + IntegerToString(rand(), 5, '0')); }

И в CappDialog::CreateIndicator() вместо:

m_indicator_name=ChartIndicatorName(m_chart.ChartId(),m_subwin,total-1)

сделать поиск по имени.

 
Vasiliy Pushkaryov #:

Недавно использовал две индикаторные панели на одном графике и столкнулся с проблемой, при переключении ТФ одна панель перезаписывает другую.

Это происходит из-за ограничений в классе CAppDialog стандартной библиотеки.

Проблема проявляется в двух местах:

  1. CreateInstanceId() использует rand() для генерации префикса имён объектов. Если два экземпляра индикатора инициализируются близко по времени (например, при переключении таймфрейма), они могут получить одинаковый ID — и объекты на графике конфликтуют по именам. Если добавить в OnInit индикатора MathSrand(GetTickCount()) происходит реже, но происходит.

  2. В CreateIndicator() короткое имя индикатора определяется по позиции в списке (total-1), что ненадёжно – при наличии нескольких индикаторов порядок в списке может не соответствовать ожидаемому, и будет получено чужое имя. Как варианты, читать имя через MQLInfoString(MQL_PROGRAM_NAME) или короткое имя индикатора.

Пока для себя скопировал Dialog.mqhлокально и поправил эти места. Но возник вопрос: в классе уже есть ряд методов, объявленных как protected virtual CreateButtonMinMax(), OnClickButtonClose(), Minimize(), Maximize() и другие. Однако CreateCommon(), CreateExpert(), CreateIndicator() и CreateInstanceId() объявлены как private и не виртуальные — без очевидной причины для такого различия.

Есть ли принципиальные возражения против того, чтобы сделать эти методы protected virtual? Это позволило бы переопределять нужное поведение для случаев использования нескольких панелей на одном графике.



Или как вариант добавить в класс: string m_instance_prefix - по умолчанию "".

void InstancePrefix(const string prefix) { m_instance_prefix = prefix; }

изменить:

string CreateInstanceId(void) { return(m_instance_prefix + IntegerToString(rand(), 5, '0')); }

И в CappDialog::CreateIndicator() вместо:

m_indicator_name=ChartIndicatorName(m_chart.ChartId(),m_subwin,total-1)

сделать поиск по имени.

Да, такое уже проходили:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Несколько окон ControlsDialog

Stanislav Korotky, 2024.01.09 11:22

Данная проблема фиксилась наравне со многими другими в этой статье.

Если вкратце, то вот фрагмент:

В файле Dialog.mqh нужно в методе bool CAppDialog::Run заменить строку:

if(Id(m_subwin*CONTROLS_MAXIMUM_ID)>CONTROLS_MAXIMUM_ID)

на такую:

if(Id(StringToInteger(m_instance_id) + m_subwin * CONTROLS_MAXIMUM_ID) > CONTROLS_MAXIMUM_ID)
Без правки стандартных классов в любом случае не обойтись, потому что поле m_instance_id сделано приватным и нет метода-аксессора к нему.

Вряд ли стандартные классы станут исправлять, да и проблем там много помимо указанной. Посмотрите библиотеку ControlsPlus по ссылке.

 
Stanislav Korotky #:

Да, такое уже проходили:


Вряд ли стандартные классы станут исправлять, да и проблем там много помимо указанной. Посмотрите библиотеку ControlsPlus по ссылке.

Спасибо. Ознакомлюсь.

 

b5836, ME показывает две недокументированные перегрузки (первая и третья) штатной функции.

При этом непонятно, как может одновременно существовать вторая и третья перегрузка. Просьба объяснить.

 
fxsaber # :

b5836, ME показывает две недокументированные перегрузки (первая и третья) штатной функции.

При этом непонятно, как может одновременно существовать вторая и третья перегрузка. Просьба объяснить.

Похоже, это ошибка функции Intellisense. Сообщили.
 
Alexey Viktorov #:

Для тех кому нужна новая справка, но нет или отключен WebView2, установочный файл можно скачать с Mail облака

Для модератора.

Без VPN с официального сайта не скачать. Потому я и попытался облегчить жизнь людям из России. А в наших условиях даже VPN замучаешься скачивать и устанавливать.