Ejemplo n.º 1
0
        public SaveBidAndOfferHandler(string symbol,
                                      OrderBookContext orderBook,
                                      int maxIndex,
                                      ILogger logger)
        {
            this.symbol       = symbol;
            this.orderBook    = orderBook;
            this.logger       = logger;
            this.currentIndex = 0;
            this.maxIndex     = maxIndex;

            this.orderBook.OnQuotesUpdate += new SymbolDataUpdatedNotification(OnChange);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="strategyHeader">Стратегия</param>
        /// <param name="orderBook"></param>
        /// <param name="signalQueue">Обозреваемая очередь сигналов</param>
        /// <param name="tradingData">Торговых данных контекст</param>
        /// <param name="logger">Логгер</param>
        public OpenPositionOnOrderBookChange(StrategyHeader strategyHeader,
                                             OrderBookContext orderBook,
                                             ObservableQueue <Signal> signalQueue,
                                             TradingDataContext tradingData,
                                             ILogger logger)
        {
            this.strategyHeader = strategyHeader;
            this.orderBook      = orderBook;
            this.signalQueue    = signalQueue;
            this.tradingData    = tradingData;
            this.logger         = logger;

            this.orderBook.OnQuotesUpdate += new SymbolDataUpdatedNotification(OnChange);
        }
Ejemplo n.º 3
0
        private void InternalGetOrderBook(IOrderBookProvider provider, OrderBookContext context, bool priceLessThan1)
        {
            var r = AsyncContext.Run(() => provider.GetOrderBookAsync(context));

            Assert.IsTrue(r != null, "Null response returned");

            if (r.IsReversed)
            {
                Trace.WriteLine("Asset pair is reversed");
            }

            // Assert.IsTrue(r.Pair.Equals(context.Pair), "Incorrect asset pair returned");

            Assert.IsTrue(r.Asks.Count > 0, "No asks returned");
            Assert.IsTrue(r.Bids.Count > 0, "No bids returned");
            Assert.IsTrue(r.Asks.Count <= context.MaxRecordsCount, "Incorrect number of ask order book records returned");
            Assert.IsTrue(r.Bids.Count <= context.MaxRecordsCount, "Incorrect number of bid order book records returned");

            //if (context.MaxRecordsCount == Int32.MaxValue)
            //    Assert.IsTrue(r.Count > 0, "No order book records returned");
            //else
            //    Assert.IsTrue(r.Asks.Count == context.MaxRecordsCount && r.Bids.Count == context.MaxRecordsCount, "Incorrect number of order book records returned");

            Trace.WriteLine($"Highest bid: {r.HighestBid}");
            Trace.WriteLine($"Lowest ask: {r.LowestAsk}");

            var records = new List <OrderBookRecord>()
            {
                r.LowestAsk, r.HighestBid
            };

            foreach (var record in records)
            {
                if (priceLessThan1) // Checks if the pair is reversed (price-wise).
                {
                    Assert.IsTrue(record.Price < 1, "Reverse check failed. Price is expected to be < 1");
                }
                else
                {
                    Assert.IsTrue(record.Price > 1, "Reverse check failed. Price is expected to be > 1");
                }
            }

            Trace.WriteLine($"Order book data ({r.Asks.Count} asks, {r.Bids.Count} bids): ");

            foreach (var obr in r.Asks.Concat(r.Bids))
            {
                Trace.WriteLine($"{obr.UtcUpdated} : {obr}");
            }
        }
Ejemplo n.º 4
0
        private void GetOrderBook(IOrderBookProvider provider, AssetPair pair, bool priceLessThan1, int recordsCount = 100)
        {
            try
            {
                var context = new OrderBookContext(pair, recordsCount);
                InternalGetOrderBook(provider, context, priceLessThan1);

                context = new OrderBookContext(pair, Int32.MaxValue);
                InternalGetOrderBook(provider, context, priceLessThan1);
            }
            catch (Exception e)
            {
                Assert.Fail(e.Message);
            }
        }
Ejemplo n.º 5
0
        public static double GetBidVolumeSum(this OrderBookContext orderBook, string symbol, int depth = 50)
        {
            double sum = 0;

            if (depth > orderBook.Depth)
            {
                depth = orderBook.Depth;
            }

            for (int i = 0; i < depth; i++)
            {
                sum += orderBook.GetBidVolume(symbol, i);
            }

            return(sum);
        }
Ejemplo n.º 6
0
 public BuySpreadOnQuoteChange(OrderBookContext quotesProvider,
                               IEnumerable <StrategyHeader> leftLeg,
                               IEnumerable <StrategyHeader> rightLeg,
                               SpreadSettings spreadSettings,
                               IDataContext dataContext,
                               ObservableQueue <Signal> signalQueue,
                               ILogger logger)
 {
     this.quotesProvider = quotesProvider;
     this.leftLeg        = leftLeg;
     this.rightLeg       = rightLeg;
     this.spreadSettings = spreadSettings;
     this.tradingData    = dataContext;
     this.signalQueue    = signalQueue;
     this.logger         = logger;
     this.quotesProvider.OnQuotesUpdate += new SymbolDataUpdatedNotification(quotesProvider_OnQuotesUpdate);
 }
Ejemplo n.º 7
0
        public void Setup()
        {
            this.strategyHeader = this.tradingData.Get <IEnumerable <StrategyHeader> >().Single(s => s.Id == 1);
            this.orderBook      = new OrderBookContext();
            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick("RTS-12.13_FT", new DateTime(2013, 12, 3, 10, 0, 0), 138000, 3600));

            this.orderBook.Update(0, this.strategyHeader.Symbol, 138000, 100, 138010, 50);

            FollowTrendOnTick handler =
                new FollowTrendOnTick(this.strategyHeader,
                                      30,
                                      50,
                                      this.orderBook,
                                      this.tradingData,
                                      this.signalQueue,
                                      new NullLogger());
        }
