При использовании режима отрисовки в виде японских свечей или баров периодически проскакивает рисование 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, Nullable`1 volume, Nullable`1 side)
at StockSharp.Algo.Candles.Compression.VolumeProfileHelper.Update(VolumeProfileBuilder volumeProfile, ICandleBuilderValueTransform transform)
at StockSharp.Algo.Candles.Compression.CandleBuilder`1.OnProcess(ICandleBuilderSubscription subscription, ICandleBuilderValueTransform transform)+MoveNext()
at StockSharp.Algo.Candles.Compression.CandleBuilder`1.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: При этом если выкачать данные как исторические, т.е. не получать и сохранять их в реалтайм (во время торгов), а выкачать гидрой, то в таком случае фантомных трейдов нет.