public override bool UpdateTickersInfo() { byte[] bytes = null; try { bytes = GetDownloadBytes(TickersUpdateAddress); } catch(Exception e) { Debug.WriteLine(e.ToString()); return false; } if(bytes == null) return false; int startIndex = 0; List<string[]> list = JSonHelper.Default.DeserializeArrayOfArrays(bytes, ref startIndex, 11); for(int i = 0; i < list.Count; i++) { string[] item = list[i]; BitFinexTicker ticker = (BitFinexTicker)Tickers.FirstOrDefault(t => t.CurrencyPair == item[0]); ticker.HighestBid = FastValueConverter.Convert(item[1]); ticker.LowestAsk = FastValueConverter.Convert(item[3]); ticker.Change = FastValueConverter.Convert(item[6]); ticker.Last = FastValueConverter.Convert(item[7]); ticker.Volume = FastValueConverter.Convert(item[8]); ticker.Hr24High = FastValueConverter.Convert(item[9]); ticker.Hr24Low = FastValueConverter.Convert(item[10]); } return true; }
public void GetOrderBook(BitFinexTicker info, int depth) { string address = string.Format("https://bittrex.com/api/v1.1/public/getorderbook?market={0}&type=both&depth={1}", Uri.EscapeDataString(info.MarketName), depth); byte[] data = GetDownloadBytes(address); if(data == null) return; UpdateOrderBook(info, data, depth); }
public override bool UpdateTicker(Ticker tickerBase) { byte[] bytes = null; try { bytes = GetDownloadBytes(string.Format("https://api.bitfinex.com/v2/ticker/{0}", ((BitFinexTicker)tickerBase).MarketName)); } catch(Exception e) { Debug.WriteLine(e.ToString()); return false; } if(bytes == null) return false; int startIndex = 0; string[] item = JSonHelper.Default.DeserializeArray(bytes, ref startIndex, 9); BitFinexTicker ticker = (BitFinexTicker)tickerBase; ticker.HighestBid = FastValueConverter.Convert(item[0]); ticker.LowestAsk = FastValueConverter.Convert(item[2]); ticker.Change = FastValueConverter.Convert(item[4]); ticker.Last = FastValueConverter.Convert(item[5]); ticker.Volume = FastValueConverter.Convert(item[6]); ticker.Hr24High = FastValueConverter.Convert(item[7]); ticker.Hr24Low = FastValueConverter.Convert(item[8]); ticker.Time = DateTime.Now; ticker.UpdateHistoryItem(); return true; }
public void GetTicker(BitFinexTicker info) { string address = string.Format("https://bittrex.com/api/v1.1/public/getticker?market={0}", Uri.EscapeDataString(info.MarketName)); byte[] bytes = null; try { bytes = GetDownloadBytes(address); } catch(Exception) { return; } if(bytes == null) return; int startIndex = 1; if(!JSonHelper.Default.SkipSymbol(bytes, ':', 3, ref startIndex)) return; string[] res = JSonHelper.Default.DeserializeObject(bytes, ref startIndex, new string[] { "Bid", "Ask", "Last" }); if(res == null) return; info.HighestBid = FastValueConverter.Convert(res[0]); info.LowestAsk = FastValueConverter.Convert(res[1]); info.Last = FastValueConverter.Convert(res[2]); info.Time = DateTime.UtcNow; info.UpdateHistoryItem(); }
public Task<string> GetOpenOrders(AccountInfo account, BitFinexTicker info) { string address = string.Format("https://bittrex.com/api/v1.1/market/getopenorders?apikey={0}&nonce={1}&market={2}", Uri.EscapeDataString(account.ApiKey), GetNonce(), info.MarketName); MyWebClient client = GetWebClient(); client.Headers.Clear(); client.Headers.Add("apisign", account.GetSign(address)); return client.DownloadStringTaskAsync(address); }
public override bool GetTickersInfo() { if (Tickers.Count > 0) { return(true); } string address = "https://api.bitfinex.com/v1/symbols"; byte[] bytes = null; try { bytes = GetDownloadBytes(address); } catch (Exception) { return(false); } if (bytes == null) { return(false); } string text = UTF8Encoding.Default.GetString(bytes); text = text.Replace('[', ' '); text = text.Replace(']', ' '); text = text.Replace('"', ' '); string[] tickers = text.Split(','); foreach (string item in tickers) { BitFinexTicker m = new BitFinexTicker(this); string currencyPair = item.Trim(); m.MarketCurrency = currencyPair.Substring(0, 3).ToUpper(); m.BaseCurrency = currencyPair.Substring(3, 3).ToUpper(); m.CurrencyPair = "t" + currencyPair.ToUpper(); m.MarketName = m.CurrencyPair; m.Index = Tickers.Count; Tickers.Add(m); } address = "https://api.bitfinex.com/v2/tickers?symbols="; foreach (BitFinexTicker ticker in Tickers) { address += ticker.CurrencyPair; if (Tickers.IndexOf(ticker) < Tickers.Count - 1) { address += ","; } } TickersUpdateAddress = address; IsInitialized = true; return(true); }
public bool GetTrades(BitFinexTicker info) { string address = string.Format("https://bittrex.com/api/v1.1/public/getmarkethistory?market={0}", Uri.EscapeDataString(info.MarketName)); byte[] bytes = null; try { bytes = GetDownloadBytes(address); } catch (Exception) { return(false); } if (bytes == null) { return(false); } int startIndex = 1; if (!JSonHelper.Default.SkipSymbol(bytes, ':', 3, ref startIndex)) { return(false); } List <string[]> res = JSonHelper.Default.DeserializeArrayOfObjects(bytes, ref startIndex, new string[] { "Id", "TimeStamp", "Quantity", "Price", "Total", "FillType", "OrderType" }); if (res == null) { return(false); } lock (info) { info.TradeHistory.Clear(); foreach (string[] obj in res) { TradeInfoItem item = new TradeInfoItem(null, info); item.Id = Convert.ToInt64(obj[0]);; item.Time = Convert.ToDateTime(obj[1]); item.AmountString = obj[2]; item.RateString = obj[3]; item.Total = FastValueConverter.Convert(obj[4]); item.Type = obj[6].Length == 3 ? TradeType.Buy : TradeType.Sell; item.Fill = obj[5].Length == 4 ? TradeFillType.Fill : TradeFillType.PartialFill; info.TradeHistory.Add(item); } } info.RaiseTradeHistoryAdd(); return(true); }
public bool UpdateTradesStatistic(BitFinexTicker info, int depth) { string address = string.Format("https://bittrex.com/api/v1.1/public/getmarkethistory?market={0}", Uri.EscapeDataString(info.MarketName)); byte[] bytes = null; try { bytes = GetDownloadBytes(address); } catch(Exception) { return false; } if(bytes == null) return false; int startIndex = 1; if(!JSonHelper.Default.SkipSymbol(bytes, ':', 3, ref startIndex)) return false; string lastIdString = info.LastTradeId.ToString(); List<string[]> res = JSonHelper.Default.DeserializeArrayOfObjects(bytes, ref startIndex, new string[] { "Id", "TimeStamp", "Quantity", "Price", "Total", "FillType", "OrderType" }, (itemIndex, paramIndex, value) => { return paramIndex != 0 || lastIdString != value; }); if(res == null) return false; int lastTradeId = Convert.ToInt32(res[0][0]); if(lastTradeId == info.LastTradeId) { info.TradeStatistic.Add(new TradeStatisticsItem() { Time = DateTime.UtcNow }); if(info.TradeStatistic.Count > 5000) { for(int i = 0; i < 100; i++) info.TradeStatistic.RemoveAt(0); } return true; } TradeStatisticsItem st = new TradeStatisticsItem(); st.MinBuyPrice = double.MaxValue; st.MinSellPrice = double.MaxValue; lock(info) { for(int i = 0; i < res.Count; i++) { string[] obj = res[i]; bool isBuy = obj[6].Length == 3; double price = FastValueConverter.Convert(obj[3]); double amount = FastValueConverter.Convert(obj[2]); if(isBuy) { st.BuyAmount += amount; st.MinBuyPrice = Math.Min(st.MinBuyPrice, price); st.MaxBuyPrice = Math.Max(st.MaxBuyPrice, price); st.BuyVolume += amount * price; } else { st.SellAmount += amount; st.MinSellPrice = Math.Min(st.MinSellPrice, price); st.MaxSellPrice = Math.Max(st.MaxSellPrice, price); st.SellVolume += amount * price; } } } if(st.MinSellPrice == double.MaxValue) st.MinSellPrice = 0; if(st.MinBuyPrice == double.MaxValue) st.MinBuyPrice = 0; info.LastTradeId = lastTradeId; info.TradeStatistic.Add(st); if(info.TradeStatistic.Count > 5000) { for(int i = 0; i < 100; i++) info.TradeStatistic.RemoveAt(0); } return true; }
public bool UpdateOrderBook(BitFinexTicker info, byte[] data, int depth) { return OnUpdateOrderBook(info, data, true, depth); }