Новая версия платформы MetaTrader 5 build 3620: улучшения веб-терминала, поддержка ONNX и ускоренное умножение матриц в MQL5 - страница 2

 
Vitaliy Kuznetsov #:

Возможно, если была визуализация, сначала надо закрыть то окно.

Визуализации не было ни разу.

 

Баг так и не исправлен.
После оптимизации в одиночном проходе bool input-ы которые =true на бэктесте, меняются на false на форвард тесте.
Т.е. форвард тестирование происходит с неверными bool параметрами.
Слева распечатка параметров и ниже Print(UseMA3); на бэктесте, справа на форвард тесте



Сообщал 17 февраля тут https://www.mql5.com/ru/forum/438066/page27#comment_45073855

Воспроизводимый пример тут https://www.mql5.com/ru/forum/441841

 
Forester #:
Сообщал 17 февраля тут https://www.mql5.com/ru/forum/438066/page27#comment_45073855

Жаль что вы убрали старую версию обращений в сервисдеск. Теперь вам тут пишешь о багах, а вы не замечаете((

 
Roman # :

Да, с сетевым взаимодействием соглашусь.
Но фактически закачка данных происходит на момент старта программы, или открытие нового графика, или реконнекта и т.д.
То есть в момент когда никаких решений ещё не принимается, а ожидается получение этих данных чтоб принять потом решение ))
Какой смысл отдавать неполные данные в терминал после таймаута! Если для принятия решения их ещё недостаточно, так как данные не полные и не конечные.
Вот в чём вопрос был. Их же можно накапливать, причём не обязательно в память если вопрос упирается в ограниченные ресурсы пользователя.
И дождавшись полной загрузки с теми же сетевыми таймаутами, затем полностью отдать готовые данные в окружение терминала.
Таким образом исключается получение пользователем, не тех данных которые он ожидал, при обращении к функции.
"Функция вернет то количество данных, которые будут готовы к моменту   истечения таймаута"

Но по большому счёту удивление было в другом, то что ввели  CopySeries  для копирования синхронизированных таймсерий из  MqlRates
Несложно сделать вывод, что  CopyRates  как я понял может возвращать таймсерии, со сдвигом между массивами структуры MqlRates.
Вот по этому поводу и было негодование. Или я не так понял? И не к тому отношу слово синхронизация?
А введённая CopySeries как раз решает проблему отдачи данных между таймаутами?
И данные всегда будут те которые ожидал, на момент обращения функцией?



А по кастомному символу на видео, какая-то фигня происходит.
Или реал тайм данные не корректно считаются в формуле, или ещё что-то...
Формула самая простая 


История строит одно, а реал тайм строит другое.
И после нажатия обновить, происходит перестроение. 

И ещё. Было бы не плохо в настройках кастомного символа, увидеть параметр задающий частоту обновления.
Так как согласно документации, кастомный символ построенный через формулу, обновляется десять раз в секунду.
т.е. 100 ms, что достаточно многовато, и хотелось бы самому задавать частоту обновления.

CopySeries() был введен потому, что когда вы используете, например:

   int copied1 = CopyLow (symbol,timeframe,x,count,lows[]);
   int copied2 = CopyTime (symbol,timeframe,x,count,times[]);

Может случиться так, что lows[i] не синхронизированы с times[i]. Таким образом, значения по индексу i не относятся к одному и тому же бару.

Это случается не часто, но бывает.

 
Alain Verleyen #:

CopySeries() был введен потому, что когда вы используете, например:

Может случиться так, что lows[i] не синхронизированы с times[i]. Таким образом, значения по индексу i не относятся к одному и тому же бару.

Это случается не часто, но бывает.

А у CopyRates такая же проблема? Как вы описали.
Или у CopyRates такой проблемы нет? 

О чём и было моё предположение, что CopyRates может вернуть не синхронизированные поля структуры. 
Если это не так, то так пусть и напишут, что я ошибаюсь.
Мое предположение основывается на том, что если у CopyRates были-бы синхронизированы поля структуры, зачем тогда вводить CopySeries?
Если только для уменьшения запрашиваемых данных, соответственно ускорения.

