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(); }
public static FtxRestApi CreateClient(string apiKey, string apiSecret, string subAccount = "") { var client = new Client(apiKey, apiSecret, subAccount); var api = new FtxRestApi(client); return(api); }
public ExternalMarketGrpc(ILogger <ExternalMarketGrpc> logger, FtxRestApi restApi, BalanceCache balanceCache, IExternalMarketSettingsAccessor externalMarketSettingsAccessor) { _logger = logger; _restApi = restApi; _balanceCache = balanceCache; _externalMarketSettingsAccessor = externalMarketSettingsAccessor; }
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); } }
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(); }
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); }
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(); }
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; }
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); }
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(); }
public BalanceCache(FtxRestApi restApi, ILogger <BalanceCache> logger) { _restApi = restApi; _logger = logger; }