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

 
Vict:

fxsaber верно сказал - есть один вариант

Немного костыльненько - EXPR будет вычисляться дважды, но всё же гибче. Нельзя сказать, что вот прям вообще универсально (лишь для арифметических типов. Значение ошибки должно быть одинаковым, что неприятно. Пытался обойти через явную специализацию структуры/функции, но нельзя

Приветствую!

Топик бы новый открыть, не могу сформулировать проблему... с этим у меня проблемы ))) , а материал довольно свежий и интересный

Вы сделали большую работу, довести бы это до финала - удобство использования (у @fxsaber все его наработки подключаются один раз одним инклудником) - это практично!

Ну и чтобы все это выглядело профессионально, нужно брать за основу синтаксис (или приблизиться к максимально)  С++ / C#

 
Artyom Trishkin:

Могу озвучит моё мнение:

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

Солидарен с таким подходом.

---------

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

В версии под МТ5 добавил еще и массив с номерами баров. Для первых 10 экстремумов. Это помогает для большинства случаев. В МТ5 страдают только нестандартные привязки.

Полный кэш для доступной истории по всем 21 таймфреймам создавать не буду. С таким подходом памяти компьютера не хватит.

Для понимания скажу: индикатор для МТ4 некоторые энтузиасты на один график выводят до 9 экземпляров. Одновременно бывает открыто много графиков для различных валютных пар. И на всех по 9 экземпляров индикатора выведено. Такое применение индикатора реализуется для системы DML&EWA, созданной Putniuk-ом. Он сам выводил до 72 экземпляров индикатора. То есть на 8 валютных парах.

При таком использовании дополнительный кэш по 21 тф в совокупности с 28 буферами сильно загружают память.

Это только с учетом загрузки памяти. Переделка огромного кода под использование кэша вместо функций iTime, iLow, iHight, iClose, iBarShift - занятие слишком утомительное

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

Проходил несколько раз такие марафоны. 

1. Марафон по включению нескольких внешних индикаторов зигзаг в тело основной программы. Избавлялся от внешних индикаторов для того, чтобы маркет принял программу.

2. Перевод всех однобуферных зигзагов в двухбуферные. Это заняло примерно полгода.

3. Создание графического интерфейса. В общей сложности заняло где-то более 2-х лет. Года 3. И есть еще интересные идеи для графического интерфейса. Но пока духу для их реализации не хватает...

4. Первоначально пытался перевести с МТ4 на МТ5 год назад. Тогда не получилось. Сейчас получилось. Но меня качество перевода не устраивает.

Были и другие марафоны. 

Создание кэша может в тупик завести. С этим связываться опасно...

------------

Артем, твой подход (процитированный выше) полностью поддерживаю.

 
Опять же, приведу цитату из первого поста:

...цитата из справочника языка MQL5. Рубрика Организация доступа к данным.

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

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

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

--------------

Псроблема осталась.

В программе несколько сотен обращений к истории котировок в разных участках программы. Листинг программы составляет примерно 50 000 строк.

Иногда из-за специфики доступа к истории возвращается значение -1. Следствием чего возникает ошибка - выход за пределы массива. Есть и другие ошибки. В некоторых участках программы сделал проверку на возможный возврат -1 при обращении к истории. При получении -1 в этом случае не происходит прорисовка отдельных элементов графических построений. Если же добавить в код несколько сотен проверок, будут тормоза, которые итак уже имеются из-за особенностей доступа к истории.

Можно создать программу и под МТ5. Но для этого надо всю архитектуру менять. На такие подвиги нет времени.

Решил, что не стоит заниматься бестолковым занятием. Программа в МТ4 работает. А на МТ5 переходить не планирую. Сделал ZUP под МТ5 бесплатным.

Все желающие могут его скачать и посмотреть на его работу под МТ5. А также сравнить с вариантом под МТ4.

На этом возню с МТ5 прекращаю. Это просто потеря времени.

Аналогичные сообщения разместил на некоторых других форумах.

 
Renat Fatkhullin:
А вы можете воспроизводимо продемонстрировать недоступность данных?

Вы утверждаете без воспроизводимых доказательств.

В сервисдеске описал, как воспроизвести проблему. Там и исходники для воспроизведения проблемы.

==========

Текст из документации к языку MQL5   https://www.mql5.com/ru/docs/series/timeseries_access :

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

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

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


Этот текст в переводе на русский язык означает следующее. Что бы Вы ни делали в любой момент доступ к данным может быть недоступен.

То есть нет возможности избежать ошибок из-за прерывания доступа к данным.

Именно таким образом я воспринимаю этот текст.

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