public string GetHyperTradeURI(ExchangeMarket symbol, int minutes) { string urlSymbol = $"{symbol.BaseCurrency}-{symbol.QuoteCurrency}"; string exchange = _settings.Exchange.ToLowerInvariant(); return($"hypertrader://{exchange}/{urlSymbol}/{minutes}"); }
protected override async Task <IEnumerable <ExchangeMarket> > OnGetSymbolsMetadataAsync() { // { // "status": 0, // "data": [ // { // "name": "btcusdt", // "base_currency": "btc", // "quote_currency": "usdt", // "price_decimal": 2, // "amount_decimal": 4 // }, // { // "name": "ethusdt", // "base_currency": "eth", // "quote_currency": "usdt", // "price_decimal": 2, // "amount_decimal": 4 // } // ] // } if (ReadCache("GetSymbolsMetadata", out List <ExchangeMarket> markets)) { return(markets); } markets = new List <ExchangeMarket>(); JToken allSymbols = await MakeJsonRequestAsync <JToken>("public/symbols", BaseUrl, null); foreach (var symbol in allSymbols) { var marketCurrency = symbol["base_currency"].ToStringLowerInvariant(); var baseCurrency = symbol["quote_currency"].ToStringLowerInvariant(); var price_precision = symbol["price_decimal"].ConvertInvariant <double>(); var priceStepSize = Math.Pow(10, -price_precision); var amount_precision = symbol["amount_decimal"].ConvertInvariant <double>(); var quantityStepSize = Math.Pow(10, -amount_precision); var market = new ExchangeMarket() { MarketCurrency = marketCurrency, BaseCurrency = baseCurrency, MarketName = marketCurrency + baseCurrency, IsActive = true, }; market.PriceStepSize = priceStepSize.ConvertInvariant <decimal>(); market.QuantityStepSize = quantityStepSize.ConvertInvariant <decimal>(); market.MinPrice = market.PriceStepSize.Value; market.MinTradeSize = market.QuantityStepSize.Value; markets.Add(market); } WriteCache("GetSymbolsMetadata", TimeSpan.FromMinutes(60.0), markets); return(markets); }
protected internal override async Task <IEnumerable <ExchangeMarket> > OnGetMarketSymbolsMetadataAsync() { /* V3 spot sample * [ * { * "base_currency":"BTC", * "instrument_id":"BTC-USDT", * "min_size":"0.001", * "quote_currency":"USDT", * "size_increment":"0.00000001", * "tick_size":"0.1" * }, * { * "base_currency":"OKB", * "instrument_id":"OKB-USDT", * "min_size":"1", * "quote_currency":"USDT", * "size_increment":"0.0001", * "tick_size":"0.0001" * } * ] */ List <ExchangeMarket> markets = new List <ExchangeMarket>(); parseMarketSymbolTokens(await MakeJsonRequestAsync <JToken>( "/spot/v3/instruments", BaseUrlV3)); if (IsFuturesAndSwapEnabled) { parseMarketSymbolTokens(await MakeJsonRequestAsync <JToken>( "/futures/v3/instruments", BaseUrlV3)); parseMarketSymbolTokens(await MakeJsonRequestAsync <JToken>( "/swap/v3/instruments", BaseUrlV3)); } void parseMarketSymbolTokens(JToken allMarketSymbolTokens) { foreach (JToken marketSymbolToken in allMarketSymbolTokens) { var marketName = marketSymbolToken["instrument_id"].ToStringInvariant(); var market = new ExchangeMarket { MarketSymbol = marketName, IsActive = true, QuoteCurrency = marketSymbolToken["quote_currency"].ToStringInvariant(), BaseCurrency = marketSymbolToken["base_currency"].ToStringInvariant(), PriceStepSize = marketSymbolToken["tick_size"].ConvertInvariant <decimal>(), MinPrice = marketSymbolToken["tick_size"].ConvertInvariant <decimal>(), // assuming that this is also the min price since it isn't provided explicitly by the exchange MinTradeSize = marketSymbolToken["min_size"].ConvertInvariant <decimal>(), QuantityStepSize = marketSymbolToken["size_increment"].ConvertInvariant <decimal>(), }; markets.Add(market); } } return(markets); }
protected override async Task <IEnumerable <ExchangeMarket> > OnGetSymbolsMetadataAsync() { var exchangeOkexApi = this; if (exchangeOkexApi.ReadCache("GetSymbolsMetadata", out List <ExchangeMarket> markets)) { return(markets); } markets = new List <ExchangeMarket>(); foreach (var jtoken in await exchangeOkexApi.MakeJsonRequestAsync <JToken>( "/markets/products", exchangeOkexApi.BaseUrlV2, null, null)) { var stringLowerInvariant = jtoken["symbol"].ToStringLowerInvariant(); var strArray = stringLowerInvariant.Split('_', StringSplitOptions.None); var exchangeMarket = new ExchangeMarket { MarketName = stringLowerInvariant, IsActive = jtoken["online"].ConvertInvariant(false), BaseCurrency = strArray[1], MarketCurrency = strArray[0] }; var num1 = Math.Pow(10.0, -jtoken["quotePrecision"].ConvertInvariant(0.0)); exchangeMarket.QuantityStepSize = num1.ConvertInvariant(new decimal()); var num2 = Math.Pow(10.0, jtoken["maxSizeDigit"].ConvertInvariant(0.0)); exchangeMarket.MaxTradeSize = num2.ConvertInvariant(new decimal()) - new decimal(10, 0, 0, false, 1); exchangeMarket.MinTradeSize = jtoken["minTradeSize"].ConvertInvariant(new decimal()); exchangeMarket.PriceStepSize = jtoken["quoteIncrement"].ConvertInvariant(new decimal()); exchangeMarket.MinPrice = exchangeMarket.PriceStepSize.Value; var num3 = Math.Pow(10.0, jtoken["maxPriceDigit"].ConvertInvariant(0.0)); exchangeMarket.MaxPrice = num3.ConvertInvariant(new decimal()) - new decimal(10, 0, 0, false, 1); markets.Add(exchangeMarket); } exchangeOkexApi.WriteCache("GetSymbolsMetadata", TimeSpan.FromMinutes(60.0), markets); return(markets); }
protected internal override async Task<IEnumerable<ExchangeMarket>> OnGetMarketSymbolsMetadataAsync() { /* * { "symbol": "ETHBTC", "status": "TRADING", "baseAsset": "ETH", "baseAssetPrecision": 8, "quoteAsset": "BTC", "quotePrecision": 8, "orderTypes": [ "LIMIT", "MARKET", "STOP_LOSS", "STOP_LOSS_LIMIT", "TAKE_PROFIT", "TAKE_PROFIT_LIMIT", "LIMIT_MAKER" ], "icebergAllowed": false, "filters": [ { "filterType": "PRICE_FILTER", "minPrice": "0.00000100", "maxPrice": "100000.00000000", "tickSize": "0.00000100" }, { "filterType": "LOT_SIZE", "minQty": "0.00100000", "maxQty": "100000.00000000", "stepSize": "0.00100000" }, { "filterType": "MIN_NOTIONAL", "minNotional": "0.00100000" } ] }, */ var markets = new List<ExchangeMarket>(); JToken obj = await MakeJsonRequestAsync<JToken>("/exchangeInfo"); JToken allSymbols = obj["symbols"]; foreach (JToken marketSymbolToken in allSymbols) { var market = new ExchangeMarket { MarketSymbol = marketSymbolToken["symbol"].ToStringUpperInvariant(), IsActive = ParseMarketStatus(marketSymbolToken["status"].ToStringUpperInvariant()), QuoteCurrency = marketSymbolToken["quoteAsset"].ToStringUpperInvariant(), BaseCurrency = marketSymbolToken["baseAsset"].ToStringUpperInvariant() }; // "LOT_SIZE" JToken filters = marketSymbolToken["filters"]; JToken? lotSizeFilter = filters?.FirstOrDefault(x => string.Equals(x["filterType"].ToStringUpperInvariant(), "LOT_SIZE")); if (lotSizeFilter != null) { market.MaxTradeSize = lotSizeFilter["maxQty"].ConvertInvariant<decimal>(); market.MinTradeSize = lotSizeFilter["minQty"].ConvertInvariant<decimal>(); market.QuantityStepSize = lotSizeFilter["stepSize"].ConvertInvariant<decimal>(); } // PRICE_FILTER JToken? priceFilter = filters?.FirstOrDefault(x => string.Equals(x["filterType"].ToStringUpperInvariant(), "PRICE_FILTER")); if (priceFilter != null) { market.MaxPrice = priceFilter["maxPrice"].ConvertInvariant<decimal>(); market.MinPrice = priceFilter["minPrice"].ConvertInvariant<decimal>(); market.PriceStepSize = priceFilter["tickSize"].ConvertInvariant<decimal>(); } // MIN_NOTIONAL JToken? minNotionalFilter = filters?.FirstOrDefault(x => string.Equals(x["filterType"].ToStringUpperInvariant(), "MIN_NOTIONAL")); if (minNotionalFilter != null) { market.MinTradeSizeInQuoteCurrency = minNotionalFilter["minNotional"].ConvertInvariant<decimal>(); } markets.Add(market); } return markets; }
public virtual decimal ClampOrderPrice(string pair, decimal price) { ExchangeMarket market = Api.GetExchangeMarketFromCache(pair); return(market == null ? price : CryptoUtility.ClampDecimal(market.MinPrice, market.MaxPrice, market.PriceStepSize, price)); }
public virtual decimal ClampOrderAmount(string pair, decimal amount) { ExchangeMarket market = Api.GetExchangeMarketFromCache(pair); return(market == null ? amount : CryptoUtility.ClampDecimal(market.MinTradeSize, market.MaxTradeSize, market.QuantityStepSize, amount)); }
public FixExchange[] GetFixExchangeInfo() { List <FixExchange> exchanges = new List <FixExchange>(); string query = "select * from exchanges"; DBManager db = new DBManager(DataProvider.SqlServer, SystemConfigurations.GetConnectionString("BasicDataDBConnectionString")); db.Open(); DataSet ds = db.ExecuteDataSet(System.Data.CommandType.Text, query); //string today = DateTime.Today.DayOfWeek.ToString(); foreach (DataRow rowExchange in ds.Tables[0].Rows) { FixExchange exchange = new FixExchange(); exchange.ExchangeID = rowExchange["ExchangeID"].ToString(); exchange.NameAr = rowExchange["NameAr"].ToString(); exchange.NameEn = rowExchange["NameEn"].ToString(); List <ExchangeMarket> markets = new List <ExchangeMarket>(); string queryMarkets = string.Format("select * from Exchanges_Markets where exchangeid = '{0}'", exchange.ExchangeID); DataTable dtMarkets = db.ExecuteDataSet(System.Data.CommandType.Text, queryMarkets).Tables[0]; foreach (DataRow rowMarket in dtMarkets.Rows) { ExchangeMarket market = new ExchangeMarket(); market.ExchangeID = exchange.ExchangeID; market.MarketID = rowMarket["MarketID"].ToString(); market.NameAr = rowMarket["NameAr"].ToString(); market.NameEn = rowMarket["NameEn"].ToString(); string queryGroups = string.Format("select * from Markets_Groups where exchangeid = '{0}' and marketid = '{1}';", exchange.ExchangeID, market.MarketID); DataTable dtGroups = db.ExecuteDataSet(System.Data.CommandType.Text, queryGroups).Tables[0]; List <MarketGroup> groups = new List <MarketGroup>(); foreach (DataRow rowGroup in dtGroups.Rows) { MarketGroup group = new MarketGroup(); group.ExchangeID = exchange.ExchangeID; group.MarketID = market.MarketID; group.GroupID = rowGroup["GroupID"].ToString(); List <GroupSession> sessions = new List <GroupSession>(); string querySessions = string.Format("select * from Markets_Groups_Sessions where exchangeid = '{0}' and marketid = '{1}' and groupid = '{2}';", exchange.ExchangeID, market.MarketID, group.GroupID); DataTable dtSessions = db.ExecuteDataSet(System.Data.CommandType.Text, querySessions).Tables[0]; foreach (DataRow rowSessions in dtSessions.Rows) { GroupSession session = new GroupSession(); session.ExchangeID = exchange.ExchangeID; session.GroupID = group.GroupID; session.MarketID = market.MarketID; session.SessionStartTime = (DateTime)rowSessions["SessionStartTime"]; session.SessionEndTime = (DateTime)rowSessions["SessionEndTime"]; session.WorkingDays = rowSessions["WorkingDays"].ToString(); sessions.Add(session); } group.Sessions = sessions.ToArray(); groups.Add(group); } market.Groups = groups.ToArray(); markets.Add(market); } exchange.Markets = markets.ToArray(); exchanges.Add(exchange); } db.Close(); db = null; return(exchanges.ToArray()); }