CreateDataSource возвращает неверные данные

Страницы: 1
RSS
CreateDataSource возвращает неверные данные
 
Добрый день.

Иногда CreateDataSource возвращает неверные данные.
Демонстрационный скрипт:
Скрытый текст

Графики должны быть закрыты. Можно запустить несколько скриптов с разными инструментами.
Через некоторое время будет сообщение вида:
Скрытый текст

Возможно, большое количество свечей повышает вероятность ошибки. Но это не точно.
Надо делать так, как надо. А как не надо - делать не надо.
 
Должен быть закрыт график по тестируемому тайфрейму (в данном случае минутный) тестируемого инструмента. Остальные графики могут быть открыты.
Надо делать так, как надо. А как не надо - делать не надо.
 
Отличается на 1 транзакцию, судя по всему в результате различия тайминга извлечения данных. Не вижу в чём проблема.
 
Свеча предпоследняя. При чём здесь
Цитата
Артем написал:
тайминга извлечения данных
?
Надо делать так, как надо. А как не надо - делать не надо.
 
Исполнение кода занимает некоторое время, команда sleep принудительно останавливает процесс. Между чтениями данных из базы данных образуется задержка, которая может быть достаточно большой чтобы выполнилась одна или более транзакций.

Ваш код очень тяжело читается, возможно содержит неочевидные ошибки. Что именно он должен делать, если словами?
 
Цитата
Артем написал:
Между чтениями данных из базы данных образуется задержка, которая может быть достаточно большой чтобы выполнилась одна или более транзакций.
Транзакция в прошлом? В окне сообщений есть и время свечи и время самого сообщения.

Цитата
Артем написал:
Что именно он должен делать, если словами?
Показывать что
Цитата
Старатель написал:
Иногда CreateDataSource возвращает неверные данные
Сравнивается дневной объём на D1 и M1. При несовпадении запоминается индекс крайней свечи M1 на момент создания DS (обычно эта свеча содержит ошибку).
По закрытию свечи M1 выводится её содержимое.
В message - одна и та же свеча из разных DataSource, открытых с небольшой (100 мс) временной разницей.
Надо делать так, как надо. А как не надо - делать не надо.
 
Дабы предупредить спекуляции на другие темы:
Обычно DataSource обновляются синхронно в порядке их создания.
И, если нет разрывов соединения или потерь пакетов, это позволяет в тестовом скрипте сравнивать данные из DataSource разных таймфреймов.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель написал:
В message - одна и та же свеча из разных DataSource, открытых с небольшой (100 мс) временной разницей.
Вернее не так, там разница более 1 сек. Но не суть.
График тот же, но данные разные.

Цитата
Артем написал:
возможно содержит неочевидные ошибки
Возможно, первый sleep стоило бы заменить на
Код
repeat sleep(1000) until ds_D1:Size() > 0
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель написал:
Цитата
Артем написал:
Между чтениями данных из базы данных образуется задержка, которая может быть достаточно большой чтобы выполнилась одна или более транзакций.
Транзакция в прошлом? В окне сообщений есть и время свечи и время самого сообщения.
В асинхронных фреймворках еще и не такое бывает.


Вроде как свечи обновляются срезами, разные срезы = расхождение в данных.
 
Вместо тысячи слов:
Надо делать так, как надо. А как не надо - делать не надо.
 
Насколько я понимаю, время свечки пересчитывается по локальным часам. Может ли быть такое, что сделка, попадающая точно на границу свечек, может попасть в предыдущую свечку а не в следующую при обработке в колбеке? При этом такой эффект не будет наблюдаться при загрузке архива свечек с сервера. Попробуйте вывести также содержимое соседних свечек.
 
Проделал следующее:
Сразу после первого сообщения об ошибке до закрытия свечи открыл минутный график. Через пару минут разорвал соединение с сервером.
На свече объём 4984
Скрытый текст

Затем переключился на другой таймфрейм и обратно на минутный.
Объём поменялся на 4982
Скрытый текст

Саппорт, вас интересуют баг-репорты?
Надо делать так, как надо. А как не надо - делать не надо.
 
Вот скрипт попроще, который довольно быстро воспроизводит эту проблему:
Скрытый текст

