internal PriceTicker ToPriceTicker(Huobi.Kline x)
 {
     return(new PriceTicker()
     {
         HighPrice = x.high,
         PriceChange = x.close - x.open,
         PriceChangePercent = CalcChangePercent(x.close, x.open),
         LastPrice = x.close,
         LowPrice = x.low,
         QuoteVolume = x.vol,
         Symbol = x.symbol,
         SymbolInformation = GetSymbolInformation(x.symbol),
         Volume = x.amount
     });
 }
Example #2
0
        internal Huobi.ApiResult <IList <Huobi.Kline> > DeserializeMarketSummaries(string json)
        {
            return(JsonConvert.DeserializeObject <Huobi.ApiResult <IList <Huobi.Kline> > >(json));

            // status: "string"
            // data: []
            var            result = new Huobi.ApiResult <IList <Huobi.Kline> >();
            var            sw     = Stopwatch.StartNew();
            JsonTextReader reader = new JsonTextReader(new StringReader(json));

            while (reader.Read() && reader.TokenType != JsonToken.StartObject)
            {
                ;
            }
            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.Kline>();
                        while (reader.Read() && reader.TokenType == JsonToken.StartObject)
                        {
                            var m = new Huobi.Kline();
                            while (reader.Read() && reader.TokenType != JsonToken.EndObject)
                            {
                                switch (reader.Value)
                                {
                                case "low":
                                    m.low = reader.ReadAsDecimal().GetValueOrDefault();
                                    break;

                                case "high":
                                    m.high = reader.ReadAsDecimal().GetValueOrDefault();
                                    break;

                                case "open":
                                    m.open = reader.ReadAsDecimal().GetValueOrDefault();
                                    break;

                                case "close":
                                    m.close = reader.ReadAsDecimal().GetValueOrDefault();
                                    break;

                                case "amount":
                                    m.amount = reader.ReadAsDecimal().GetValueOrDefault();
                                    break;

                                case "vol":
                                    m.vol = reader.ReadAsDecimal().GetValueOrDefault();
                                    break;

                                case "count":
                                    m.count = reader.ReadAsInt32().GetValueOrDefault();
                                    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
                    reader.Read();
                    break;

                case "err-code":
                    result.errCode = reader.ReadAsString();
                    break;

                case "err-msg":
                    result.errMsg = reader.ReadAsString();
                    break;

                default:
                    reader.Read();     // skip
                    break;
                }
            }
            if (reader.Read() && reader.TokenType != JsonToken.EndObject)
            {
                return(null);
            }
            Debug.Print($"Huobi tickers: took {sw.ElapsedMilliseconds}ms");
            return(result);
        }