private void BeginReceiveTradesWebSocket() => Task.Run(() =>
        {
            ExchangeTradeCatchupWorker.Start(ExchangeWorker, Limit);

            var symbols = ExchangeWorker.Configuration.Symbol.Select(s => SymbolFactory.Get(s)).ToList();

            using (Logger.BeginProtocolScope("Web Socket"))
            {
                Logger.LogInformation($"Establishing connection");

                WebSocketClient.OnOpen += delegate(object sender, EventArgs e)
                {
                    Logger.LogInformation($"Established connection");

                    Logger.LogInformation($"Begin listening for trades");

                    if (WebSocketClient.IsSubscribeModel)
                    {
                        WebSocketClient.BeginListenTrades(symbols);
                    }
                };

                WebSocketClient.OnClose += delegate(object sender, CloseEventArgs e)
                {
                    if (ExchangeWorker.Online)
                    {
                        Logger.LogWarning($"Connection has been closed");
                    }

                    RetryWebSocketConnect();
                };

                WebSocketClient.OnTradesReceived += async delegate(object sender, TradesReceivedEventArgs e)
                {
                    using (Logger.BeginSymbolScope(e.Data.SymbolCode))
                    {
                        Logger.LogInformation($"Trades received");

                        using (var transaction = await StorageTransactionFactory.Begin())
                        {
                            await ExchangeTradeProvider.AddTrades(transaction, Logger, e.Data);

                            await HistorianRepository.SetTradeFilter(transaction, Exchange.Name, e.Data.SymbolCode, e.Data.Filter);

                            await transaction.Commit();
                        }
                    }
                };

                WebSocketClient.Begin();

                if (!WebSocketClient.IsSubscribeModel)
                {
                    WebSocketClient.BeginListenTrades(symbols);
                }
            }
        });