Huobi: Unable to obtain tickers from exchange (Null Instrument)
Huobi is returning some unusual symbols in their API. https://api.huobi.pro/v1/common/symbols that cause an exception, resulting in you not getting any tickers from the service.
Examples: "ltc3usdt", "btc1susdt", "a8s8d8f8", "a8s83ld8f8"
a8s8d8f8 a8s83ld8f8 trx3susdt w4j4x8z9 a8s83sd8f8 y1y2x8z9 trx3lusdt bch3lusdtnav ltc3lusdtnav link3susdtnav xrp3lusdtnav fil3lusdtnav dot2lusdtnav a8s83ld8f8nav a8s83sd8f8nav bch3susdtnav btc3lusdtnav uni2lusdtnav btc1susdtnav eth3susdtnav eos3susdtnav eth3lusdtnav eos3lusdtnav eth1susdtnav dot2susdtnav uni2susdtnav btc3susdtnav fil3susdtnav ltc3susdtnav xrp3susdtnav link3lusdtnav bsv3lusdtnav zec3susdtnav zec3lusdtnav bsv3susdtnav
I haven't been able to find out what those symbols mean, but regardless they cannot be processed by the Huobi adapter.
To reproduce, run the simplest code to get Huobi tickers:
List<Ticker> tickers = marketDataService.getTickers((CurrencyPairsParam) () -> Collections.emptyList());
Exception in thread "main" java.lang.IllegalArgumentException: Null instrument
at org.knowm.xchange.utils.Assert.notNull(Assert.java:36)
at org.knowm.xchange.dto.marketdata.Ticker$Builder.instrument(Ticker.java:280)
at org.knowm.xchange.dto.marketdata.Ticker$Builder.currencyPair(Ticker.java:288)
at org.knowm.xchange.huobi.HuobiAdapters.lambda$adaptAllTickers$1(HuobiAdapters.java:76)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at org.knowm.xchange.huobi.HuobiAdapters.adaptAllTickers(HuobiAdapters.java:88)
at org.knowm.xchange.huobi.service.HuobiMarketDataService.getTickers(HuobiMarketDataService.java:35)
at org.knowm.xchange.examples.huobi.marketdata.HuobiMarketDataDemo.raw(HuobiMarketDataDemo.java:34)
at org.knowm.xchange.examples.huobi.marketdata.HuobiMarketDataDemo.main(HuobiMarketDataDemo.java:24)
As a workaround, the Huobi library can be modified to check that adaptCurrencyPair(symbol) returns non-null.
--- a/xchange-huobi/src/main/java/org/knowm/xchange/huobi/HuobiAdapters.java
+++ b/xchange-huobi/src/main/java/org/knowm/xchange/huobi/HuobiAdapters.java
@@ -66,10 +66,8 @@ public class HuobiAdapters {
public static List<Ticker> adaptAllTickers(HuobiAllTicker[] allTickers) {
return Arrays.stream(allTickers)
- .filter(
- huobiTicker ->
- !"hb10".equals(huobiTicker.getSymbol()) // Fix on data error retrieved from api
- )
+ .filter(huobiTicker -> !"hb10".equals(huobiTicker.getSymbol())) // Fix on data error retrieved from api
+ .filter(huobiTicker -> null != adaptCurrencyPair(huobiTicker.getSymbol())) // Fix NPE when symbol is unknown
.map(
huobiTicker ->
new Ticker.Builder()