//public override IObservable<PriceTicker> SubscribeMarketSummaries(IEnumerable<string> symbols, string period) // { // var obs = Observable.FromEventPattern<HuobiApiClient.DetailTickHandler, string, Huobi.WsTick>(h => client.DetailTick += h, h => client.DetailTick -= h); // obs = obs.Buffer(TimeSpan.FromSeconds(1)).SelectMany(selector => selector.ToObservable()); // client.SubscribeMarketSummariesAsync(symbols); // return obs.Select( // x => new PriceTicker() // { // Symbol = x.Sender, // LastPrice = x.EventArgs.close, // PriceChangePercent = Math.Round(((x.EventArgs.close / x.EventArgs.open) - 1M) * 100M, 2), // Volume = x.EventArgs.vol // }); // } internal SymbolInformation CreateSymbolInformation(Huobi.Market market) { var cmcEntry = GetCmcEntry(market.baseCurrency); return(new SymbolInformation() { BaseAsset = market.baseCurrency.ToUpper(), MaxPrice = 0, MinPrice = 0, MinQuantity = 0, QuantityDecimals = market.amountPrecision, PriceDecimals = market.pricePrecision, QuoteAsset = market.quoteCurrency.ToUpper(), Symbol = market.symbol, CmcId = cmcEntry != null ? cmcEntry.id : -1, CmcName = cmcEntry != null ? cmcEntry.name : market.baseCurrency.ToUpper(), CmcSymbol = cmcEntry != null ? cmcEntry.symbol : market.symbol }); }
// v1/common/symbols internal Huobi.ApiResult <IList <Huobi.Market> > DeserializeMarkets(string json) { return(JsonConvert.DeserializeObject <Huobi.ApiResult <IList <Huobi.Market> > >(json)); var sw = Stopwatch.StartNew(); // status: "string" // data: [] var result = new Huobi.ApiResult <IList <Huobi.Market> >(); JsonTextReader reader = new JsonTextReader(new StringReader(json)); if (reader.Read() && reader.TokenType != JsonToken.StartObject) { return(null); } while (reader.Read() && reader.TokenType == JsonToken.PropertyName) { switch (reader.Value) { case "status": // string result.status = reader.ReadAsString(); break; case "data": // array if (reader.Read() && reader.TokenType == JsonToken.StartArray) { var arr = new List <Huobi.Market>(); while (reader.Read() && reader.TokenType == JsonToken.StartObject) { var m = new Huobi.Market(); while (reader.Read() && reader.TokenType != JsonToken.EndObject) { switch (reader.Value) { case "base-currency": m.baseCurrency = reader.ReadAsString(); break; case "quote-currency": m.quoteCurrency = reader.ReadAsString(); break; case "price-precision": m.pricePrecision = reader.ReadAsInt32().GetValueOrDefault(); break; case "amount-precision": m.amountPrecision = reader.ReadAsInt32().GetValueOrDefault(); break; case "symbol-partition": m.symbolPartition = reader.ReadAsString(); break; case "symbol": m.symbol = reader.ReadAsString(); break; default: reader.Read(); // skip unknown tags break; } } arr.Add(m); } if (reader.TokenType == JsonToken.EndArray) { result.data = arr; } } break; case "ts": // timestamp: long break; case "err-code": result.errCode = reader.ReadAsString(); break; case "err-msg": result.errMsg = reader.ReadAsString(); break; default: reader.Read(); // skip break; } } Debug.Print($"Huobi markets: took {sw.ElapsedMilliseconds}ms"); if (reader.Read() && reader.TokenType != JsonToken.EndObject) { return(null); } return(result); }