Проблема перевода с МТ4 на МТ5. Или, точнее, невозможность без'ошибочного исполнения некоторых алгоритмов в МТ5. - страница 3

 
Eugeni Neumoin:

Я постарался на вопрос ответить. Данные недоступны.

Лог - во всплывающей подсказке. Код всплывающей подсказки приведен. Таймсерия сформирована. График с таймсерией W1 построен. Достап отсутсятвовал. Функция iBarShift выдала ошибку. В МТ4 такой ошибки не наблюдается.

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

Пожалуйста, предоставьте воспроизводимый MQL5 код.

 
Eugeni Neumoin:

Артем, а это Вы удалили мое сообщение в ветке обсуждения статьи. Где я отвечал на пожелание участника форума?

Я там как раз затрагивал тему, поднятую в этой ветке форума. И меня разозлило такое бесцеремонное отношение. И я создал эту ветку форума.

======

У меня ранее бывали несогласия на этом форуме. Не хотите здесь обсуждать. Есть много форумов, где можно очень многое сказать и без цензуры.

В 2005 году один модератор (HQ) что-то подобное сделал на форуме Альпари. И тогда почти весь форум переместился с Альпари на Оникс.

Нет, не удалял ничего

 
Vladimir Karputov:

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

Пожалуйста, предоставьте воспроизводимый MQL5 код.

Дело в том, что код имеет примерно 50 000 строк. Его я выкладывать в открытом виде не буду.

Ситуация плавающая. Но... попробую создать другой код. Он тоже будет не маленький.

И потребует время. 

Надеюсь, Вы читали мои ссылки в Справочнике по языку, на которые я ссылаюсь. Там черным по белому кем-то из сотрудников компании Метаквотес написано, что доступ к данным может быть в любой момент прекращен. 

Вот полная цитата из справочника по языку:

Доступность данных

Наличие данных в формате HCC или даже в готовом для использования формате HC не всегда означает безусловную доступность этих данных для отображения на графике или для использования в mql5-программах.

При доступе к ценовым данным или к значениям индикаторов из mql5-программ следует помнить, что не гарантируется их доступность в определенный момент времени, либо с определенного момента времени. Это связано с тем, что в целях экономии ресурсов в MetaTrader 5 не хранится полная копия требуемых данных для mql5-программы, а дается прямой доступ к базе данных терминала.

Ценовая история по всем таймфреймам строится из общих данных формата HCC и любое обновление данных с сервера приводит к обновлению данных по всем таймфреймам и пересчету индикаторов. Вследствие этого, в доступе к данным может быть отказано даже в том случае, если эти данные были доступны мгновение назад.

А можно и проще поступить. У меня уже купили несколько человек эту программу. Будут претензии с их стороны на тему этой ветки, буду публиковать здесь их сообщения. И всем сообщать, что это предусмотрено разработчиками языка:   в доступе к данным может быть отказано даже в том случае, если эти данные были доступны мгновение назад

 
Eugeni Neumoin:


Вместе с кодом предоставьте настройки терминала: количество баров на графике

 
Vladimir Karputov:

Вместе с кодом предоставьте настройки терминала: количество баров на графике

Количество баров по умолчанию. Где-то 100 000. А в доступе отказано в приведенных примерах выше к 271 бару.

 
Eugeni Neumoin:

Количество баров по умолчанию. Где-то 100 000. И в доступе отказано в приведенных примерах выше к 271 бару.

При работе уже на H1 - это ничтожное количество баров.

Итак: воспроизводимый код, настройки терминала (количество баров на графике).


Без этого минимума обсуждать просто нечего - так как пока это воздух. 

 
Eugeni Neumoin:

Количество баров по умолчанию. Где-то 100 000. А в доступе отказано в приведенных примерах выше к 271 бару.

Раз в две минуты необходимо получать данные от всех используемых таймфреймов и символов в индикаторе.

В обработчике OnTimer(), иными словами - в таймере, обращайтесь раз примерно в 90 секунд ко всем таймфреймам, которые нужны для работы индикатора. Можете использовать любую Copy-функцию. Просто получите "в никуда" данные, например с первого или текущего бара для каждого используемого тф. Этого будет достаточно для поддержания всех данных по всем таймфреймам в актуальном состоянии.

И в самом начале OnCalculate() проверяйте что возвращает функция, обращающаяся к данным нужных таймфреймов. Если -1, то делайте выход до следующего тика.

 
Artyom Trishkin:

Раз в две минуты необходимо получать данные от всех используемых таймфреймов и символов в индикаторе.