Результат работы:
Код
...
20:11:35.758 subscribing for H2 & H4
20:11:35.964 H2 filled: 2084
20:11:35.964 H4 filled: 1358
20:11:35.964 V4 = 4954.0  V2 = 4954.0
20:11:35.964 closing H2 & H4
20:11:35.964 subscribing for H2 & H4
20:11:36.170 H2 filled: 2084
20:11:36.170 H4 filled: 1358
20:11:36.170 V4 = 4954.0  V2 = 4954.0
20:11:36.170 closing H2 & H4
20:11:36.170 subscribing for H2 & H4
20:11:36.377 H2 filled: 2084
20:11:36.377 H4 filled: 1358
20:11:36.377 error: V4 = 4976.0  V2 = 4998.0  difference = -22.0
20:11:37.377 error: V4 = 4976.0  V2 = 4998.0  difference = -22.0
20:11:38.378 error: V4 = 5051.0  V2 = 5073.0  difference = -22.0
20:11:39.378 error: V4 = 5053.0  V2 = 5075.0  difference = -22.0
20:11:40.379 error: V4 = 5077.0  V2 = 5099.0  difference = -22.0
20:11:41.379 error: V4 = 5077.0  V2 = 5099.0  difference = -22.0
20:11:42.379 error: V4 = 5077.0  V2 = 5099.0  difference = -22.0
20:11:43.379 error: V4 = 5103.0  V2 = 5125.0  difference = -22.0
20:11:44.379 error: V4 = 5105.0  V2 = 5127.0  difference = -22.0
20:11:45.379 error: V4 = 5117.0  V2 = 5139.0  difference = -22.0
20:11:46.380 closing H2 & H4
 
Здравствуйте!

Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
 
Добрый день,
     
      Описанная в данном инциденте ошибка будет исправлена в одной из       очередных версий ПО.
      Приносим извинения за причиненные неудобства.
 
Читаешь и диву даёшься...  :smile:

Имеем:

1. Свечи считаются на сервере, и хранятся там ГОДАМИ, т.е. это НЕИЗМЕННАЯ величина, посчитанная ОДИН раз. В том числе, их объёмы, временные отметки и прочая "японская" хрень. А раз так - были там "разрывы соединения или потери пакетов" или нет - какая разница?

2. Все эти данные нужны только для прогнозирования, которое по определению имеет ВЕРОЯТНОСТНЫЙ характер. Следовательно, особая точность в этих значениях не нужна (и даже вредна). А потому сама проблема, вынесенная в заголовок, не имеет значения: ну, возвращает "иногда" - и пущай себе возвращает!

3. Более тяжёлые свечи строятся из более лёгких по простейшему и однозначному алгоритму. Следовательно, если нет ошибок в младших значениях свечей, их не может быть и в старших. И как при этом можно перепутать последнюю свечу с предпоследней - убей, не понимаю! И при чём тут "сделки, попадающие точно на границу свечек"? Они ведь УЖЕ ПОСЧИТАНЫ! ЕЩЕ НА СЕРВЕРЕ ПОСЧИТАНЫ! ОТКУДА, может взяться "обработка в колбеке"?

4. Шаг влево, шаг вправо карается расстрелом: "должен быть закрыт график по тестируемому таймфрейму". А это с какого бодуна? А уж если так - кто назвал эту софтину "асинхронным фреймворком!? :smile:

P.S. Лично я с самого начала считал свои свечки сам (по 9 таймфреймам, начиная с 15-секундного) и по всем тикерам, за которыми следит скрипт (таковых несколько сотен). И это чуть ли не единственное место в скрипте, которое, будучи однажды написано, прекрасно работало и работает до сих пор без сбоев. Ах, да - я же считаю даже не свечи (кому они нужны?), а динамику их изменения (скорость движения), да ещё и в дискретной шкале: курс может а) стоять на месте (это я использую, кстати, для отслеживания ситуаций, когда торги по данному инструменту не ведутся) б) медленно ползти в) нормально идти г) быстро бежать д) лететь сломя голову - всего 9 состояний (с учётом направления). Просто, надёжно (все эти ошибки, приведённые в этой ветке практически автоматом исчезнут!), наглядно (куда там графику до такого уровня наглядности!), и безо всякого CreateDataSource вообще! Всем рекомендую.
 
Изучаю гэпы тоже столкнулся с такой проблемой на дневных свечах. Очень ждём исправления.  
 
Здравствуйте. Прошу помочь, почему получаю данные в виде нулей, когда указывают интервал TICK? Если меняю на интервал M1, то данные приходят:
Код
function OnInit(

   is_run = true;
   
   ds_main2 = CreateDataSource(SPBXM, BABA_SPB, INTERVAL_TICK);
   ds_main2:SetEmptyCallback();
   
end
 
Попробуйте вручную построить тиковый график по этому инструменту. Если не получится - звоните брокеру
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
Попробуйте вручную построить тиковый график по этому инструменту. Если не получится - звоните брокеру
Действительно, график не строится только при тиковом интервале. Обратился к брокеру. Спасибо.
 
Добрый день,

Описанная в данном инциденте ошибка была исправлена в версии 9.2 терминала QUIK.
Рекомендуем обновить версию программы.
Приносим извинения за причиненные неудобства.
Страницы: 1
Читают тему
Наверх