Но как я понял проблема сетевых таймаутов в CopySeries так-же не решена.
И при первом запуске, CopySeries будет отдавать данные пачками по мере загрузки, что приводит к возможному использованию не тех данных которые ожидаешь!  

 
Roman # :

А у CopyRates такая же проблема? Как вы описали.
Или у  CopyRates  такой проблемы нет? 

О чём и было моё предположение, что CopyRates может вернуть не синхронизированные поля структуры. 
Если это не так, то так пусть и напишут, что я ошибаюсь.
Мое предположение основывается на том, что если CopyRates был-бы синхронизирован, зачем тогда вводить CopySeries.
Если только для уменьшения запрашиваемых данных, соответственно ускорения.

Но как я понял проблема сетевых таймаутов в CopySeries так-же не решена.

Я не знаю о CopyRates(), я никогда не использую его, потому что он очень неэффективен, кому действительно нужны все эти данные?

CopySeries() работает очень быстро.

 
Alain Verleyen #:

CopySeries() был введен потому, что когда вы используете, например:

Может случиться так, что lows[i] не синхронизированы с times[i]. Таким образом, значения по индексу i не относятся к одному и тому же бару.

Это случается не часто, но бывает.

Если использовать такой формат:

то такого никогда не случится. 
Кстати, именно такого (временного) формата не хватает для CopySeries()

 
Nikolai Semko #:

Если использовать такой формат:

то такого никогда не случится. 
Кстати, именно такого (временного) формата не хватает для CopySeries()

Именно об этом я спросил

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

Бета-версия платформы MetaTrader 5 build 3600: улучшения веб-терминала и ускоренное умножение матриц в MQL5

Alexey Viktorov, 2023.03.03 14:47

Будут-ли добавлены варианты функции CopySeries аналогично функции CopyRates 

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   int              count,             // сколько копируем
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   );
int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   datetime         stop_time,         // по какую дату
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   );

но ответа нет…

 

Если набрать название включаемого файла, как попало, то после ALT+G открывается вкладка с этим файлом в том же стиле.

 
Roman #:

А у CopyRates такая же проблема? Как вы описали.
Или у CopyRates такой проблемы нет? 

О чём и было моё предположение, что CopyRates может вернуть не синхронизированные поля структуры. 
Если это не так, то так пусть и напишут, что я ошибаюсь.
Мое предположение основывается на том, что если у CopyRates были-бы синхронизированы поля структуры, зачем тогда вводить CopySeries?
Если только для уменьшения запрашиваемых данных, соответственно ускорения.

Но как я понял проблема сетевых таймаутов в CopySeries так-же не решена.
И при первом запуске, CopySeries будет отдавать данные пачками по мере загрузки, что приводит к возможному использованию не тех данных которые ожидаешь!  

У CopyRates нет проблем с синхронизацией, а CopySeries - это частный случай  CopyRates, когда требуется получить не все данные по бару, а только отдельные поля.
Если требуемые поля бара копировать отдельными вызовами CopyLow, СopyTime и т.д., то между вызовами может открыться новый бар и данные в массивах будут неконсистентны, как описал Alain

CopySeries - полностью самостоятельная функция и не использует для совей работы CopyRates.
Синхронизация обеспечивается блокировкой обновления данных по символу на время работы функции, как во всех остальных CopyXXX
Блокировка обновления означает, что обновления по символу будут применены после снятия блокировки, т.е. не будут потеряны.

Новая функция CopySeries имеет только один варант - запрос по номеру бара.
Как правило, при запросе N баров, данные запрашиваются для последних N баров, именно при таком запросе есть вероятность получить несинхронизованные данные, с которыми нельзя работать.
Проблемы несинхронизованных данных нет при использовании CopyXXX функций с указанием начального времени бара, надеюсь не нужно объяснять почему.
Именно поэтому, реализацию вариантов CopySeries для запроса данных по времени пока отложили, сосредоточившись на более важных задачах