コード例 #1
0
        public override void Connect()
        {
            _isPortfolioSubscribed = false;
            _loginFailed           = false;

            _securitiesCreator  = new FTXSecurityCreator();
            _portfoliosCreator  = new FTXPortfolioCreator();
            _marketDepthCreator = new FTXMarketDepthCreator();
            _tradesCreator      = new FTXTradesCreator();
            _orderCreator       = new FTXOrderCreator();
            _candlesCreator     = new FTXCandlesCreator();

            _client = new Client(
                ((ServerParameterString)ServerParameters[0]).Value,
                ((ServerParameterPassword)ServerParameters[1]).Value);

            _cancelTokenSource = new CancellationTokenSource();
            _ftxRestApi        = new FtxRestApi(_client);

            StartMessageReader();

            _wsSource = new WsSource(WebSocketEndpointUrl);
            _wsSource.MessageEvent += WsSourceMessageEvent;
            _wsSource.Start();
        }
コード例 #2
0
        public static FtxRestApi CreateClient(string apiKey, string apiSecret, string subAccount = "")
        {
            var client = new Client(apiKey, apiSecret, subAccount);
            var api    = new FtxRestApi(client);

            return(api);
        }
コード例 #3
0
 public ExternalMarketGrpc(ILogger <ExternalMarketGrpc> logger, FtxRestApi restApi, BalanceCache balanceCache,
                           IExternalMarketSettingsAccessor externalMarketSettingsAccessor)
 {
     _logger       = logger;
     _restApi      = restApi;
     _balanceCache = balanceCache;
     _externalMarketSettingsAccessor = externalMarketSettingsAccessor;
 }
コード例 #4
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);
            }
        }
コード例 #5
0
        static void Main()
        {
            var client = new Client("_T68V7HmuHoiHlKmpUcOcbNOXkNWpzL-FvpO1VMa", "TsmQWQ4bXrOHzCVbD7vFzZtI-gs7j8tvh684hPY6");
            var api    = new FtxRestApi(client);
            var wsApi  = new FtxWebSocketApi("wss://ftx.com/ws/");

            WebSocketTests(wsApi, client).Wait();
            Console.ReadLine();
        }
コード例 #6
0
ファイル: Program.cs プロジェクト: melihtuna/FTX.NET
        static async Task Main()
        {
            var client = new Client("pbDsAcGhQZNBHETPvQ0u0t1qxX7ix5ffJizBrACKb5fdj5jbppBTY4b2ME9ILIub", "xajiKUGcV53jtWlVwNjtx5WMIMJ3ckH1eykqpZ2WM76xGaq18aDW5XnqMTQdtyJk");
            var api    = new FtxRestApi(client);
            var wsApi  = new FtxWebSocketApi("wss://ftx.com/ws/");

            await RestTests(api);
            await WebSocketTests(wsApi, client);
        }
コード例 #7
0
        public override void Connect()
        {
            _client = new Client(
                ((ServerParameterString)ServerParameters[0]).Value,
                ((ServerParameterPassword)ServerParameters[1]).Value);

            _cancelTokenSource = new CancellationTokenSource();
            _ftxRestApi        = new FtxRestApi(_client);

            StartMessageReader();

            _wsSource = new WsSource(WebSocketEndpointUrl);
            _wsSource.MessageEvent += WsSourceMessageEvent;
            _wsSource.Start();
        }
