Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="_pair"></param>
        /// <param name="_values">0:size</param>
        /// <returns></returns>
        public override Trade[] GetTrades(string _pair, params string[] _values)
        {
            string _url = $"/market/history/trade?symbol{_pair}";

            if (_values.Length > 0)
            {
                _url += $"&size={_values[0]}";
            }

            JToken _token = base.HttpCall(HttpCallMethod.Get, "GET", _url);

            if (_token == null)
            {
                return(null);
            }

            IList <Trade> _result = new List <Trade>();
            JArray        _trades = _token["data"].Value <JArray>();

            foreach (JToken _item in _trades)
            {
                Trade _trade = new Trade();
                _trade.Id       = _item["id"].Value <string>();
                _trade.Pair     = _pair;
                _trade.Side     = _item["direction"].Value <string>() == "sell" ? MarketSide.Ask : MarketSide.Bid;
                _trade.Price    = _item["price"].Value <decimal>();
                _trade.Amount   = _item["amount"].Value <decimal>();
                _trade.DateTime = DateTimePlus.JSTime2DateTime(_item["ts"].Value <long>() / 1000);

                _result.Add(_trade);
            }

            return(_result.ToArray());
        }
Exemplo n.º 2
0
        protected override object[] HttpCallAuth(HttpClient _http, string _method, ref string _url, object[] _keyValues)
        {
            IList <object> _keyValueList = _keyValues.ToList();

            _keyValueList.Add("endpoint");
            _keyValueList.Add(_url);

            string _query = "";

            for (int i = 0; i < _keyValueList.Count - 1; i += 2)
            {
                _query += _query == "" ? "" : "&";
                _query += _keyValueList[i] + "=" + Uri.EscapeDataString(_keyValueList[i + 1].ToString());
            }
            string _timestamp = DateTimePlus.DateTime2JSTime(DateTime.UtcNow).ToString() + DateTime.UtcNow.Millisecond.ToString("D03");
            string _sign      = _url + (char)0 + _query + (char)0 + _timestamp;

            byte[] _rgbyKey = Encoding.UTF8.GetBytes(this.Secret);
            using (var _hmacsha512 = new HMACSHA512(_rgbyKey))
            {
                _hmacsha512.ComputeHash(Encoding.UTF8.GetBytes(_sign));
                _sign = ByteToString(_hmacsha512.Hash);
            }

            _sign = Convert.ToBase64String(StringToByte(_sign));
            _http.Headers.Add("Api-Key", base.Key);
            _http.Headers.Add("Api-Sign", _sign);
            _http.Headers.Add("Api-Nonce", _timestamp);
            _http.ContentType = "application/x-www-form-urlencoded";

            return(_keyValueList.ToArray());
        }
Exemplo n.º 3
0
        public override OrderItem OrderDetail(string _orderId, params string[] _values)
        {
            string _url  = "/v1/user/spot/order";
            string _pair = _values[0].ToString();

            JToken _token = base.HttpCall(HttpCallMethod.Get, "GET", _url, true, "pair", _pair, "order_id", _orderId);

            if (_token == null || _token.ToString(Newtonsoft.Json.Formatting.None).Trim() == "{}")
            {
                return(null);
            }

            OrderItem _item = new OrderItem();

            _item.Id         = _token["order_id"].Value <string>();
            _item.Pair       = _token["pair"].Value <string>();
            _item.Side       = _token["side"].Value <string>() == "sell" ? MarketSide.Ask : MarketSide.Bid;
            _item.Price      = _token["price"].Value <decimal>();
            _item.Amount     = _token["start_amount"].Value <decimal>();
            _item.CreateTime = DateTimePlus.JSTime2DateTime(long.Parse(_token["ordered_at"].Value <string>().Remove(10)));
            string _status = _token["status"].Value <string>();

            switch (_status)
            {
            case "UNFILLED": _item.Status = OrderStatus.New; break;

            case "PARTIALLY_FILLED": _item.Status = OrderStatus.Filling; break;

            case "FULLY_FILLED": _item.Status = OrderStatus.Filled; break;

            case "CANCELED_UNFILLED":
            case "CANCELED_PARTIALLY_FILLED": _item.Status = OrderStatus.Canceled; break;
            }
            return(_item);
        }
Exemplo n.º 4
0
        protected override object[] HttpCallAuth(HttpClient _http, string _method, ref string _url, object[] _keyValues)
        {
            Dictionary <string, string> _list = new Dictionary <string, string>();

            for (int i = 0; i < _keyValues.Length - 1; i += 2)
            {
                _list.Add(_keyValues[i].ToString(), _keyValues[i + 1].ToString());
            }
            KeyValuePair <string, string>[] _sorted = _list.ToArray().OrderBy(c => c.Key).ToArray();

            string _ts   = (DateTimePlus.DateTime2JSTime(DateTime.UtcNow) * 1000).ToString();
            string _sign = _method + this.HttpUrl + _url + _ts;

            for (int i = 0; i < _sorted.Length; i++)
            {
                _sign += i == 0 ? "" : "&";
                _sign += _sorted[i].Key + "=" + _sorted[i].Value;
            }
            _sign = Base64.Encode(Encoding.UTF8.GetBytes(_sign));
            _sign = SHA.EncodeHMACSHA1ToBase64(_sign, base.Secret);

            _http.Headers.Add("FC-ACCESS-KEY", base.Key);
            _http.Headers.Add("FC-ACCESS-SIGNATURE", _sign);
            _http.Headers.Add("FC-ACCESS-TIMESTAMP", _ts);

            return(_keyValues);
        }
