Skip to content

Commit 658b4f5

Browse files
authored
upgrade Huobi MarketSymbolsMetadata to V2 (#759)
1 parent 209d7f2 commit 658b4f5

File tree

1 file changed

+54
-32
lines changed

1 file changed

+54
-32
lines changed

src/ExchangeSharp/API/Exchanges/Huobi/ExchangeHuobiAPI.cs

Lines changed: 54 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ namespace ExchangeSharp
2424
public sealed partial class ExchangeHuobiAPI : ExchangeAPI
2525
{
2626
public override string BaseUrl { get; set; } = "https://api.huobipro.com";
27-
public string BaseUrlV1 { get; set; } = "https://api.huobipro.com/v1";
28-
public override string BaseUrlWebSocket { get; set; } = "wss://api.huobipro.com/ws";
27+
public string BaseUrlV1 { get; set; } = "https://api.huobipro.com/v1";
28+
public string BaseUrlV2 { get; set; } = "https://api.huobipro.com/v2";
29+
public override string BaseUrlWebSocket { get; set; } = "wss://api.huobipro.com/ws";
2930
public string PrivateUrlV1 { get; set; } = "https://api.huobipro.com/v1";
3031

3132
public bool IsMargin { get; set; }
@@ -123,43 +124,64 @@ protected override async Task<IEnumerable<string>> OnGetMarketSymbolsAsync()
123124

124125
protected internal override async Task<IEnumerable<ExchangeMarket>> OnGetMarketSymbolsMetadataAsync()
125126
{
126-
/*
127-
{
128-
"status"
129-
:
130-
"ok", "data"
131-
:
132-
[{
133-
"base-currency": "btc",
134-
"quote-currency": "usdt",
135-
"price-precision": 2,
136-
"amount-precision": 4,
137-
"symbol-partition": "main"
138-
}, {
139-
"base-currency": "bch",
140-
"quote-currency": "usdt",
141-
"price-precision": 2,
142-
"amount-precision": 4,
143-
"symbol-partition": "main"
144-
},
145-
146-
*/
147-
List<ExchangeMarket> markets = new List<ExchangeMarket>();
148-
JToken allMarketSymbols = await MakeJsonRequestAsync<JToken>("/common/symbols", BaseUrlV1, null);
127+
/*{
128+
"status":"ok",
129+
"data":[
130+
{
131+
"tags": "",
132+
"state": "online",
133+
"wr": "1.5",
134+
"sc": "ethusdt",
135+
"p": [
136+
{
137+
"id": 9,
138+
"name": "Grayscale",
139+
"weight": 91
140+
}
141+
],
142+
"bcdn": "ETH",
143+
"qcdn": "USDT",
144+
"elr": null,
145+
"tpp": 2,
146+
"tap": 4,
147+
"fp": 8,
148+
"smlr": null,
149+
"flr": null,
150+
"whe": false,
151+
"cd": false,
152+
"te": true,
153+
"sp": "main",
154+
"d": null,
155+
"bc": "eth",
156+
"qc": "usdt",
157+
"toa": 1514779200000,
158+
"ttp": 8,
159+
"w": 999400000,
160+
"lr": 5,
161+
"dn": "ETH/USDT"
162+
}
163+
],
164+
"ts":"1641870869718",
165+
"full":1
166+
}*/
167+
List<ExchangeMarket> markets = new List<ExchangeMarket>();
168+
JToken allMarketSymbols = await MakeJsonRequestAsync<JToken>("/settings/common/symbols", BaseUrlV2, null);
149169
foreach (var marketSymbol in allMarketSymbols)
150170
{
151-
var baseCurrency = marketSymbol["base-currency"].ToStringLowerInvariant();
152-
var quoteCurrency = marketSymbol["quote-currency"].ToStringLowerInvariant();
153-
var pricePrecision = marketSymbol["price-precision"].ConvertInvariant<double>();
171+
var baseCurrency = marketSymbol["bc"].ToStringLowerInvariant();
172+
var quoteCurrency = marketSymbol["qc"].ToStringLowerInvariant();
173+
var symbolCode = marketSymbol["sc"].ToStringLowerInvariant();
174+
var pricePrecision = marketSymbol["tpp"].ConvertInvariant<double>();
154175
var priceStepSize = Math.Pow(10, -pricePrecision).ConvertInvariant<decimal>();
155-
var amountPrecision = marketSymbol["amount-precision"].ConvertInvariant<double>();
176+
var amountPrecision = marketSymbol["tap"].ConvertInvariant<double>();
156177
var quantityStepSize = Math.Pow(10, -amountPrecision).ConvertInvariant<decimal>();
178+
var state = marketSymbol["state"].ToStringLowerInvariant();
157179
var market = new ExchangeMarket
158180
{
159181
BaseCurrency = baseCurrency,
160182
QuoteCurrency = quoteCurrency,
161-
MarketSymbol = baseCurrency + quoteCurrency,
162-
IsActive = true,
183+
MarketSymbol = symbolCode,
184+
IsActive = state == "online",
163185
PriceStepSize = priceStepSize,
164186
QuantityStepSize = quantityStepSize,
165187
MinPrice = priceStepSize,
@@ -278,7 +300,7 @@ protected override async Task<IWebSocket> OnGetTradesWebSocketAsync(Func<KeyValu
278300
{
279301
if (marketSymbols == null || marketSymbols.Length == 0)
280302
{
281-
marketSymbols = (await GetMarketSymbolsAsync()).ToArray();
303+
marketSymbols = (await GetMarketSymbolsMetadataAsync()).Where(s => s.IsActive.Value).Select(s => s.MarketSymbol).ToArray();
282304
}
283305
foreach (string marketSymbol in marketSymbols)
284306
{

0 commit comments

Comments
 (0)