Example #1
0
        private void ProcessMarketDataFinished(MarketDataFinishedMessage message)
        {
            var info = _seriesInfosByTransactions.TryGetValue(message.OriginalTransactionId);

            if (info == null)
            {
                RaiseNewOutMessage(message);
                return;
            }

            if (message.IsHistory)
            {
                if (!info.MarketDataMessage.IsHistory)
                {
                    return;
                }

                RemoveSeriesInfo(info);
                RaiseNewOutMessage(new MarketDataFinishedMessage {
                    OriginalTransactionId = info.MarketDataMessage.TransactionId, IsHistory = true
                });

                return;
            }

            _seriesInfosByTransactions.Remove(message.OriginalTransactionId);

            switch (info.DataType)
            {
            case MarketDataTypes.Level1:
            case MarketDataTypes.MarketDepth:
            case MarketDataTypes.Trades:
            {
                SendMarketDataFinished(info);
                break;
            }

            case MarketDataTypes.CandleTimeFrame:
            case MarketDataTypes.CandleTick:
            case MarketDataTypes.CandleVolume:
            case MarketDataTypes.CandleRange:
            case MarketDataTypes.CandlePnF:
            case MarketDataTypes.CandleRenko:
            {
                if (info.MarketDataMessage.BuildCandlesMode != BuildCandlesModes.LoadAndBuild)
                {
                    SendMarketDataFinished(info);
                }
                else
                {
                    Subscribe(info, true);
                }

                break;
            }
            }
        }
        private void RaiseMarketDataSubscriptionFinished(Security security, MarketDataFinishedMessage message, Subscription subscription)
        {
            this.AddDebugLog(LocalizedStrings.SubscriptionFinished, security?.Id, message);
            MarketDataSubscriptionFinished?.Invoke(security, message);

            if (subscription != null)
            {
                RaiseSubscriptionStopped(subscription, null);
            }
        }
Example #3
0
        private void SendMarketDataFinished(SeriesInfo info)
        {
            RemoveSeriesInfo(info);

            var msg = new MarketDataFinishedMessage
            {
                OriginalTransactionId = info.MarketDataMessage.TransactionId
            };

            RaiseNewOutMessage(msg);
        }
Example #4
0
            public Subscription ProcessMarketDataFinishedMessage(MarketDataFinishedMessage message)
            {
                var subscription = TryGetSubscription(message.OriginalTransactionId, true);

                if (subscription != null)
                {
                    ChangeState(subscription, SubscriptionStates.Finished);
                }

                return(subscription);
            }
Example #5
0
        private void RaiseMarketDataSubscriptionFinished(MarketDataFinishedMessage message, Subscription subscription)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            if (subscription == null)
            {
                throw new ArgumentNullException(nameof(subscription));
            }

            var security = subscription.Security;

            this.AddDebugLog(LocalizedStrings.SubscriptionFinished, security?.Id, message);
            MarketDataSubscriptionFinished?.Invoke(security, message);

            RaiseSubscriptionStopped(subscription, null);

            if (subscription.CandleSeries != null)
            {
                RaiseCandleSeriesStopped(subscription.CandleSeries);
            }
        }
Example #6
0
 private void RaiseMarketDataSubscriptionFinished(Security security, MarketDataFinishedMessage message)
 {
     this.AddDebugLog("Market data finished: {0} {1}", security?.Id, message);
     MarketDataSubscriptionFinished?.Invoke(security, message);
 }
Example #7
0
 private void RaiseMarketDataSubscriptionFinished(Security security, MarketDataFinishedMessage message)
 {
     this.AddDebugLog(LocalizedStrings.SubscriptionFinished, security?.Id, message);
     MarketDataSubscriptionFinished?.Invoke(security, message);
 }