Exemplo n.º 5
0
        public override Trade[] GetTrades(string _pair, params string[] _values)
        {
            string _url = $"/GET/v1/api/trades?pair={_pair}&count={_values[0]}";

            JToken _token = base.HttpCall(HttpCallMethod.Get, "GET", _url);

            if (_token == null)
            {
                return(null);
            }

            IList <Trade> _result = new List <Trade>();
            JArray        _trades = _token.Value <JArray>();

            foreach (JToken _item in _trades)
            {
                Trade _trade = new Trade();
                _trade.Id       = _item[0].Value <string>();
                _trade.Pair     = _pair;
                _trade.Side     = _item[4].Value <bool>() ? MarketSide.Bid : MarketSide.Ask;
                _trade.Price    = _item[1].Value <decimal>();
                _trade.Amount   = _item[2].Value <decimal>();
                _trade.DateTime = DateTimePlus.JSTime2DateTime(_item[3].Value <long>() / 1000);

                _result.Add(_trade);
            }

            return(_result.ToArray());
        }
Exemplo n.º 6
0
        public override OrderItem OrderCreate(string _pair, MarketSide _side, OrderType _type, decimal _amount, decimal _price = 0)
        {
            string _urlSide = _side == MarketSide.Ask ? "/selllimit" : "/buylimit";
            string _url     = "/v1.1/market" + _urlSide;

            IList <object> _values = new List <object>();

            _values.Add("apikey");
            _values.Add(this.Key);
            _values.Add("nonce");
            _values.Add(DateTimePlus.DateTime2JSTime(DateTime.UtcNow));
            _values.Add("market");
            _values.Add(_pair.ToUpper());
            _values.Add("quantity");
            _values.Add(_amount.ToString());
            _values.Add("rate");
            _values.Add(_price.ToString());

            JToken _token = base.HttpCall(HttpCallMethod.Get, "GET", _url, true, _values.ToArray());

            if (_token == null || _token.ToString(Newtonsoft.Json.Formatting.None).Trim() == "{}")
            {
                return(null);
            }

            OrderItem _item = new OrderItem();

            _item.Id = _token["uuid"].Value <string>();
            return(_item);
        }
Exemplo n.º 7
0
        protected override object[] HttpCallAuth(HttpClient _http, string _method, ref string _url, object[] _keyValues)
        {
            string  _query = "";
            JObject _json  = new JObject();

            for (int i = 0; i < _keyValues.Length - 1; i += 2)
            {
                _query += _query == "" ? "" : "&";
                _query += _keyValues[i] + "=" + System.Web.HttpUtility.UrlEncode(_keyValues[i + 1].ToString());

                Type _valueType = _keyValues[i + 1].GetType();
                if (_valueType == typeof(int))
                {
                    _json[_keyValues[i]] = (int)_keyValues[i + 1];
                }
                else if (_valueType == typeof(bool))
                {
                    _json[_keyValues[i]] = (bool)_keyValues[i + 1];
                }
                else if (_valueType == typeof(decimal))
                {
                    _json[_keyValues[i]] = (decimal)_keyValues[i + 1];
                }
                else if (_valueType == typeof(long))
                {
                    _json[_keyValues[i]] = (long)_keyValues[i + 1];
                }
                else if (_valueType == typeof(JArray))
                {
                    _json[_keyValues[i]] = (JArray)_keyValues[i + 1];
                }
                else
                {
                    _json[_keyValues[i]] = _keyValues[i + 1].ToString();
                }
            }

            JwtPayload _payload = new JwtPayload {
                { "access_key", base.Key }, { "nonce", DateTimePlus.DateTime2JSTime(DateTime.UtcNow).ToString() + DateTime.UtcNow.Millisecond.ToString() }
            };

            if (_method.ToUpper() == "POST")
            {
                _payload.Add("query", _query);
            }
            byte[] _keyBytes           = Encoding.Default.GetBytes(base.Secret);
            var    _securityKey        = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(_keyBytes);
            var    _credentials        = new Microsoft.IdentityModel.Tokens.SigningCredentials(_securityKey, "HS256");
            var    _header             = new JwtHeader(_credentials);
            var    _secToken           = new JwtSecurityToken(_header, _payload);
            var    _jwtToken           = new JwtSecurityTokenHandler().WriteToken(_secToken);
            var    _authorizationToken = _jwtToken;

            _http.Headers.Add("Authorization", $"Bearer {_authorizationToken}");

            return(_keyValues);
        }
Exemplo n.º 8
0
        public DateTime?GetServerTime()
        {
            string _url = $"/v2/public/server-time";

            JToken _token = base.HttpCall(HttpCallMethod.Get, "GET", _url);

            if (_token == null)
            {
                return(null);
            }

            return(DateTimePlus.JSTime2DateTime(_token.Value <long>() / 1000));
        }