コード例 #8
0
ファイル: Program.cs プロジェクト: melihtuna/FTX.NET
        private static async Task RestTests(FtxRestApi api)
        {
            var ins = "BTC-1227";

            var dateStart = DateTime.UtcNow.AddMinutes(-100);
            var dateEnd   = DateTime.UtcNow.AddMinutes(-10);

            var r1    = api.GetCoinsAsync().Result;
            var r2    = api.GetAllFuturesAsync().Result;
            var r3    = api.GetFutureAsync(ins).Result;
            var r4    = api.GetFutureStatsAsync(ins).Result;
            var r5    = api.GetFundingRatesAsync(dateStart, dateEnd).Result;
            var r6    = api.GetHistoricalPricesAsync(ins, 300, 30, dateStart, dateEnd).Result;
            var r7    = api.GetMarketsAsync().Result;
            var r8    = api.GetSingleMarketsAsync(ins).Result;
            var r9    = api.GetMarketOrderBookAsync(ins, 20).Result;
            var r10   = api.GetMarketTradesAsync(ins, 20, dateStart, dateEnd).Result;
            var r11   = api.GetAccountInfoAsync().Result;
            var r12   = api.GetPositionsAsync().Result;
            var r13   = api.ChangeAccountLeverageAsync(20).Result;
            var r14   = api.GetCoinAsync().Result;
            var r15   = api.GetBalancesAsync().Result;
            var r16   = api.GetDepositAddressAsync("BTC").Result;
            var r17   = api.GetDepositHistoryAsync().Result;
            var r18   = api.GetWithdrawalHistoryAsync().Result;
            var r19   = api.RequestWithdrawalAsync("USDTBEAR", 20.2m, "0x83a127952d266A6eA306c40Ac62A4a70668FE3BE", "", "", "").Result;
            var r21   = api.GetOpenOrdersAsync(ins).Result;
            var r20   = api.PlaceOrderAsync(ins, SideType.buy, 1000, OrderType.limit, 0.001m, false).Result;
            var r20_1 = api.PlaceStopOrderAsync(ins, SideType.buy, 1000, 0.001m, false).Result;
            var r20_2 = api.PlaceTrailingStopOrderAsync(ins, SideType.buy, 0.05m, 0.001m, false).Result;
            var r20_3 = api.PlaceTakeProfitOrderAsync(ins, SideType.buy, 1000, 0.001m, false).Result;
            var r23   = api.GetOrderStatusAsync("12345").Result;
            var r24   = api.GetOrderStatusByClientIdAsync("12345").Result;
            var r25   = api.CancelOrderAsync("1234").Result;
            var r26   = api.CancelOrderByClientIdAsync("12345").Result;
            var r27   = api.CancelAllOrdersAsync(ins).Result;
            var r28   = api.GetFillsAsync(ins, 20, dateStart, dateEnd).Result;
            var r29   = api.GetFundingPaymentAsync(dateStart, dateEnd).Result;
            var r30   = api.GetLeveragedTokensListAsync().Result;
            var r31   = api.GetTokenInfoAsync("HEDGE").Result;
            var r32   = api.GetLeveragedTokenBalancesAsync().Result;
            var r33   = api.GetLeveragedTokenCreationListAsync().Result;
            var r34   = api.RequestLeveragedTokenCreationAsync("HEDGE", 100).Result;
            var r35   = api.GetLeveragedTokenRedemptionListAsync().Result;
            var r36   = api.RequestLeveragedTokenRedemptionAsync("HEDGE", 100).Result;
        }
コード例 #9
0
        protected override void Load(ContainerBuilder builder)
        {
            FtxRestApi ftxRestClient = FtxRestApiFactory.CreateClient(Program.Settings.ApiKey, Program.Settings.ApiSecret);

            builder.RegisterInstance(ftxRestClient).AsSelf().SingleInstance();

            builder.RegisterType <BalanceCache>().As <IStartable>().AutoActivate().AsSelf().SingleInstance();
            builder.RegisterType <OrderBookManager>().AsSelf().SingleInstance();

            builder
            .RegisterType <ExternalMarketSettingsManager>()
            .WithParameter("name", FtxConst.Name)
            .As <IExternalMarketSettingsManager>()
            .As <IExternalMarketSettingsAccessor>()
            .AsSelf()
            .SingleInstance();


            RegisterMyNoSqlWriter <ExternalMarketSettingsNoSql>(builder, ExternalMarketSettingsNoSql.TableName);
        }