Ejemplo n.º 8
0
 public FollowTrendOnTick(StrategyHeader strategyHeader,
                          int seconds,
                          double priceSpan,
                          OrderBookContext orderBook,
                          IDataContext tradingData,
                          ObservableQueue <Signal> signalQueue,
                          ILogger logger)
     : base(tradingData.Get <ObservableCollection <Tick> >())
 {
     this.strategyHeader = strategyHeader;
     this.seconds        = seconds;
     this.priceSpan      = priceSpan;
     this.orderBook      = orderBook;
     this.tradingData    = tradingData;
     this.signalQueue    = signalQueue;
     this.logger         = logger;
 }
Ejemplo n.º 9
0
        public void Setup()
        {
            this.leftLeg  = new List <StrategyHeader>();
            this.rigthLeg = new List <StrategyHeader>();

            this.leftStrategy  = new StrategyHeader(1, "Left leg", "BP12345-RF-01", "AB", 10);
            this.rightStrategy = new StrategyHeader(2, "Right leg", "BP1235-RF-01", "BA", 10);
            this.leftLeg.Add(this.leftStrategy);
            this.rigthLeg.Add(this.rightStrategy);

            this.spreadSettings    = new SpreadSettings();
            this.arbitrageSettings = new ArbitrageSettings(1, this.leftLeg, this.rigthLeg, this.spreadSettings);

            this.orderBook   = new OrderBookContext();
            this.tradingData = new TradingDataContext();

            CalculateSpreadOnOrderBookChange handler =
                new CalculateSpreadOnOrderBookChange(this.arbitrageSettings, this.orderBook, this.tradingData, new NullLogger());
        }