Exemplo n.º 9
0
        public override OrderItem OrderCreate(string _pair, MarketSide _side, OrderType _type, decimal _amount, decimal _price = 0M)
        {
            string _url = "/api/v3/order";

            IList <object> _values = new List <object>();

            _values.Add("symbol");
            _values.Add(_pair.ToUpper());
            _values.Add("side");
            _values.Add(_side == MarketSide.Bid ? "BUY" : "SELL");
            _values.Add("type");
            switch (_type)
            {
            case OrderType.Limit:
                _values.Add("LIMIT");
                _values.Add("price");
                _values.Add(_price.ToString());
                _values.Add("timeInForce");
                _values.Add("GTC");
                break;

            case OrderType.Market:
                _values.Add("MARKET");
                break;
            }
            _values.Add("quantity");
            _values.Add(_amount);
            _values.Add("timestamp");
            long _timestamp = DateTimePlus.DateTime2JSTime(DateTime.UtcNow.AddSeconds(-1));

            _values.Add(_timestamp.ToString() + DateTime.UtcNow.Millisecond.ToString());

            JToken _token = base.HttpCall(HttpCallMethod.Form, "POST", _url, true, _values.ToArray());

            if (_token == null || _token.ToString().Trim() == "{}")
            {
                return(null);
            }
            this.OnLog(_token.ToString(Newtonsoft.Json.Formatting.None));

            OrderItem _item = new OrderItem();

            _item.Id         = _token["orderId"].Value <string>();
            _item.Pair       = _token["symbol"].Value <string>();
            _item.Side       = _token["side"].Value <string>() == "SELL" ? MarketSide.Ask : MarketSide.Bid;
            _item.Price      = _token["price"].Value <decimal>();
            _item.Amount     = _token["origQty"].Value <decimal>();
            _item.CreateTime = DateTimePlus.JSTime2DateTime(long.Parse(_token["transactTime"].Value <string>().Remove(10)));
            return(_item);
        }
Exemplo n.º 10
0
        private void BooksRunner(object _object)
        {
            string _pair = _object.ToString();
            string _url  = $"/api/v1/depth?symbol={_pair}&limit=10";

            this.Books[_pair, MarketSide.Ask] = new BookItems(MarketSide.Ask);
            this.Books[_pair, MarketSide.Bid] = new BookItems(MarketSide.Bid);

            string _result = "";

            while (this.Running)
            {
                Thread.Sleep(1000);

                try
                {
                    WebClientPlus _client = new WebClientPlus(5000);
                    _result = _client.DownloadString($"{base.HttpUrl}{_url}");
                    _client.Dispose();

                    JObject _json = JObject.Parse(_result);

                    BookItems _asks = new BookItems(MarketSide.Ask);
                    BookItems _bids = new BookItems(MarketSide.Bid);

                    this.Books.Timestamp = DateTimePlus.DateTime2JSTime(DateTime.UtcNow);

                    foreach (var _item in _json["asks"])
                    {
                        decimal _price  = _item[0].Value <decimal>();
                        decimal _amount = _item[1].Value <decimal>();
                        _asks.Insert(_price.ToString(), Math.Abs(_price), _amount);
                    }
                    foreach (var _item in _json["bids"])
                    {
                        decimal _price  = _item[0].Value <decimal>();
                        decimal _amount = _item[1].Value <decimal>();
                        _bids.Insert(_price.ToString(), Math.Abs(_price), _amount);
                    }

                    this.Books[_pair, MarketSide.Ask] = _asks;
                    this.Books[_pair, MarketSide.Bid] = _bids;
                }
                catch (Exception _ex)
                {
                    this.OnLog($"GetBooks Error:{_result}");
                    this.OnLog($"GetBooks Error:{_ex.ToString()}");
                }
            }
        }
Exemplo n.º 11
0
        public override KLine[] GetKLines(string _pair, KLineType _type, params string[] _values)
        {
            string _typeText = "";

            switch (_type)
            {
            case KLineType.M1: _typeText = "1"; break;

            case KLineType.H1: _typeText = "60"; break;

            case KLineType.D1: _typeText = "D"; break;

            default: throw new Exception($"KLine type:{_type.ToString()} not supported.");
            }

            string _url = $"/GET/v1/api/kline?pair={_pair}&type={_typeText}";

            if (_values.Length > 0)
            {
                _url += $"&count={_values[0]}";
            }

            JToken _token = base.HttpCall(HttpCallMethod.Get, "GET", _url);

            if (_token == null)
            {
                return(null);
            }

            IList <KLine> _result = new List <KLine>();
            JArray        _trades = _token.Value <JArray>();

            foreach (JToken _item in _trades)
            {
                KLine _line = new KLine();
                _line.DateTime = DateTimePlus.JSTime2DateTime(_token[0].Value <long>() / 1000);
                _line.Pair     = _pair;
                _line.Open     = _item[1].Value <decimal>();
                _line.Close    = _item[4].Value <decimal>();
                _line.High     = _item[2].Value <decimal>();
                _line.Low      = _item[3].Value <decimal>();
                _line.Volume   = _item[5].Value <decimal>();

                _result.Add(_line);
            }

            return(_result.ToArray());
        }