Example #8
0
 public Subscription ProcessMarketDataFinishedMessage(MarketDataFinishedMessage message)
 {
     return(TryGetSubscription(message.OriginalTransactionId, true));
 }
        /// <inheritdoc />
        protected override void OnSendInMessage(Message message)
        {
            Message outMsg = null;

            switch (message.Type)
            {
            case MessageTypes.Reset:
            case MessageTypes.Disconnect:
            {
                lock (_syncObject)
                {
                    _partialRequests.Clear();
                    _original.Clear();
                    _liveRequests.Clear();
                }

                break;
            }

            case MessageTypes.OrderStatus:
            case MessageTypes.PortfolioLookup:
            {
                var subscriptionMsg = (ISubscriptionMessage)message;

                if (subscriptionMsg.IsSubscribe)
                {
                    if (subscriptionMsg is OrderStatusMessage statusMsg && statusMsg.HasOrderId())
                    {
                        break;
                    }

                    var from = subscriptionMsg.From;
                    var to   = subscriptionMsg.To;

                    if (from != null || to != null)
                    {
                        var step = InnerAdapter.GetHistoryStepSize(DataType.Transactions, out _);

                        // adapter do not provide historical request
                        if (step == TimeSpan.Zero)
                        {
                            if (to != null)
                            {
                                // finishing current history request

                                if (message.Type == MessageTypes.PortfolioLookup)
                                {
                                    outMsg = message.Type.ToResultType().CreateLookupResult(subscriptionMsg.TransactionId);
                                }

                                message = null;
                            }
                            else
                            {
                                // or sending further only live subscription
                                subscriptionMsg.From = null;
                                subscriptionMsg.To   = null;

                                lock (_syncObject)
                                    _liveRequests.Add(subscriptionMsg.TransactionId, false);
                            }
                        }
                    }
                    else
                    {
                        lock (_syncObject)
                            _liveRequests.Add(subscriptionMsg.TransactionId, false);
                    }
                }

                break;
            }

            case MessageTypes.MarketData:
            {
                var mdMsg   = (MarketDataMessage)message;
                var transId = mdMsg.TransactionId;

                if (mdMsg.IsSubscribe)
                {
                    var from = mdMsg.From;
                    var to   = mdMsg.To;

                    if (from != null || to != null)
                    {
                        var step = InnerAdapter.GetHistoryStepSize(mdMsg.ToDataType(), out var iterationInterval);

                        // adapter do not provide historical request
                        if (step == TimeSpan.Zero)
                        {
                            if (to != null)
                            {
                                // finishing current history request
                                outMsg = new MarketDataFinishedMessage {
                                    OriginalTransactionId = transId
                                };
                                message = null;
                                break;
                            }
                            else
                            {
                                // or sending further only live subscription
                                mdMsg.From = null;
                                mdMsg.To   = null;

                                lock (_syncObject)
                                    _liveRequests.Add(transId, false);

                                break;
                            }
                        }

                        var info = new DownloadInfo(this, (MarketDataMessage)mdMsg.Clone(), step, iterationInterval);

                        message = info.InitNext();

                        lock (_syncObject)
                        {
                            _original.Add(info.Origin.TransactionId, info);
                            _partialRequests.Add(info.CurrTransId, info);
                        }
                    }
                    else
                    {
                        lock (_syncObject)
                            _liveRequests.Add(transId, false);
                    }
                }
                else
                {
                    lock (_syncObject)
                    {
                        if (!_original.TryGetValue(mdMsg.OriginalTransactionId, out var info))
                        {
                            break;
                        }

                        info.UnsubscribingId = transId;
                        message = null;
                    }
                }

                break;
            }

            case ExtendedMessageTypes.PartialDownload:
            {
                var partialMsg = (PartialDownloadMessage)message;

                lock (_syncObject)
                {
                    if (!_original.TryGetValue(partialMsg.OriginalTransactionId, out var info))
                    {
                        return;
                    }

                    if (info.UnsubscribingId != null)
                    {
                        outMsg = new MarketDataMessage {
                            OriginalTransactionId = info.UnsubscribingId.Value
                        };
                        message = null;
                        break;
                    }

                    var mdMsg = info.InitNext();

                    if (mdMsg.To == null)
                    {
                        _liveRequests.Add(mdMsg.TransactionId, true);

                        _original.Remove(partialMsg.OriginalTransactionId);
                        _partialRequests.RemoveWhere(p => p.Value == info);
                    }
                    else
                    {
                        _partialRequests.Add(info.CurrTransId, info);
                    }

                    message = mdMsg;
                }

                break;
            }
            }

            if (message != null)
            {
                base.OnSendInMessage(message);
            }

            if (outMsg != null)
            {
                RaiseNewOutMessage(outMsg);
            }
        }