Ejemplo n.º 10
0
        private void InternalGetOrderBook(IOrderBookProvider provider, OrderBookContext context, bool priceLessThan1)
        {
            var r = AsyncContext.Run(() => provider.GetOrderBookAsync(context));

            Assert.IsTrue(r != null, "Null response returned");

            if (r.Pair.Reversed.Equals(context.Pair))
            {
                Trace.WriteLine("Asset pair is reversed");
            }

            // Assert.IsTrue(r.Pair.Equals(context.Pair), "Incorrect asset pair returned");

            if (context.MaxRecordsCount == Int32.MaxValue)
            {
                Assert.IsTrue(r.Count > 0, "No order book records returned");
            }
            else
            {
                Assert.IsTrue(r.Asks.Count == context.MaxRecordsCount && r.Bids.Count == context.MaxRecordsCount, "Incorrect number of order book records returned");
            }

            foreach (var record in r.Asks.Take(1).Concat(r.Bids.Take(1)))
            {
                if (priceLessThan1) // Checks if the pair is reversed (price-wise).
                {
                    Assert.IsTrue(record.Price < 1, "Reverse check failed. Price is expected to be < 1");
                }
                else
                {
                    Assert.IsTrue(record.Price > 1, "Reverse check failed. Price is expected to be > 1");
                }
            }

            Trace.WriteLine($"Order book data ({r.Asks.Count} asks, {r.Bids.Count} bids): ");

            foreach (var obr in r.Asks.Concat(r.Bids))
            {
                Trace.WriteLine($"{obr.UtcUpdated} | For {context.Pair.Asset1}: {obr.Type} {obr.Price.Display}, {obr.Volume} ");
            }
        }
Ejemplo n.º 11
0
        public async Task <OrderBook> GetOrderBookAsync(OrderBookContext context)
        {
            var api = ApiProvider.GetApi(context);

            var pairCode = context.Pair.ToTicker(this, "");

            var rRaw = context.MaxRecordsCount == Int32.MaxValue
                ? await api.GetOrderBookAsync(pairCode, 0).ConfigureAwait(false)
                : await api.GetOrderBookAsync(pairCode, context.MaxRecordsCount).ConfigureAwait(false);

            CheckResponseErrors(rRaw);

            var r = rRaw.GetContent();

            var buyAction  = "buy";
            var sellAction = "sell";

            var buys = context.MaxRecordsCount == Int32.MaxValue
                ? r.Where(x => x.side.ToLower().Equals(buyAction)).OrderBy(x => x.id).ToList()
                : r.Where(x => x.side.Equals(buyAction, StringComparison.OrdinalIgnoreCase)).OrderBy(x => x.id)
                       .Take(context.MaxRecordsCount).ToList();

            var sells = context.MaxRecordsCount == Int32.MaxValue
                ? r.Where(x => x.side.ToLower().Equals(sellAction)).OrderBy(x => x.id).ToList()
                : r.Where(x => x.side.Equals(sellAction, StringComparison.OrdinalIgnoreCase)).OrderBy(x => x.id)
                        .Take(context.MaxRecordsCount).ToList();

            var orderBook = new OrderBook(Network, context.Pair);

            foreach (var i in buys)
            {
                orderBook.AddBid(i.price, i.size);
            }

            foreach (var i in sells)
            {
                orderBook.AddAsk(i.price, i.size);
            }

            return(orderBook);
        }
Ejemplo n.º 12
0
        public void Setup()
        {
            this.qProvider      = new OrderBookContext();
            this.spreadSettings = new SpreadSettings(1.35, 1.48, 1.18);

            this.leftLeg = new List <StrategyHeader>();
            this.leftLeg.Add(this.tradingData.Get <IEnumerable <StrategyHeader> >().Single(s => s.Id == 1));

            this.rightLeg = new List <StrategyHeader>();
            this.rightLeg.Add(this.tradingData.Get <IEnumerable <StrategyHeader> >().Single(s => s.Id == 2));
            this.rightLeg.Add(this.tradingData.Get <IEnumerable <StrategyHeader> >().Single(s => s.Id == 3));

            CoverSpreadOnQuoteChange handler =
                new CoverSpreadOnQuoteChange(this.qProvider,
                                             this.leftLeg,
                                             this.rightLeg,
                                             this.spreadSettings,
                                             this.tradingData,
                                             this.signalQueue,
                                             new NullLogger());
        }