Exemplo n.º 12
0
        public override OrderItem OrderDetail(string _orderId, params string[] _values)
        {
            string _url = "/v1.1/account/getorder";

            IList <object> _list = new List <object>();

            _list.Add("apikey");
            _list.Add(this.Key);
            _list.Add("nonce");
            _list.Add(DateTimePlus.DateTime2JSTime(DateTime.UtcNow));
            _list.Add("uuid");
            _list.Add(_orderId);

            JToken _token = base.HttpCall(HttpCallMethod.Get, "GET", _url, true, _list.ToArray());

            if (_token == null || _token.ToString(Newtonsoft.Json.Formatting.None).Trim() == "{}")
            {
                return(null);
            }

            OrderItem _order = new OrderItem();

            _order.Id     = _token["OrderUuid"].Value <string>();
            _order.Pair   = _token["Exchange"].Value <string>();
            _order.Side   = _token["Type"].Value <string>().ToUpper().Split('_')[1] == "BUY" ? MarketSide.Bid : MarketSide.Ask;
            _order.Amount = _token["Quantity"].Value <decimal>();
            _order.Price  = _token["Limit"].Value <decimal>();

            decimal _quantityRemaining = _token["QuantityRemaining"].Value <decimal>();

            if (_quantityRemaining >= _order.Amount)
            {
                _order.Status = OrderStatus.New;
            }
            else if (_quantityRemaining <= 0M)
            {
                _order.Status = OrderStatus.Filled;
            }
            else
            {
                _order.Status = OrderStatus.Filling;
            }
            _order.FilledAmount = _order.Amount - _quantityRemaining;
            _order.FilledPrice  = _token["PricePerUnit"].Value <decimal>();
            _order.FilledVolume = _order.FilledAmount * _order.FilledPrice;

            return(_order);
        }
Exemplo n.º 13
0
        public override OrderItem OrderDetail(string _id, params string[] _values)
        {
            string _url = "/api/v3/order";

            IList <object> _list = new List <object>();

            _list.Add("symbol");
            string _pair = _values[0].Replace("_", "").ToUpper();

            _list.Add(_pair);
            _list.Add("orderId");
            _list.Add(_id);
            _list.Add("timestamp");
            long _timestamp = DateTimePlus.DateTime2JSTime(DateTime.UtcNow.AddSeconds(-1));

            _list.Add(_timestamp.ToString() + DateTime.UtcNow.Millisecond.ToString());

            JToken _token = this.HttpCall(HttpCallMethod.Get, "GET", _url, true, "symbol", _pair, "orderId", _id, "timestamp", _timestamp.ToString() + DateTime.UtcNow.Millisecond.ToString());

            if (_token == null)
            {
                return(null);
            }

            OrderItem _order = new OrderItem();

            _order.Id     = _token["orderId"].Value <string>();
            _order.Pair   = _token["symbol"].Value <string>();
            _order.Side   = _token["side"].Value <string>().ToUpper() == "BUY" ? MarketSide.Bid : MarketSide.Ask;
            _order.Amount = _token["origQty"].Value <decimal>();
            _order.Price  = _token["price"].Value <decimal>();
            string _status = _token["status"].Value <string>();

            switch (_status)
            {
            case "NEW": _order.Status = OrderStatus.New; break;

            case "PARTIALLY_FILLED": _order.Status = OrderStatus.Filling; break;

            case "FILLED": _order.Status = OrderStatus.Filled; break;

            case "CANCELED": _order.Status = OrderStatus.Canceled; break;
            }
            _order.FilledAmount = _token["executedQty"].Value <decimal>();
            _order.FilledVolume = _token["cummulativeQuoteQty"].Value <decimal>();

            return(_order);
        }
Exemplo n.º 14
0
        public void SendFirstPackage(SocketEngine _socket)
        {
            Random _random = new Random(RandomPlus.RandomSeed);

            this.socketRxKey    = _random.Next(10000000, 100000000).ToString();
            this.socketChecksum = _random.Next(10000000, 100000000).ToString();

            JObject _json = new JObject();

            _json["code"] = this.Code;
            _json["time"] = DateTimePlus.DateTime2JSTime(DateTime.UtcNow).ToString();
            _json["num"]  = this.socketChecksum;
            _json["key"]  = this.socketRxKey;

            _socket.SendPackage(_json);
        }
Exemplo n.º 15
0
        protected override void ReceivedTicker(string _pair, JToken _token)
        {
            Ticker _ticker = new Ticker();

            _ticker.Pair          = _pair;
            _ticker.BidPrice      = _token["buy"].Value <decimal>();
            _ticker.AskPrice      = _token["sell"].Value <decimal>();
            _ticker.High24H       = _token["high"].Value <decimal>();
            _ticker.Low24H        = _token["low"].Value <decimal>();
            _ticker.LastPrice     = _token["last"].Value <decimal>();
            _ticker.Volume24H     = _token["vol"].Value <decimal>();
            _ticker.Change24H     = _token["dchange"].Value <decimal>();
            _ticker.ChangeRate24H = _token["dchange_pec"].Value <decimal>();
            _ticker.DateTime      = DateTimePlus.JSTime2DateTime(_token["timestamp"].Value <long>() / 1000);
            this.Tickers[_pair]   = _ticker;
        }
