← 返回

БАГ при построении свечей!!!

Пример был разобран на ТИКОВОМ графике, хотя существует вероятность, что графики строятся неправильно на всех НЕСТАНДАРТНЫХ типах (range, renko итд)

Кластера начинают неправильно принтоваться ПОСЛЕ наступления нового торгового дня (как минимум)

1.png Screenshot_3.png

Итог: Примеры была рассмотрены при использовании Гидры. Данные взяты из QScalp history (преобразованы с использованием Qsh2StockSharp конвертера) Первый день истории строится ПРАВИЛЬНО, но после наступления следующего торгового дня все построение становится некорректным

本主题对您有帮助吗?

分享主题

评论 (14)

登录创建账户, 登录或注册以发表评论

Sprite
Sprite

Насколько я понимаю тут дело в том, что в библиотеке какая-то древняя проблема с закрытием последней свечки сессии/дня, т.е. последняя свечка никогда не принимает значение State == Finished, так как коннектор не знает что сессия закончилась. Вероятно так свечки у вас и сериализовались - незакрытыми. Я пытался вручную закрывать свечки, отправляя в коннектор сообщения с новыми тиками, менял свойство свечи State, чистил хранилище, в общем много чего перепробовал, но удачные эксперименты ломались с обновлениями версии библиотеки. В итоге я устал поддерживать собственные хаки, забил на это и теперь просто держу такую особенность в голове, когда тестирую историю. Но если надо иметь идеальную историю и дело действительно в том, о чём я говорю, то можете изучить как в хранилище или на лету закрывать свечу.

Greenn
Greenn
Greenn 作者

sprite: Насколько я понимаю тут дело в том, что в библиотеке какая-то древняя проблема с закрытием последней свечки сессии/дня, т.е. последняя свечка никогда не принимает значение State == Finished, так как коннектор не знает что сессия закончилась. Вероятно так свечки у вас и сериализовались - незакрытыми. Я пытался вручную закрывать свечки, отправляя в коннектор сообщения с новыми тиками, менял свойство свечи State, чистил хранилище, в общем много чего перепробовал, но удачные эксперименты ломались с обновлениями версии библиотеки. В итоге я устал поддерживать собственные хаки, забил на это и теперь просто держу такую особенность в голове, когда тестирую историю. Но если надо иметь идеальную историю и дело действительно в том, о чём я говорю, то можете изучить как в хранилище или на лету закрывать свечу.

Благодарю за ответ) Получается вы используете только 1 день, когда тестируете стратегию?

Greenn
Greenn 作者

Кстати, при использовании временнЫх свечек кластера правильно отображаются

Sprite
Sprite

Greenn: Благодарю за ответ) Получается вы используете только 1 день, когда тестируете стратегию?

Нет, конечно не один день, но так как вы суммируете кластерные объемы в боксовых свечах, то неверными у вас будут значения только в первой группе от начала сессии. И ещё раз - если я прав (это можно проверить принудительно завершив последнюю свечку сессии), то дальше сами решайте как это побороть, на лету править свечки или править свечки в хранилище. Кстати, попробуйте задать размер бокса равным единице и посмотрите исправится ли ошибка (т.е. Timeframe2Multiplier = 1, Timeframe3Multiplier = 1).

Greenn: Кстати, при использовании временнЫх свечек кластера правильно отображаются

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

Еще есть такая бага - если у вас в хранилище есть несколько свечей с одинаковым временем начала и конца (т.е. когда точности горизонтальной шкалы графика не хватает рисовать быстрее секунды), то вообще всё поедет.

Greenn
Greenn 作者

Нет, конечно не один день, но так как вы суммируете кластерные объемы в боксовых свечах, то неверными у вас будут значения только в первой группе от начала сессии. И ещё раз - если я прав (это можно проверить принудительно завершив последнюю свечку сессии), то дальше сами решайте как это побороть, на лету править свечки или править свечки в хранилище. Кстати, попробуйте задать размер бокса равным единице и посмотрите исправится ли ошибка (т.е. Timeframe2Multiplier = 1, Timeframe3Multiplier = 1).

Да, но это касается только ТФ свечей. Если же брать другие (не ТФ) графики (например 200 tick), то там валидна только серия свечей ДО следующего дня, т.е. история длиной в 1 день. Дальше наступает следующий день и все ломается. Я и хотел узнать, как вы обходите этот момент)

Sprite
Sprite

Greenn: Да, но это касается только ТФ свечей. Если же брать другие (не ТФ) графики (например 200 tick), то там валидна только серия свечей ДО следующего дня, т.е. история длиной в 1 день. Дальше наступает следующий день и все ломается. Я и хотел узнать, как вы обходите этот момент) Мне кажется мы не понимаем друг друга. Если вы сделаете Timeframe2Multiplier = 1, Timeframe3Multiplier = 1 то у вас будет "невалидна" только первая свеча в начале сессии, так?

Greenn
Greenn 作者

sprite:

Greenn: Да, но это касается только ТФ свечей. Если же брать другие (не ТФ) графики (например 200 tick), то там валидна только серия свечей ДО следующего дня, т.е. история длиной в 1 день. Дальше наступает следующий день и все ломается. Я и хотел узнать, как вы обходите этот момент) Мне кажется мы не понимаем друг друга. Если вы сделаете Timeframe2Multiplier = 1, Timeframe3Multiplier = 1 то у вас будет "невалидна" только первая свеча в начале сессии, так?

Я разобрался 😂. Благодарю за помощь)

William B
William B

Greenn:

sprite:

