← Zurück

Binance коннектор. Глюки при отрисовке свечей

При использовании режима отрисовки в виде японских свечей или баров периодически проскакивает рисование High или Low свечи, которых по факту не существует. В этом можно убедиться переключив режим на профиль или кластерный график. Из-за этого весь график сжимается по оси Y. Как такое возможно? Картинки прилагаются: image4269.png - кривые цены на хаях отмечены красной линией image3375.png - переключаемся на профильные свечи, кривые хай-лоу пропадают image7513.png - этот же период с родного терминала Binance, никаких прострелов не наблюдается image779.png - растянутый на весь экран график в режиме баров. Кривые хай-лоу сжимают график до невозможности прочтения. image3439.png - растянутый на весь экран график в режиме профиля. Кривые хай-лоу чудесным образом исчезают.

UPDATE1: Поизучал трейды из которых строятся свечки - в файлах trades.bin (которые генерирует S# из маркет даты) есть фантомные трейды, которых нет на биржевых графиках родного терминала Binance (В ATAS тоже все в порядке). Т.е. по сути японские свечки и бары строятся правильно (тогда возникает вопрос почему неправильно рисуются профили и кластера), а вот маркет данные обрабатываются в недрах библиотеки неправильно и периодически регистрируются какие-то трейды, цена которых лежит явно за пределами торгуемого диапазона инструмента. Причем как правило это один трейд с минимальным объемом по цене, которая в несколько раз выше или ниже текущего дневного диапазона.

UPDATE2: Не знаю поможет это для решения проблемы или нет, но один раз я получит вот такое исключение:

Binance_PusherClientFutures_MarketData 06.05.2022 16:51:37 +03:00 Error System.InvalidOperationException: Error parsing string ''. ---> System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter 'price') at StockSharp.Algo.Candles.Compression.VolumeProfileBuilder.GetPriceLevelIdx(Decimal price) at StockSharp.Algo.Candles.Compression.VolumeProfileBuilder.Update(Decimal price, Nullable1 volume, Nullable1 side) at StockSharp.Algo.Candles.Compression.VolumeProfileHelper.Update(VolumeProfileBuilder volumeProfile, ICandleBuilderValueTransform transform) at StockSharp.Algo.Candles.Compression.CandleBuilder1.OnProcess(ICandleBuilderSubscription subscription, ICandleBuilderValueTransform transform)+MoveNext() at StockSharp.Algo.Candles.Compression.CandleBuilder1.Process(ICandleBuilderSubscription subscription, ICandleBuilderValueTransform transform)+MoveNext() at StockSharp.Algo.Candles.Compression.CandleBuilderMessageAdapter.ProcessValue(ISubscriptionIdMessage message) at StockSharp.Algo.Candles.Compression.CandleBuilderMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.OrderBookTruncateMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.OrderBookIncrementMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.OrderLogMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.SubscriptionMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.SubscriptionMessageAdapter.InnerAdapterNewOutMessage(Message message) at StockSharp.Algo.PartialDownloadMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.Commissions.CommissionMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.SubscriptionSecurityAllMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.SubscriptionOnlineMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.Positions.PositionMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.TransactionOrderingMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.LookupTrackingMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.Slippage.SlippageMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.Latency.LatencyMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Algo.HeartbeatMessageAdapter.OnInnerAdapterNewOutMessage(Message message) at StockSharp.Binance.BinanceMessageAdapter.SessionOnNewTrade(BinanceSections section, Trade trade) at Ecng.Net.WebSocketClient.OnReceive(CancellationTokenSource source)

UPDATE3: При этом если выкачать данные как исторические, т.е. не получать и сохранять их в реалтайм (во время торгов), а выкачать гидрой, то в таком случае фантомных трейдов нет.

War dieses Thema hilfreich?

Thema teilen

Kommentare (6)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Support
Support
  1. Насчет неверных цен сделок: скорее всего вы подключаетесь используя ключ от демо (binance testnet) -- поэтому получаете неверные/неполные данные. Для получения реальных данных (сделок) нужно использовать ключ от реального аккаунта.
  2. Насчет ошибки (UPDATE2): сообщение об ошибке, которое вы привели, неполное. Приведите всё сообщение, или предоставьте лог-файл.
  3. Насчет UPDATE3: когда вы выкачиваете данные как исторические, они выкачиваются сразу в виде свечей. Для скачивания исторических свечей, в отличие от исторических сделок, бинанс не требует авторизации при помощи ключа, поэтому выкачиваются реальные данные.
Sprite
Sprite Autor
  1. Зачем фантазировать? Я подключаюсь к реальному, а не к демо счету, я уже писал об этом в предыдущем безответном топике.
  2. Более полное описание ошибки предоставлю как только она повторится.
  3. Зачем фантазировать? Я выкачиваю исторические данные исключительно в виде тиков (и об этом я писал). Никаких готовых свечей я не выкачиваю.

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

Support
Support

Если гидра сохраняет тики в файл trades.bin корректно, то скорее всего какая то проблема в вашем приложении в процессе сохранения данных. При построении свечей из реалтайм сделок в SampleConnection я тоже проблемы не вижу. Сделайте минимальный проект visual studio, воспроизводящий проблему. Можете например взять за основу тот же SampleConnection или другой пример, добавить туда сохранение данных и выполнить все подписки, которые есть в вашем оригинальном приложении, убедиться что проблема воспроизводится, и потом прислать этот проект. Попробуем разобраться.

Sprite
Sprite Autor

Прилагаю скриншоты минутного графика на сегодня 23 мая:

  1. Сайт Binance
  2. Моё приложение
  3. Ваше приложение SampleConnection

Обратите внимание на минутную свечку в 16 часов 14 минут. На сайте Binance нет такой сопли вниз, ваш коннектор её нарисовал в обоих приложениях.

image988.png image5709.png image6753.png

Дополнительно выкладываю видео как коннектор в вашем приложении SampleConnection загружает исторические свечки, построенные на тиках.

https://cloud.mail.ru/public/egW7/f5EQ4XLVE

В этом видео вы можете увидеть как коннектор скачивает по 1000 тиков и строит по ним исторические свечки. Я запустил проект в 13 часов и начал скачивать данные с начала дня (т.е. с 00:00 часов), чтобы в итоге коннектор синхронизировался с текущими биржевыми данными. В итоге через 10 минут стало ясно что мы успели скачать/построить/нарисовать 15 свечек, т.е. для того чтобы коннектор перешел в состояние риал тайм ему нужно около 12 часов. А если рынок будет более активен то и больше, до бесконечности.

Для обоих примеров с использованием SampleConnection в проекте изменена единственная строчка, чтобы коннектор строил свечи из тиков, а не брал готовые с биржи. Строчка: https://github.com/StockSharp/StockSharp/blob/master/Samples/Connectors/SampleConnection/SecuritiesWindow.xaml.cs#L458 Было DataType2 = DataType.TimeFrame(tf), Стало DataType2 = DataType.TimeFrame(TimeSpan.FromSeconds(59)),

Sprite
Sprite Autor

Ещё скриншот: S# SampleConnection против сайта TradingView

image2588.png

Support
Support

Ошибочные цены при построении графика из тиков бинанс будут исправлены в следующем релизе коннектора бинанс.