예제 #1
0
        //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
            });
        }
예제 #2
0
        // 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);
        }