Exemplo n.º 16
0
        public override Balances GetBalances(params object[] _symbols)
        {
            try
            {
                string _url = "/v1.1/account/getbalances";

                IList <object> _values = new List <object>();
                _values.Add("apikey");
                _values.Add(this.Key);
                _values.Add("nonce");
                _values.Add(DateTimePlus.DateTime2JSTime(DateTime.UtcNow));

                JToken _token = base.HttpCall(HttpCallMethod.Get, "GET", _url, true, _values.ToArray());
                if (_token == null || _token.ToString(Newtonsoft.Json.Formatting.None).Trim() == "{}")
                {
                    return(null);
                }

                Balances _balances = new Balances();
                foreach (JToken _item in _token)
                {
                    _balances[_item["Currency"].ToString()] = new BalanceItem()
                    {
                        Symbol = _item["Currency"].ToString(),
                        Free   = _item["Available"].ToString() == "" ? 0 : _item["Available"].Value <decimal>(),
                        Lock   = _item["Pending"].ToString() == "" ? 0 : _item["Pending"].Value <decimal>()
                    };
                }
                foreach (string _symbol in _symbols)
                {
                    if (!_balances.ContainsKey(_symbol.ToUpper()))
                    {
                        _balances[_symbol.ToUpper()] = new BalanceItem()
                        {
                            Symbol = _symbol.ToUpper(),
                            Free   = 0M,
                            Lock   = 0M
                        };
                    }
                }
                return(_balances);
            }
            catch (Exception)
            {
                return(null);
            }
        }
Exemplo n.º 17
0
 public static string GetCurrentHeight()
 {
     try
     {
         //string _url = "https://xmr.tokenview.com/api/blocks/xmr/1/1";
         string        _url       = "https://monerohash.com/api/stats?_=" + DateTimePlus.DateTime2JSTime(DateTime.UtcNow).ToString() + DateTime.UtcNow.Millisecond.ToString();
         WebClientPlus _webClient = new WebClientPlus(10000);
         string        _result    = _webClient.DownloadString(_url);
         _webClient.Dispose();
         JObject _json = JObject.Parse(_result);
         //return _json["data"][0]["block_no"].Value<string>();
         return(_json["network"]["height"].Value <string>());
     }
     catch (Exception)
     {
         return("");
     }
 }
Exemplo n.º 18
0
        public MiningStatus GetMiningStatus()
        {
            string _url = "/v1/order/mining/difficulty";

            JToken _token = base.HttpCall(HttpCallMethod.Get, "GET", _url, true);

            if (_token == null)
            {
                return(null);
            }

            MiningStatus _status = new MiningStatus();

            _status.Maximum  = _token["difficulty"].Value <decimal>();
            _status.Current  = _token["prediction"].Value <decimal>();
            _status.DateTime = DateTimePlus.JSTime2DateTime(_token["update_time"].Value <long>());
            return(_status);
        }
Exemplo n.º 19
0
        public override OrderItem OrderCreate(string _pair, MarketSide _side, OrderType _type, decimal _amount, decimal _price = 0)
        {
            string _url = "/v1/user/spot/order";

            IList <object> _values = new List <object>();

            _values.Add("pair");
            _values.Add(_pair.ToLower());
            _values.Add("amount");
            _values.Add(_amount.ToString());
            _values.Add("price");
            _values.Add(int.Parse(_price.ToString()));
            _values.Add("side");
            _values.Add(_side == MarketSide.Bid ? "buy" : "sell");
            _values.Add("type");
            switch (_type)
            {
            case OrderType.Limit:
                _values.Add("limit");
                break;

            case OrderType.Market:
                _values.Add("market");
                break;
            }

            JToken _token = base.HttpCall(HttpCallMethod.Json, "POST", _url, true, _values.ToArray());

            if (_token == null || _token.ToString(Newtonsoft.Json.Formatting.None).Trim() == "{}")
            {
                return(null);
            }

            OrderItem _item = new OrderItem();

            _item.Id         = _token["order_id"].Value <string>();
            _item.Pair       = _token["pair"].Value <string>();
            _item.Side       = _token["side"].Value <string>() == "sell" ? MarketSide.Ask : MarketSide.Bid;
            _item.Price      = _token["price"].Value <decimal>();
            _item.Amount     = _token["start_amount"].Value <decimal>();
            _item.CreateTime = DateTimePlus.JSTime2DateTime(long.Parse(_token["ordered_at"].Value <string>().Remove(10)));
            return(_item);
        }
Exemplo n.º 20
0
        public bool ReceiveFirstPackage(JObject _json, SocketSession _session)
        {
            if (_session["TxKey"] + "" != "" && _session["Checksum"] + "" == "DONE")
            {
                return(false);
            }

            if (_session["RxKey"] + "" == "")
            {
                DateTime _time = DateTimePlus.JSTime2DateTime(long.Parse(_json["time"].Value <string>()));
                if (Math.Abs((_time - DateTime.UtcNow).TotalSeconds) > 300)
                {
                    _session.Disconnect(); return(true);
                }

                _session["TxKey"] = _json["key"].Value <string>();

                Random _random = new Random(RandomPlus.RandomSeed);
                string _rxKey  = _random.Next(10000000, 100000000).ToString();
                _session["RxKey"] = _rxKey;
                string _checksum = _random.Next(10000000, 100000000).ToString();
                _session["Checksum"] = _checksum;

                JObject _result = new JObject();
                _result["check"] = this.rsa.Sign(_json["num"].Value <string>());
                _result["num"]   = _checksum;
                _result["key"]   = _rxKey;

                _session.SendPackage(_result);
            }
            else if (_session["Checksum"] + "" != "DONE")
            {
                if (!this.rsa.Verify(_session["Checksum"] + "", _json["check"].Value <string>()))
                {
                    this.socketTxKey = "";
                    return(true);
                }

                _session["Checksum"] = "DONE";
                _session.Handshaked  = true;
            }
            return(true);
        }
