QuantConnect / Lean.Brokerages.Binance

Binance Brokerage Plugin
Apache License 2.0
5 stars 18 forks source link

Wrong endpoint for 24hr Ticker Price Change Statistics #18

Closed creatidy closed 1 year ago

creatidy commented 1 year ago

Expected Behavior

An application should use the proper endpoint for "24hr Ticker Price Change Statistics", ie. GET /api/v3/ticker/24hr

More: https://binance-docs.github.io/apidocs/spot/en/#24hr-ticker-price-change-statistics

Actual Behavior

Currently an application tries to use an endpoint: GET /sapi/v1/margin/ticker/24hr ... invoking the error:

20230120 20:27:20.436 ERROR:: BinanceBrokerage.FetchSymbolWeights():  System.Exception: BinanceBrokerage.GetCashBalance: request failed: [404] , Content: {"timestamp":1674246440091,"status":404,"error":"Not Found","message":"No message available","path":"/sapi/v1/margin/ticker/24hr"}, ErrorMessage:
   at QuantConnect.BinanceBrokerage.BinanceBaseRestApiClient.GetTickerPriceChangeStatistics() in C:\Users\adria\workspace\QuantConnect\Lean.Brokerages.Binance\QuantConnect.BinanceBrokerage\BinanceBaseRestApiClient.cs:line 415
   at QuantConnect.BinanceBrokerage.BinanceBrokerage.FetchSymbolWeights(String restApiUrl) in C:\Users\adria\workspace\QuantConnect\Lean.Brokerages.Binance\QuantConnect.BinanceBrokerage\BinanceBrokerage.cs:line 670
20230120 20:27:20.465 ERROR:: Engine.Run():  System.Exception: BinanceBrokerage.GetCashBalance: request failed: [404] , Content: {"timestamp":1674246440091,"status":404,"error":"Not Found","message":"No message available","path":"/sapi/v1/margin/ticker/24hr"}, ErrorMessage:
   at QuantConnect.BinanceBrokerage.BinanceBaseRestApiClient.GetTickerPriceChangeStatistics() in C:\Users\adria\workspace\QuantConnect\Lean.Brokerages.Binance\QuantConnect.BinanceBrokerage\BinanceBaseRestApiClient.cs:line 415
   at QuantConnect.BinanceBrokerage.BinanceBrokerage.FetchSymbolWeights(String restApiUrl) in C:\Users\adria\workspace\QuantConnect\Lean.Brokerages.Binance\QuantConnect.BinanceBrokerage\BinanceBrokerage.cs:line 670
   at QuantConnect.BinanceBrokerage.BinanceBrokerage.Initialize(String wssUrl, String restApiUrl, String apiKey, String apiSecret, IAlgorithm algorithm, IDataAggregator aggregator, LiveNodePacket job, String marketName) in C:\Users\adria\workspace\QuantConnect\Lean.Brokerages.Binance\QuantConnect.BinanceBrokerage\BinanceBrokerage.cs:line 494
   at QuantConnect.BinanceBrokerage.BinanceBrokerage..ctor(String apiKey, String apiSecret, String restApiUrl, String webSocketBaseUrl, IAlgorithm algorithm, IDataAggregator aggregator, LiveNodePacket job, String marketName) in C:\Users\adria\workspace\QuantConnect\Lean.Brokerages.Binance\QuantConnect.BinanceBrokerage\BinanceBrokerage.cs:line 115
   at QuantConnect.BinanceBrokerage.BinanceBrokerage..ctor(String apiKey, String apiSecret, String restApiUrl, String webSocketBaseUrl, IAlgorithm algorithm, IDataAggregator aggregator, LiveNodePacket job) in C:\Users\adria\workspace\QuantConnect\Lean.Brokerages.Binance\QuantConnect.BinanceBrokerage\BinanceBrokerage.cs:line 97
   at QuantConnect.BinanceBrokerage.BinanceBrokerageFactory.CreateBrokerage(LiveNodePacket job, IAlgorithm algorithm) in C:\Users\adria\workspace\QuantConnect\Lean.Brokerages.Binance\QuantConnect.BinanceBrokerage\BinanceBrokerageFactory.cs:line 88
   at QuantConnect.Lean.Engine.Setup.BrokerageSetupHandler.CreateBrokerage(AlgorithmNodePacket algorithmNodePacket, IAlgorithm uninitializedAlgorithm, IBrokerageFactory& factory) in C:\Users\adria\workspace\QuantConnect\Lean\Engine\Setup\BrokerageSetupHandler.cs:line 134
   at QuantConnect.Lean.Engine.Engine.Run(AlgorithmNodePacket job, AlgorithmManager manager, String assemblyPath, WorkerThread workerThread) in C:\Users\adria\workspace\QuantConnect\Lean\Engine\Engine.cs:line 138

Potential Solution

diff --git a/QuantConnect.BinanceBrokerage/BinanceBaseRestApiClient.cs b/QuantConnect.BinanceBrokerage/BinanceBaseRestApiClient.cs
index 0b91c82..aee8d66 100644
--- a/QuantConnect.BinanceBrokerage/BinanceBaseRestApiClient.cs
+++ b/QuantConnect.BinanceBrokerage/BinanceBaseRestApiClient.cs
@@ -406,7 +406,7 @@ namespace QuantConnect.BinanceBrokerage
         /// </summary>
         public PriceChangeStatistics[] GetTickerPriceChangeStatistics()
         {
-            var endpoint = $"{ApiPrefix}/ticker/24hr";
+            var endpoint = $"{GetBaseDataEndpoint()}/ticker/24hr";
             var request = new RestRequest(endpoint, Method.GET);

             var response = ExecuteRestRequest(request);

Reproducing the Problem

  1. Compile locally the newest version of Lean and Lean.Brokerages.Binance
  2. Start an algorithm: lean live deploy "strategy" --brokerage Binance --data-feed Binance

System Information

Win11, Docker, WSL2

Checklist