コード例 #1
0
        public string GetHyperTradeURI(ExchangeMarket symbol, int minutes)
        {
            string urlSymbol = $"{symbol.BaseCurrency}-{symbol.QuoteCurrency}";
            string exchange  = _settings.Exchange.ToLowerInvariant();

            return($"hypertrader://{exchange}/{urlSymbol}/{minutes}");
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
		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;
		}
コード例 #6
0
        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));
        }
コード例 #7
0
        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));
        }
コード例 #8
0
        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());
        }