Ejemplo n.º 1
0
        private void RaiseNewSecurity(Security security)
        {
            var arr = new[] { security };

            _added?.Invoke(arr);

            NewSecurity?.Invoke(security);
            NewSecurities?.Invoke(arr);
        }
Ejemplo n.º 2
0
        private void SearchCallback(List <Instrument> instruments, bool hasMoreResults)
        {
            var lastAddedInstrumentId = 0;

            lock (Securities)
            {
                foreach (var instrument in instruments)
                {
                    if (_securities.ContainsKey((int)instrument.Id) || instrument.Name.Contains("weekend"))
                    {
                        continue;
                    }

                    var security = new Security
                    {
                        DataFeed       = Name,
                        Symbol         = instrument.Underlying.Symbol,
                        Name           = instrument.Name,
                        SecurityId     = (int)instrument.Id,
                        AssetClass     = instrument.Underlying.AssetClass,
                        BaseCurrency   = instrument.Contract.Currency,
                        UnitOfMeasure  = instrument.Contract.UnitOfMeasure,
                        ContractSize   = instrument.Contract.ContractSize,
                        Digit          = Math.Max(instrument.OrderBook.PriceIncrement.ToString().Length - 2, 1),
                        PriceIncrement = instrument.OrderBook.PriceIncrement,
                        MarginRate     = instrument.Risk.MarginRate,
                        MaxPosition    = instrument.Risk.MaximumPosition,
                        UnitPrice      = instrument.Contract.UnitPrice,
                        QtyIncrement   = instrument.OrderBook.QuantityIncrement,
                        MarketOpen     = instrument.Calendar.Open,
                        MarketClose    = instrument.Calendar.Close
                    };

                    Securities.Add(security);
                    NewSecurity?.Invoke(security);
                    _securities[security.SecurityId] = security;
                    Subscribe(security);
                    lastAddedInstrumentId = security.SecurityId;

                    _session.Subscribe(new OrderBookSubscriptionRequest(instrument.Id), () => { }, FailureCallback);
                    _session.Subscribe(new OrderBookStatusSubscriptionRequest(instrument.Id), () => { }, FailureCallback);
                }
            }

            if (hasMoreResults && lastAddedInstrumentId > 0)
            {
                _session.SearchInstruments(new SearchRequest("", lastAddedInstrumentId), SearchCallback, FailureCallback);
            }
        }
Ejemplo n.º 3
0
        private void RaiseNewSecurity(Security security)
        {
            _added.SafeInvoke(security);

            NewSecurity.SafeInvoke(security);

            var multiEvt = NewSecurities;

            if (multiEvt == null)
            {
                return;
            }

            multiEvt.SafeInvoke(new[] { security });
        }
        public void Start()
        {
            //start live stream
            _api = new PoloniexClient(Url, PublicKey, PrivateKey);

            //get latest quotes to populate securities list
            List <Quote> quotes = null;

            Task.Run(async() => quotes = await _api.Markets.GetSummary()).Wait();
            if (quotes != null && quotes.Count > 0)
            {
                foreach (var q in quotes)
                {
                    if (Securities.All(i => i.Symbol != q.Symbol.ToString()))
                    {
                        var security = GetSecurityFromCurrencyPair(q.Symbol);
                        Securities.Add(security);
                        NewSecurity?.Invoke(security);
                        _securities[q.Symbol]        = security;
                        _securitiesById[q.Symbol.Id] = security;
                        Subscribe(security);
                    }
                }
            }
            else
            {
                throw new Exception($"No securities defined for {Name} data feed");
            }

            _api.Live.OnOrderBookUpdate += Api_OnOrderBookUpdate;
            _api.Live.OnTickerUpdate    += Api_OnTickerUpdate;
            _api.Live.OnSessionError    += Api_OnSessionError;
            _api.Live.Start();
            IsStarted = true;

            Task.Run(async() =>
            {
                var books = await _api.Markets.GetOrderBooks();
                lock (_orderBooks)
                {
                    _orderBooks.Clear();
                    foreach (var book in books)
                    {
                        _orderBooks.Add(book.Key, book.Value);
                    }
                }
            });
        }
Ejemplo n.º 5
0
            public override void Add(Security item)
            {
                if (item is ExpressionIndexSecurity)
                {
                    _registry.IndexSecurities.Add((ExpressionIndexSecurity)item);
                }
                else if (item is ContinuousSecurity)
                {
                    _registry.ContinuousSecurities.Add((ContinuousSecurity)item);
                }
                else
                {
                    base.Add(item);
                }

                NewSecurity.SafeInvoke(item);
            }
Ejemplo n.º 6
0
 internal void OnAddSecurity(int row, int rowCount, string securityId, string shortName, string longName, string type, int decimals, int lotSize,
                             double stepPrice, double priceStep, string isin, string board, DateTime expiryDate, double daysBeforeExpiry, double strike)
 {
     NewSecurity.SafeInvoke(row, rowCount, securityId, shortName, longName, type, decimals, lotSize, stepPrice.ToDecimal(), priceStep.ToDecimal(),
                            isin, board, DateTime.FromOADate(0) == expiryDate ? (DateTime?)null : expiryDate, daysBeforeExpiry.ToDecimal(), strike.ToDecimal());
 }
Ejemplo n.º 7
0
 private void NewSecurityHandler(Security security)
 {
     AddGuiAction(() => NewSecurity.SafeInvoke(security));
 }