Exemplo n.º 21
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="_pair"></param>
        /// <param name="_values">0:type(L20,L100,full)</param>
        public override void SubscribeDepth(string _pair, params object[] _values)
        {
            JObject _json = new JObject();

            _json.Add("type", "hello");
            _json.Add("ts", DateTimePlus.DateTime2JSTime(DateTime.UtcNow));
            _json.Add("cmd", "sub");
            _json.Add("args", new JArray($"depth.{_values[0]}.{_pair}"));

            if (this.Books[_pair, MarketSide.Bid] == null)
            {
                this.Books[_pair, MarketSide.Bid] = new BookItems(MarketSide.Bid);
            }
            if (this.Books[_pair, MarketSide.Ask] == null)
            {
                this.Books[_pair, MarketSide.Ask] = new BookItems(MarketSide.Ask);
            }

            this.Send(_json);
        }
Exemplo n.º 22
0
        protected override object[] HttpCallAuth(HttpClient _http, string _method, ref string _url, object[] _keyValues)
        {
            Dictionary <string, string> _list = new Dictionary <string, string>();

            if (_method.ToUpper() == "POST")
            {
                for (int i = 0; i < _keyValues.Length; i += 2)
                {
                    _list.Add(_keyValues[i].ToString(), _keyValues[i + 1].ToString());
                }
            }
            string _time = DateTimePlus.DateTime2JSTime(DateTime.UtcNow.AddSeconds(-1)).ToString();

            _list.Add("api_key", base.Key);
            _list.Add("auth_nonce", _time);
            KeyValuePair <string, string>[] _sorted = _list.OrderBy(c => c.Key).ToArray();

            string _sign = "";

            foreach (KeyValuePair <string, string> _item in _sorted)
            {
                _sign += _item.Value;
            }
            _list.Add("auth_sign", MD5.Encode(_sign + base.Secret).ToLower());

            IList <string> _keyValueList = new List <string>();

            if (_method.ToUpper() == "GET")
            {
                foreach (var _item in _keyValues)
                {
                    _keyValueList.Add(_item.ToString());
                }
            }
            foreach (KeyValuePair <string, string> _item in _list)
            {
                _keyValueList.Add(_item.Key);
                _keyValueList.Add(_item.Value);
            }
            return(_keyValueList.ToArray());
        }
Exemplo n.º 23
0
        public OrderItem OrderCancel(string _pair, string _orderId)
        {
            string _url = "/v1/order/pending";

            IList <object> _value = new List <object>();

            _value.Add("id");
            _value.Add(_orderId);
            _value.Add("market");
            _value.Add(_pair.ToUpper());

            JToken _token = base.HttpCall(HttpCallMethod.Get, "DELETE", _url, true, _value.ToArray());

            if (_token == null || _token.ToString(Newtonsoft.Json.Formatting.None).Trim() == "{}")
            {
                return(null);
            }

            OrderItem _item = new OrderItem();

            _item.Id           = _token["id"].Value <string>();
            _item.Pair         = _token["market"].Value <string>();
            _item.Side         = _token["type"].Value <string>() == "sell" ? MarketSide.Ask : MarketSide.Bid;
            _item.Price        = _token["price"].Value <decimal>();
            _item.Amount       = _token["amount"].Value <decimal>();
            _item.FilledAmount = _token["deal_amount"].Value <decimal>();
            _item.FilledPrice  = _token["avg_price"].Value <decimal>();
            _item.FilledVolume = _token["deal_money"].Value <decimal>();
            string _status = _token["status"].Value <string>();

            switch (_status)
            {
            case "not_deal": _item.Status = OrderStatus.New; break;

            case "part_deal": _item.Status = OrderStatus.Filling; break;

            case "done": _item.Status = OrderStatus.Filled; break;
            }
            _item.CreateTime = DateTimePlus.JSTime2DateTime(long.Parse(_token["create_time"].Value <string>().Remove(10)));
            return(_item);
        }
Exemplo n.º 24
0
        protected override object[] HttpCallAuth(HttpClient _http, string _method, ref string _url, object[] _keyValues)
        {
            string _query = "";

            for (int i = 0; i < _keyValues.Length; i += 2)
            {
                _query += _query == "" ? "?" : "&";
                _query += $"{_keyValues[i].ToString()}={_keyValues[i + 1].ToString()}";
            }

            _http.Headers.Add("ACCESS-KEY", base.Key);
            long   _nonce = DateTimePlus.DateTime2JSTime(DateTime.UtcNow);
            string _time  = _nonce.ToString() + DateTime.UtcNow.Millisecond.ToString();

            _http.Headers.Add("ACCESS-NONCE", _time);
            string _signData = _time + _url + _query;
            string _sign     = SHA.EncodeHMACSHA256ToHex(_signData, base.Secret);

            _http.Headers.Add("ACCESS-SIGNATURE", _sign);

            return(_keyValues);
        }
