Ejemplo n.º 1
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <Markets> FetchMarkets(Dictionary <string, object> args = null)
        {
            var _result = new Markets(true);

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value_jp = await publicClient.CallApiGet1Async("/v1/getmarkets", _params);

                var _json_result_jp = publicClient.GetResponseMessage(_json_value_jp.Response);
                if (_json_result_jp.success == true)
                {
                    var _json_data_jp = publicClient.DeserializeObject <List <JObject> >(_json_value_jp.Content);

#if DEBUG
                    if (XApiClient.TestXUnitMode == XUnitMode.UseExchangeServer)
                    {
#endif
                    publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
                    var _json_value_us = await publicClient.CallApiGet1Async("/v1/getmarkets/usa", _params);

                    var _json_result_us = publicClient.GetResponseMessage(_json_value_us.Response);
                    if (_json_result_us.success == true)
                    {
                        var _json_data_us = publicClient.DeserializeObject <List <JObject> >(_json_value_us.Content);
                        _json_data_jp = _json_data_jp.Concat(_json_data_us).ToList();
                    }

                    publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
                    var _json_value_eu = await publicClient.CallApiGet1Async("/v1/getmarkets/eu", _params);

                    var _json_result_eu = publicClient.GetResponseMessage(_json_value_eu.Response);
                    if (_json_result_eu.success == true)
                    {
                        var _json_data_eu = publicClient.DeserializeObject <List <JObject> >(_json_value_eu.Content);
                        _json_data_jp = _json_data_jp.Concat(_json_data_eu).ToList();
                    }
#if DEBUG
                }
#endif
                    foreach (var _market in _json_data_jp)
                    {
                        var _symbol = _market["product_code"].ToString();

                        var _currencies = _symbol.Split('_');
                        if (_currencies.Length != 2)
                        {
                            continue;
                        }

                        var _base_id  = _currencies[0];
                        var _quote_id = _currencies[1];

                        var _base_name  = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);

                        var _market_id = _base_name + "/" + _quote_name;

                        var _precision = new MarketPrecision
                        {
                            amount   = 8,
                            quantity = 8,
                            price    = 8
                        };

                        var _limits = new MarketLimits
                        {
                            amount = new MarketMinMax
                            {
                                max = decimal.MaxValue,
                                min = 0
                            },
                            price = new MarketMinMax
                            {
                                max = decimal.MaxValue,
                                min = 0
                            },
                            quantity = new MarketMinMax
                            {
                                max = decimal.MaxValue,
                                min = 0
                            }
                        };

                        var _entry = new MarketItem
                        {
                            marketId = _market_id,

                            symbol    = _symbol,
                            baseId    = _base_id,
                            quoteId   = _quote_id,
                            baseName  = _base_name,
                            quoteName = _quote_name,

                            lot    = 0,
                            active = true,

                            precision = _precision,
                            limits    = _limits
                        };

                        _result.result.Add(_entry.marketId, _entry);
                    }
                }
                else
                {
                    _result.SetResult(_json_result_jp);
                }
            }

            return(_result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <Markets> FetchMarkets(Dictionary <string, object> args = null)
        {
            var _result = new Markets();

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async("/exchangeInfo", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _exchange_info = publicClient.DeserializeObject <JObject>(_json_value.Content);

                    var _symbols = _exchange_info["symbols"].ToObject <JArray>();
                    foreach (var _market in _symbols)
                    {
                        var _symbol = _market["symbol"].ToString();
                        if (_symbol == "123456")     // "123456" is a "test symbol/market"
                        {
                            continue;
                        }

                        var _base_id    = _market["baseAsset"].ToString();
                        var _quote_id   = _market["quoteAsset"].ToString();
                        var _base_name  = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);
                        var _market_id  = _base_name + "/" + _quote_name;

                        var _precision = new MarketPrecision
                        {
                            quantity = _market["baseAssetPrecision"].Value <int>(),
                            price    = _market["quotePrecision"].Value <int>(),
                            amount   = _market["quotePrecision"].Value <int>()
                        };

                        var _lot    = (decimal)(-1.0 * Math.Log10(_precision.quantity));
                        var _active = _market["status"].ToString().ToUpper() == "TRADING";

                        var _limits = new MarketLimits
                        {
                            quantity = new MarketMinMax
                            {
                                min = (decimal)Math.Pow(10, -_precision.quantity),
                                max = decimal.MaxValue
                            },
                            price = new MarketMinMax
                            {
                                min = (decimal)Math.Pow(10, -_precision.price),
                                max = decimal.MaxValue
                            },
                            amount = new MarketMinMax
                            {
                                min = _lot,
                                max = decimal.MaxValue
                            }
                        };

                        var _entry = new MarketItem
                        {
                            marketId = _market_id,

                            symbol    = _symbol,
                            baseId    = _base_id,
                            quoteId   = _quote_id,
                            baseName  = _base_name,
                            quoteName = _quote_name,

                            lot    = _lot,
                            active = _active,

                            precision = _precision,
                            limits    = _limits
                        };

                        var _filters = _market["filters"];
                        {
                            var _price_filter = _filters.SingleOrDefault(f => f["filterType"].ToString() == "PRICE_FILTER");
                            if (_price_filter != null)
                            {
                                _entry.precision.price  = Numerical.PrecisionFromString(_price_filter["tickSize"].ToString());
                                _entry.limits.price.min = _price_filter["minPrice"].Value <decimal>();
                                _entry.limits.price.max = _price_filter["maxPrice"].Value <decimal>();
                            }

                            var _lot_size = _filters.SingleOrDefault(f => f["filterType"].ToString() == "LOT_SIZE");
                            if (_lot_size != null)
                            {
                                _entry.precision.quantity  = Numerical.PrecisionFromString(_lot_size["stepSize"].ToString());
                                _entry.limits.quantity.min = _lot_size["minQty"].Value <decimal>();
                                _entry.limits.quantity.max = _lot_size["maxQty"].Value <decimal>();
                            }

                            var _min_notional = _filters.SingleOrDefault(f => f["filterType"].ToString() == "MIN_NOTIONAL");
                            if (_min_notional != null)
                            {
                                _entry.limits.amount.min = _min_notional["minNotional"].Value <decimal>();
                            }
                        }

                        _result.result.Add(_entry.marketId, _entry);
                    }
                }

                _result.SetResult(_json_result);
            }

            return(_result);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <Markets> FetchMarkets(Dictionary <string, object> args = null)
        {
            var _result = new Markets();

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async("/currency_limits", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _json_data = publicClient.DeserializeObject <JObject>(_json_value.Content);

                    var _pairs = _json_data["data"]["pairs"];
                    foreach (var _market in _pairs)
                    {
                        var _base_id    = _market["symbol1"].ToString();
                        var _quote_id   = _market["symbol2"].ToString();
                        var _symbol     = _base_id + "/" + _quote_id;
                        var _base_name  = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);
                        var _market_id  = _base_name + "/" + _quote_name;

                        var _lot    = _market["minLotSize"].Value <decimal>();
                        var _maxLot = (_market["maxLotSize"].HasValues) ? _market["maxLotSize"].Value <decimal>() : decimal.MaxValue;

                        var _precision = new MarketPrecision
                        {
                            quantity = (int)(-1 * Math.Log10((double)_lot)),
                            price    = Numerical.PrecisionFromString(_market["minPrice"].Value <string>()),
                            amount   = Numerical.PrecisionFromString(_market["minPrice"].Value <string>())
                        };

                        var _limits = new MarketLimits
                        {
                            quantity = new MarketMinMax
                            {
                                min = _market["minLotSize"].Value <decimal>(),
                                max = _maxLot
                            },
                            price = new MarketMinMax
                            {
                                min = _market["minPrice"].Value <decimal>(),
                                max = _market["maxPrice"].Value <decimal>()
                            },
                            amount = new MarketMinMax
                            {
                                min = _market["minLotSizeS2"].Value <decimal>(),
                                max = decimal.MaxValue
                            }
                        };

                        var _entry = new MarketItem
                        {
                            marketId = _market_id,

                            symbol    = _symbol,
                            baseId    = _base_id,
                            quoteId   = _quote_id,
                            baseName  = _base_name,
                            quoteName = _quote_name,

                            lot    = _lot,
                            active = true,

                            precision = _precision,
                            limits    = _limits
                        };

                        _result.result.Add(_entry.marketId, _entry);
                    }
                }

                _result.SetResult(_json_result);
            }

            return(_result);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <Markets> FetchMarkets(Dictionary <string, object> args = null)
        {
            var _result = new Markets();

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async("/v1/symbols_details", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _symbols = publicClient.DeserializeObject <JArray>(_json_value.Content);

                    foreach (var _market in _symbols)
                    {
                        var _symbol = _market["pair"].ToString();

                        var _base_id  = _symbol.Substring(0, 3);
                        var _quote_id = _symbol.Substring(3);

                        var _base_name  = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);

                        var _market_id = _base_name + "/" + _quote_name;

                        var _precision = new MarketPrecision
                        {
                            quantity = _market["price_precision"].Value <int>(),
                            price    = _market["price_precision"].Value <int>(),
                            amount   = _market["price_precision"].Value <int>()
                        };

                        var _lot = (decimal)Math.Pow(10.0, -_precision.price);

                        var _limits = new MarketLimits
                        {
                            quantity = new MarketMinMax
                            {
                                min = _market["minimum_order_size"].Value <decimal>(),
                                max = _market["maximum_order_size"].Value <decimal>()
                            },
                            price = new MarketMinMax
                            {
                                min = (decimal)Math.Pow(10.0, -_precision.price),
                                max = (decimal)Math.Pow(10.0, _precision.price)
                            }
                        };

                        _limits.amount = new MarketMinMax
                        {
                            min = _limits.quantity.min * _limits.price.min,
                            max = decimal.MaxValue
                        };

                        var _entry = new MarketItem
                        {
                            marketId = _market_id,

                            symbol    = _symbol,
                            baseId    = _base_id,
                            quoteId   = _quote_id,
                            baseName  = _base_name,
                            quoteName = _quote_name,

                            lot    = _lot,
                            active = true,

                            precision = _precision,
                            limits    = _limits
                        };

                        _result.result.Add(_entry.marketId, _entry);
                    }
                }

                _result.SetResult(_json_result);
            }

            return(_result);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <Markets> FetchMarketsAsync(Dictionary <string, object> args = null)
        {
            var _result = new Markets();

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = new Dictionary <string, object>();
                {
                    _params.Add("command", "returnTicker");

                    publicClient.MergeParamsAndArgs(_params, args);
                }

                var _json_value = await publicClient.CallApiGet1Async("", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _tickers = publicClient.DeserializeObject <JObject>(_json_value.Content);
                    foreach (var _market in _tickers)
                    {
                        var _symbol     = _market.Key;
                        var _base_id    = _symbol.Split('_')[1];
                        var _quote_id   = _symbol.Split('_')[0];
                        var _base_name  = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);
                        var _market_id  = _base_name + "/" + _quote_name;

                        var _precision = new MarketPrecision
                        {
                            quantity = 8,
                            price    = 8,
                            amount   = 8
                        };

                        var _lot    = (decimal)Math.Pow(10.0, -(double)_precision.price);
                        var _active = true;

                        var _limits = new MarketLimits
                        {
                            quantity = new MarketMinMax
                            {
                                min = 0.00000001m,
                                max = 1000000000m
                            },
                            price = new MarketMinMax
                            {
                                min = 0.00000001m,
                                max = 1000000000m
                            },
                            amount = new MarketMinMax
                            {
                                min = 0.00000000m,
                                max = 1000000000m
                            }
                        };

                        _result.result.Add(_market_id, new MarketItem
                        {
                            marketId = _market_id,

                            symbol    = _symbol,
                            baseId    = _base_id,
                            quoteId   = _quote_id,
                            baseName  = _base_name,
                            quoteName = _quote_name,

                            lot    = _lot,
                            active = _active,

                            precision = _precision,
                            limits    = _limits
                        });
                    }
                }

                _result.SetResult(_json_result);
            }

            return(_result);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <Markets> FetchMarkets(Dictionary <string, object> args = null)
        {
            var _result = new Markets();

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async("/v2/trading-pairs-info/", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _pairs_info = publicClient.DeserializeObject <List <JObject> >(_json_value.Content);
                    foreach (var _market in _pairs_info)
                    {
                        var _symbol = _market["url_symbol"].ToString();

                        var _market_name = _market["name"].ToString().Split('/');
                        var _base_id     = _market_name[0].ToLower();
                        var _quote_id    = _market_name[1].ToLower();

                        var _base_name  = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);

                        var _market_id = _base_name + "/" + _quote_name;

                        var _precision = new MarketPrecision
                        {
                            quantity = _market["base_decimals"].Value <int>(),
                            price    = _market["counter_decimals"].Value <int>(),
                            amount   = _market["counter_decimals"].Value <int>()
                        };

                        var _lot    = (decimal)Math.Pow(10, -_precision.quantity);
                        var _active = _market["trading"].ToString().ToLower() == "enabled";

                        var _limits = new MarketLimits
                        {
                            quantity = new MarketMinMax
                            {
                                min = _lot,
                                max = decimal.MaxValue
                            },
                            price = new MarketMinMax
                            {
                                min = (decimal)Math.Pow(10, -_precision.price),
                                max = decimal.MaxValue
                            },
                            amount = new MarketMinMax
                            {
                                min = Convert.ToDecimal(_market["minimum_order"].Value <string>().Split(' ')[0]),
                                max = decimal.MaxValue
                            }
                        };

                        var _entry = new MarketItem
                        {
                            marketId = _market_id,

                            symbol = _symbol,

                            baseId  = _base_id,
                            quoteId = _quote_id,

                            baseName  = _base_name,
                            quoteName = _quote_name,

                            lot    = _lot,
                            active = _active,

                            precision = _precision,
                            limits    = _limits
                        };

                        _result.result.Add(_entry.marketId, _entry);
                    }
                }

                _result.SetResult(_json_result);
            }

            return(_result);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <Markets> FetchMarketsAsync(Dictionary <string, object> args = null)
        {
            var _result = new Markets();

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async("/products", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _products = publicClient.DeserializeObject <List <JObject> >(_json_value.Content);
                    foreach (var _market in _products)
                    {
                        var _symbol = _market["id"].ToString();

                        var _base_id  = _market["base_currency"].ToString();
                        var _quote_id = _market["quote_currency"].ToString();

                        var _base_name  = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);

                        var _market_id = _base_name + "/" + _quote_name;

                        var _precision = new MarketPrecision
                        {
                            quantity = 8,
                            price    = Numerical.PrecisionFromString(_market["quote_increment"].Value <string>()),
                            amount   = 0
                        };

                        var _lot    = (decimal)Math.Pow(10, -(double)_precision.quantity);
                        var _active = _market["status"].ToString() == "online";

                        var _limits = new MarketLimits
                        {
                            quantity = new MarketMinMax
                            {
                                min = _market["base_min_size"].Value <decimal>(),
                                max = _market["base_max_size"].Value <decimal>()
                            },
                            price = new MarketMinMax
                            {
                                min = _market["quote_increment"].Value <decimal>(),
                                max = decimal.MaxValue
                            },
                            amount = new MarketMinMax
                            {
                                min = _market["min_market_funds"].Value <decimal>(),
                                max = _market["max_market_funds"].Value <decimal>()
                            }
                        };

                        var _entry = new MarketItem
                        {
                            marketId = _market_id,

                            symbol    = _symbol,
                            baseId    = _base_id,
                            quoteId   = _quote_id,
                            baseName  = _base_name,
                            quoteName = _quote_name,

                            lot    = _lot,
                            active = _active,

                            precision = _precision,
                            limits    = _limits
                        };

                        _result.result.Add(_entry.marketId, _entry);
                    }
                }

                _result.SetResult(_json_result);
            }

            return(_result);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <Markets> FetchMarkets(Dictionary <string, object> args = null)
        {
            var _result = new Markets();

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async("/constants", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _json_data = publicClient.DeserializeObject <JObject>(_json_value.Content);

                    var _contants = _json_data["exchange"].ToObject <JObject>();
                    foreach (var _market in _contants)
                    {
                        var _symbol = _market.Key;

                        var _base_id  = _symbol.Split('_')[0];
                        var _quote_id = _symbol.Split('_')[1];

                        var _base_name  = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);

                        var _market_id = _base_name + "/" + _quote_name;

                        var _precision = new MarketPrecision
                        {
                            quantity = 8,
                            price    = 0,
                            amount   = 0
                        };

                        var _lot = _market.Value["tick_size"].Value <decimal>();

                        var _limits = new MarketLimits
                        {
                            quantity = new MarketMinMax
                            {
                                min = _market.Value["order_min_size"].Value <decimal>(),
                                max = _market.Value["order_max_size"].Value <decimal>()
                            },
                            price = new MarketMinMax
                            {
                                min = _market.Value["min_price"].Value <decimal>(),
                                max = _market.Value["max_price"].Value <decimal>()
                            }
                        };

                        _limits.amount = new MarketMinMax
                        {
                            min = _limits.quantity.min * _limits.price.min,
                            max = _limits.quantity.max * _limits.price.max
                        };

                        var _entry = new MarketItem
                        {
                            marketId = _market_id,

                            symbol    = _symbol,
                            baseId    = _base_id,
                            quoteId   = _quote_id,
                            baseName  = _base_name,
                            quoteName = _quote_name,

                            lot    = _lot,
                            active = true,

                            precision = _precision,
                            limits    = _limits
                        };

                        _result.result.Add(_entry.marketId, _entry);
                    }
                }

                _result.SetResult(_json_result);
            }

            return(_result);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task<Markets> FetchMarkets(Dictionary<string, object> args = null)
        {
            var _result = new Markets();

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async("/trading-pairs", _params);
#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _pairs = publicClient.DeserializeObject<List<JObject>>(_json_value.Content);
                    foreach (var _market in _pairs)
                    {
                        var _symbol = _market["name"].ToString();
                        var _base_id = _market["baseAsset"].ToString();
                        var _quote_id = _market["quoteAsset"].ToString();
                        var _base_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);
                        var _market_id = _base_name + "/" + _quote_name;

                        var _precision = new MarketPrecision
                        {
                            quantity = 4,
                            price = 0,
                            amount = 0
                        };

                        var _lot = 0.1m;
                        var _active = true;

                        var _limits = new MarketLimits
                        {
                            quantity = new MarketMinMax
                            {
                                min = (decimal)Math.Pow(10, -_precision.quantity),
                                max = decimal.MaxValue
                            },
                            price = new MarketMinMax
                            {
                                min = (decimal)Math.Pow(10, -_precision.price),
                                max = decimal.MaxValue
                            },
                            amount = new MarketMinMax
                            {
                                min = _lot,
                                max = decimal.MaxValue
                            }
                        };

                        var _entry = new MarketItem
                        {
                            marketId = _market_id,

                            symbol = _symbol,
                            baseId = _base_id,
                            quoteId = _quote_id,
                            baseName = _base_name,
                            quoteName = _quote_name,

                            lot = _lot,
                            active = _active,

                            precision = _precision,
                            limit = _limits
                        };

                        _result.result.Add(_entry.marketId, _entry);
                    }
                }

                _result.SetResult(_json_result);
            }

            return _result;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <Markets> FetchMarketsAsync(Dictionary <string, object> args = null)
        {
            var _result = new Markets();

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async("/products", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _products = publicClient.DeserializeObject <List <JObject> >(_json_value.Content);
                    foreach (var _market in _products)
                    {
                        var _symbol = _market["id"].ToString();

                        var _base_id  = _market["base_currency"].ToString();
                        var _quote_id = _market["quoted_currency"].ToString();

                        var _base_name  = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);

                        var _market_id = _base_name + "/" + _quote_name;

                        var _makerFee = _market["maker_fee"].Value <decimal>();
                        var _takerFee = _market["taker_fee"].Value <decimal>();

                        var _minQuantity = 0m;
                        if (_base_id == "BTC")
                        {
                            _minQuantity = 0.001m;
                        }
                        else if (_base_id == "ETH")
                        {
                            _minQuantity = 0.01m;
                        }

                        var _minPrice = 0m;
                        if (_quote_id == "BTC")
                        {
                            _minPrice = 0.00000001m;
                        }
                        else if (_quote_id == "ETH" || _quote_id == "USD" || _quote_id == "JPY")
                        {
                            _minPrice = 0.00001m;
                        }

                        var _minAmount = 0m;
                        if (_minPrice != 0 && _minQuantity != 0)
                        {
                            _minAmount = _minQuantity * _minPrice;
                        }

                        var _precision_quantity = (_minQuantity != 0) ? -1 * (int)Math.Log10((double)_minQuantity) : 0;
                        var _precision_price    = (_minPrice != 0) ? -1 * (int)Math.Log10((double)_minPrice) : 0;

                        var _precision = new MarketPrecision
                        {
                            quantity = _precision_quantity,
                            price    = _precision_price,
                            amount   = _precision_price
                        };

                        var _lot    = (decimal)Math.Pow(10, -_precision_price);
                        var _active = _market["disabled"].Value <bool>() == false;

                        var _limits = new MarketLimits
                        {
                            quantity = new MarketMinMax
                            {
                                min = _minQuantity, // minAmount
                                max = decimal.MaxValue
                            },
                            price = new MarketMinMax
                            {
                                min = _minPrice,
                                max = decimal.MaxValue
                            },
                            amount = new MarketMinMax
                            {
                                min = _minAmount,
                                max = decimal.MaxValue
                            }
                        };

                        var _entry = new MarketItem
                        {
                            marketId = _market_id,

                            symbol    = _symbol,
                            baseId    = _base_id,
                            quoteId   = _quote_id,
                            baseName  = _base_name,
                            quoteName = _quote_name,

                            lot    = _lot,
                            active = _active,

                            makerFee = _makerFee,
                            takerFee = _takerFee,

                            precision = _precision,
                            limits    = _limits
                        };

                        _result.result.Add(_entry.marketId, _entry);
                    }
                }

                _result.SetResult(_json_result);
            }

            return(_result);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <Markets> FetchMarkets(Dictionary <string, object> args = null)
        {
            var _result = new Markets();

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async("/ticker/ALL", _params);

#if RAWJSON
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _json_data = publicClient.DeserializeObject <JObject>(_json_value.Content);

                    var _tickers = _json_data["data"].ToObject <JObject>();
                    foreach (var _market in _tickers)
                    {
                        var _symbol = _market.Key;
                        if (_symbol == "date")
                        {
                            continue;
                        }

                        var _base_id    = _symbol.ToLower();
                        var _quote_id   = "krw";
                        var _base_name  = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);
                        var _market_id  = _base_name + "/" + _quote_name;

                        var _precision = new MarketPrecision
                        {
                            quantity = 8,
                            price    = 0,
                            amount   = 0
                        };

                        var _lot = (decimal)Math.Pow(10.0, -_precision.price);

                        var _limits = new MarketLimits
                        {
                            quantity = new MarketMinMax
                            {
                                min = 0,
                                max = decimal.MaxValue
                            },
                            price = new MarketMinMax
                            {
                                min = 0,
                                max = decimal.MaxValue
                            },
                            amount = new MarketMinMax
                            {
                                min = 0,
                                max = decimal.MaxValue
                            }
                        };

                        var _entry = new MarketItem
                        {
                            marketId = _market_id,

                            symbol    = _symbol,
                            baseId    = _base_id,
                            quoteId   = _quote_id,
                            baseName  = _base_name,
                            quoteName = _quote_name,

                            lot    = _lot,
                            active = true,

                            precision = _precision,
                            limits    = _limits
                        };

                        _result.result.Add(_entry.marketId, _entry);
                    }
                }

                _result.SetResult(_json_result);
            }

            return(_result);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <Markets> FetchMarketsAsync(Dictionary <string, object> args = null)
        {
            var _result = new Markets();

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async("/v1/symbols", _params);

#if RAWJSON
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _symbols = publicClient.DeserializeObject <JArray>(_json_value.Content);
                    foreach (var _market in _symbols)
                    {
                        var _symbol = _market.ToString();

                        var _base_id  = _symbol.Substring(0, 3);
                        var _quote_id = _symbol.Substring(3);

                        var _base_name  = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);

                        var _market_id = _base_name + "/" + _quote_name;

                        var _precision = new MarketPrecision
                        {
                            quantity = 8,
                            price    = 8,
                            amount   = 8
                        };

                        var _lot    = (decimal)(-1.0 * Math.Log10((double)_precision.quantity));
                        var _active = true;

                        var _limits = new MarketLimits
                        {
                            quantity = new MarketMinMax
                            {
                                min = (decimal)Math.Pow(10.0, -(double)_precision.quantity),
                                max = decimal.MaxValue
                            },
                            price = new MarketMinMax
                            {
                                min = (decimal)Math.Pow(10.0, -(double)_precision.price),
                                max = decimal.MaxValue
                            },
                            amount = new MarketMinMax
                            {
                                min = _lot,
                                max = decimal.MaxValue
                            }
                        };

                        var _entry = new MarketItem
                        {
                            marketId = _market_id,

                            symbol    = _symbol,
                            baseId    = _base_id,
                            quoteId   = _quote_id,
                            baseName  = _base_name,
                            quoteName = _quote_name,

                            lot    = _lot,
                            active = _active,

                            precision = _precision,
                            limits    = _limits
                        };

                        _result.result.Add(_entry.marketId, _entry);
                    }
                }

                _result.SetResult(_json_result);
            }

            return(_result);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Fetch symbols, market ids and exchanger's information
        /// </summary>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <Markets> FetchMarkets(Dictionary <string, object> args = null)
        {
            var _result = new Markets();

            publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);
            {
                var _params = new Dictionary <string, object>();
                {
                    _params.Add("currency", "all");

                    if (args != null)
                    {
                        foreach (var _a in args)
                        {
                            if (_params.ContainsKey(_a.Key) == true)
                            {
                                _params.Remove(_a.Key);
                            }

                            _params.Add(_a.Key, _a.Value);
                        }
                    }
                }

                var _json_value = await publicClient.CallApiGet1Async("/ticker", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _tickers = publicClient.DeserializeObject <Dictionary <string, JToken> >(_json_value.Content);
                    foreach (var _market in _tickers)
                    {
                        if (_market.Value.GetType() == typeof(JValue))
                        {
                            continue;
                        }

                        var _symbol     = _market.Key;
                        var _base_id    = _market.Key;
                        var _quote_id   = "krw";
                        var _base_name  = publicClient.ExchangeInfo.GetCommonCurrencyName(_base_id);
                        var _quote_name = publicClient.ExchangeInfo.GetCommonCurrencyName(_quote_id);
                        var _market_id  = _base_name + "/" + _quote_name;

                        var _precision = new MarketPrecision
                        {
                            quantity = 4,
                            price    = 0,
                            amount   = 0
                        };

                        var _lot    = 0.1m;
                        var _active = true;

                        var _limits = new MarketLimits
                        {
                            quantity = new MarketMinMax
                            {
                                min = (decimal)Math.Pow(10, -_precision.quantity),
                                max = decimal.MaxValue
                            },
                            price = new MarketMinMax
                            {
                                min = (decimal)Math.Pow(10, -_precision.price),
                                max = decimal.MaxValue
                            },
                            amount = new MarketMinMax
                            {
                                min = _lot,
                                max = decimal.MaxValue
                            }
                        };

                        var _entry = new MarketItem
                        {
                            marketId = _market_id,

                            symbol    = _symbol,
                            baseId    = _base_id,
                            quoteId   = _quote_id,
                            baseName  = _base_name,
                            quoteName = _quote_name,

                            lot    = _lot,
                            active = _active,

                            precision = _precision,
                            limits    = _limits
                        };

                        _result.result.Add(_entry.marketId, _entry);
                    }
                }

                _result.SetResult(_json_result);
            }

            return(_result);
        }