Таблица всех сделок. Доступ через MQL5 - страница 3

 
prostotrader:

Может кто знает в чём ошибка?

Индикатор работает правильно, но отображается больше баров,

чем сделано в настройке.

 

 

Код не глядел, но предположу, что после появления каждого нового бара, не учитывается то, что и линии индикатора тоже автоматически сдвигаются влево (если смотреть на график). Другими словами нужно после появления нового бара сдвинуть линии индикатора вправо (если смотреть на график).
 
Karputov Vladimir:
Код не глядел, но предположу, что после появления каждого нового бара, не учитывается то, что и линии индикатора тоже автоматически сдвигаются влево (если смотреть на график). Другими словами нужно после появления нового бара сдвинуть линии индикатора вправо (если смотреть на график).
Спасибо, нашел багу.
Файлы:
DealsLent.mq5  10 kb
 
prostotrader:
Последний штрих..

Оказался не последний ....

Нужна ещё одна оптимизация.

Доделаю и оттестирую... 

 
Раз пошла такая пьянка, то держите тиковый индикатор - индикатор открытого интереса (запускать на реальном счёте подключённом к бирже).
Файлы:
 
Karputov Vladimir:
Раз пошла такая пьянка, то держите тиковый индикатор - индикатор открытого интереса (запускать на реальном счёте подключённом к бирже).
Спасибо.
 

Обнаружилась серьёзная проблема:

Дублирование тиков с разным стартовым временем :(

int copied=CopyTicks(Symbol(),ticks,COPY_TICKS_ALL,start_time,0);

 start_time разное, а тики копируются повторно, если

у них одинаковое время

 

Завтра подробно опишу. 

Самая последняя сборка 

Файлы:
DealsLent.mq5  12 kb
 

Что-то не спится, решил написать что происходит.

(Полный код индикатора в посте выше.) 

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

а блоками (см. скриншот) Блок 1, Блок 2 и т.д

 

Терминал их "складирует" и выводит в таблицу, как он их получает с биржи (поблочно).

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

Если мы вызываем CopyTicks() НЕ в реальном времени (скажкем, на следующий день или через несколько секунд),

то функция CopyTicks() будет возвращать точные данные.

А в реальном времени происходит следующее:

int copied=CopyTicks(Symbol(),ticks,COPY_TICKS_ALL,start_time,0);

 Если start_time = (23:49:58.114), то мы получаем Блок 1 полностью (обведено красным).

Затем, мы ждём изменение во времени, чтобы получить Блок 2 (обведено зелёным).

Чтобы избежать дублирование Блока 1 (OnBookEvent может очень быстро сработать)

введена проверка, что время изменилось

 if(start_time==ulong(ticks[copied-1].time_msc)) return;

Когда start_time = (23:49:58.596), мы должны были бы получить Блок 2,

но функция CopyTicks() возвращает и Блок 2 и все тики со временем (23:49:58.114),

если в Блоке 2 есть хотя бы один тик с этим же временем(23:49:58.114).

Вот такие очень грустные новости.... :(  

Если разработчики не пофиксят это, то получать Ленту сделок в реальном времени - невозможно.


 
prostotrader:


А почему Вы думаете, что тики при запросе по времени скачиваются от заданного времени и ВГЛУБЬ истории? На самом деле, при запросе тиков по времени, тики скачиваются от заданного времени и в БУДУЩЕЕ. Например:

Входные данные (запрос 20000 тиков), время 2016.08.25 20-00-00:

запрос 20000 тиков, время 2016.08.25 20-00-00:


Получаем:

2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Получено тиков: 10823 код ошибки: 0
2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Тик: 2016.08.25 20:00:00 bid: 14377.0 ask: 0.0 last: 0.0 [0]
2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Тик: 2016.08.26 00:02:08 bid: 0.0 ask: 0.0 last: 0.0 [10822]
2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Size 0 Mb

То есть тики получены от запрошенного времени 2016.08.25 20:00:00 в сторону БУДУЩЕГО (последний тик имеет время 2016.08.26 00:02:08)

Файлы:
 
Karputov Vladimir:

А почему Вы думаете, что тики при запросе по времени скачиваются от заданного времени и ВГЛУБЬ истории? На самом деле, при запросе тиков по времени, тики скачиваются от заданного времени и в БУДУЩЕЕ. Например:

Входные данные (запрос 20000 тиков), время 2016.08.25 20-00-00:



Получаем:

То есть тики получены от запрошенного времени 2016.08.25 20:00:00 в сторону БУДУЩЕГО (последний тик имеет время 2016.08.26 00:02:08)

Я не думаю, что в глубь, а вижу, что "прихватываются" из глубины. 

Зачем думать?

Запустите индикатор и сами всё увидите!

И Вы вообще читаете, что написано?

Если мы вызываем CopyTicks() НЕ в реальном времени (скажкем, на следующий день),

то функция CopyTicks() будет возвращать точные данные.
 
Я это совершенно случайно заметил, когда вечерем, сделок стало меньше.
Причина обращения: