public async Task <IDataResult <PostOrderModelData> > PostStopLimitOrderAsync(BinanceTrOptions options, string symbol, OrderSideEnum side, decimal origQuoteQty, decimal limitPrice, decimal stopPrice, CancellationToken ct = default) { try { var parameters = new Dictionary <string, string> { { "symbol", symbol }, { "side", side.GetDisplayName() }, { "type", OrderTypeEnum.STOP_LOSS_LIMIT.GetDisplayName() }, { "quantity", origQuoteQty.ToString(CultureInfo.InvariantCulture) }, { "stopPrice", stopPrice.ToString(CultureInfo.InvariantCulture) }, { "price", limitPrice.ToString(CultureInfo.InvariantCulture) }, }; var result = await SendRequestAsync(HttpMethod.Post, "/open/v1/orders", options, parameters, ct).ConfigureAwait(false); var data = CheckResult(result); if (!BinanceTrHelper.IsJson(data)) { return(new ErrorDataResult <PostOrderModelData>(data)); } var model = JsonSerializer.Deserialize <PostOrderModel>(result); return(new SuccessDataResult <PostOrderModelData>(model.Data, model.Msg, model.Code)); } catch (Exception ex) { return(new ErrorDataResult <PostOrderModelData>(ex.Message)); } }
public async Task <IDataResult <List <OpenOrderList> > > GetAllOpenSellOrdersAsync(BinanceTrOptions options, string symbol, int limit = 500, CancellationToken ct = default) { try { var parameters = new Dictionary <string, string> { { "symbol", symbol }, { "limit", limit.ToString() }, { "type", AllOrdersEnum.Open.GetDisplayName() }, { "side", OrderSideEnum.SELL.GetDisplayName() }, }; var result = await SendRequestAsync(HttpMethod.Get, "/open/v1/orders", options, parameters, ct).ConfigureAwait(false); var data = CheckResult(result); if (!BinanceTrHelper.IsJson(data)) { return(new ErrorDataResult <List <OpenOrderList> >(data)); } var model = JsonSerializer.Deserialize <AllOrdersModel>(result); return(new SuccessDataResult <List <OpenOrderList> >(model.Data.List, model.Msg, model.Code)); } catch (Exception ex) { return(new ErrorDataResult <List <OpenOrderList> >(ex.Message)); } }
public async Task <IDataResult <CancelOrderData> > CancelOrderByIdAsync(BinanceTrOptions options, long orderId, CancellationToken ct = default) { try { var parameters = new Dictionary <string, string> { { "orderId", orderId.ToString() } }; var result = await SendRequestAsync(HttpMethod.Post, "/open/v1/orders/cancel", options, parameters, ct).ConfigureAwait(false); var data = CheckResult(result); if (!BinanceTrHelper.IsJson(data)) { return(new ErrorDataResult <CancelOrderData>(data)); } var model = JsonSerializer.Deserialize <CancelOrderModel>(result); return(new SuccessDataResult <CancelOrderData>(model.Data, model.Msg, model.Code)); } catch (Exception ex) { return(new ErrorDataResult <CancelOrderData>(ex.Message)); } }
private async Task <string> SendRequestAsync(HttpMethod method, string url, BinanceTrOptions options, Dictionary <string, string> parameters = null, CancellationToken ct = default) { try { using var httpClient = new HttpClient(); var requestUri = BinanceTrHelper.GetRequestUrl(url, true); var requestMessage = new HttpRequestMessage(method, requestUri); requestMessage.Headers.Add("X-MBX-APIKEY", options.ApiKey); if (method == HttpMethod.Get) { requestMessage.RequestUri = new Uri(requestMessage.RequestUri.OriginalString + BinanceTrHelper.CreateQueryString(BinanceTrHelper.BuildRequest(options.ApiSecret, parameters))); } else { requestMessage.Content = new FormUrlEncodedContent(BinanceTrHelper.BuildRequest(options.ApiSecret, parameters)); } var response = await httpClient.SendAsync(requestMessage, ct).ConfigureAwait(false); return(await response.Content.ReadAsStringAsync().ConfigureAwait(false)); } catch (Exception ex) { return(ex.Message); } }
public async Task <IDataResult <AssetInformationData> > GetAssetIformationAsync(BinanceTrOptions options, string assetName, CancellationToken ct = default) { try { var parameters = new Dictionary <string, string> { { "asset", assetName } }; var result = await SendRequestAsync(HttpMethod.Get, "/open/v1/account/spot/asset", options, parameters, ct).ConfigureAwait(false); var data = CheckResult(result); if (!BinanceTrHelper.IsJson(data)) { return(new ErrorDataResult <AssetInformationData>(data)); } var model = JsonSerializer.Deserialize <AssetInformationModel>(result); return(new SuccessDataResult <AssetInformationData>(model.Data, model.Msg, model.Code)); } catch (Exception ex) { return(new ErrorDataResult <AssetInformationData>(ex.Message)); } }
public async Task <IDataResult <string> > GetKlinesAsync(string symbol, KLineIntervalEnum interval, DateTime?startTime = null, DateTime?endTime = null, int limit = 500, CancellationToken ct = default) { try { var parameters = new Dictionary <string, string> { { "symbol", symbol }, { "limit", limit.ToString() }, { "interval", interval.GetDisplayName() }, }; if (startTime.HasValue && endTime.HasValue) { parameters["startTime"] = BinanceTrHelper.GetTimestamp(startTime.Value).ToString(); parameters["endTime"] = BinanceTrHelper.GetTimestamp(endTime.Value).ToString(); } var result = await SendRequestWithoutAuth("/klines", parameters, ct : ct).ConfigureAwait(false); var data = CheckResult(result); if (!BinanceTrHelper.IsJson(data)) { return(new ErrorDataResult <string>(data)); } return(new SuccessDataResult <string>(data)); } catch (Exception ex) { return(new ErrorDataResult <string>(ex.Message)); } }
public async Task <IDataResult <List <AggregateTradesModel> > > GetAggregateTradesAsync(string symbol, DateTime?startTime = null, DateTime?endTime = null, int limit = 500, CancellationToken ct = default) { try { var parameters = new Dictionary <string, string> { { "symbol", symbol }, { "limit", limit.ToString() } }; if (startTime.HasValue && endTime.HasValue) { parameters["startTime"] = BinanceTrHelper.GetTimestamp(startTime.Value).ToString(); parameters["endTime"] = BinanceTrHelper.GetTimestamp(endTime.Value).ToString(); } var result = await SendRequestWithoutAuth("/aggTrades", parameters, ct : ct).ConfigureAwait(false); var data = CheckResult(result); if (!BinanceTrHelper.IsJson(data)) { return(new ErrorDataResult <List <AggregateTradesModel> >(data)); } var model = JsonSerializer.Deserialize <List <AggregateTradesModel> >(result); return(new SuccessDataResult <List <AggregateTradesModel> >(model)); } catch (Exception ex) { return(new ErrorDataResult <List <AggregateTradesModel> >(ex.Message)); } }
public async Task <IDataResult <List <RecentTradesModel> > > GetRecentTradesAsync(string symbol, int limit = 500, CancellationToken ct = default) { try { var parameters = new Dictionary <string, string> { { "symbol", symbol }, { "limit", limit.ToString() } }; var result = await SendRequestWithoutAuth("/trades", parameters, ct : ct).ConfigureAwait(false); var data = CheckResult(result); if (!BinanceTrHelper.IsJson(data)) { return(new ErrorDataResult <List <RecentTradesModel> >(data)); } var model = JsonSerializer.Deserialize <List <RecentTradesModel> >(result); return(new SuccessDataResult <List <RecentTradesModel> >(model)); } catch (Exception ex) { return(new ErrorDataResult <List <RecentTradesModel> >(ex.Message)); } }
public async Task <IDataResult <OrderBookData> > GetOrderBookAsync(string symbol, int limit = 100, CancellationToken ct = default) { try { var parameters = new Dictionary <string, string> { { "symbol", symbol }, { "limit", limit.ToString() } }; var result = await SendRequestWithoutAuth("/open/v1/market/depth", parameters, true, ct).ConfigureAwait(false); var data = CheckResult(result); if (!BinanceTrHelper.IsJson(data)) { return(new ErrorDataResult <OrderBookData>(data)); } var model = JsonSerializer.Deserialize <OrderBookModel>(result); return(new SuccessDataResult <OrderBookData>(model.Data, model.Msg, model.Code)); } catch (Exception ex) { return(new ErrorDataResult <OrderBookData>(ex.Message)); } }
private static async Task <string> SendRequestWithoutAuth(string url, Dictionary <string, string> parameters = null, bool baseUrl = false, CancellationToken ct = default) { try { using var httpClient = new HttpClient(); var requestUri = BinanceTrHelper.GetRequestUrl(url, baseUrl); var requestMessage = new HttpRequestMessage(HttpMethod.Get, requestUri); requestMessage.RequestUri = new Uri(requestMessage.RequestUri.OriginalString + BinanceTrHelper.CreateQueryString(BinanceTrHelper.BuildRequest(null, parameters))); var response = await httpClient.SendAsync(requestMessage, ct).ConfigureAwait(false); return(await response.Content.ReadAsStringAsync().ConfigureAwait(false)); } catch (Exception ex) { return(ex.Message); } }
public async Task <IDataResult <List <AccountAsset> > > GetAccountInformationAsync(BinanceTrOptions options, CancellationToken ct = default) { try { var result = await SendRequestAsync(HttpMethod.Get, "/open/v1/account/spot", options, ct : ct).ConfigureAwait(false); var data = CheckResult(result); if (!BinanceTrHelper.IsJson(data)) { return(new ErrorDataResult <List <AccountAsset> >(data)); } var model = JsonSerializer.Deserialize <AccountInformationModel>(result); return(new SuccessDataResult <List <AccountAsset> >(model.AccountData.AccountAssets, model.Msg, model.Code)); } catch (Exception ex) { return(new ErrorDataResult <List <AccountAsset> >(ex.Message)); } }