Ejemplo n.º 13
0
        private OrderbookMarketParameters marketparams; // рыночные параметры для стратегии

        public MarketMakerHandlerOnBidAskNoR(Strategy strategy,
            TradingDataContext tradingData,
            OrderBookContext orderBook,
            ObservableQueue<Signal> signalQueue,
            Logger logger)
            : base(tradingData.Get<ObservableCollection<BidAsk>>())
        {
            this.strategy = strategy;
            this.orderBook = orderBook;
            this.signalQueue = signalQueue;
            this.tradingData = tradingData;
            this.logger = logger;
            this.strategyInitialAmount = this.strategy.Amount;
			
            this.oplimits = this.tradingData.Get<IEnumerable<OpenPositionLimitSettings>>().SingleOrDefault(s => s.StrategyId == this.strategy.Id);
			
            this.obDepth = AppSettings.GetValue<int>("OrderBookDepth");
			
            this.politics = new HashSet<MarketMakerPolitic>(new PoliticCollectionFactory(AppSettings.GetStringValue("politicsFileName")).Make());
			
            this.marketparams = new OrderBookMarketParametersFactory(AppSettings.GetStringValue("marketparamsFileName")).Make().First();
		
        }
Ejemplo n.º 14
0
        public async Task<OrderBook> GetOrderBookAsync(OrderBookContext context)
        {
            var api = ApiProvider.GetApi(context);
            var pairCode = context.Pair.ToTicker(this);

            var r = await api.GetOrderBookAsync(pairCode).ConfigureAwait(false);
            var orderBook = new OrderBook(Network, context.Pair);

            var maxCount = Math.Min(1000, context.MaxRecordsCount);

            var response = r.payload;

            var asks = response.asks.Take(maxCount);
            var bids = response.bids.Take(maxCount);

            foreach (var i in bids)
                orderBook.AddBid(i.price, i.amount, true);

            foreach (var i in asks)
                orderBook.AddAsk(i.price, i.amount, true);

            return orderBook;
        }
Ejemplo n.º 15
0
        public async Task <OrderBook> GetOrderBookAsync(OrderBookContext context)
        {
            var api = ApiProvider.GetApi(context);

            var pairCode = context.Pair.ToTicker(this, "");

            var r = context.MaxRecordsCount.HasValue
                ? await api.GetOrderBookAsync(pairCode, context.MaxRecordsCount.Value).ConfigureAwait(false)
                : await api.GetOrderBookAsync(pairCode, 0).ConfigureAwait(false);

            var buyAction  = "buy";
            var sellAction = "sell";

            var buys = context.MaxRecordsCount.HasValue
                ? r.Where(x => x.side.ToLower().Equals(buyAction)).OrderBy(x => x.id)
                       .Take(context.MaxRecordsCount.Value / 2).ToList()
                : r.Where(x => x.side.ToLower().Equals(buyAction)).OrderBy(x => x.id).ToList();

            var sells = context.MaxRecordsCount.HasValue
                ? r.Where(x => x.side.ToLower().Equals(sellAction)).OrderBy(x => x.id)
                        .Take(context.MaxRecordsCount.Value / 2).ToList()
                : r.Where(x => x.side.ToLower().Equals(sellAction)).OrderBy(x => x.id).ToList();

            var orderBook = new OrderBook(Network, context.Pair);

            foreach (var i in buys)
            {
                orderBook.Add(new OrderBookRecord(OrderType.Bid, new Money(i.price, context.Pair.Asset2), i.size));
            }

            foreach (var i in sells)
            {
                orderBook.Add(new OrderBookRecord(OrderType.Ask, new Money(i.price, context.Pair.Asset2), i.size));
            }

            return(orderBook);
        }