コード例 #10
0
        private static async Task TestRestApi()
        {
            var client = new Client(Environment.GetEnvironmentVariable("API-KEY"),
                                    Environment.GetEnvironmentVariable("API-SECRET"));
            var api = new FtxRestApi(client);

            Console.WriteLine(" ====  account info ==== ");
            var info = await api.GetAccountInfoAsync();

            Console.WriteLine(JsonSerializer.Serialize(info, new JsonSerializerOptions()
            {
                WriteIndented = true
            }));
            Console.WriteLine();
            Console.WriteLine();

            var takerFee = info.Result.TakerFee;

            //Console.WriteLine(" ====  market info ==== ");
            //var markets = await api.GetMarketsAsync();
            //Console.WriteLine(JsonSerializer.Serialize(markets, new JsonSerializerOptions() { WriteIndented = true }));

            //Console.WriteLine();
            //Console.WriteLine();

            Console.WriteLine(" ====  order 1 ==== ");
            var order1 = await api.GetOrderStatusAsync("39134620341");

            Console.WriteLine(JsonSerializer.Serialize(order1, new JsonSerializerOptions()
            {
                WriteIndented = true
            }));

            Console.WriteLine();
            Console.WriteLine();


            Console.WriteLine(" ====  balances ==== ");
            var balances = await api.GetBalancesAsync();

            Console.WriteLine(JsonSerializer.Serialize(balances, new JsonSerializerOptions()
            {
                WriteIndented = true
            }));

            Console.WriteLine();
            Console.WriteLine();


            var newOrderClientId = "my-order-21";
            var size             = 10m;

            //var side = SideType.buy;

            //var volume = side == SideType.buy ? size * (1m + takerFee) : ;

            Console.WriteLine($" ====  place: {newOrderClientId} ==== ");
            var marketOrder =
                await api.PlaceOrderAsync("XRP/USD", SideType.buy, 0, OrderType.market, size, newOrderClientId, true);

            Console.WriteLine(JsonSerializer.Serialize(marketOrder, new JsonSerializerOptions()
            {
                WriteIndented = true
            }));

            Console.WriteLine();
            Console.WriteLine();

            Console.WriteLine($" ====  cancel order: {newOrderClientId} ==== ");
            var cancel = await api.CancelOrderByClientIdAsync(newOrderClientId);

            Console.WriteLine(JsonSerializer.Serialize(cancel, new JsonSerializerOptions()
            {
                WriteIndented = true
            }));

            Console.WriteLine();
            Console.WriteLine();

            Console.WriteLine($" ====  order: {newOrderClientId} ==== ");
            var order3 = await api.GetOrderStatusByClientIdAsync(newOrderClientId);

            Console.WriteLine(JsonSerializer.Serialize(order3, new JsonSerializerOptions()
            {
                WriteIndented = true
            }));

            Console.WriteLine();
            Console.WriteLine();


            Console.WriteLine(" ====  balances ==== ");
            var balances2 = await api.GetBalancesAsync();

            Console.WriteLine($"{balances.Result.FirstOrDefault(e => e.Coin == "XRP")?.Total} XRP");
            Console.WriteLine($"{balances2.Result.FirstOrDefault(e => e.Coin == "XRP")?.Total} XRP");
            Console.WriteLine("-------");
            Console.WriteLine($"{balances.Result.FirstOrDefault(e => e.Coin == "FTT")?.Total} FTT");
            Console.WriteLine($"{balances2.Result.FirstOrDefault(e => e.Coin == "FTT")?.Total} FTT");

            Console.WriteLine();
            Console.WriteLine();


            Console.WriteLine($" ====  fills ==== ");
            var fills = await api.GetFillsAsync(10, DateTime.UtcNow.Date);

            Console.WriteLine(JsonSerializer.Serialize(fills, new JsonSerializerOptions()
            {
                WriteIndented = true
            }));

            Console.WriteLine();
            Console.WriteLine();
        }
コード例 #11
0
 public BalanceCache(FtxRestApi restApi, ILogger <BalanceCache> logger)
 {
     _restApi = restApi;
     _logger  = logger;
 }