Exemplo n.º 25
0
        /// <summary>
        /// GetTrades
        /// </summary>
        /// <param name="_pair"></param>
        /// <param name="_values">0:limit 1:timestamp</param>
        /// <returns></returns>
        public override Trade[] GetTrades(string _pair, params string[] _values)
        {
            string _url = $"/v1/trades/{_pair}";

            if (_values.Length > 0)
            {
                _url += $"?limit_trades={_values[0]}";
            }
            if (_values.Length > 1)
            {
                _url += $"&timestamp={_values[1]}";
            }

            JToken _token = base.HttpCall(HttpCallMethod.Get, "GET", _url);

            if (_token == null)
            {
                return(null);
            }

            IList <Trade> _result = new List <Trade>();
            JArray        _trades = _token.Value <JArray>();

            foreach (JToken _item in _trades)
            {
                Trade _trade = new Trade();
                _trade.Id       = _item["tid"].Value <string>();
                _trade.Pair     = _pair;
                _trade.Side     = _item["type"].Value <string>() == "sell" ? MarketSide.Ask : MarketSide.Bid;
                _trade.Price    = _item["price"].Value <decimal>();
                _trade.Amount   = _item["amount"].Value <decimal>();
                _trade.DateTime = DateTimePlus.JSTime2DateTime(_item[0].Value <long>());

                _result.Add(_trade);
            }

            return(_result.ToArray());
        }
Exemplo n.º 26
0
        protected override object[] HttpCallAuth(HttpClient _http, string _method, ref string _url, object[] _keyValues)
        {
            IList <object> _result = new List <object>();

            SortedDictionary <string, string> _list = new SortedDictionary <string, string>();

            for (int i = 0; i < _keyValues.Length; i += 2)
            {
                _list.Add(_keyValues[i].ToString(), _keyValues[i + 1].ToString());

                _result.Add(_keyValues[i]);
                _result.Add(_keyValues[i + 1]);
            }

            string _sign = "";
            long   _time = DateTimePlus.DateTime2JSTime(DateTime.UtcNow.AddSeconds(-1)) * 1000;

            _list.Add("access_id", base.Key);
            _list.Add("tonce", _time.ToString());

            _result.Add("access_id");
            _result.Add(base.Key);
            _result.Add("tonce");
            _result.Add(_time.ToString());

            foreach (KeyValuePair <string, string> _item in _list)
            {
                _sign += _sign == "" ? "" : "&";
                _sign += $"{_item.Key}={_item.Value}";
            }
            _sign += $"&secret_key={base.Secret}";
            _sign  = MD5.Encode(_sign).ToUpper();

            _http.Headers.Add("authorization", _sign);

            return(_result.ToArray());
        }
Exemplo n.º 27
0
        public override Balances GetBalances(params object[] _symbols)
        {
            string _url       = "/api/v3/account";
            string _timestamp = DateTimePlus.DateTime2JSTime(DateTime.UtcNow.AddSeconds(-1)).ToString() + DateTime.UtcNow.Millisecond.ToString();
            JToken _token     = base.HttpCall(HttpCallMethod.Get, "GET", _url, true, "timestamp", _timestamp);

            if (_token == null)
            {
                return(null);
            }

            Balances _balances = new Balances();

            foreach (JToken _item in _token["balances"])
            {
                _balances[_item["asset"].ToString()] = new BalanceItem()
                {
                    Symbol = _item["asset"].ToString(),
                    Free   = _item["free"].Value <decimal>(),
                    Lock   = _item["locked"].Value <decimal>()
                };
            }
            foreach (string _symbol in _symbols)
            {
                if (!_balances.ContainsKey(_symbol.ToUpper()))
                {
                    _balances[_symbol.ToUpper()] = new BalanceItem()
                    {
                        Symbol = _symbol.ToUpper(),
                        Free   = 0M,
                        Lock   = 0M
                    };
                }
            }
            return(_balances);
        }
Exemplo n.º 28
0
        public override KLine[] GetKLines(string _pair, KLineType _type, params string[] _values)
        {
            string _typeText = "";

            switch (_type)
            {
            case KLineType.M1: _typeText = "M1"; break;

            case KLineType.M5: _typeText = "M5"; break;

            case KLineType.M15: _typeText = "M15"; break;

            case KLineType.M30: _typeText = "M30"; break;

            case KLineType.H1: _typeText = "H1"; break;

            case KLineType.H4: _typeText = "H4"; break;

            case KLineType.H6: _typeText = "H6"; break;

            case KLineType.D1: _typeText = "D1"; break;

            case KLineType.D7: _typeText = "W1"; break;

            case KLineType.MM: _typeText = "WN"; break;

            default: throw new Exception($"KLine type:{_type.ToString()} not supported.");
            }

            string _url = $"/v2/market/candles/{_typeText}/{_pair}";

            if (_values.Length > 0)
            {
                _url += $"?limit={_values[0]}";
            }
            if (_values.Length > 1)
            {
                _url += $"&before={_values[1]}";
            }

            JToken _token = base.HttpCall(HttpCallMethod.Get, "GET", _url);

            if (_token == null)
            {
                return(null);
            }

            IList <KLine> _result = new List <KLine>();
            JArray        _trades = _token.Value <JArray>();

            foreach (JToken _item in _trades)
            {
                KLine _line = new KLine();
                _line.DateTime = DateTimePlus.JSTime2DateTime(_item["id"].Value <long>() / 1000);
                _line.Pair     = _pair;
                _line.Open     = _item["open"].Value <decimal>();
                _line.Close    = _item["close"].Value <decimal>();
                _line.High     = _item["high"].Value <decimal>();
                _line.Low      = _item["low"].Value <decimal>();
                _line.Count    = _item["count"].Value <decimal>();
                _line.Volume   = _item["base_vol"].Value <decimal>();
                _line.Volume2  = _item["quote_vol"].Value <decimal>();

                _result.Add(_line);
            }

            return(_result.ToArray());
        }