Greenn: Да, но это касается только ТФ свечей. Если же брать другие (не ТФ) графики (например 200 tick), то там валидна только серия свечей ДО следующего дня, т.е. история длиной в 1 день. Дальше наступает следующий день и все ломается. Я и хотел узнать, как вы обходите этот момент) Мне кажется мы не понимаем друг друга. Если вы сделаете Timeframe2Multiplier = 1, Timeframe3Multiplier = 1 то у вас будет "невалидна" только первая свеча в начале сессии, так?

Я разобрался 😂. Благодарю за помощь)

Уважаемые пользователи, я очень рад, что вы разобрались и надеюсь смогли решить проблему. Если это так, то может поделитесь источником этой проблемы, чтобы мы могли поправить библиотеку и устранить её в корне. Также просьба пояснить как воспроизвести ошибку, т.е. какие настройки необходимо установить, чтобы увидеть сбой. Уточните, вы строили график в Гидре или в Терминале? Если в Терминале, то данные шли напрямую из коннектора? Какой коннектор вы использовали? Квик?

Sprite
Sprite

Greenn: Я и хотел узнать, как вы обходите этот момент) Я - вот так, в кэндлбилдере: protected override bool IsCandleFinishedBeforeChange(ICandleBuilderSubscription subscription, RangeXVCandleMessage candle, ICandleBuilderValueTransform transform) { ................ if (transform.Time.Day != candle.OpenTime.Day) { return true; }

Greenn
Greenn 作者

sprite:

Greenn: Я и хотел узнать, как вы обходите этот момент) Я - вот так, в кэндлбилдере: protected override bool IsCandleFinishedBeforeChange(ICandleBuilderSubscription subscription, RangeXVCandleMessage candle, ICandleBuilderValueTransform transform) { ................ if (transform.Time.Day != candle.OpenTime.Day) { return true; }

Благодарю. Я все проблемы описал чуть выше. Может больше не придется бороться со свечками😂

Greenn
Greenn 作者

Уважаемые пользователи, я очень рад, что вы разобрались и надеюсь смогли решить проблему. Если это так, то может поделитесь источником этой проблемы, чтобы мы могли поправить библиотеку и устранить её в корне. Также просьба пояснить как воспроизвести ошибку, т.е. какие настройки необходимо установить, чтобы увидеть сбой. Уточните, вы строили график в Гидре или в Терминале? Если в Терминале, то данные шли напрямую из коннектора? Какой коннектор вы использовали? Квик?

Добрый день. Суть проблемы состоит в том, что библиотека не может завершить НЕЗАКОНЧЕННУЮ СВЕЧУ. Например рассмотрим самую последнюю свечу первого дня истории графика 200 tick. С точки зрения заполнения она может не успеть закончиться к тому моменту, когда закончится торговый день. То есть условно остановиться на отсчете в 136 tick и иметь состояние "Активна". Но это неверно, потому что тиков в этом торговом дне больше не будет, а значит ее нужно ПРИНУДИТЕЛЬНОзакрыть. Если этого не сделать, то она будет склеиваться с тиками следующего дня

Screenshot_1.png

Это Гидра:

1.png Screenshot_4.png Цифры в кластерах должны совпадать с цифрами левой картинки, но из-за того, что произошла склейка - все кластера ВТОРОГО ДНЯ принтуются неверно. Два дня которые здесь разобраны представил в виде файла QSH2_S# внизу

Greenn
Greenn 作者

Что касается Терминала, то там проблема мне непонятна

QUIK connector и данные идут напрямую

Рассмотрим график RIM1 200 tick Открываем терминал, подключаемся, добавляем свечи и загружаем историю только текущего дня. Параметры загрузки свечей следующие Screenshot_7.png

Идет загрузка истории и вдруг с какого-то момента начинается неправильный принт кластеров (с 17.15 Санкт-Петербург, UTC+3)

Screenshot_5.png 2.png

Sprite
Sprite

Greenn: Цифры в кластерах должны совпадать с цифрами левой картинки, но из-за того, что произошла склейка - все кластера ВТОРОГО ДНЯ принтуются неверно.

Строго говоря это не верное утверждение. "Нетаймфрейм" свечки в библиотеке рисуются верно, но вы хотите их завершать не по той логике, которая в них встроена. Т.е если взять ваш пример 200 тиков: Логика свечки - свечка должна закончиться, когда будет набрано 200 тиков и время тут ни при чём. Ваша логика - свечка должна закончиться в конце сессии, не зависимо от того сколько тиков пройдено.

И да, я тоже хотел заканчивать свечки в конце сессии и поэтому я и строю свои свечки для рынков где это нужно.

Greenn
Greenn
Greenn 作者

sprite:

Greenn: Цифры в кластерах должны совпадать с цифрами левой картинки, но из-за того, что произошла склейка - все кластера ВТОРОГО ДНЯ принтуются неверно.

Строго говоря это не верное утверждение. "Нетаймфрейм" свечки в библиотеке рисуются верно, но вы хотите их завершать не по той логике, которая в них встроена. Т.е если взять ваш пример 200 тиков: Логика свечки - свечка должна закончиться, когда будет набрано 200 тиков и время тут ни при чём. Ваша логика - свечка должна закончиться в конце сессии, не зависимо от того сколько тиков пройдено.

И да, я тоже хотел заканчивать свечки в конце сессии и поэтому я и строю свои свечки для рынков где это нужно.

Все верно, если мы говорим про Гидру. Но пример с Терминалом (2 пост) говорит об обратном. Почему произошел сбой принта ни с того ни сего? Почему с 17.15 кластера принтуются некорректно? Магическая магия.