В обработчике OnTimer(), иными словами - в таймере, обращайтесь раз примерно в 90 секунд ко всем таймфреймам, которые нужны для работы индикатора. Можете использовать любую Copy-функцию. Просто получите "в никуда" данные, например с первого или текущего бара для каждого используемого тф. Этого будет достаточно для поддержания всех данных по всем таймфреймам в актуальном состоянии.

И в самом начале OnCalculate() проверяйте что возвращает функция, обращающаяся к данным нужных таймфреймов. Если -1, то делайте выход до следующего тика.

С  OnCalculate()  не проблема. Весь графический интерфейс работает через OnChartEvent() . Кнопок графического интерфейса более 400. Часть кнопок никаким образом не взаимодействует с таймсериями. Функции OnCalculate() и OnTrade() могут подождать и до следующего тика. Психологически это незаметно. А вот с OnChartEvent() сложнее. Здесь подключается психология человека. Пользователь программы нажимает на кнопку графического интерфейса. И не получает желаемого ответа. Какова его реакция? Одна из реакций - нажимает вторично на ту же кнопку. У меня сделано так, что второе нажатие на многие из кнопок отключает функционал, подключенной этой кнопкой. Предвижу Ваше предложение сделать отключение действия кнопки каким-то другим образом. Но есть эта же программа для МТ4. Там все работает нормально. Получится, что в МТ4 один алгоритм взаимодействия с графическим интерфейсом, а в МТ5 - другой. Такое поведение одной и той же программы вызовет только отторжение.

При переводе на МТ5 что-то подобное делал - включал выход из OnChartEvent(). Не хочу соврать, что именно из-за этого графический интерфейс просто умирал.

Да, и у меня обращение к таймсериям в OnTimer() происходит через 5 минут. Сделаю через 2 минуты. Проверю, что будет происходить.

Артем, Ваши предложения и ранее были полезными.

 
Vladimir Karputov:

При работе уже на H1 - это ничтожное количество баров.

Итак: воспроизводимый код, настройки терминала (количество баров на графике).


Без этого минимума обсуждать просто нечего - так как пока это воздух. 

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

От Общения с Вами ничего полезного не было ни ранее, ни сейчас.

Можете в каких-то других ветках форума что-то писать. А в моих ветках просьба не участвовать.

 
Artyom Trishkin:

Сделал обращение ко всем тф раз в две минуты. Проверка доступа к таймфреймам в OnCalculate() не вызывает, на первый взгляд, затруднений в работе программы.

А вот проверка в OnChartEvent() отражается на работе. В некоторых случаях графический интерфейс отказывается работать.

Буду наблюдать, как работает программа при обращение ко всем тф раз в две минуты.

================

Попутно выявил еще одно отличие МТ5 от МТ4.

У меня привязка графических инструментов с помощью графического интерфейса осуществляется к номерам экстремумов загзага или к символам волновой разметки.

Привязка происходит тогда, когда программа "видит" номер или символ. Объясню, что понимается под этим. При наведении на номер или символ появляется всплывающая подсказка.

Если всплывающая подсказка появилась, то программа "видит" номер или символ. Если всплывающей подсказки нет, то номер и символ остаются невидимыми. При этом привязки графического инструменты не происходит. И, соответственно, графический инструмент не выводится на график.

Если к данному номеру или символу уже привязаны, например, вилы Эндрюса (с другими графическими инструментами не проверял), то в МТ4 всплывающая подсказка выводится. А вот в МТ5 всплывающая подсказка выводится очень редко. Но если я скрываю вилы Эндрюса, привязанные к данному номеру, то всплывающая подсказка выводится нормально.

Такое ощущение, если рядом с номером выведены какие-то другие графические объекты, то в МТ5 загрубляется чувствительность при выводе всплывающей подсказки. Но не исключаю, что это происходит от того, что в МТ5 приходится делать какие-то дополнительные обновления таймсерий, которых нет в МТ4. Эти дополнительные обновления могут вызывать задержку выполнения каких-то функций МТ5. (Это моя фантазия. Не знаю внутреннего механизма работы МТ5).

Использование аналитических объектов - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
Использование аналитических объектов - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
  • www.metatrader5.com
Определение трендов, построение каналов, выявление циклов и уровней поддержки/сопротивления — все эти и многие другие задачи решаются при помощи аналитических объектов. Всего в торговой платформе доступно 46 таких инструментов. Среди них имеются геометрические фигуры, различные каналы, инструменты Ганна, Фибоначчи, Эллиотта и многое другое. В...