Beispiel #1
0
        public async override void GetPortfolios()
        {
            if (!_isPortfolioSubscribed && !_loginFailed)
            {
                var accountResponse = await _ftxRestApi.GetAccountInfoAsync();

                var isSuccessfull = accountResponse.SelectToken("success").Value <bool>();
                var portfolios    = new List <Portfolio>();
                if (isSuccessfull)
                {
                    var fillsRequest = FtxWebSockerRequestGenerator.GetSubscribeRequest("fills");
                    _wsSource.SendMessage(fillsRequest);

                    var ordersRequest = FtxWebSockerRequestGenerator.GetSubscribeRequest("orders");
                    _wsSource.SendMessage(ordersRequest);

                    portfolios.Add(_portfoliosCreator.Create(
                                       accountResponse.SelectToken("result"),
                                       "main"));
                }
                else
                {
                    _loginFailed = true;
                    SendLogMessage($"Can not get portfolios info.", LogMessageType.Error);
                    portfolios.Add(_portfoliosCreator.Create("undefined"));
                }
                OnPortfolioEvent(portfolios);
            }
        }
Beispiel #2
0
        private async void SourceAliveCheckerThread(CancellationToken token)
        {
            var pingMessage             = FtxWebSockerRequestGenerator.GetPingRequest();
            var sourceAliveCheckerStart = DateTime.Now;

            while (!token.IsCancellationRequested)
            {
                await Task.Delay(15000);

                _wsSource?.SendMessage(pingMessage);

                if (_lastTimeUpdateSocket == DateTime.MinValue)
                {
                    if (sourceAliveCheckerStart.AddSeconds(60) < DateTime.Now)
                    {
                        break;
                    }
                    continue;
                }
                if (_lastTimeUpdateSocket.AddSeconds(60) < DateTime.Now)
                {
                    break;
                }
            }

            if (!token.IsCancellationRequested)
            {
                SendLogMessage("The websocket is disabled. Restart", LogMessageType.Error);

                lock (_locker)
                {
                    OnDisconnectEvent();
                }
            }
        }
Beispiel #3
0
        public override void Dispose()
        {
            try
            {
                if (_wsSource != null)
                {
                    if (_isPortfolioSubscribed)
                    {
                        var fillsRequest = FtxWebSockerRequestGenerator.GetUnsubscribeRequest("fills");
                        _wsSource.SendMessage(fillsRequest);

                        var ordersRequest = FtxWebSockerRequestGenerator.GetUnsubscribeRequest("orders");
                        _wsSource.SendMessage(ordersRequest);

                        _isPortfolioSubscribed = false;
                        _loginFailed           = false;
                    }

                    if (_subscribedSecurities.Any())
                    {
                        foreach (var security in _subscribedSecurities)
                        {
                            var unsubscribeMarket = FtxWebSockerRequestGenerator.GetUnsubscribeRequest("market", security);
                            _wsSource.SendMessage(unsubscribeMarket);

                            var unsubscribeOrderbook = FtxWebSockerRequestGenerator.GetUnsubscribeRequest("orderbook", security);
                            _wsSource.SendMessage(unsubscribeOrderbook);
                        }
                        _subscribedSecurities.Clear();
                    }

                    _wsSource.Dispose();
                    _wsSource.MessageEvent -= WsSourceMessageEvent;
                    _wsSource = null;

                    _securitiesCreator  = null;
                    _portfoliosCreator  = null;
                    _marketDepthCreator = null;
                    _tradesCreator      = null;
                    _orderCreator       = null;
                    _candlesCreator     = null;

                    _client     = null;
                    _ftxRestApi = null;
                    _myOrders.Clear();
                    _securityMarketDepths.Clear();
                }

                if (_cancelTokenSource != null && !_cancelTokenSource.IsCancellationRequested)
                {
                    _cancelTokenSource.Cancel();
                }
            }
            catch (Exception e)
            {
                SendLogMessage("FTX dispose error: " + e, LogMessageType.Error);
            }
        }
Beispiel #4
0
        public override void Subscrible(Security security)
        {
            if (!_subscribedSecurities.Contains(security.Name))
            {
                var subscribeMarket = FtxWebSockerRequestGenerator.GetSubscribeRequest("trades", security.Name);
                _wsSource.SendMessage(subscribeMarket);

                var subscribeOrderbook = FtxWebSockerRequestGenerator.GetSubscribeRequest("orderbook", security.Name);
                _wsSource.SendMessage(subscribeOrderbook);
            }
        }
        private static async Task WebSocketTests(FtxWebSocketApi wsApi, Client client)
        {
            var ins = "BTC-PERP";

            wsApi.OnWebSocketConnect += () =>
            {
                wsApi.SendCommand(FtxWebSockerRequestGenerator.GetAuthRequest(client));
                wsApi.SendCommand(FtxWebSockerRequestGenerator.GetSubscribeRequest("orderbook", ins));
                wsApi.SendCommand(FtxWebSockerRequestGenerator.GetSubscribeRequest("trades", ins));
                wsApi.SendCommand(FtxWebSockerRequestGenerator.GetSubscribeRequest("ticker", ins));
                wsApi.SendCommand(FtxWebSockerRequestGenerator.GetSubscribeRequest("fills"));
                wsApi.SendCommand(FtxWebSockerRequestGenerator.GetSubscribeRequest("orders"));
            };
            await wsApi.Connect();
        }
Beispiel #6
0
        private void SendLoginMessage()
        {
            var loginMessage = FtxWebSockerRequestGenerator.GetAuthRequest(_client);

            _wsSource.SendMessage(loginMessage);
        }