为什么我无法使用 c# 和官方 Binance REST API 下达 Binance 订单?

Lev*_*cze 5 c# api binance

我是 StackOverflow 的新手,但我听说有一些很棒且乐于助人的人可以帮助我。

我的使命:

  • 找到一种使用 c# 调用 Binance REST API 进行交易的方法
  • 没有dll,使用我自己的代码(为了速度更新)

现在我使用 Binance.API 包,但我的机器人需要更快一点,因为它的速度不够。另外,如果能够在没有任何外部源(例如 dll)的情况下完成此操作,那将是一件很棒的事情。不是吗?

我尝试过的:

  • 成功:我可以使用“WebRequest”毫无问题地调用公共 API,并且不需要身份验证。
WebRequest webrequest = WebRequest.Create("https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT");
WebResponse Response = webrequest.GetResponse();
StreamReader reader = new StreamReader(Response.GetResponseStream());
MessageBox.Show(reader.ReadToEnd());
Run Code Online (Sandbox Code Playgroud)
  • 成功:我可以使用“WebRequest”调用 REST API,没有任何问题,并且需要身份验证。但只有帐户信息。
string dataQueryString = "recvWindow=15000&timestamp=" + Math.Round(Convert.ToDecimal(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds), 0).ToString();
WebRequest webrequest = WebRequest.Create("https://api.binance.com/api/v3/account?" + dataQueryString + "&signature=" + BitConverter.ToString(new HMACSHA256(Encoding.ASCII.GetBytes(tempAPI_Secret)).ComputeHash(Encoding.ASCII.GetBytes(dataQueryString))).Replace("-", string.Empty).ToLower());
webrequest.Method = "GET";
webrequest.Headers.Add("X-MBX-APIKEY", tempAPI_Key);
WebResponse Response = webrequest.GetResponse();
StreamReader reader = new StreamReader(Response.GetResponseStream());
string response = reader.ReadToEnd();
reader.Close();
Response.Close();
Run Code Online (Sandbox Code Playgroud)
  • !!! 问题 !!!我无法使用“WebRequest”调用 ORDER REST API ,并且需要身份验证。我尝试了下面的代码。(它的调用方式与帐户信息相同,但具有 POST 类型,当然还需要加上所需的参数
string dataQueryString = "symbol=BTCUSDT&side=SELL&type=LIMIT&quantity=0.00039&price=38878&newOrderRespType=RESULT&recvWindow=15000&timestamp=" + Math.Round(Convert.ToDecimal(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds), 0).ToString();
WebRequest webrequest = WebRequest.Create("https://api.binance.com/api/v3/account?" + dataQueryString + "&signature=" + BitConverter.ToString(new HMACSHA256(Encoding.ASCII.GetBytes(tempAPI_Secret)).ComputeHash(Encoding.ASCII.GetBytes(dataQueryString))).Replace("-", string.Empty).ToLower());
webrequest.Method = "POST";
webrequest.Headers.Add("X-MBX-APIKEY", tempAPI_Key);
WebResponse Response = webrequest.GetResponse();
StreamReader reader = new StreamReader(Response.GetResponseStream());
string response = reader.ReadToEnd();
reader.Close();
Response.Close();
Run Code Online (Sandbox Code Playgroud)

返回的错误代码:

“远程服务器返回错误:(400) 错误请求。”

我不明白为什么这不起作用。(我尝试使用网络客户端中的这些参数手动执行订单,并且成功了)

我检查了这些可能的问题:

  • 我的现货账户有足够的资金
  • 我试图卖出超​​过最低交易金额

有官方 Binance REST API 文档:这里

我尝试用谷歌搜索,但即使在这里我也找不到解决方案。

感谢您阅读它,如果您能帮助我,我将非常感激。

有不懂的可以问我,我会解答!

And*_*one 4

几天前我确实在做和你一样的事情,只不过我使用的是 python。我也很高兴看到我不是唯一一个喜欢从头开始编码的人。

我的解决方案是保留 url 不变,https://api.binance.com/api/v3/account而不是将我的订单参数附加symbol=BTCUSD&side=BUY&etc...到 url 上,而是必须通过datapython 内置函数的参数编码和发送该数据urllib.request.Request(url, data, headers)

我不太了解 C#,所以我不知道如何将 python 代码转换为 C#,但我确实找到了这个文档链接,它提供了有关如何使用 POST 请求发送数据的示例。您还可以看看我的问题和答案作为另一个例子。