Ejemplo n.º 16
0
        public async Task <OrderBook> GetOrderBookAsync(OrderBookContext context)
        {
            var api = ApiProvider.GetApi(context);

            var pair = context.Pair.ToTicker(this);

            var r = context.MaxRecordsCount == Int32.MaxValue
                ? await api.GetOrderBookAsync(pair).ConfigureAwait(false)
                : await api.GetOrderBookAsync(pair, context.MaxRecordsCount).ConfigureAwait(false);

            var orderBook = new OrderBook(Network, context.Pair);

            foreach (var rAsk in r.asks.Select(ParseOrderBookData))
            {
                orderBook.AddAsk(rAsk.Price, rAsk.Volume, true);
            }

            foreach (var rBid in r.bids.Select(ParseOrderBookData))
            {
                orderBook.AddBid(rBid.Price, rBid.Volume, true);
            }

            return(orderBook);
        }
Ejemplo n.º 17
0
        public async Task <OrderBook> GetOrderBookAsync(OrderBookContext context)
        {
            CheckInputAssetPair(context.Pair);

            var api = ApiProvider.GetApi(context);

            var orderBook = new OrderBook(Network, context.Pair);

            var maxCount = Math.Min(1000, context.MaxRecordsCount);

            var r = await api.GetOrderBookAsync(context.Pair.Asset1.ShortCode.ToLower()).ConfigureAwait(false);

            foreach (var rBid in r.bid.Take(maxCount).Select(x => ParseOrderBookRecords(x, context.Pair)))
            {
                orderBook.AddBid(rBid.Price, rBid.Volume, true);
            }

            foreach (var rAsk in r.ask.Take(maxCount).Select(x => ParseOrderBookRecords(x, context.Pair)))
            {
                orderBook.AddAsk(rAsk.Price, rAsk.Volume, true);
            }

            return(orderBook);
        }
Ejemplo n.º 18
0
        public void RecordOrderBooksInDB(Dictionary <string, OrderBook> orderBooks)
        {
            logger.Debug($"Запущен {MethodBase.GetCurrentMethod()}");

            using (var db = new OrderBookContext())
            {
                var transaction = db.Database.BeginTransaction();

                try
                {
                    db.OrderBooks.AddRange(orderBooks.Values);
                    db.SaveChanges();

                    transaction.Commit();

                    logger.Debug($"{MethodBase.GetCurrentMethod()} успешно отработал");
                }
                catch (Exception ex)
                {
                    logger.Error($"err, при записи OrderBook в бд возникла ошибка: {ex.Message}");
                    transaction.Rollback();
                }
            }
        }
Ejemplo n.º 19
0
 public void Setup()
 {
     this.qProvider = new OrderBookContext();
     this.leftLeg   = new List <string>();
     this.rightLeg  = new List <string>();
 }
Ejemplo n.º 20
0
 public UpdateOrderBookOnBidAsk(OrderBookContext storage, IDataContext context, ILogger logger)
     : base(context.Get <ObservableCollection <BidAsk> >())
 {
     this.storage = storage;
     this.logger  = logger;
 }
Ejemplo n.º 21
0
 public MarketDataProvider(SmartComHandlersDatabase handlers, IDataContext tradingData, OrderBookContext orderBook, ILogger logger)
 {
     this.handlers    = handlers;
     this.tradingData = tradingData;
     this.logger      = logger;
     this.orderBook   = orderBook;
     this.handlers.Add <_IStClient_AddTickEventHandler>(stServer_AddTick);
     this.handlers.Add <_IStClient_UpdateBidAskEventHandler>(stServer_UpdateBidAsk);
     this.handlers.Add <_IStClient_AddBarEventHandler>(stServer_AddBar);
 }
Ejemplo n.º 22
0
 public void Setup()
 {
     this.orderBook = new OrderBookContext();
 }