示例#1
0
        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;
        }
示例#2
0
 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);
 }
示例#3
0
        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;
        }
示例#4
0
        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();
        }
示例#5
0
 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);
 }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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;
        }
示例#9
0
 public bool UpdateOrderBook(BitFinexTicker info, byte[] data, int depth) {
     return OnUpdateOrderBook(info, data, true, depth);
 }