private void AddToIndicatorOutput(LiquidityProvider lp, double bid, double ask, int position = 0) { switch (lp) { case LiquidityProvider.SoftFx: SoftFxBid[position] = bid; SoftFxAsk[position] = ask; break; case LiquidityProvider.Livecoin: LivecoinBid[position] = bid; LivecoinAsk[position] = ask; break; case LiquidityProvider.Tidex: TidexBid[position] = bid; TidexAsk[position] = ask; break; case LiquidityProvider.Okex: OkexBid[position] = bid; OkexAsk[position] = ask; break; case LiquidityProvider.Binance: BinanceBid[position] = bid; BinanceAsk[position] = ask; break; case LiquidityProvider.Bitfinex: BitfinexBid[position] = bid; BitfinexAsk[position] = ask; break; case LiquidityProvider.HitBtc: HitBtcBid[position] = bid; HitBtcAsk[position] = ask; break; case LiquidityProvider.Kraken: KrakenBid[position] = bid; KrakenAsk[position] = ask; break; case LiquidityProvider.Kucoin: KucoinBid[position] = bid; KucoinAsk[position] = ask; break; case LiquidityProvider.Huobi: HuobiBid[position] = bid; HuobiAsk[position] = ask; break; } }
private async Task <double[]> ProcessLps(LiquidityProvider lp, int initBarsCount) { var tick = await GetTick(lp); var bid = GetBid(lp, tick); var ask = GetAsk(lp, tick); OnMainThread(() => { AddToIndicatorOutput(lp, bid, ask, Bars.Count - initBarsCount); }); return(new double[] { bid, ask }); }
private async Task <HttpResponseMessage> GetTick(LiquidityProvider lp) { _tickerUrl.TryGetValue(lp, out var url); try { if (lp == LiquidityProvider.SoftFx) { return(await _softFxClient.GetAsync(url)); } else { return(await _defaultClient.GetAsync(url)); } } catch (Exception e) { return(null); } }
private double GetAsk(LiquidityProvider lp, HttpResponseMessage response) { try { dynamic quote = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result); if (response.StatusCode != HttpStatusCode.OK) { return(double.NaN); } switch (lp) { case LiquidityProvider.SoftFx: return(quote[0]["BestAsk"]["Price"]); case LiquidityProvider.Livecoin: return(quote["best_ask"]); case LiquidityProvider.Tidex: return(quote[TidexSymbol]["sell"]); case LiquidityProvider.Okex: string okexStr = quote["ticker"]["sell"]; return((double.TryParse(okexStr, out double okexAsk)) ? okexAsk : double.NaN); case LiquidityProvider.Binance: string binanceStr = quote["askPrice"]; return((double.TryParse(binanceStr, out double binanceAsk)) ? binanceAsk : double.NaN); case LiquidityProvider.Bitfinex: return(quote[2]); case LiquidityProvider.HitBtc: string hitBtcStr = quote["ask"]; return((double.TryParse(hitBtcStr, out double hitBtcAsk)) ? hitBtcAsk : double.NaN); case LiquidityProvider.Kraken: if (((JArray)quote["error"]).Count != 0) { return(double.NaN); } else { var result = new JObject(quote["result"]); var enumerator = result.Properties().GetEnumerator(); enumerator.MoveNext(); var krakenSymbol = enumerator.Current.Name; return(double.Parse((string)result.GetValue(krakenSymbol).Value <JArray>("a")[0])); } case LiquidityProvider.Kucoin: return(quote["data"]["sell"]); case LiquidityProvider.Huobi: return(quote["tick"]["ask"][0]); default: return(double.NaN); } } catch (Exception e) { return(double.NaN); } }