Exemplo n.º 29
0
        private void BooksRunner(object _object)
        {
            string _pair = _object.ToString();
            string _url  = $"/api/spot/v3/instruments/{_pair}/book?size=10";

            this.Books[_pair, MarketSide.Ask] = new BookItems(MarketSide.Ask);
            this.Books[_pair, MarketSide.Bid] = new BookItems(MarketSide.Bid);

            string _result = "";

            while (this.Running)
            {
                Thread.Sleep(1000);

                try
                {
                    WebClientPlus _client = new WebClientPlus(10000);
                    _result = _client.DownloadString($"{this.HttpUrl}{_url}");
                    _client.Dispose();

                    JObject _json = JObject.Parse(_result);

                    BookItems _asks = new BookItems(MarketSide.Ask);
                    BookItems _bids = new BookItems(MarketSide.Bid);

                    this.Books.Timestamp = DateTimePlus.DateTime2JSTime(DateTime.UtcNow);

                    foreach (var _item in _json["asks"])
                    {
                        decimal _price  = decimal.Parse(_item[0].Value <string>(), System.Globalization.NumberStyles.Float);
                        decimal _amount = decimal.Parse(_item[1].Value <string>(), System.Globalization.NumberStyles.Float);
                        _asks.Insert(_price.ToString(), Math.Abs(_price), _amount);
                    }
                    foreach (var _item in _json["bids"])
                    {
                        decimal _price  = decimal.Parse(_item[0].Value <string>(), System.Globalization.NumberStyles.Float);
                        decimal _amount = decimal.Parse(_item[1].Value <string>(), System.Globalization.NumberStyles.Float);
                        _bids.Insert(_price.ToString(), Math.Abs(_price), _amount);
                    }

                    BookItems _asksLimit = new BookItems(MarketSide.Ask);
                    BookItems _bidsLimit = new BookItems(MarketSide.Bid);
                    foreach (var _item in _asks.OrderBy(b => b.Value.Price).Take(10))
                    {
                        decimal _price  = _item.Value.Price;
                        decimal _amount = _item.Value.Amount;
                        _asksLimit.Insert(_price.ToString(), Math.Abs(_price), _amount);
                    }
                    foreach (var _item in _bids.OrderByDescending(b => b.Value.Price).Take(10))
                    {
                        decimal _price  = _item.Value.Price;
                        decimal _amount = _item.Value.Amount;
                        _bidsLimit.Insert(_price.ToString(), Math.Abs(_price), _amount);
                    }

                    this.Books[_pair, MarketSide.Ask] = _asksLimit;
                    this.Books[_pair, MarketSide.Bid] = _bidsLimit;
                }
                catch (Exception _ex)
                {
                    this.OnLog($"GetBooks Error:{_result}");
                    this.OnLog($"GetBooks Error:{_ex.ToString()}");
                }
            }
        }
Exemplo n.º 30
0
        private void BooksRunner(object _object)
        {
            string _pair = _object.ToString();
            string _url  = $"/v1.1/public/getorderbook?market={_pair}&type=both";

            this.Books[_pair, MarketSide.Ask] = new BookItems(MarketSide.Ask);
            this.Books[_pair, MarketSide.Bid] = new BookItems(MarketSide.Bid);

            string _result = "";

            while (this.Running)
            {
                Thread.Sleep(1000);

                try
                {
                    WebClientPlus _client = new WebClientPlus(5000);
                    _result = _client.DownloadString($"{this.HttpUrl}{_url}");
                    _client.Dispose();

                    JObject _json = JObject.Parse(_result);

                    BookItems _asks = new BookItems(MarketSide.Ask);
                    BookItems _bids = new BookItems(MarketSide.Bid);

                    this.Books.Timestamp = DateTimePlus.DateTime2JSTime(DateTime.UtcNow);

                    foreach (var _item in _json["result"]["sell"])
                    {
                        decimal _price  = _item["Rate"].Value <decimal>();
                        decimal _amount = _item["Quantity"].Value <decimal>();
                        _asks.Insert(_price.ToString(), Math.Abs(_price), _amount);
                    }
                    foreach (var _item in _json["result"]["buy"])
                    {
                        decimal _price  = _item["Rate"].Value <decimal>();
                        decimal _amount = _item["Quantity"].Value <decimal>();
                        _bids.Insert(_price.ToString(), Math.Abs(_price), _amount);
                    }

                    BookItems _asksLimit = new BookItems(MarketSide.Ask);
                    BookItems _bidsLimit = new BookItems(MarketSide.Bid);
                    foreach (var _item in _asks.OrderBy(b => b.Value.Price).Take(10))
                    {
                        decimal _price  = _item.Value.Price;
                        decimal _amount = _item.Value.Amount;
                        _asksLimit.Insert(_price.ToString(), Math.Abs(_price), _amount);
                    }
                    foreach (var _item in _bids.OrderByDescending(b => b.Value.Price).Take(10))
                    {
                        decimal _price  = _item.Value.Price;
                        decimal _amount = _item.Value.Amount;
                        _bidsLimit.Insert(_price.ToString(), Math.Abs(_price), _amount);
                    }

                    this.Books[_pair, MarketSide.Ask] = _asksLimit;
                    this.Books[_pair, MarketSide.Bid] = _bidsLimit;
                }
                catch (Exception _ex)
                {
                    this.OnLog($"GetBooks Error:{_result}");
                    this.OnLog($"GetBooks Error:{_ex.ToString()}");
                }
            }
        }