Пример #1
0
        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));
            }
        }
Пример #2
0
        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));
            }
        }
Пример #3
0
        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));
            }
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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));
            }
        }
Пример #6
0
        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));
            }
        }
Пример #7
0
        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));
            }
        }
Пример #8
0
        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));
            }
        }
Пример #9
0
        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));
            }
        }
Пример #10
0
        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);
            }
        }
Пример #11
0
        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));
            }
        }