Новая версия платформы MetaTrader 5 build 2815: Доступ к стакану цен из Python, улучшения в отладчике и профилировщике - страница 17

 
Alexey Viktorov:

никаких расхождений не наблюдалось. Ни по времени, ни по флагам, ни по объёму или цене.

Поменял свой пост сверху. В одном Терминале тик есть, в другом - нет.

 
fxsaber:

Все довольно печально.

  1. Представьте, что последний исторический тик, полученный от CopyTicksRange, имеет время 370. Совпадает с SymbolInfoTick.
  2. Вы делаете CopyTicksRange от 370 и получаете только один тик со временем 606.
  3. Делаете CopyTicksRange от 100 и получаете три тика: 220, 283 и 606.
  4. Запускаете другой Терминал и делаете запрос, как в п.3. Получаете четыре тика: 220, 283, 370 и 606!

БД свежих тиков Терминала пропускает тики - 100%. Баг.

Больше ситуаций, когда и на MT5-сервере в БД нет тика. Т.е. БД-тиков может пропускать тики не только в Терминале, но и на Сервере.

 
Alexey Viktorov:

Если вам нужны последние тики, то лучше использовать CopyTicks() имхо.

В CopyTicks свои баги

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

Новая версия платформы MetaTrader 5 build 2815: Доступ к стакану цен из Python, улучшения в отладчике и профилировщике

traveller00, 2021.03.08 11:38

Последняя релизная МТ5 2815.

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

Вызвать следующий скрипт

void OnStart()
{
  MqlTick OldTicks[];
  ulong From=1614988657725;
  int Num=CopyTicks(_Symbol,OldTicks,COPY_TICKS_INFO,From,2000);
  Print("requsted from "+(string)(datetime)(From/1000)+" "+(string)Num+" "+(string)ArraySize(OldTicks));
  Print("last tick "+(string)(datetime)(OldTicks[Num-1].time_msc/1000));
}

Полученный вывод

(AUDCAD.0_06.04.2020,M1)        requsted from 2021.03.05 23:57:37 26 26
(AUDCAD.0_06.04.2020,M1)        last tick 2021.03.05 23:54:08

А теперь вопрос. Я запросил тики за пределами существующих тиков. Другими словами, после самого последнего тика. И по идее он должен мне вернуть 0, типа тиков больше нет. Почему он вернул мне все существующие тики? Для полного набора тиков вернёт тики с начала суток. Я что-то не понимаю или это баг? Спасибо.

В итоге функций для получения тиков не остаётся, в каждой баги. Как полноценно их обходить-непонятно.

 
fxsaber:

Больше ситуаций, когда и на MT5-сервере в БД нет тика. Т.е. БД-тиков может пропускать тики не только в Терминале, но и на Сервере.

Ну не знаю… Кроме описанной проверки в предыдущем моём сообщении сверялись тики с тиками выгруженными из квика.

 
traveller00:

В CopyTicks свои баги

И по идее он должен мне вернуть 0

В итоге функций для получения тиков не остаётся, в каждой баги. Как полноценно их обходить-непонятно.

Это по вашей идее должен быть 0, а по идее разработчиков это не так. Зачем вам запрашивать заведомо аинею? Разве не понятно, что после последнего тика пустота?

 
fxsaber:

Все довольно печально.

  1. Представьте, что последний исторический тик, полученный от CopyTicksRange, имеет время 370. Совпадает с SymbolInfoTick.
  2. Вы делаете CopyTicksRange от 370 и получаете только один тик со временем 606.
  3. Делаете CopyTicksRange от 100 и получаете три тика: 220, 283 и 606.
  4. Запускаете другой Терминал и делаете запрос, как в п.3. Получаете четыре тика: 220, 283, 370 и 606!

БД свежих тиков Терминала пропускает тики - 100%. Баг.

Подверждаю.

Я вижу похожие эффекты уже несколько лет. Только у меня обычно пропущены большие куски истории тиков, иногда несколько суток может отсутствовать.

В одном терминале могут быть, в другом (тот же билд, тот же брокер) отсутствовать.

После перезапуска терминала появляются.

Никакие запросы истории тиков терминал из этого состояния не выводят, только перезапуск.

Писал об этом еще когда была техподдержка.

 
Alexey Viktorov:

Это по вашей идее должен быть 0, а по идее разработчиков это не так. Зачем вам запрашивать заведомо аинею? Разве не понятно, что после последнего тика пустота?

Это был просто пример. Мне, например, не понятно, что на реальном символе после последнего тика пустота. Могли и новые тики прийти.

Если угодно, более жизненный вариант того же бага

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

Пользовательские символы. Ошибки, баги, вопросы, предложения.

Stanislav Korotky, 2020.07.01 16:08

Новая загадка. Проблема с CopyTicks на билде 2507, на более старых (в частности 2374) работало нормально.

Свел все к простому тестовому скрипту в приложении. Он запрашивает новые тики с момента предыдущего опроса.

Вскоре после первого правильного прохода цикла скрипт начинает копировать в массив тики с временем заведомо более ранним, чем указано в параметре from, а точнее - с начала текущего дня.

В чем косяк?


 
fxsaber:

Больше ситуаций, когда и на MT5-сервере в БД нет тика. Т.е. БД-тиков может пропускать тики не только в Терминале, но и на Сервере.

Попросил брокера показать наличие определенных тиков на MT5-сервере. Они на месте.

Сейчас ситуация такая, что тики за текущие сутки (даже если удалить base-папку) приходят не все - пропускаются. При этом на сервере они есть.

Запрашивая тики за прошедшие сутки, пропуски там исчезают.


Сверху данные из Терминала (пробовал другие Терминалы - аналогично), снизу - данные MT5-сервера.

Хорошо видно, что тик, что есть в истории сервера, отсутствует в истории Терминала.

Строка для поиска: Oshibka 027. 

 

Можно попросить добавить пользовательскую настройку цвета в стакане цен? Чтобы можно было менять цвет для BUY и для SELL


 
traveller00:

Это был просто пример. Мне, например, не понятно, что на реальном символе после последнего тика пустота. Могли и новые тики прийти.

Если угодно, более жизненный вариант того же бага

Как я и предполагал, там проблема в том, что в какой-то момент переменная cursor становится больше чем время последнего тика.

Только вот в документации не совсем точно написано

CopyTicks

from

[in]  Дата, начиная с которой запрашиваются тики. Указывается в миллисекундах с 01.01.1970. Если параметр from=0, то отдаются последние count тиков.


Точней было-бы «Если параметр from=0 или больше времени последнего тика»

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

// начало
IP      0       17:12:52.262    CopyTicks (EURUSD,H1)   
EM      0       17:12:52.262    CopyTicks (EURUSD,H1)   
JI      0       17:12:52.862    CopyTicks (EURUSD,H1)   2021.03.19 16:12:58.916
HP      0       17:12:52.862    CopyTicks (EURUSD,H1)   1616170378000 2021.03.19 16:12:58.000
……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
// надоело
EO      0       18:13:52.902    CopyTicks (EURUSD,H1)   2021.03.19 17:13:57.814
RF      0       18:13:52.902    CopyTicks (EURUSD,H1)   1616174037814 2021.03.19 17:13:57.814

За час работы ни одного сбоя.

Файлы:
20210319.log  1028 kb
Причина обращения: