private void Init()
 {
     foreach (string symbolName in SymbolsContainer.GetSymbolNames())
     {
         TraderStatistic.Add(new TraderInfo(SymbolsContainer.GetSymbol(symbolName)));
     }
     _connection.OrderStatusEvent   += OrderStatusHandler;
     _connection.OrderFilledEvent   += OrderFilledHandler;
     _connection.TraderBalanceEvent += TraderBalanceHandler;
     _connection.TraderStatusEvent  += TraderStatusHandler;
     _connection.FundingEvent       += FundingHandler;
     _connection.OrderCanceledEvent += OrderCanceledHandler;
     _connection.LeverageEvent      += LeverageHandler;
     _connection.ErrorEvent         += ErrorHandler;
     _connection.ControlConnected   += () =>
     {
         UpdateTraderStatus();
         Connected?.Invoke();
     };
     _connection.ControlReconnected += () => {
         UpdateTraderStatus();
         Reconnected?.Invoke();
     };
     _connection.ControlDisconnected += () => Disconnected?.Invoke();
 }
        /// <summary>
        /// Create OrderBook that track for selected symbol
        /// </summary>
        /// <param name="symbol">Tracked symbol. <see cref="Symbol"/></param>
        /// <param name="spotPriceUpdatedHandler">Call if spot price is updated.</param>
        /// <param name="orderBookUpdatedHandler">Call if orderbook is updated.</param>
        /// <param name="orderBookUpdatedInListHandler">Call if orderbook is updated (with tuple of updates).</param>
        /// <param name="ohlcvReceivedHandler">Call if OHLCV is received.</param>
        /// <param name="orderBookConnectedHandler">Call if orderbook is connected to exchange.</param>
        /// <param name="orderBookDisconnectedHandler">Call if orderbook is disconnected from exchange.</param>
        /// <param name="orderBookReconnecctedHandler">Call if orderbook is reconnected to exchange.</param>
        /// <returns>Instance of OrderBook which track for selected symbol. <see cref="OrderBook"/></returns>
        public OrderBook TrackSymbol(
            Symbol symbol, Action <OrderBook> spotPriceUpdatedHandler = null, Action <OrderBook> orderBookUpdatedHandler = null,
            Action <List <Tuple <decimal, decimal> >, List <Tuple <decimal, decimal> > > orderBookUpdatedInListHandler = null,
            Action <List <OHLCVData> > ohlcvReceivedHandler = null, Action <OrderBook> orderBookConnectedHandler    = null,
            Action <OrderBook> orderBookDisconnectedHandler = null, Action <OrderBook> orderBookReconnecctedHandler = null)
        {
            if (symbol == null)
            {
                return(null);
            }
            OrderBook orderBook = null;

            if (_orderBooks.ContainsKey(symbol))
            {
                orderBook = _orderBooks[symbol];
            }
            else if (SymbolsContainer.Contains(symbol))
            {
                orderBook = new OrderBook(_connection, symbol);
                orderBook.SpotPriceUpdated     += CheckTrailingstopOrders;
                orderBook.SpotPriceUpdated     += spotPriceUpdatedHandler;
                orderBook.OrderBookUpdated     += orderBookUpdatedHandler;
                orderBook.OrderBookUpdatedList += orderBookUpdatedInListHandler;
                orderBook.OhlcvReceivedEvent   += ohlcvReceivedHandler;
                orderBook.Connected            += orderBookConnectedHandler;
                orderBook.Disconnected         += orderBookDisconnectedHandler;
                orderBook.Reconnected          += orderBookReconnecctedHandler;
                _orderBooks.Add(symbol, orderBook);
            }
            return(orderBook);
        }
 public override void Prepare()
 {
     Smbl               = SymbolsContainer.GetSymbol(SymbolName);
     SpotPriceUpdated  += SpotPriceHandler;
     OrderBookUpdated  += OrderBookHandler;
     TraderInfoUpdated += TraderInfoHandler;
     OBook              = TrackSymbol(Smbl);
     TradingTimer       = new Timer((object obj) => PlaceOrder(), null, Interval * 1000, Interval * 1000);
 }