From bb758da9408e15eed3327f3122eb576674d3f4b1 Mon Sep 17 00:00:00 2001 From: froggleston Date: Tue, 17 May 2022 22:05:33 +0100 Subject: [PATCH 01/81] Add support for fudging unavailable funding rates, allowing backtesting of timeranges where futures candles are available, but rates are not --- docs/configuration.md | 1 + docs/leverage.md | 6 ++++++ freqtrade/data/history/history_utils.py | 7 ++++++- freqtrade/optimize/backtesting.py | 23 +++++++++++++++++++++-- 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 80cd52c5b..5a6d5849a 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -230,6 +230,7 @@ Mandatory parameters are marked as **Required**, which means that they are requi | `dataformat_trades` | Data format to use to store historical trades data.
*Defaults to `jsongz`*.
**Datatype:** String | `position_adjustment_enable` | Enables the strategy to use position adjustments (additional buys or sells). [More information here](strategy-callbacks.md#adjust-trade-position).
[Strategy Override](#parameters-in-the-strategy).
*Defaults to `false`.*
**Datatype:** Boolean | `max_entry_position_adjustment` | Maximum additional order(s) for each open trade on top of the first entry Order. Set it to `-1` for unlimited additional orders. [More information here](strategy-callbacks.md#adjust-trade-position).
[Strategy Override](#parameters-in-the-strategy).
*Defaults to `-1`.*
**Datatype:** Positive Integer or -1 +| `futures_funding_rate` | User-specified funding rate to be used when historical funding rates are not available from the exchange. This does not overwrite real historical rates. It is recommended that this be set to 0 unless you are testing a specific coin and you understand how the funding rate will affect freqtrade's profit calculations. [More information here](configuration.md)
*Defaults to None.*
**Datatype:** Float ### Parameters in the strategy diff --git a/docs/leverage.md b/docs/leverage.md index 79d3c9842..d8a9c8032 100644 --- a/docs/leverage.md +++ b/docs/leverage.md @@ -101,6 +101,12 @@ Possible values are any floats between 0.0 and 0.99 !!! Danger "A `liquidation_buffer` of 0.0, or a low `liquidation_buffer` is likely to result in liquidations, and liquidation fees" Currently Freqtrade is able to calculate liquidation prices, but does not calculate liquidation fees. Setting your `liquidation_buffer` to 0.0, or using a low `liquidation_buffer` could result in your positions being liquidated. Freqtrade does not track liquidation fees, so liquidations will result in inaccurate profit/loss results for your bot. If you use a low `liquidation_buffer`, it is recommended to use `stoploss_on_exchange` if your exchange supports this. +## Unavailable funding rates + +For futures data, exchanges commonly provide the futures candles, the marks, and the funding rates. However, it is common that whilst candles and marks might be available, the funding rates are not. This can affect backtesting timeranges, i.e. you may only be able to test recent timeranges and not earlier, experiencing the `No data found. Terminating.` error. To get around this, add the `futures_funding_rate` config option as listed in [configuration.md](configuration.md), and it is recommended that you set this to `0`, unless you know a given specific funding rate for your pair, exchange and timerange. Setting this to anything other than `0` can have drastic effects on your profit calculations within strategy, e.g. within the `custom_exit`, `custom_stoploss`, etc functions. + +!!! This will not overwrite funding rates that are available from the exchange. + ### Developer #### Margin mode diff --git a/freqtrade/data/history/history_utils.py b/freqtrade/data/history/history_utils.py index eb36d2042..b589001ca 100644 --- a/freqtrade/data/history/history_utils.py +++ b/freqtrade/data/history/history_utils.py @@ -68,7 +68,8 @@ def load_data(datadir: Path, startup_candles: int = 0, fail_without_data: bool = False, data_format: str = 'json', - candle_type: CandleType = CandleType.SPOT + candle_type: CandleType = CandleType.SPOT, + user_futures_funding_rate = None, ) -> Dict[str, DataFrame]: """ Load ohlcv history data for a list of pairs. @@ -100,6 +101,10 @@ def load_data(datadir: Path, ) if not hist.empty: result[pair] = hist + else: + if candle_type is CandleType.FUNDING_RATE and user_futures_funding_rate is not None: + logger.warn(f"{pair} using user specified [{user_futures_funding_rate}]") + result[pair] = DataFrame(columns=["open","close","high","low","volume"]) if fail_without_data and not result: raise OperationalException("No data found. Terminating.") diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 4e604898f..49b085ca1 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -275,8 +275,27 @@ class Backtesting: if pair not in self.exchange._leverage_tiers: unavailable_pairs.append(pair) continue - self.futures_data[pair] = funding_rates_dict[pair].merge( - mark_rates_dict[pair], on='date', how="inner", suffixes=["_fund", "_mark"]) + + if (pair in mark_rates_dict + and len(funding_rates_dict[pair]) == 0 + and "futures_funding_rate" in self.config): + mark_rates_dict[pair]["open_fund"] = self.config.get('futures_funding_rate') + mark_rates_dict[pair]["close_fund"] = 0.0 + mark_rates_dict[pair]["high_fund"] = 0.0 + mark_rates_dict[pair]["low_fund"] = 0.0 + mark_rates_dict[pair]["volume_fund"] = 0.0 + mark_rates_dict[pair].rename( + columns = {'open':'open_mark', + 'close':'close_mark', + 'high':'high_mark', + 'low':'low_mark', + 'volume':'volume_mark'}, + inplace = True) + + self.futures_data[pair] = mark_rates_dict[pair] + else: + self.futures_data[pair] = mark_rates_dict[pair].merge( + funding_rates_dict[pair], on='date', how="inner", suffixes=["_fund", "_mark"]) if unavailable_pairs: raise OperationalException( From 37e4ede65c674c898193a828d72feb90a92c5ea4 Mon Sep 17 00:00:00 2001 From: froggleston Date: Tue, 17 May 2022 22:32:17 +0100 Subject: [PATCH 02/81] Fix flake issues --- docs/leverage.md | 5 +++-- freqtrade/data/history/history_utils.py | 4 ++-- freqtrade/optimize/backtesting.py | 19 ++++++++++--------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/docs/leverage.md b/docs/leverage.md index d8a9c8032..0c8139ad3 100644 --- a/docs/leverage.md +++ b/docs/leverage.md @@ -105,8 +105,9 @@ Possible values are any floats between 0.0 and 0.99 For futures data, exchanges commonly provide the futures candles, the marks, and the funding rates. However, it is common that whilst candles and marks might be available, the funding rates are not. This can affect backtesting timeranges, i.e. you may only be able to test recent timeranges and not earlier, experiencing the `No data found. Terminating.` error. To get around this, add the `futures_funding_rate` config option as listed in [configuration.md](configuration.md), and it is recommended that you set this to `0`, unless you know a given specific funding rate for your pair, exchange and timerange. Setting this to anything other than `0` can have drastic effects on your profit calculations within strategy, e.g. within the `custom_exit`, `custom_stoploss`, etc functions. -!!! This will not overwrite funding rates that are available from the exchange. - +!!! Warning This will mean your backtests are inaccurate. + This will not overwrite funding rates that are available from the exchange, but bear in mind that setting a false funding rate will mean backtesting results will be inaccurate for historical timeranges where funding rates are not available. + ### Developer #### Margin mode diff --git a/freqtrade/data/history/history_utils.py b/freqtrade/data/history/history_utils.py index b589001ca..4600d6ab4 100644 --- a/freqtrade/data/history/history_utils.py +++ b/freqtrade/data/history/history_utils.py @@ -69,7 +69,7 @@ def load_data(datadir: Path, fail_without_data: bool = False, data_format: str = 'json', candle_type: CandleType = CandleType.SPOT, - user_futures_funding_rate = None, + user_futures_funding_rate: int = None, ) -> Dict[str, DataFrame]: """ Load ohlcv history data for a list of pairs. @@ -104,7 +104,7 @@ def load_data(datadir: Path, else: if candle_type is CandleType.FUNDING_RATE and user_futures_funding_rate is not None: logger.warn(f"{pair} using user specified [{user_futures_funding_rate}]") - result[pair] = DataFrame(columns=["open","close","high","low","volume"]) + result[pair] = DataFrame(columns=["open", "close", "high", "low", "volume"]) if fail_without_data and not result: raise OperationalException("No data found. Terminating.") diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 49b085ca1..8d5a5fcea 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -277,25 +277,26 @@ class Backtesting: continue if (pair in mark_rates_dict - and len(funding_rates_dict[pair]) == 0 - and "futures_funding_rate" in self.config): + and len(funding_rates_dict[pair]) == 0 + and "futures_funding_rate" in self.config): mark_rates_dict[pair]["open_fund"] = self.config.get('futures_funding_rate') mark_rates_dict[pair]["close_fund"] = 0.0 mark_rates_dict[pair]["high_fund"] = 0.0 mark_rates_dict[pair]["low_fund"] = 0.0 mark_rates_dict[pair]["volume_fund"] = 0.0 mark_rates_dict[pair].rename( - columns = {'open':'open_mark', - 'close':'close_mark', - 'high':'high_mark', - 'low':'low_mark', - 'volume':'volume_mark'}, - inplace = True) + columns={'open': 'open_mark', + 'close': 'close_mark', + 'high': 'high_mark', + 'low': 'low_mark', + 'volume': 'volume_mark'}, + inplace=True) self.futures_data[pair] = mark_rates_dict[pair] else: self.futures_data[pair] = mark_rates_dict[pair].merge( - funding_rates_dict[pair], on='date', how="inner", suffixes=["_fund", "_mark"]) + funding_rates_dict[pair], on='date', + how="inner", suffixes=["_fund", "_mark"]) if unavailable_pairs: raise OperationalException( From c41d4c4f45ba06deb2b70923469ce9dfb2701e6f Mon Sep 17 00:00:00 2001 From: froggleston Date: Tue, 17 May 2022 22:37:48 +0100 Subject: [PATCH 03/81] Fix leverage docs --- docs/leverage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/leverage.md b/docs/leverage.md index 0c8139ad3..58e7cc778 100644 --- a/docs/leverage.md +++ b/docs/leverage.md @@ -105,7 +105,7 @@ Possible values are any floats between 0.0 and 0.99 For futures data, exchanges commonly provide the futures candles, the marks, and the funding rates. However, it is common that whilst candles and marks might be available, the funding rates are not. This can affect backtesting timeranges, i.e. you may only be able to test recent timeranges and not earlier, experiencing the `No data found. Terminating.` error. To get around this, add the `futures_funding_rate` config option as listed in [configuration.md](configuration.md), and it is recommended that you set this to `0`, unless you know a given specific funding rate for your pair, exchange and timerange. Setting this to anything other than `0` can have drastic effects on your profit calculations within strategy, e.g. within the `custom_exit`, `custom_stoploss`, etc functions. -!!! Warning This will mean your backtests are inaccurate. +!!! Warning "This will mean your backtests are inaccurate." This will not overwrite funding rates that are available from the exchange, but bear in mind that setting a false funding rate will mean backtesting results will be inaccurate for historical timeranges where funding rates are not available. ### Developer From d5486f17d8ad8261f109ccb400ecc59eac9affa8 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 18 May 2022 10:57:19 +0200 Subject: [PATCH 04/81] Update Test to use StrategyV3 --- tests/optimize/test_backtesting_adjust_position.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/optimize/test_backtesting_adjust_position.py b/tests/optimize/test_backtesting_adjust_position.py index 5babfb548..94505e3ce 100644 --- a/tests/optimize/test_backtesting_adjust_position.py +++ b/tests/optimize/test_backtesting_adjust_position.py @@ -22,7 +22,7 @@ def test_backtest_position_adjustment(default_conf, fee, mocker, testdatadir) -> default_conf.update({ "stake_amount": 100.0, "dry_run_wallet": 1000.0, - "strategy": "StrategyTestV2" + "strategy": "StrategyTestV3" }) backtesting = Backtesting(default_conf) backtesting._set_strategy(backtesting.strategylist[0]) From 736f9f4972add41a066bfc23705d1664915aa9b4 Mon Sep 17 00:00:00 2001 From: froggleston Date: Wed, 18 May 2022 12:47:37 +0100 Subject: [PATCH 05/81] Fix docs and add outer join support for merging funding rates across full timerange --- docs/configuration.md | 2 +- freqtrade/optimize/backtesting.py | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 5a6d5849a..4a05ad3d4 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -230,7 +230,7 @@ Mandatory parameters are marked as **Required**, which means that they are requi | `dataformat_trades` | Data format to use to store historical trades data.
*Defaults to `jsongz`*.
**Datatype:** String | `position_adjustment_enable` | Enables the strategy to use position adjustments (additional buys or sells). [More information here](strategy-callbacks.md#adjust-trade-position).
[Strategy Override](#parameters-in-the-strategy).
*Defaults to `false`.*
**Datatype:** Boolean | `max_entry_position_adjustment` | Maximum additional order(s) for each open trade on top of the first entry Order. Set it to `-1` for unlimited additional orders. [More information here](strategy-callbacks.md#adjust-trade-position).
[Strategy Override](#parameters-in-the-strategy).
*Defaults to `-1`.*
**Datatype:** Positive Integer or -1 -| `futures_funding_rate` | User-specified funding rate to be used when historical funding rates are not available from the exchange. This does not overwrite real historical rates. It is recommended that this be set to 0 unless you are testing a specific coin and you understand how the funding rate will affect freqtrade's profit calculations. [More information here](configuration.md)
*Defaults to None.*
**Datatype:** Float +| `futures_funding_rate` | User-specified funding rate to be used when historical funding rates are not available from the exchange. This does not overwrite real historical rates. It is recommended that this be set to 0 unless you are testing a specific coin and you understand how the funding rate will affect freqtrade's profit calculations. [More information here](leverage.md)
*Defaults to None.*
**Datatype:** Float ### Parameters in the strategy diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 8d5a5fcea..78faf65be 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -294,9 +294,15 @@ class Backtesting: self.futures_data[pair] = mark_rates_dict[pair] else: - self.futures_data[pair] = mark_rates_dict[pair].merge( - funding_rates_dict[pair], on='date', - how="inner", suffixes=["_fund", "_mark"]) + if "futures_funding_rate" in self.config: + self.futures_data[pair] = mark_rates_dict[pair].merge( + funding_rates_dict[pair], on='date', + how="outer", suffixes=["_fund", "_mark"]).fillna( + self.config.get('futures_funding_rate')) + else: + self.futures_data[pair] = mark_rates_dict[pair].merge( + funding_rates_dict[pair], on='date', + how="inner", suffixes=["_fund", "_mark"]) if unavailable_pairs: raise OperationalException( From 363098d32dcb729f4b6f3e3e2aadae492c97138e Mon Sep 17 00:00:00 2001 From: froggleston Date: Wed, 18 May 2022 12:56:43 +0100 Subject: [PATCH 06/81] Fix reversed makr/funding_rate columns --- freqtrade/optimize/backtesting.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 78faf65be..a80266b2c 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -297,12 +297,12 @@ class Backtesting: if "futures_funding_rate" in self.config: self.futures_data[pair] = mark_rates_dict[pair].merge( funding_rates_dict[pair], on='date', - how="outer", suffixes=["_fund", "_mark"]).fillna( + how="outer", suffixes=["_mark", "_fund"]).fillna( self.config.get('futures_funding_rate')) else: self.futures_data[pair] = mark_rates_dict[pair].merge( funding_rates_dict[pair], on='date', - how="inner", suffixes=["_fund", "_mark"]) + how="inner", suffixes=["_mark", "_fund"]) if unavailable_pairs: raise OperationalException( From 0a95ef6ab2e0cf369143f7af6be6ee0d2c3d15a5 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 19 May 2022 06:42:38 +0200 Subject: [PATCH 07/81] Don't reset open orders in dry-run on restart --- freqtrade/exchange/exchange.py | 6 ++++ freqtrade/persistence/models.py | 15 --------- freqtrade/persistence/trade_model.py | 27 +++++++++++++++ tests/test_persistence.py | 50 ---------------------------- 4 files changed, 33 insertions(+), 65 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index d2766cd6d..4ee9d3f63 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -953,6 +953,12 @@ class Exchange: order = self.check_dry_limit_order_filled(order) return order except KeyError as e: + from freqtrade.persistence import Order + order = Order.order_by_id(order_id) + if order: + x = order.to_ccxt_object() + self._dry_run_open_orders[order_id] = x + return x # Gracefully handle errors with dry-run orders. raise InvalidOrderException( f'Tried to get an invalid dry-run-order (id: {order_id}). Message: {e}') from e diff --git a/freqtrade/persistence/models.py b/freqtrade/persistence/models.py index c31e50892..1e0a70784 100644 --- a/freqtrade/persistence/models.py +++ b/freqtrade/persistence/models.py @@ -64,10 +64,6 @@ def init_db(db_url: str, clean_open_orders: bool = False) -> None: _DECL_BASE.metadata.create_all(engine) check_migrate(engine, decl_base=_DECL_BASE, previous_tables=previous_tables) - # Clean dry_run DB if the db is not in-memory - if clean_open_orders and db_url != 'sqlite://': - clean_dry_run_db() - def cleanup_db() -> None: """ @@ -76,14 +72,3 @@ def cleanup_db() -> None: """ Trade.commit() - -def clean_dry_run_db() -> None: - """ - Remove open_order_id from a Dry_run DB - :return: None - """ - for trade in Trade.query.filter(Trade.open_order_id.isnot(None)).all(): - # Check we are updating only a dry_run order not a prod one - if 'dry_run' in trade.open_order_id: - trade.open_order_id = None - Trade.commit() diff --git a/freqtrade/persistence/trade_model.py b/freqtrade/persistence/trade_model.py index 358e776e3..57aeda76c 100644 --- a/freqtrade/persistence/trade_model.py +++ b/freqtrade/persistence/trade_model.py @@ -118,6 +118,25 @@ class Order(_DECL_BASE): self.order_filled_date = datetime.now(timezone.utc) self.order_update_date = datetime.now(timezone.utc) + def to_ccxt_object(self) -> Dict[str, Any]: + return { + 'id': self.order_id, + 'symbol': self.ft_pair, + 'price': self.price, + 'average': self.average, + 'amount': self.amount, + 'cost': self.cost, + 'type': self.order_type, + 'side': self.ft_order_side, + 'filled': self.filled, + 'remaining': self.remaining, + 'datetime': self.order_date_utc.strftime('%Y-%m-%dT%H:%M:%S.%3f'), + 'timestamp': int(self.order_date_utc.timestamp() * 1000), + 'status': self.status, + 'fee': None, + 'info': {}, + } + def to_json(self, entry_side: str) -> Dict[str, Any]: return { 'pair': self.ft_pair, @@ -190,6 +209,14 @@ class Order(_DECL_BASE): """ return Order.query.filter(Order.ft_is_open.is_(True)).all() + @staticmethod + def order_by_id(order_id: str) -> Optional['Order']: + """ + Retrieve order based on order_id + :return: Order or None + """ + return Order.query.filter(Order.order_id == order_id).first() + class LocalTrade(): """ diff --git a/tests/test_persistence.py b/tests/test_persistence.py index d84415938..8d033663e 100644 --- a/tests/test_persistence.py +++ b/tests/test_persistence.py @@ -1129,56 +1129,6 @@ def test_calc_profit( assert pytest.approx(trade.calc_profit_ratio(rate=close_rate)) == round(profit_ratio, 8) -@pytest.mark.usefixtures("init_persistence") -def test_clean_dry_run_db(default_conf, fee): - - # Simulate dry_run entries - trade = Trade( - pair='ADA/USDT', - stake_amount=0.001, - amount=123.0, - fee_open=fee.return_value, - fee_close=fee.return_value, - open_rate=0.123, - exchange='binance', - open_order_id='dry_run_buy_12345' - ) - Trade.query.session.add(trade) - - trade = Trade( - pair='ETC/BTC', - stake_amount=0.001, - amount=123.0, - fee_open=fee.return_value, - fee_close=fee.return_value, - open_rate=0.123, - exchange='binance', - open_order_id='dry_run_sell_12345' - ) - Trade.query.session.add(trade) - - # Simulate prod entry - trade = Trade( - pair='ETC/BTC', - stake_amount=0.001, - amount=123.0, - fee_open=fee.return_value, - fee_close=fee.return_value, - open_rate=0.123, - exchange='binance', - open_order_id='prod_buy_12345' - ) - Trade.query.session.add(trade) - - # We have 3 entries: 2 dry_run, 1 prod - assert len(Trade.query.filter(Trade.open_order_id.isnot(None)).all()) == 3 - - clean_dry_run_db() - - # We have now only the prod - assert len(Trade.query.filter(Trade.open_order_id.isnot(None)).all()) == 1 - - def test_migrate_new(mocker, default_conf, fee, caplog): """ Test Database migration (starting with new pairformat) From a3d9384bc0665a06c25400948ad4b45fdc2e55c1 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 19 May 2022 06:45:20 +0200 Subject: [PATCH 08/81] Remove clean-dry-run code --- freqtrade/commands/db_commands.py | 4 ++-- freqtrade/commands/list_commands.py | 2 +- freqtrade/data/btanalysis.py | 2 +- freqtrade/freqtradebot.py | 2 +- freqtrade/persistence/__init__.py | 2 +- freqtrade/persistence/models.py | 4 +--- tests/commands/test_commands.py | 2 +- tests/conftest.py | 2 +- tests/test_persistence.py | 20 ++++++++++---------- 9 files changed, 19 insertions(+), 21 deletions(-) diff --git a/freqtrade/commands/db_commands.py b/freqtrade/commands/db_commands.py index d93aafcb6..618b5cb6e 100644 --- a/freqtrade/commands/db_commands.py +++ b/freqtrade/commands/db_commands.py @@ -19,9 +19,9 @@ def start_convert_db(args: Dict[str, Any]) -> None: config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE) - init_db(config['db_url'], False) + init_db(config['db_url']) session_target = Trade._session - init_db(config['db_url_from'], False) + init_db(config['db_url_from']) logger.info("Starting db migration.") trade_count = 0 diff --git a/freqtrade/commands/list_commands.py b/freqtrade/commands/list_commands.py index 2a5223917..eb761eeec 100644 --- a/freqtrade/commands/list_commands.py +++ b/freqtrade/commands/list_commands.py @@ -212,7 +212,7 @@ def start_show_trades(args: Dict[str, Any]) -> None: raise OperationalException("--db-url is required for this command.") logger.info(f'Using DB: "{parse_db_uri_for_logging(config["db_url"])}"') - init_db(config['db_url'], clean_open_orders=False) + init_db(config['db_url']) tfilter = [] if config.get('trade_ids'): diff --git a/freqtrade/data/btanalysis.py b/freqtrade/data/btanalysis.py index e29d9ebe4..fef432576 100644 --- a/freqtrade/data/btanalysis.py +++ b/freqtrade/data/btanalysis.py @@ -353,7 +353,7 @@ def load_trades_from_db(db_url: str, strategy: Optional[str] = None) -> pd.DataF Can also serve as protection to load the correct result. :return: Dataframe containing Trades """ - init_db(db_url, clean_open_orders=False) + init_db(db_url) filters = [] if strategy: diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 315db3ae6..da35c12ff 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -67,7 +67,7 @@ class FreqtradeBot(LoggingMixin): self.exchange = ExchangeResolver.load_exchange(self.config['exchange']['name'], self.config) - init_db(self.config.get('db_url', None), clean_open_orders=self.config['dry_run']) + init_db(self.config.get('db_url', None)) self.wallets = Wallets(self.config, self.exchange) diff --git a/freqtrade/persistence/__init__.py b/freqtrade/persistence/__init__.py index ab6e2f6a5..f4e7470a7 100644 --- a/freqtrade/persistence/__init__.py +++ b/freqtrade/persistence/__init__.py @@ -1,5 +1,5 @@ # flake8: noqa: F401 -from freqtrade.persistence.models import clean_dry_run_db, cleanup_db, init_db +from freqtrade.persistence.models import cleanup_db, init_db from freqtrade.persistence.pairlock_middleware import PairLocks from freqtrade.persistence.trade_model import LocalTrade, Order, Trade diff --git a/freqtrade/persistence/models.py b/freqtrade/persistence/models.py index 1e0a70784..154f2590a 100644 --- a/freqtrade/persistence/models.py +++ b/freqtrade/persistence/models.py @@ -21,14 +21,12 @@ logger = logging.getLogger(__name__) _SQL_DOCS_URL = 'http://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls' -def init_db(db_url: str, clean_open_orders: bool = False) -> None: +def init_db(db_url: str) -> None: """ Initializes this module with the given config, registers all known command handlers and starts polling for message updates :param db_url: Database to use - :param clean_open_orders: Remove open orders from the database. - Useful for dry-run or if all orders have been reset on the exchange. :return: None """ kwargs = {} diff --git a/tests/commands/test_commands.py b/tests/commands/test_commands.py index b37edf9c7..d6e80675e 100644 --- a/tests/commands/test_commands.py +++ b/tests/commands/test_commands.py @@ -1495,7 +1495,7 @@ def test_start_convert_db(mocker, fee, tmpdir, caplog): ] assert not db_src_file.is_file() - init_db(db_from, False) + init_db(db_from) create_mock_trades(fee) diff --git a/tests/conftest.py b/tests/conftest.py index cc07de1de..8719c70f4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -384,7 +384,7 @@ def patch_coingekko(mocker) -> None: @pytest.fixture(scope='function') def init_persistence(default_conf): - init_db(default_conf['db_url'], default_conf['dry_run']) + init_db(default_conf['db_url']) @pytest.fixture(scope="function") diff --git a/tests/test_persistence.py b/tests/test_persistence.py index 8d033663e..ef17c4d1c 100644 --- a/tests/test_persistence.py +++ b/tests/test_persistence.py @@ -13,7 +13,7 @@ from sqlalchemy import create_engine, text from freqtrade import constants from freqtrade.enums import TradingMode from freqtrade.exceptions import DependencyException, OperationalException -from freqtrade.persistence import LocalTrade, Order, Trade, clean_dry_run_db, init_db +from freqtrade.persistence import LocalTrade, Order, Trade, init_db from freqtrade.persistence.migrations import get_last_sequence_ids, set_sequence_ids from freqtrade.persistence.models import PairLock from tests.conftest import create_mock_trades, create_mock_trades_with_leverage, log_has, log_has_re @@ -24,7 +24,7 @@ spot, margin, futures = TradingMode.SPOT, TradingMode.MARGIN, TradingMode.FUTURE def test_init_create_session(default_conf): # Check if init create a session - init_db(default_conf['db_url'], default_conf['dry_run']) + init_db(default_conf['db_url']) assert hasattr(Trade, '_session') assert 'scoped_session' in type(Trade._session).__name__ @@ -36,7 +36,7 @@ def test_init_custom_db_url(default_conf, tmpdir): default_conf.update({'db_url': f'sqlite:///{filename}'}) - init_db(default_conf['db_url'], default_conf['dry_run']) + init_db(default_conf['db_url']) assert Path(filename).is_file() r = Trade._session.execute(text("PRAGMA journal_mode")) assert r.first() == ('wal',) @@ -45,10 +45,10 @@ def test_init_custom_db_url(default_conf, tmpdir): def test_init_invalid_db_url(): # Update path to a value other than default, but still in-memory with pytest.raises(OperationalException, match=r'.*no valid database URL*'): - init_db('unknown:///some.url', True) + init_db('unknown:///some.url') with pytest.raises(OperationalException, match=r'Bad db-url.*For in-memory database, pl.*'): - init_db('sqlite:///', True) + init_db('sqlite:///') def test_init_prod_db(default_conf, mocker): @@ -57,7 +57,7 @@ def test_init_prod_db(default_conf, mocker): create_engine_mock = mocker.patch('freqtrade.persistence.models.create_engine', MagicMock()) - init_db(default_conf['db_url'], default_conf['dry_run']) + init_db(default_conf['db_url']) assert create_engine_mock.call_count == 1 assert create_engine_mock.mock_calls[0][1][0] == 'sqlite:///tradesv3.sqlite' @@ -70,7 +70,7 @@ def test_init_dryrun_db(default_conf, tmpdir): 'db_url': f'sqlite:///{filename}' }) - init_db(default_conf['db_url'], default_conf['dry_run']) + init_db(default_conf['db_url']) assert Path(filename).is_file() @@ -1260,7 +1260,7 @@ def test_migrate_new(mocker, default_conf, fee, caplog): connection.execute(text("create table trades_bak1 as select * from trades")) # Run init to test migration - init_db(default_conf['db_url'], default_conf['dry_run']) + init_db(default_conf['db_url']) assert len(Trade.query.filter(Trade.id == 1).all()) == 1 trade = Trade.query.filter(Trade.id == 1).first() @@ -1343,7 +1343,7 @@ def test_migrate_too_old(mocker, default_conf, fee, caplog): # Run init to test migration with pytest.raises(OperationalException, match=r'Your database seems to be very old'): - init_db(default_conf['db_url'], default_conf['dry_run']) + init_db(default_conf['db_url']) def test_migrate_get_last_sequence_ids(): @@ -1417,7 +1417,7 @@ def test_migrate_pairlocks(mocker, default_conf, fee, caplog): connection.execute(text(create_index2)) connection.execute(text(create_index3)) - init_db(default_conf['db_url'], default_conf['dry_run']) + init_db(default_conf['db_url']) assert len(PairLock.query.all()) == 2 assert len(PairLock.query.filter(PairLock.pair == '*').all()) == 1 From 5e18e51ce0ca1a36ef1d73f31f0d09a194a254dc Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 19 May 2022 06:56:38 +0200 Subject: [PATCH 09/81] Fix some tests --- tests/test_freqtradebot.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index e19d5f36a..d2df4e6a5 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -3044,6 +3044,7 @@ def test_handle_cancel_enter_corder_empty(mocker, default_conf_usdt, limit_order trade.entry_side = "buy" trade.open_rate = 200 trade.entry_side = "buy" + trade.open_order_id = "open_order_noop" l_order['filled'] = 0.0 l_order['status'] = 'open' reason = CANCEL_REASON['TIMEOUT'] @@ -4786,9 +4787,6 @@ def test_startup_update_open_orders(mocker, default_conf_usdt, fee, caplog, is_s freqtrade.config['dry_run'] = False freqtrade.startup_update_open_orders() - assert log_has_re(r"Error updating Order .*", caplog) - caplog.clear() - assert len(Order.get_open_orders()) == 3 matching_buy_order = mock_order_4(is_short=is_short) matching_buy_order.update({ @@ -4799,6 +4797,11 @@ def test_startup_update_open_orders(mocker, default_conf_usdt, fee, caplog, is_s # Only stoploss and sell orders are kept open assert len(Order.get_open_orders()) == 2 + caplog.clear() + mocker.patch('freqtrade.exchange.Exchange.fetch_order', side_effect=InvalidOrderException) + freqtrade.startup_update_open_orders() + assert log_has_re(r"Error updating Order .*", caplog) + @pytest.mark.usefixtures("init_persistence") @pytest.mark.parametrize("is_short", [False, True]) From 56a73575a13bccf5fddc8fa4d9f85ac7d28ee214 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 19 May 2022 19:29:39 +0200 Subject: [PATCH 10/81] Add explicit test for order_to_ccxt --- freqtrade/persistence/trade_model.py | 2 +- tests/conftest.py | 1 + tests/test_persistence.py | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/freqtrade/persistence/trade_model.py b/freqtrade/persistence/trade_model.py index 57aeda76c..d2abb48d6 100644 --- a/freqtrade/persistence/trade_model.py +++ b/freqtrade/persistence/trade_model.py @@ -130,7 +130,7 @@ class Order(_DECL_BASE): 'side': self.ft_order_side, 'filled': self.filled, 'remaining': self.remaining, - 'datetime': self.order_date_utc.strftime('%Y-%m-%dT%H:%M:%S.%3f'), + 'datetime': self.order_date_utc.strftime('%Y-%m-%dT%H:%M:%S.%f'), 'timestamp': int(self.order_date_utc.timestamp() * 1000), 'status': self.status, 'fee': None, diff --git a/tests/conftest.py b/tests/conftest.py index 8719c70f4..02738b0e9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1616,6 +1616,7 @@ def limit_buy_order_open(): 'datetime': arrow.utcnow().isoformat(), 'price': 0.00001099, 'amount': 90.99181073, + 'average': None, 'filled': 0.0, 'cost': 0.0009999, 'remaining': 90.99181073, diff --git a/tests/test_persistence.py b/tests/test_persistence.py index ef17c4d1c..be19a3f5f 100644 --- a/tests/test_persistence.py +++ b/tests/test_persistence.py @@ -2671,3 +2671,21 @@ def test_select_filled_orders(fee): orders = trades[4].select_filled_orders('sell') assert orders is not None assert len(orders) == 0 + + +@pytest.mark.usefixtures("init_persistence") +def test_order_to_ccxt(limit_buy_order_open): + + order = Order.parse_from_ccxt_object(limit_buy_order_open, 'mocked', 'buy') + order.query.session.add(order) + Order.query.session.commit() + + order_resp = Order.order_by_id(limit_buy_order_open['id']) + assert order_resp + + raw_order = order_resp.to_ccxt_object() + del raw_order['fee'] + del raw_order['datetime'] + del raw_order['info'] + del limit_buy_order_open['datetime'] + assert raw_order == limit_buy_order_open From 219363fffb37e972ca426ce3b87fa3c1b959577e Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 19 May 2022 19:53:23 +0200 Subject: [PATCH 11/81] Check for both ask and bid in SpreadFilter closes #6865 --- freqtrade/plugins/pairlist/SpreadFilter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/plugins/pairlist/SpreadFilter.py b/freqtrade/plugins/pairlist/SpreadFilter.py index d1f88d2a5..43856b451 100644 --- a/freqtrade/plugins/pairlist/SpreadFilter.py +++ b/freqtrade/plugins/pairlist/SpreadFilter.py @@ -50,7 +50,7 @@ class SpreadFilter(IPairList): :param ticker: ticker dict as returned from ccxt.fetch_tickers() :return: True if the pair can stay, false if it should be removed """ - if 'bid' in ticker and 'ask' in ticker and ticker['ask']: + if 'bid' in ticker and 'ask' in ticker and ticker['ask'] and ticker['bid']: spread = 1 - ticker['bid'] / ticker['ask'] if spread > self._max_spread_ratio: self.log_once(f"Removed {pair} from whitelist, because spread " From 46ea135b6bf4e3b5f2e54e0c951ba40dde7cf9f2 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 19 May 2022 19:42:00 +0200 Subject: [PATCH 12/81] Update dry-run considerations --- docs/configuration.md | 2 +- freqtrade/persistence/models.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 80cd52c5b..7dc907b9f 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -583,7 +583,7 @@ Once you will be happy with your bot performance running in the Dry-run mode, yo * Market orders fill based on orderbook volume the moment the order is placed. * Limit orders fill once the price reaches the defined level - or time out based on `unfilledtimeout` settings. * In combination with `stoploss_on_exchange`, the stop_loss price is assumed to be filled. -* Open orders (not trades, which are stored in the database) are reset on bot restart. +* Open orders (not trades, which are stored in the database) are kept open after bot restarts, with the assumption that they were not filled while being offline. ## Switch to production mode diff --git a/freqtrade/persistence/models.py b/freqtrade/persistence/models.py index 154f2590a..86d2f9f9c 100644 --- a/freqtrade/persistence/models.py +++ b/freqtrade/persistence/models.py @@ -69,4 +69,3 @@ def cleanup_db() -> None: :return: None """ Trade.commit() - From 2cf17e04be3d6cbd5444f6fb2f4e03c90ab3d022 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 20 May 2022 06:26:16 +0200 Subject: [PATCH 13/81] Init persistence for tests that use dry-run orders --- tests/exchange/test_exchange.py | 3 +++ tests/exchange/test_ftx.py | 1 + tests/exchange/test_gateio.py | 1 + 3 files changed, 5 insertions(+) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 53e6cc3f3..07b2147d5 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -2808,6 +2808,7 @@ def test_get_historic_trades_notsupported(default_conf, mocker, caplog, exchange until=trades_history[-1][0]) +@pytest.mark.usefixtures("init_persistence") @pytest.mark.parametrize("exchange_name", EXCHANGES) def test_cancel_order_dry_run(default_conf, mocker, exchange_name): default_conf['dry_run'] = True @@ -2973,6 +2974,7 @@ def test_cancel_stoploss_order_with_result(default_conf, mocker, exchange_name): exchange.cancel_stoploss_order_with_result(order_id='_', pair='TKN/BTC', amount=123) +@pytest.mark.usefixtures("init_persistence") @pytest.mark.parametrize("exchange_name", EXCHANGES) def test_fetch_order(default_conf, mocker, exchange_name, caplog): default_conf['dry_run'] = True @@ -3025,6 +3027,7 @@ def test_fetch_order(default_conf, mocker, exchange_name, caplog): order_id='_', pair='TKN/BTC') +@pytest.mark.usefixtures("init_persistence") @pytest.mark.parametrize("exchange_name", EXCHANGES) def test_fetch_stoploss_order(default_conf, mocker, exchange_name): # Don't test FTX here - that needs a separate test diff --git a/tests/exchange/test_ftx.py b/tests/exchange/test_ftx.py index 0f16d4433..5a83b964a 100644 --- a/tests/exchange/test_ftx.py +++ b/tests/exchange/test_ftx.py @@ -174,6 +174,7 @@ def test_stoploss_adjust_ftx(mocker, default_conf, sl1, sl2, sl3, side): assert not exchange.stoploss_adjust(sl3, order, side=side) +@pytest.mark.usefixtures("init_persistence") def test_fetch_stoploss_order_ftx(default_conf, mocker, limit_sell_order, limit_buy_order): default_conf['dry_run'] = True order = MagicMock() diff --git a/tests/exchange/test_gateio.py b/tests/exchange/test_gateio.py index ad30a7d86..92f8186a6 100644 --- a/tests/exchange/test_gateio.py +++ b/tests/exchange/test_gateio.py @@ -34,6 +34,7 @@ def test_validate_order_types_gateio(default_conf, mocker): ExchangeResolver.load_exchange('gateio', default_conf, True) +@pytest.mark.usefixtures("init_persistence") def test_fetch_stoploss_order_gateio(default_conf, mocker): exchange = get_patched_exchange(mocker, default_conf, id='gateio') From b3acfb3c6f5bf76b12cca14d2cb5985596b7ea4e Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 20 May 2022 06:55:51 +0200 Subject: [PATCH 14/81] Bump ccxt to 1.83.12 closes #6849 --- requirements.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 90ddcd1b6..a3c4c3dca 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ numpy==1.22.3 pandas==1.4.2 pandas-ta==0.3.14b -ccxt==1.82.61 +ccxt==1.83.12 # Pin cryptography for now due to rust build errors with piwheels cryptography==37.0.2 aiohttp==3.8.1 diff --git a/setup.py b/setup.py index fadd4629f..7aa56bf81 100644 --- a/setup.py +++ b/setup.py @@ -42,7 +42,7 @@ setup( ], install_requires=[ # from requirements.txt - 'ccxt>=1.80.67', + 'ccxt>=1.83.12', 'SQLAlchemy', 'python-telegram-bot>=13.4', 'arrow>=0.17.0', From 843bf0631e661dc93be9741255831c06a76c39ce Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 30 Apr 2022 14:57:15 +0200 Subject: [PATCH 15/81] Remove Sponsored Promotions --- README.md | 4 ---- docs/index.md | 4 ---- 2 files changed, 8 deletions(-) diff --git a/README.md b/README.md index cad39f9ac..6c3c8fe25 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,6 @@ Freqtrade is a free and open source crypto trading bot written in Python. It is ![freqtrade](https://raw.githubusercontent.com/freqtrade/freqtrade/develop/docs/assets/freqtrade-screenshot.png) -## Sponsored promotion - -[![tokenbot-promo](https://raw.githubusercontent.com/freqtrade/freqtrade/develop/docs/assets/TokenBot-Freqtrade-banner.png)](https://tokenbot.com/?utm_source=github&utm_medium=freqtrade&utm_campaign=algodevs) - ## Disclaimer This software is for educational purposes only. Do not risk money which diff --git a/docs/index.md b/docs/index.md index e0a88a381..16c4ded94 100644 --- a/docs/index.md +++ b/docs/index.md @@ -22,10 +22,6 @@ Freqtrade is a free and open source crypto trading bot written in Python. It is ![freqtrade screenshot](assets/freqtrade-screenshot.png) -## Sponsored promotion - -[![tokenbot-promo](assets/TokenBot-Freqtrade-banner.png)](https://tokenbot.com/?utm_source=github&utm_medium=freqtrade&utm_campaign=algodevs) - ## Features - Develop your Strategy: Write your strategy in python, using [pandas](https://pandas.pydata.org/). Example strategies to inspire you are available in the [strategy repository](https://github.com/freqtrade/freqtrade-strategies). From c3e3188c6a66682fb7b9511b8615f0e5fa5087c6 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 20 May 2022 11:30:25 +0200 Subject: [PATCH 16/81] Rename variable --- freqtrade/exchange/exchange.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 4ee9d3f63..06a30c99b 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -956,9 +956,9 @@ class Exchange: from freqtrade.persistence import Order order = Order.order_by_id(order_id) if order: - x = order.to_ccxt_object() - self._dry_run_open_orders[order_id] = x - return x + ccxt_order = order.to_ccxt_object() + self._dry_run_open_orders[order_id] = ccxt_order + return ccxt_order # Gracefully handle errors with dry-run orders. raise InvalidOrderException( f'Tried to get an invalid dry-run-order (id: {order_id}). Message: {e}') from e From c499a92f57cccf520f3d6f19941857af87fac5aa Mon Sep 17 00:00:00 2001 From: froggleston Date: Fri, 20 May 2022 11:48:53 +0100 Subject: [PATCH 17/81] Remove surplus mark columns, and make fillna on funding rate only --- freqtrade/optimize/backtesting.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index a80266b2c..99bddbf8a 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -280,10 +280,6 @@ class Backtesting: and len(funding_rates_dict[pair]) == 0 and "futures_funding_rate" in self.config): mark_rates_dict[pair]["open_fund"] = self.config.get('futures_funding_rate') - mark_rates_dict[pair]["close_fund"] = 0.0 - mark_rates_dict[pair]["high_fund"] = 0.0 - mark_rates_dict[pair]["low_fund"] = 0.0 - mark_rates_dict[pair]["volume_fund"] = 0.0 mark_rates_dict[pair].rename( columns={'open': 'open_mark', 'close': 'close_mark', @@ -297,7 +293,7 @@ class Backtesting: if "futures_funding_rate" in self.config: self.futures_data[pair] = mark_rates_dict[pair].merge( funding_rates_dict[pair], on='date', - how="outer", suffixes=["_mark", "_fund"]).fillna( + how="outer", suffixes=["_mark", "_fund"])['open_fund'].fillna( self.config.get('futures_funding_rate')) else: self.futures_data[pair] = mark_rates_dict[pair].merge( From 0e158b66b0e089f12f79a1217cce431ec3fc7a4f Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 21 May 2022 08:26:44 +0200 Subject: [PATCH 18/81] Update docs link --- docs/configuration.md | 2 +- docs/leverage.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 4a05ad3d4..949cac91d 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -230,7 +230,7 @@ Mandatory parameters are marked as **Required**, which means that they are requi | `dataformat_trades` | Data format to use to store historical trades data.
*Defaults to `jsongz`*.
**Datatype:** String | `position_adjustment_enable` | Enables the strategy to use position adjustments (additional buys or sells). [More information here](strategy-callbacks.md#adjust-trade-position).
[Strategy Override](#parameters-in-the-strategy).
*Defaults to `false`.*
**Datatype:** Boolean | `max_entry_position_adjustment` | Maximum additional order(s) for each open trade on top of the first entry Order. Set it to `-1` for unlimited additional orders. [More information here](strategy-callbacks.md#adjust-trade-position).
[Strategy Override](#parameters-in-the-strategy).
*Defaults to `-1`.*
**Datatype:** Positive Integer or -1 -| `futures_funding_rate` | User-specified funding rate to be used when historical funding rates are not available from the exchange. This does not overwrite real historical rates. It is recommended that this be set to 0 unless you are testing a specific coin and you understand how the funding rate will affect freqtrade's profit calculations. [More information here](leverage.md)
*Defaults to None.*
**Datatype:** Float +| `futures_funding_rate` | User-specified funding rate to be used when historical funding rates are not available from the exchange. This does not overwrite real historical rates. It is recommended that this be set to 0 unless you are testing a specific coin and you understand how the funding rate will affect freqtrade's profit calculations. [More information here](leverage.md#unavailable-funding-rates)
*Defaults to None.*
**Datatype:** Float ### Parameters in the strategy diff --git a/docs/leverage.md b/docs/leverage.md index 58e7cc778..2ee6f8444 100644 --- a/docs/leverage.md +++ b/docs/leverage.md @@ -107,7 +107,7 @@ For futures data, exchanges commonly provide the futures candles, the marks, and !!! Warning "This will mean your backtests are inaccurate." This will not overwrite funding rates that are available from the exchange, but bear in mind that setting a false funding rate will mean backtesting results will be inaccurate for historical timeranges where funding rates are not available. - + ### Developer #### Margin mode From 6bd5535d6c3476d36bafdf73d02926c562546fc6 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 21 May 2022 08:31:34 +0200 Subject: [PATCH 19/81] Use exchange method to combine funding and mark candles --- freqtrade/exchange/exchange.py | 2 +- freqtrade/optimize/backtesting.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index d2766cd6d..65d9909c6 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -2420,7 +2420,7 @@ class Exchange: :param mark_rates: Dataframe containing Mark rates (Type mark_ohlcv_price) """ - return funding_rates.merge(mark_rates, on='date', how="inner", suffixes=["_fund", "_mark"]) + return mark_rates.merge(funding_rates, on='date', how="inner", suffixes=["_mark", "_fund"]) def calculate_funding_fees( self, diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 99bddbf8a..3041136a3 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -296,9 +296,10 @@ class Backtesting: how="outer", suffixes=["_mark", "_fund"])['open_fund'].fillna( self.config.get('futures_funding_rate')) else: - self.futures_data[pair] = mark_rates_dict[pair].merge( - funding_rates_dict[pair], on='date', - how="inner", suffixes=["_mark", "_fund"]) + self.futures_data[pair] = self.exchange.combine_funding_and_mark( + funding_rates=funding_rates_dict[pair], + mark_rates=mark_rates_dict[pair] + ) if unavailable_pairs: raise OperationalException( From 2df42a3035902028dfbe50839cd685be78f2e0c9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 21 May 2022 08:50:39 +0200 Subject: [PATCH 20/81] Move "funding fillup" logic to exchange class --- freqtrade/exchange/exchange.py | 23 +++++++++++++++++++++-- freqtrade/optimize/backtesting.py | 29 +++++------------------------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 65d9909c6..9372c77b7 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -2413,14 +2413,33 @@ class Exchange: ) @staticmethod - def combine_funding_and_mark(funding_rates: DataFrame, mark_rates: DataFrame) -> DataFrame: + def combine_funding_and_mark(funding_rates: DataFrame, mark_rates: DataFrame, + futures_funding_rate: Optional[int] = None) -> DataFrame: """ Combine funding-rates and mark-rates dataframes :param funding_rates: Dataframe containing Funding rates (Type FUNDING_RATE) :param mark_rates: Dataframe containing Mark rates (Type mark_ohlcv_price) + :param futures_funding_rate: Fake funding rate to use if funding_rates are not available """ + if futures_funding_rate is None: + return mark_rates.merge( + funding_rates, on='date', how="inner", suffixes=["_mark", "_fund"]) + else: + if len(funding_rates) == 0: + # No funding rate candles - full fillup with fallback variable + mark_rates['open_fund'] = futures_funding_rate + return mark_rates.rename( + columns={'open': 'open_mark', + 'close': 'close_mark', + 'high': 'high_mark', + 'low': 'low_mark', + 'volume': 'volume_mark'}) - return mark_rates.merge(funding_rates, on='date', how="inner", suffixes=["_mark", "_fund"]) + else: + # Fill up missing funding_rate candles with fallback value + return mark_rates.merge( + funding_rates, on='date', how="outer", suffixes=["_mark", "_fund"] + )['open_fund'].fillna(futures_funding_rate) def calculate_funding_fees( self, diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 3041136a3..2c34e29b0 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -276,30 +276,11 @@ class Backtesting: unavailable_pairs.append(pair) continue - if (pair in mark_rates_dict - and len(funding_rates_dict[pair]) == 0 - and "futures_funding_rate" in self.config): - mark_rates_dict[pair]["open_fund"] = self.config.get('futures_funding_rate') - mark_rates_dict[pair].rename( - columns={'open': 'open_mark', - 'close': 'close_mark', - 'high': 'high_mark', - 'low': 'low_mark', - 'volume': 'volume_mark'}, - inplace=True) - - self.futures_data[pair] = mark_rates_dict[pair] - else: - if "futures_funding_rate" in self.config: - self.futures_data[pair] = mark_rates_dict[pair].merge( - funding_rates_dict[pair], on='date', - how="outer", suffixes=["_mark", "_fund"])['open_fund'].fillna( - self.config.get('futures_funding_rate')) - else: - self.futures_data[pair] = self.exchange.combine_funding_and_mark( - funding_rates=funding_rates_dict[pair], - mark_rates=mark_rates_dict[pair] - ) + self.futures_data[pair] = self.exchange.combine_funding_and_mark( + funding_rates=funding_rates_dict[pair], + mark_rates=mark_rates_dict[pair], + futures_funding_rate=self.config.get('futures_funding_rate'), + ) if unavailable_pairs: raise OperationalException( From 0d388b561bca0af4f2b0ee958632cea3b61824f2 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 21 May 2022 09:03:30 +0200 Subject: [PATCH 21/81] Add test for "combine_funding_and_mark", fix bug --- freqtrade/exchange/exchange.py | 6 ++-- tests/exchange/test_exchange.py | 64 +++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 9372c77b7..d30c5fc2f 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -2437,9 +2437,11 @@ class Exchange: else: # Fill up missing funding_rate candles with fallback value - return mark_rates.merge( + combined = mark_rates.merge( funding_rates, on='date', how="outer", suffixes=["_mark", "_fund"] - )['open_fund'].fillna(futures_funding_rate) + ) + combined['open_fund'] = combined['open_fund'].fillna(futures_funding_rate) + return combined def calculate_funding_fees( self, diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 53e6cc3f3..37f4dedbe 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -3912,6 +3912,70 @@ def test_calculate_funding_fees( ) == kraken_fee +@pytest.mark.parametrize( + 'mark_price,funding_rate,futures_funding_rate', [ + (1000, 0.001, None), + (1000, 0.001, 0.01), + (1000, 0.001, 0.0), + (1000, 0.001, -0.01), + ]) +def test_combine_funding_and_mark( + default_conf, + mocker, + funding_rate, + mark_price, + futures_funding_rate, +): + exchange = get_patched_exchange(mocker, default_conf) + prior2_date = timeframe_to_prev_date('1h', datetime.now(timezone.utc) - timedelta(hours=2)) + prior_date = timeframe_to_prev_date('1h', datetime.now(timezone.utc) - timedelta(hours=1)) + trade_date = timeframe_to_prev_date('1h', datetime.now(timezone.utc)) + funding_rates = DataFrame([ + {'date': prior2_date, 'open': funding_rate}, + {'date': prior_date, 'open': funding_rate}, + {'date': trade_date, 'open': funding_rate}, + ]) + mark_rates = DataFrame([ + {'date': prior2_date, 'open': mark_price}, + {'date': prior_date, 'open': mark_price}, + {'date': trade_date, 'open': mark_price}, + ]) + + df = exchange.combine_funding_and_mark(funding_rates, mark_rates, futures_funding_rate) + assert 'open_mark' in df.columns + assert 'open_fund' in df.columns + assert len(df) == 3 + + funding_rates = DataFrame([ + {'date': trade_date, 'open': funding_rate}, + ]) + mark_rates = DataFrame([ + {'date': prior2_date, 'open': mark_price}, + {'date': prior_date, 'open': mark_price}, + {'date': trade_date, 'open': mark_price}, + ]) + df = exchange.combine_funding_and_mark(funding_rates, mark_rates, futures_funding_rate) + + if futures_funding_rate is not None: + assert len(df) == 3 + assert df.iloc[0]['open_fund'] == futures_funding_rate + assert df.iloc[1]['open_fund'] == futures_funding_rate + assert df.iloc[2]['open_fund'] == funding_rate + else: + assert len(df) == 1 + + # Empty funding rates + funding_rates = DataFrame([], columns=['date', 'open']) + df = exchange.combine_funding_and_mark(funding_rates, mark_rates, futures_funding_rate) + if futures_funding_rate is not None: + assert len(df) == 3 + assert df.iloc[0]['open_fund'] == futures_funding_rate + assert df.iloc[1]['open_fund'] == futures_funding_rate + assert df.iloc[2]['open_fund'] == futures_funding_rate + else: + assert len(df) == 0 + + def test_get_or_calculate_liquidation_price(mocker, default_conf): api_mock = MagicMock() From 963cc17c18c171d34f51add0a344a9c7633dbc56 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 21 May 2022 16:05:00 +0200 Subject: [PATCH 22/81] Update leveraged tiers --- .../exchange/binance_leverage_tiers.json | 15933 ++++++++-------- tests/conftest.py | 255 +- 2 files changed, 8283 insertions(+), 7905 deletions(-) diff --git a/freqtrade/exchange/binance_leverage_tiers.json b/freqtrade/exchange/binance_leverage_tiers.json index ddffe1250..9292509bf 100644 --- a/freqtrade/exchange/binance_leverage_tiers.json +++ b/freqtrade/exchange/binance_leverage_tiers.json @@ -1,91 +1,195 @@ { "RAY/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.5", + "cum": "386950.0" + } + } + ], + "API3/USDT": [ + { + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 25.0, + "info": { + "bracket": "1", + "initialLeverage": "25", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.01", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "2", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "5000", + "maintMarginRatio": "0.025", + "cum": "75.0" + } + }, + { + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "100000", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "700.0" + } + }, + { + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1", + "cum": "5700.0" + } + }, + { + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 2.0, + "info": { + "bracket": "5", + "initialLeverage": "2", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.125", + "cum": "11950.0" + } + }, + { + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "6", + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -93,106 +197,113 @@ ], "SUSHI/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 50000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "2000000", + "notionalCap": "50000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -200,91 +311,97 @@ ], "CVC/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -292,91 +409,97 @@ ], "BTS/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -384,91 +507,97 @@ ], "HOT/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -476,91 +605,97 @@ ], "ZRX/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -568,91 +703,97 @@ ], "QTUM/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -660,91 +801,97 @@ ], "IOTA/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -752,151 +899,161 @@ ], "BTC/BUSD": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "BUSD", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.004, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.004", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 2.0, + "currency": "BUSD", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.005, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "2", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.005", "cum": "50.0" } }, { - "tier": 3, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "BUSD", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "3", "initialLeverage": "20", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.01", "cum": "1300.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 7500000, + "tier": 4.0, + "currency": "BUSD", + "minNotional": 1000000.0, + "maxNotional": 7500000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "7500000", - "minNotional": "1000000", + "notionalCap": "7500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.025", "cum": "16300.0" } }, { - "tier": 5, - "minNotional": 7500000, - "maxNotional": 40000000, + "tier": 5.0, + "currency": "BUSD", + "minNotional": 7500000.0, + "maxNotional": 40000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 6, + "maxLeverage": 6.0, "info": { "bracket": "5", "initialLeverage": "6", - "maxNotional": "40000000", - "minNotional": "7500000", + "notionalCap": "40000000", + "notionalFloor": "7500000", "maintMarginRatio": "0.05", "cum": "203800.0" } }, { - "tier": 6, - "minNotional": 40000000, - "maxNotional": 100000000, + "tier": 6.0, + "currency": "BUSD", + "minNotional": 40000000.0, + "maxNotional": 100000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "6", "initialLeverage": "5", - "maxNotional": "100000000", - "minNotional": "40000000", + "notionalCap": "100000000", + "notionalFloor": "40000000", "maintMarginRatio": "0.1", "cum": "2203800.0" } }, { - "tier": 7, - "minNotional": 100000000, - "maxNotional": 200000000, + "tier": 7.0, + "currency": "BUSD", + "minNotional": 100000000.0, + "maxNotional": 200000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "7", "initialLeverage": "4", - "maxNotional": "200000000", - "minNotional": "100000000", + "notionalCap": "200000000", + "notionalFloor": "100000000", "maintMarginRatio": "0.125", "cum": "4703800.0" } }, { - "tier": 8, - "minNotional": 200000000, - "maxNotional": 400000000, + "tier": 8.0, + "currency": "BUSD", + "minNotional": 200000000.0, + "maxNotional": 400000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "maxNotional": "400000000", - "minNotional": "200000000", + "notionalCap": "400000000", + "notionalFloor": "200000000", "maintMarginRatio": "0.15", "cum": "9703800.0" } }, { - "tier": 9, - "minNotional": 400000000, - "maxNotional": 600000000, + "tier": 9.0, + "currency": "BUSD", + "minNotional": 400000000.0, + "maxNotional": 600000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "9", "initialLeverage": "2", - "maxNotional": "600000000", - "minNotional": "400000000", + "notionalCap": "600000000", + "notionalFloor": "400000000", "maintMarginRatio": "0.25", "cum": "4.97038E7" } }, { - "tier": 10, - "minNotional": 600000000, - "maxNotional": 1000000000, + "tier": 10.0, + "currency": "BUSD", + "minNotional": 600000000.0, + "maxNotional": 1000000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "10", "initialLeverage": "1", - "maxNotional": "1000000000", - "minNotional": "600000000", + "notionalCap": "1000000000", + "notionalFloor": "600000000", "maintMarginRatio": "0.5", "cum": "1.997038E8" } @@ -904,91 +1061,97 @@ ], "WAVES/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -996,136 +1159,145 @@ ], "ADA/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6233035.0" } @@ -1133,183 +1305,97 @@ ], "LIT/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", - "maintMarginRatio": "0.5", - "cum": "386950.0" - } - } - ], - "NU/USDT": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 25, - "info": { - "bracket": "1", - "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", - "maintMarginRatio": "0.01", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20, - "info": { - "bracket": "2", - "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", - "maintMarginRatio": "0.025", - "cum": "75.0" - } - }, - { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "3", - "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" - } - }, - { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "4", - "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", - "maintMarginRatio": "0.1", - "cum": "5700.0" - } - }, - { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 2, - "info": { - "bracket": "5", - "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.125", - "cum": "11950.0" - } - }, - { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "6", - "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -1317,136 +1403,145 @@ ], "XTZ/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6233035.0" } @@ -1454,136 +1549,145 @@ ], "BNB/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6233035.0" } @@ -1591,183 +1695,293 @@ ], "AKRO/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.012, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.012", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "65.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "690.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5690.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11940.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386940.0" } } ], - "HNT/USDT": [ + "DAR/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "initialLeverage": "25", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.5", + "cum": "386950.0" + } + } + ], + "HNT/USDT": [ + { + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 50.0, + "info": { + "bracket": "1", + "initialLeverage": "50", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.01", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "2", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "5000", + "maintMarginRatio": "0.025", + "cum": "75.0" + } + }, + { + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "100000", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "700.0" + } + }, + { + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1", + "cum": "5700.0" + } + }, + { + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 2.0, + "info": { + "bracket": "5", + "initialLeverage": "2", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.125", + "cum": "11950.0" + } + }, + { + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "6", + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -1775,136 +1989,145 @@ ], "ETC/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6233035.0" } @@ -1912,136 +2135,145 @@ ], "XMR/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6233035.0" } @@ -2049,91 +2281,97 @@ ], "YFI/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -2141,365 +2379,259 @@ ], "FTT/BUSD": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 100000, + "tier": 1.0, + "currency": "BUSD", + "minNotional": 0.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "1", "initialLeverage": "20", - "maxNotional": "100000", - "minNotional": "0", + "notionalCap": "100000", + "notionalFloor": "0", "maintMarginRatio": "0.025", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 100000, - "maxNotional": 500000, + "tier": 2.0, + "currency": "BUSD", + "minNotional": 100000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "2", "initialLeverage": "10", - "maxNotional": "500000", - "minNotional": "100000", + "notionalCap": "500000", + "notionalFloor": "100000", "maintMarginRatio": "0.05", "cum": "2500.0" } }, { - "tier": 3, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "BUSD", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "3", "initialLeverage": "5", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.1", "cum": "27500.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "BUSD", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "4", "initialLeverage": "3", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.15", "cum": "77500.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "BUSD", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", "cum": "277500.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "BUSD", + "minNotional": 5000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "5000000", + "notionalCap": "30000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.5", "cum": "1527500.0" } } ], - "BTCUSDT_210326": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, - "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, - "info": { - "bracket": "1", - "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", - "maintMarginRatio": "0.0065", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 50, - "info": { - "bracket": "2", - "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", - "maintMarginRatio": "0.01", - "cum": "35.0" - } - }, - { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25, - "info": { - "bracket": "3", - "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", - "maintMarginRatio": "0.02", - "cum": "535.0" - } - }, - { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "4", - "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.05", - "cum": "8035.0" - } - }, - { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "5", - "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", - "maintMarginRatio": "0.1", - "cum": "58035.0" - } - }, - { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "6", - "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", - "maintMarginRatio": "0.125", - "cum": "108035.0" - } - }, - { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.15, - "maxLeverage": 3, - "info": { - "bracket": "7", - "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", - "maintMarginRatio": "0.15", - "cum": "233035.0" - } - }, - { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 9223372036854776000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "8", - "initialLeverage": "2", - "maxNotional": "9223372036854775807", - "minNotional": "10000000", - "maintMarginRatio": "0.25", - "cum": "1233035.0" - } - } - ], "ETH/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.005, - "maxLeverage": 100, + "maxLeverage": 100.0, "info": { "bracket": "1", "initialLeverage": "100", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.005", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 100000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "2", "initialLeverage": "75", - "maxNotional": "100000", - "minNotional": "10000", + "notionalCap": "100000", + "notionalFloor": "10000", "maintMarginRatio": "0.0065", "cum": "15.0" } }, { - "tier": 3, - "minNotional": 100000, - "maxNotional": 500000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "3", "initialLeverage": "50", - "maxNotional": "500000", - "minNotional": "100000", + "notionalCap": "500000", + "notionalFloor": "100000", "maintMarginRatio": "0.01", "cum": "365.0" } }, { - "tier": 4, - "minNotional": 500000, - "maxNotional": 1500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1500000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "4", "initialLeverage": "25", - "maxNotional": "1500000", - "minNotional": "500000", + "notionalCap": "1500000", + "notionalFloor": "500000", "maintMarginRatio": "0.02", "cum": "5365.0" } }, { - "tier": 5, - "minNotional": 1500000, - "maxNotional": 4000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1500000.0, + "maxNotional": 4000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "5", "initialLeverage": "10", - "maxNotional": "4000000", - "minNotional": "1500000", + "notionalCap": "4000000", + "notionalFloor": "1500000", "maintMarginRatio": "0.05", "cum": "50365.0" } }, { - "tier": 6, - "minNotional": 4000000, - "maxNotional": 10000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 4000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "6", "initialLeverage": "5", - "maxNotional": "10000000", - "minNotional": "4000000", + "notionalCap": "10000000", + "notionalFloor": "4000000", "maintMarginRatio": "0.1", "cum": "250365.0" } }, { - "tier": 7, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "7", "initialLeverage": "4", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.125", "cum": "500365.0" } }, { - "tier": 8, - "minNotional": 20000000, - "maxNotional": 40000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 40000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "maxNotional": "40000000", - "minNotional": "20000000", + "notionalCap": "40000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.15", "cum": "1000365.0" } }, { - "tier": 9, - "minNotional": 40000000, - "maxNotional": 150000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 40000000.0, + "maxNotional": 150000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "9", "initialLeverage": "2", - "maxNotional": "150000000", - "minNotional": "40000000", + "notionalCap": "150000000", + "notionalFloor": "40000000", "maintMarginRatio": "0.25", "cum": "5000365.0" } }, { - "tier": 10, - "minNotional": 150000000, - "maxNotional": 500000000, + "tier": 10.0, + "currency": "USDT", + "minNotional": 150000000.0, + "maxNotional": 500000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "10", "initialLeverage": "1", - "maxNotional": "500000000", - "minNotional": "150000000", + "notionalCap": "500000000", + "notionalFloor": "150000000", "maintMarginRatio": "0.5", "cum": "4.2500365E7" } @@ -2507,106 +2639,113 @@ ], "ALICE/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -2614,91 +2753,195 @@ ], "ALPHA/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.5", + "cum": "386950.0" + } + } + ], + "WOO/USDT": [ + { + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 25.0, + "info": { + "bracket": "1", + "initialLeverage": "25", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.01", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "2", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "5000", + "maintMarginRatio": "0.025", + "cum": "75.0" + } + }, + { + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "100000", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "700.0" + } + }, + { + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1", + "cum": "5700.0" + } + }, + { + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 2.0, + "info": { + "bracket": "5", + "initialLeverage": "2", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.125", + "cum": "11950.0" + } + }, + { + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "6", + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -2706,91 +2949,97 @@ ], "SFP/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -2798,91 +3047,97 @@ ], "REEF/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -2890,91 +3145,97 @@ ], "BAT/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -2982,106 +3243,113 @@ ], "DOGE/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "7000.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "57000.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "107000.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.25", "cum": "732000.0" } }, { - "tier": 7, - "minNotional": 10000000, - "maxNotional": 50000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "10000000", + "notionalCap": "50000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.5", "cum": "3232000.0" } @@ -3089,136 +3357,145 @@ ], "TRX/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6233035.0" } @@ -3226,275 +3503,195 @@ ], "RLC/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], - "DOTECOUSDT": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, - "maintenanceMarginRate": 0.012, - "maxLeverage": 20, - "info": { - "bracket": "1", - "initialLeverage": "20", - "maxNotional": "5000", - "minNotional": "0", - "maintMarginRatio": "0.012", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, - "maintenanceMarginRate": 0.025, - "maxLeverage": 10, - "info": { - "bracket": "2", - "initialLeverage": "10", - "maxNotional": "25000", - "minNotional": "5000", - "maintMarginRatio": "0.025", - "cum": "65.0" - } - }, - { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 5, - "info": { - "bracket": "3", - "initialLeverage": "5", - "maxNotional": "100000", - "minNotional": "25000", - "maintMarginRatio": "0.05", - "cum": "690.0" - } - }, - { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 4, - "info": { - "bracket": "4", - "initialLeverage": "4", - "maxNotional": "250000", - "minNotional": "100000", - "maintMarginRatio": "0.1", - "cum": "5690.0" - } - }, - { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 2, - "info": { - "bracket": "5", - "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.125", - "cum": "11940.0" - } - }, - { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 9223372036854776000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "6", - "initialLeverage": "1", - "maxNotional": "9223372036854775807", - "minNotional": "1000000", - "maintMarginRatio": "0.5", - "cum": "386940.0" - } - } - ], "BTCSTUSDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 9223372036854776000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 9.223372036854776e+18, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "9223372036854775807", - "minNotional": "1000000", + "notionalCap": "9223372036854775807", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -3502,91 +3699,97 @@ ], "STORJ/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -3594,275 +3797,195 @@ ], "SNX/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], - "ETHUSDT_210625": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 250000, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25, - "info": { - "bracket": "1", - "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "0", - "maintMarginRatio": "0.02", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "2", - "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.05", - "cum": "7500.0" - } - }, - { - "tier": 3, - "minNotional": 1000000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "3", - "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", - "maintMarginRatio": "0.1", - "cum": "57500.0" - } - }, - { - "tier": 4, - "minNotional": 2000000, - "maxNotional": 5000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "4", - "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", - "maintMarginRatio": "0.125", - "cum": "107500.0" - } - }, - { - "tier": 5, - "minNotional": 5000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.15, - "maxLeverage": 3, - "info": { - "bracket": "5", - "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", - "maintMarginRatio": "0.15", - "cum": "232500.0" - } - }, - { - "tier": 6, - "minNotional": 10000000, - "maxNotional": 9223372036854776000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "6", - "initialLeverage": "2", - "maxNotional": "9223372036854775807", - "minNotional": "10000000", - "maintMarginRatio": "0.25", - "cum": "1232500.0" - } - } - ], "1000XEC/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -3870,457 +3993,505 @@ ], "AUDIO/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], + "NEAR/BUSD": [ + { + "tier": 1.0, + "currency": "BUSD", + "minNotional": 0.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "1", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "0", + "maintMarginRatio": "0.025", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "BUSD", + "minNotional": 25000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "2", + "initialLeverage": "10", + "notionalCap": "100000", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "625.0" + } + }, + { + "tier": 3.0, + "currency": "BUSD", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "3", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1", + "cum": "5625.0" + } + }, + { + "tier": 4.0, + "currency": "BUSD", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 2.0, + "info": { + "bracket": "4", + "initialLeverage": "2", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.125", + "cum": "11875.0" + } + }, + { + "tier": 5.0, + "currency": "BUSD", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "5", + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.5", + "cum": "386875.0" + } + } + ], "XLM/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6233035.0" } } ], - "BTCBUSD_210129": [ + "APE/BUSD": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, - "maintenanceMarginRate": 0.004, - "maxLeverage": 20, + "tier": 1.0, + "currency": "BUSD", + "minNotional": 0.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "1", "initialLeverage": "20", - "maxNotional": "5000", - "minNotional": "0", - "maintMarginRatio": "0.004", + "notionalCap": "25000", + "notionalFloor": "0", + "maintMarginRatio": "0.025", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, - "maintenanceMarginRate": 0.005, - "maxLeverage": 15, + "tier": 2.0, + "currency": "BUSD", + "minNotional": 25000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "2", - "initialLeverage": "15", - "maxNotional": "25000", - "minNotional": "5000", - "maintMarginRatio": "0.005", - "cum": "5.0" + "initialLeverage": "10", + "notionalCap": "100000", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "625.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 10, + "tier": 3.0, + "currency": "BUSD", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "3", - "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", - "maintMarginRatio": "0.01", - "cum": "130.0" + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1", + "cum": "5625.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 500000, - "maintenanceMarginRate": 0.025, - "maxLeverage": 7, + "tier": 4.0, + "currency": "BUSD", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 2.0, "info": { "bracket": "4", - "initialLeverage": "7", - "maxNotional": "500000", - "minNotional": "100000", - "maintMarginRatio": "0.025", - "cum": "1630.0" + "initialLeverage": "2", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.125", + "cum": "11875.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6, + "tier": 5.0, + "currency": "BUSD", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, "info": { "bracket": "5", - "initialLeverage": "6", - "maxNotional": "2000000", - "minNotional": "500000", - "maintMarginRatio": "0.05", - "cum": "14130.0" - } - }, - { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "6", - "initialLeverage": "5", - "maxNotional": "5000000", - "minNotional": "2000000", - "maintMarginRatio": "0.1", - "cum": "114130.0" - } - }, - { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "7", - "initialLeverage": "4", - "maxNotional": "10000000", - "minNotional": "5000000", - "maintMarginRatio": "0.125", - "cum": "239130.0" - } - }, - { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, - "maintenanceMarginRate": 0.15, - "maxLeverage": 3, - "info": { - "bracket": "8", - "initialLeverage": "3", - "maxNotional": "20000000", - "minNotional": "10000000", - "maintMarginRatio": "0.15", - "cum": "489130.0" - } - }, - { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 9223372036854776000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "9", - "initialLeverage": "2", - "maxNotional": "9223372036854775807", - "minNotional": "20000000", - "maintMarginRatio": "0.25", - "cum": "2489130.0" + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.5", + "cum": "386875.0" } } ], "IOTX/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -4328,91 +4499,97 @@ ], "NEO/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -4420,91 +4597,97 @@ ], "UNFI/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -4512,106 +4695,113 @@ ], "SAND/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -4619,91 +4809,97 @@ ], "DASH/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -4711,91 +4907,97 @@ ], "KAVA/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -4803,183 +5005,309 @@ ], "RUNE/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], - "CTK/USDT": [ + "APE/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "150000", + "notionalFloor": "50000", + "maintMarginRatio": "0.025", + "cum": "750.0" + } + }, + { + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "250000", + "notionalFloor": "150000", + "maintMarginRatio": "0.05", + "cum": "4500.0" + } + }, + { + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "500000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1", + "cum": "17000.0" + } + }, + { + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "5", + "initialLeverage": "4", + "notionalCap": "1000000", + "notionalFloor": "500000", + "maintMarginRatio": "0.125", + "cum": "29500.0" + } + }, + { + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "6", + "initialLeverage": "2", + "notionalCap": "2000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.25", + "cum": "154500.0" + } + }, + { + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "7", + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "2000000", + "maintMarginRatio": "0.5", + "cum": "654500.0" + } + } + ], + "CTK/USDT": [ + { + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 50.0, + "info": { + "bracket": "1", + "initialLeverage": "50", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.01", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "2", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -4987,136 +5315,145 @@ ], "LINK/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6233035.0" } @@ -5124,106 +5461,227 @@ ], "CELR/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", + "maintMarginRatio": "0.5", + "cum": "654500.0" + } + } + ], + "BNX/USDT": [ + { + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 50.0, + "info": { + "bracket": "1", + "initialLeverage": "50", + "notionalCap": "50000", + "notionalFloor": "0", + "maintMarginRatio": "0.01", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "2", + "initialLeverage": "20", + "notionalCap": "150000", + "notionalFloor": "50000", + "maintMarginRatio": "0.025", + "cum": "750.0" + } + }, + { + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "250000", + "notionalFloor": "150000", + "maintMarginRatio": "0.05", + "cum": "4500.0" + } + }, + { + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "500000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1", + "cum": "17000.0" + } + }, + { + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "5", + "initialLeverage": "4", + "notionalCap": "1000000", + "notionalFloor": "500000", + "maintMarginRatio": "0.125", + "cum": "29500.0" + } + }, + { + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "6", + "initialLeverage": "2", + "notionalCap": "2000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.25", + "cum": "154500.0" + } + }, + { + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 50000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "7", + "initialLeverage": "1", + "notionalCap": "50000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -5231,91 +5689,97 @@ ], "RSR/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -5323,91 +5787,97 @@ ], "ADA/BUSD": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 100000, + "tier": 1.0, + "currency": "BUSD", + "minNotional": 0.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "1", "initialLeverage": "20", - "maxNotional": "100000", - "minNotional": "0", + "notionalCap": "100000", + "notionalFloor": "0", "maintMarginRatio": "0.025", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 100000, - "maxNotional": 500000, + "tier": 2.0, + "currency": "BUSD", + "minNotional": 100000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "2", "initialLeverage": "10", - "maxNotional": "500000", - "minNotional": "100000", + "notionalCap": "500000", + "notionalFloor": "100000", "maintMarginRatio": "0.05", "cum": "2500.0" } }, { - "tier": 3, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "BUSD", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "3", "initialLeverage": "5", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.1", "cum": "27500.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "BUSD", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "4", "initialLeverage": "3", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.15", "cum": "77500.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "BUSD", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", "cum": "277500.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "BUSD", + "minNotional": 5000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "5000000", + "notionalCap": "30000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.5", "cum": "1527500.0" } @@ -5415,91 +5885,97 @@ ], "DGB/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -5507,91 +5983,97 @@ ], "SKL/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -5599,91 +6081,97 @@ ], "REN/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -5691,91 +6179,195 @@ ], "LPT/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.5", + "cum": "386950.0" + } + } + ], + "JASMY/USDT": [ + { + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 25.0, + "info": { + "bracket": "1", + "initialLeverage": "25", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.01", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "2", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "5000", + "maintMarginRatio": "0.025", + "cum": "75.0" + } + }, + { + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "100000", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "700.0" + } + }, + { + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1", + "cum": "5700.0" + } + }, + { + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 2.0, + "info": { + "bracket": "5", + "initialLeverage": "2", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.125", + "cum": "11950.0" + } + }, + { + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "6", + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -5783,91 +6375,97 @@ ], "TOMO/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -5875,91 +6473,97 @@ ], "MTL/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -5967,136 +6571,145 @@ ], "LTC/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6233035.0" } @@ -6104,91 +6717,97 @@ ], "DODO/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -6196,91 +6815,97 @@ ], "EGLD/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 50000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "1000000", + "notionalCap": "50000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -6288,91 +6913,97 @@ ], "KSM/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -6380,275 +7011,195 @@ ], "BNB/BUSD": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 100000, + "tier": 1.0, + "currency": "BUSD", + "minNotional": 0.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "1", "initialLeverage": "20", - "maxNotional": "100000", - "minNotional": "0", + "notionalCap": "100000", + "notionalFloor": "0", "maintMarginRatio": "0.025", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 100000, - "maxNotional": 500000, + "tier": 2.0, + "currency": "BUSD", + "minNotional": 100000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "2", "initialLeverage": "10", - "maxNotional": "500000", - "minNotional": "100000", + "notionalCap": "500000", + "notionalFloor": "100000", "maintMarginRatio": "0.05", "cum": "2500.0" } }, { - "tier": 3, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "BUSD", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "3", "initialLeverage": "5", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.1", "cum": "27500.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "BUSD", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "4", "initialLeverage": "3", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.15", "cum": "77500.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "BUSD", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", "cum": "277500.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "BUSD", + "minNotional": 5000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "5000000", + "notionalCap": "30000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.5", "cum": "1527500.0" } } ], - "BTCUSDT_210625": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 250000, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25, - "info": { - "bracket": "1", - "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "0", - "maintMarginRatio": "0.02", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "2", - "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.05", - "cum": "7500.0" - } - }, - { - "tier": 3, - "minNotional": 1000000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "3", - "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", - "maintMarginRatio": "0.1", - "cum": "57500.0" - } - }, - { - "tier": 4, - "minNotional": 2000000, - "maxNotional": 5000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "4", - "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", - "maintMarginRatio": "0.125", - "cum": "107500.0" - } - }, - { - "tier": 5, - "minNotional": 5000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.15, - "maxLeverage": 3, - "info": { - "bracket": "5", - "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", - "maintMarginRatio": "0.15", - "cum": "232500.0" - } - }, - { - "tier": 6, - "minNotional": 10000000, - "maxNotional": 9223372036854776000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "6", - "initialLeverage": "2", - "maxNotional": "9223372036854775807", - "minNotional": "10000000", - "maintMarginRatio": "0.25", - "cum": "1232500.0" - } - } - ], "ONT/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -6656,198 +7207,309 @@ ], "VET/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } } ], - "TRB/USDT": [ + "IMX/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "initialLeverage": "25", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.5", + "cum": "386950.0" + } + } + ], + "TRB/USDT": [ + { + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 50.0, + "info": { + "bracket": "1", + "initialLeverage": "50", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.01", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "2", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "5000", + "maintMarginRatio": "0.025", + "cum": "75.0" + } + }, + { + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "100000", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "700.0" + } + }, + { + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1", + "cum": "5700.0" + } + }, + { + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 2.0, + "info": { + "bracket": "5", + "initialLeverage": "2", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.125", + "cum": "11950.0" + } + }, + { + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "6", + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -6855,198 +7517,309 @@ ], "MANA/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } } ], - "COTI/USDT": [ + "FLOW/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "initialLeverage": "25", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.5", + "cum": "386950.0" + } + } + ], + "COTI/USDT": [ + { + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 50.0, + "info": { + "bracket": "1", + "initialLeverage": "50", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.01", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "2", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "5000", + "maintMarginRatio": "0.025", + "cum": "75.0" + } + }, + { + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "100000", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "700.0" + } + }, + { + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1", + "cum": "5700.0" + } + }, + { + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 2.0, + "info": { + "bracket": "5", + "initialLeverage": "2", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.125", + "cum": "11950.0" + } + }, + { + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "6", + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -7054,581 +7827,571 @@ ], "CHR/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], - "ETHUSDT_210924": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 250000, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25, - "info": { - "bracket": "1", - "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "0", - "maintMarginRatio": "0.02", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "2", - "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.05", - "cum": "7500.0" - } - }, - { - "tier": 3, - "minNotional": 1000000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "3", - "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", - "maintMarginRatio": "0.1", - "cum": "57500.0" - } - }, - { - "tier": 4, - "minNotional": 2000000, - "maxNotional": 5000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "4", - "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", - "maintMarginRatio": "0.125", - "cum": "107500.0" - } - }, - { - "tier": 5, - "minNotional": 5000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.15, - "maxLeverage": 3, - "info": { - "bracket": "5", - "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", - "maintMarginRatio": "0.15", - "cum": "232500.0" - } - }, - { - "tier": 6, - "minNotional": 10000000, - "maxNotional": 20000000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "6", - "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", - "maintMarginRatio": "0.25", - "cum": "1232500.0" - } - }, - { - "tier": 7, - "minNotional": 20000000, - "maxNotional": 50000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "7", - "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", - "maintMarginRatio": "0.5", - "cum": "6232500.0" - } - } - ], "BAKE/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], + "AVAX/BUSD": [ + { + "tier": 1.0, + "currency": "BUSD", + "minNotional": 0.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "1", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "0", + "maintMarginRatio": "0.025", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "BUSD", + "minNotional": 25000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "2", + "initialLeverage": "10", + "notionalCap": "100000", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "625.0" + } + }, + { + "tier": 3.0, + "currency": "BUSD", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "3", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1", + "cum": "5625.0" + } + }, + { + "tier": 4.0, + "currency": "BUSD", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 2.0, + "info": { + "bracket": "4", + "initialLeverage": "2", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.125", + "cum": "11875.0" + } + }, + { + "tier": 5.0, + "currency": "BUSD", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "5", + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.5", + "cum": "386875.0" + } + } + ], "GRT/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], - "ETHUSDT_220325": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 375000, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25, - "info": { - "bracket": "1", - "initialLeverage": "25", - "maxNotional": "375000", - "minNotional": "0", - "maintMarginRatio": "0.02", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 375000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "2", - "initialLeverage": "10", - "maxNotional": "2000000", - "minNotional": "375000", - "maintMarginRatio": "0.05", - "cum": "11250.0" - } - }, - { - "tier": 3, - "minNotional": 2000000, - "maxNotional": 4000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "3", - "initialLeverage": "5", - "maxNotional": "4000000", - "minNotional": "2000000", - "maintMarginRatio": "0.1", - "cum": "111250.0" - } - }, - { - "tier": 4, - "minNotional": 4000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "4", - "initialLeverage": "4", - "maxNotional": "10000000", - "minNotional": "4000000", - "maintMarginRatio": "0.125", - "cum": "211250.0" - } - }, - { - "tier": 5, - "minNotional": 10000000, - "maxNotional": 20000000, - "maintenanceMarginRate": 0.15, - "maxLeverage": 3, - "info": { - "bracket": "5", - "initialLeverage": "3", - "maxNotional": "20000000", - "minNotional": "10000000", - "maintMarginRatio": "0.15", - "cum": "461250.0" - } - }, - { - "tier": 6, - "minNotional": 20000000, - "maxNotional": 40000000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "6", - "initialLeverage": "2", - "maxNotional": "40000000", - "minNotional": "20000000", - "maintMarginRatio": "0.25", - "cum": "2461250.0" - } - }, - { - "tier": 7, - "minNotional": 40000000, - "maxNotional": 400000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "7", - "initialLeverage": "1", - "maxNotional": "400000000", - "minNotional": "40000000", - "maintMarginRatio": "0.5", - "cum": "1.246125E7" - } - } - ], "FLM/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.5", + "cum": "386950.0" + } + } + ], + "GAL/USDT": [ + { + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 25.0, + "info": { + "bracket": "1", + "initialLeverage": "25", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.01", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "2", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "5000", + "maintMarginRatio": "0.025", + "cum": "75.0" + } + }, + { + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "100000", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "700.0" + } + }, + { + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1", + "cum": "5700.0" + } + }, + { + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 2.0, + "info": { + "bracket": "5", + "initialLeverage": "2", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.125", + "cum": "11950.0" + } + }, + { + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "6", + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -7636,91 +8399,97 @@ ], "MASK/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -7728,335 +8497,243 @@ ], "EOS/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6233035.0" } } ], - "ETHUSDT_211231": [ + "OGN/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 375000, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "375000", - "minNotional": "0", - "maintMarginRatio": "0.02", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 375000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "2", - "initialLeverage": "10", - "maxNotional": "2000000", - "minNotional": "375000", - "maintMarginRatio": "0.05", - "cum": "11250.0" - } - }, - { - "tier": 3, - "minNotional": 2000000, - "maxNotional": 4000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "3", - "initialLeverage": "5", - "maxNotional": "4000000", - "minNotional": "2000000", - "maintMarginRatio": "0.1", - "cum": "111250.0" - } - }, - { - "tier": 4, - "minNotional": 4000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "4", - "initialLeverage": "4", - "maxNotional": "10000000", - "minNotional": "4000000", - "maintMarginRatio": "0.125", - "cum": "211250.0" - } - }, - { - "tier": 5, - "minNotional": 10000000, - "maxNotional": 20000000, - "maintenanceMarginRate": 0.15, - "maxLeverage": 3, - "info": { - "bracket": "5", - "initialLeverage": "3", - "maxNotional": "20000000", - "minNotional": "10000000", - "maintMarginRatio": "0.15", - "cum": "461250.0" - } - }, - { - "tier": 6, - "minNotional": 20000000, - "maxNotional": 40000000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "6", - "initialLeverage": "2", - "maxNotional": "40000000", - "minNotional": "20000000", - "maintMarginRatio": "0.25", - "cum": "2461250.0" - } - }, - { - "tier": 7, - "minNotional": 40000000, - "maxNotional": 400000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "7", - "initialLeverage": "1", - "maxNotional": "400000000", - "minNotional": "40000000", - "maintMarginRatio": "0.5", - "cum": "1.246125E7" - } - } - ], - "OGN/USDT": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 50, - "info": { - "bracket": "1", - "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -8064,183 +8741,309 @@ ], "SC/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], + "ETHUSDT_220624": [ + { + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 375000.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, + "info": { + "bracket": "1", + "initialLeverage": "25", + "notionalCap": "375000", + "notionalFloor": "0", + "maintMarginRatio": "0.02", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "USDT", + "minNotional": 375000.0, + "maxNotional": 2000000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "2", + "initialLeverage": "10", + "notionalCap": "2000000", + "notionalFloor": "375000", + "maintMarginRatio": "0.05", + "cum": "11250.0" + } + }, + { + "tier": 3.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 4000000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "3", + "initialLeverage": "5", + "notionalCap": "4000000", + "notionalFloor": "2000000", + "maintMarginRatio": "0.1", + "cum": "111250.0" + } + }, + { + "tier": 4.0, + "currency": "USDT", + "minNotional": 4000000.0, + "maxNotional": 10000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "4", + "initialLeverage": "4", + "notionalCap": "10000000", + "notionalFloor": "4000000", + "maintMarginRatio": "0.125", + "cum": "211250.0" + } + }, + { + "tier": 5.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, + "maintenanceMarginRate": 0.15, + "maxLeverage": 3.0, + "info": { + "bracket": "5", + "initialLeverage": "3", + "notionalCap": "20000000", + "notionalFloor": "10000000", + "maintMarginRatio": "0.15", + "cum": "461250.0" + } + }, + { + "tier": 6.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 40000000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "6", + "initialLeverage": "2", + "notionalCap": "40000000", + "notionalFloor": "20000000", + "maintMarginRatio": "0.25", + "cum": "2461250.0" + } + }, + { + "tier": 7.0, + "currency": "USDT", + "minNotional": 40000000.0, + "maxNotional": 400000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "7", + "initialLeverage": "1", + "notionalCap": "400000000", + "notionalFloor": "40000000", + "maintMarginRatio": "0.5", + "cum": "1.246125E7" + } + } + ], "BAL/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -8248,489 +9051,195 @@ ], "STMX/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], - "BTTUSDT": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 25, - "info": { - "bracket": "1", - "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", - "maintMarginRatio": "0.01", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20, - "info": { - "bracket": "2", - "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", - "maintMarginRatio": "0.025", - "cum": "75.0" - } - }, - { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "3", - "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" - } - }, - { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "4", - "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", - "maintMarginRatio": "0.1", - "cum": "5700.0" - } - }, - { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 2, - "info": { - "bracket": "5", - "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.125", - "cum": "11950.0" - } - }, - { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "6", - "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", - "maintMarginRatio": "0.5", - "cum": "386950.0" - } - } - ], - "LUNA/USDT": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 50, - "info": { - "bracket": "1", - "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", - "maintMarginRatio": "0.01", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 50000, - "maxNotional": 250000, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25, - "info": { - "bracket": "2", - "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", - "maintMarginRatio": "0.02", - "cum": "500.0" - } - }, - { - "tier": 3, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "3", - "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.05", - "cum": "8000.0" - } - }, - { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "4", - "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", - "maintMarginRatio": "0.1", - "cum": "58000.0" - } - }, - { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "5", - "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", - "maintMarginRatio": "0.125", - "cum": "108000.0" - } - }, - { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.1665, - "maxLeverage": 3, - "info": { - "bracket": "6", - "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", - "maintMarginRatio": "0.1665", - "cum": "315500.0" - } - }, - { - "tier": 7, - "minNotional": 10000000, - "maxNotional": 15000000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "7", - "initialLeverage": "2", - "maxNotional": "15000000", - "minNotional": "10000000", - "maintMarginRatio": "0.25", - "cum": "1150500.0" - } - }, - { - "tier": 8, - "minNotional": 15000000, - "maxNotional": 50000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "8", - "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "15000000", - "maintMarginRatio": "0.5", - "cum": "4900500.0" - } - } - ], "DENT/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", - "maintMarginRatio": "0.5", - "cum": "386950.0" - } - } - ], - "1000BTTC/USDT": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 25, - "info": { - "bracket": "1", - "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", - "maintMarginRatio": "0.01", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20, - "info": { - "bracket": "2", - "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", - "maintMarginRatio": "0.025", - "cum": "75.0" - } - }, - { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "3", - "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" - } - }, - { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "4", - "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", - "maintMarginRatio": "0.1", - "cum": "5700.0" - } - }, - { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 2, - "info": { - "bracket": "5", - "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.125", - "cum": "11950.0" - } - }, - { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "6", - "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -8738,91 +9247,97 @@ ], "KNC/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -8830,91 +9345,97 @@ ], "SRM/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -8922,106 +9443,113 @@ ], "ENJ/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -9029,91 +9557,97 @@ ], "C98/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -9121,91 +9655,97 @@ ], "ZEN/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -9213,106 +9753,113 @@ ], "ATOM/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -9320,106 +9867,113 @@ ], "NEAR/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -9427,91 +9981,97 @@ ], "SOL/BUSD": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 100000, + "tier": 1.0, + "currency": "BUSD", + "minNotional": 0.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "1", "initialLeverage": "20", - "maxNotional": "100000", - "minNotional": "0", + "notionalCap": "100000", + "notionalFloor": "0", "maintMarginRatio": "0.025", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 100000, - "maxNotional": 500000, + "tier": 2.0, + "currency": "BUSD", + "minNotional": 100000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "2", "initialLeverage": "10", - "maxNotional": "500000", - "minNotional": "100000", + "notionalCap": "500000", + "notionalFloor": "100000", "maintMarginRatio": "0.05", "cum": "2500.0" } }, { - "tier": 3, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "BUSD", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "3", "initialLeverage": "5", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.1", "cum": "27500.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "BUSD", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "4", "initialLeverage": "3", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.15", "cum": "77500.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "BUSD", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", "cum": "277500.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "BUSD", + "minNotional": 5000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "5000000", + "notionalCap": "30000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.5", "cum": "1527500.0" } @@ -9519,91 +10079,97 @@ ], "ENS/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -9611,136 +10177,145 @@ ], "BCH/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6233035.0" } @@ -9748,91 +10323,97 @@ ], "ATA/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -9840,91 +10421,97 @@ ], "IOST/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -9932,91 +10519,97 @@ ], "HBAR/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -10024,106 +10617,113 @@ ], "ZEC/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -10131,106 +10731,113 @@ ], "1000SHIB/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -10238,91 +10845,97 @@ ], "TLM/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -10330,183 +10943,97 @@ ], "ANT/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", - "maintMarginRatio": "0.5", - "cum": "386950.0" - } - } - ], - "BZRXUSDT": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 25, - "info": { - "bracket": "1", - "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", - "maintMarginRatio": "0.01", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20, - "info": { - "bracket": "2", - "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", - "maintMarginRatio": "0.025", - "cum": "75.0" - } - }, - { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "3", - "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" - } - }, - { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "4", - "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", - "maintMarginRatio": "0.1", - "cum": "5700.0" - } - }, - { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 2, - "info": { - "bracket": "5", - "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.125", - "cum": "11950.0" - } - }, - { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "6", - "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -10514,151 +11041,161 @@ ], "ETH/BUSD": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 25000, + "tier": 1.0, + "currency": "BUSD", + "minNotional": 0.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.004, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "25000", - "minNotional": "0", + "notionalCap": "25000", + "notionalFloor": "0", "maintMarginRatio": "0.004", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 2.0, + "currency": "BUSD", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.005, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "2", "initialLeverage": "25", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.005", "cum": "25.0" } }, { - "tier": 3, - "minNotional": 100000, - "maxNotional": 500000, + "tier": 3.0, + "currency": "BUSD", + "minNotional": 100000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "3", "initialLeverage": "20", - "maxNotional": "500000", - "minNotional": "100000", + "notionalCap": "500000", + "notionalFloor": "100000", "maintMarginRatio": "0.01", "cum": "525.0" } }, { - "tier": 4, - "minNotional": 500000, - "maxNotional": 1500000, + "tier": 4.0, + "currency": "BUSD", + "minNotional": 500000.0, + "maxNotional": 1500000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1500000", - "minNotional": "500000", + "notionalCap": "1500000", + "notionalFloor": "500000", "maintMarginRatio": "0.025", "cum": "8025.0" } }, { - "tier": 5, - "minNotional": 1500000, - "maxNotional": 4000000, + "tier": 5.0, + "currency": "BUSD", + "minNotional": 1500000.0, + "maxNotional": 4000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 6, + "maxLeverage": 6.0, "info": { "bracket": "5", "initialLeverage": "6", - "maxNotional": "4000000", - "minNotional": "1500000", + "notionalCap": "4000000", + "notionalFloor": "1500000", "maintMarginRatio": "0.05", "cum": "45525.0" } }, { - "tier": 6, - "minNotional": 4000000, - "maxNotional": 10000000, + "tier": 6.0, + "currency": "BUSD", + "minNotional": 4000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "6", "initialLeverage": "5", - "maxNotional": "10000000", - "minNotional": "4000000", + "notionalCap": "10000000", + "notionalFloor": "4000000", "maintMarginRatio": "0.1", "cum": "245525.0" } }, { - "tier": 7, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 7.0, + "currency": "BUSD", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "7", "initialLeverage": "4", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.125", "cum": "495525.0" } }, { - "tier": 8, - "minNotional": 20000000, - "maxNotional": 40000000, + "tier": 8.0, + "currency": "BUSD", + "minNotional": 20000000.0, + "maxNotional": 40000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "maxNotional": "40000000", - "minNotional": "20000000", + "notionalCap": "40000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.15", "cum": "995525.0" } }, { - "tier": 9, - "minNotional": 40000000, - "maxNotional": 150000000, + "tier": 9.0, + "currency": "BUSD", + "minNotional": 40000000.0, + "maxNotional": 150000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "9", "initialLeverage": "2", - "maxNotional": "150000000", - "minNotional": "40000000", + "notionalCap": "150000000", + "notionalFloor": "40000000", "maintMarginRatio": "0.25", "cum": "4995525.0" } }, { - "tier": 10, - "minNotional": 150000000, - "maxNotional": 500000000, + "tier": 10.0, + "currency": "BUSD", + "minNotional": 150000000.0, + "maxNotional": 500000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "10", "initialLeverage": "1", - "maxNotional": "500000000", - "minNotional": "150000000", + "notionalCap": "500000000", + "notionalFloor": "150000000", "maintMarginRatio": "0.5", "cum": "4.2495525E7" } @@ -10666,106 +11203,113 @@ ], "GALA/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -10773,121 +11317,129 @@ ], "AAVE/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "2", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "500.0" } }, { - "tier": 3, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8000.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58000.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108000.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.1665, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.1665", "cum": "315500.0" } }, { - "tier": 7, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1150500.0" } }, { - "tier": 8, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6150500.0" } @@ -10895,91 +11447,97 @@ ], "GTC/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -10987,106 +11545,113 @@ ], "ALGO/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -11094,305 +11659,211 @@ ], "ICP/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], - "BTCUSDT_210924": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 250000, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25, - "info": { - "bracket": "1", - "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "0", - "maintMarginRatio": "0.02", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "2", - "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.05", - "cum": "7500.0" - } - }, - { - "tier": 3, - "minNotional": 1000000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "3", - "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", - "maintMarginRatio": "0.1", - "cum": "57500.0" - } - }, - { - "tier": 4, - "minNotional": 2000000, - "maxNotional": 5000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "4", - "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", - "maintMarginRatio": "0.125", - "cum": "107500.0" - } - }, - { - "tier": 5, - "minNotional": 5000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.15, - "maxLeverage": 3, - "info": { - "bracket": "5", - "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", - "maintMarginRatio": "0.15", - "cum": "232500.0" - } - }, - { - "tier": 6, - "minNotional": 10000000, - "maxNotional": 20000000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "6", - "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", - "maintMarginRatio": "0.25", - "cum": "1232500.0" - } - }, - { - "tier": 7, - "minNotional": 20000000, - "maxNotional": 50000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "7", - "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", - "maintMarginRatio": "0.5", - "cum": "6232500.0" - } - } - ], "LRC/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -11400,305 +11871,211 @@ ], "AVAX/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", - "cum": "4500.0" + "cum": "7000.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", - "cum": "17000.0" + "cum": "57000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 750000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "750000", - "minNotional": "500000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", - "cum": "29500.0" + "cum": "107000.0" } }, { - "tier": 6, - "minNotional": 750000, - "maxNotional": 1000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "750000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.25", - "cum": "123250.0" + "cum": "732000.0" } }, { - "tier": 7, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "50000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.5", - "cum": "373250.0" - } - } - ], - "BTCUSDT_220325": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 375000, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25, - "info": { - "bracket": "1", - "initialLeverage": "25", - "maxNotional": "375000", - "minNotional": "0", - "maintMarginRatio": "0.02", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 375000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "2", - "initialLeverage": "10", - "maxNotional": "2000000", - "minNotional": "375000", - "maintMarginRatio": "0.05", - "cum": "11250.0" - } - }, - { - "tier": 3, - "minNotional": 2000000, - "maxNotional": 4000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "3", - "initialLeverage": "5", - "maxNotional": "4000000", - "minNotional": "2000000", - "maintMarginRatio": "0.1", - "cum": "111250.0" - } - }, - { - "tier": 4, - "minNotional": 4000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "4", - "initialLeverage": "4", - "maxNotional": "10000000", - "minNotional": "4000000", - "maintMarginRatio": "0.125", - "cum": "211250.0" - } - }, - { - "tier": 5, - "minNotional": 10000000, - "maxNotional": 20000000, - "maintenanceMarginRate": 0.15, - "maxLeverage": 3, - "info": { - "bracket": "5", - "initialLeverage": "3", - "maxNotional": "20000000", - "minNotional": "10000000", - "maintMarginRatio": "0.15", - "cum": "461250.0" - } - }, - { - "tier": 6, - "minNotional": 20000000, - "maxNotional": 40000000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "6", - "initialLeverage": "2", - "maxNotional": "40000000", - "minNotional": "20000000", - "maintMarginRatio": "0.25", - "cum": "2461250.0" - } - }, - { - "tier": 7, - "minNotional": 40000000, - "maxNotional": 400000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "7", - "initialLeverage": "1", - "maxNotional": "400000000", - "minNotional": "40000000", - "maintMarginRatio": "0.5", - "cum": "1.246125E7" + "cum": "3232000.0" } } ], "ARPA/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -11706,91 +12083,97 @@ ], "CELO/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -11798,91 +12181,97 @@ ], "ROSE/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -11890,106 +12279,113 @@ ], "MATIC/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 750000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 750000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "750000", - "minNotional": "500000", + "notionalCap": "750000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 750000, - "maxNotional": 1000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 750000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "750000", + "notionalCap": "1000000", + "notionalFloor": "750000", "maintMarginRatio": "0.25", "cum": "123250.0" } }, { - "tier": 7, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "373250.0" } @@ -11997,91 +12393,97 @@ ], "1INCH/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.012, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.012", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "65.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "690.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5690.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11940.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 100000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 100000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "100000000", - "minNotional": "1000000", + "notionalCap": "100000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386940.0" } @@ -12089,91 +12491,97 @@ ], "MKR/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -12181,91 +12589,97 @@ ], "PEOPLE/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -12273,121 +12687,129 @@ ], "THETA/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "2", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "500.0" } }, { - "tier": 3, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8000.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58000.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108000.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.1665, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.1665", "cum": "315500.0" } }, { - "tier": 7, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1150500.0" } }, { - "tier": 8, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6150500.0" } @@ -12395,335 +12817,227 @@ ], "UNI/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "2", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "500.0" } }, { - "tier": 3, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8000.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58000.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108000.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.1665, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.1665", "cum": "315500.0" } }, { - "tier": 7, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1150500.0" } }, { - "tier": 8, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6150500.0" } } ], - "ETHUSDT_210326": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, - "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, - "info": { - "bracket": "1", - "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", - "maintMarginRatio": "0.0065", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 50, - "info": { - "bracket": "2", - "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", - "maintMarginRatio": "0.01", - "cum": "35.0" - } - }, - { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25, - "info": { - "bracket": "3", - "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", - "maintMarginRatio": "0.02", - "cum": "535.0" - } - }, - { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "4", - "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.05", - "cum": "8035.0" - } - }, - { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "5", - "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", - "maintMarginRatio": "0.1", - "cum": "58035.0" - } - }, - { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "6", - "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", - "maintMarginRatio": "0.125", - "cum": "108035.0" - } - }, - { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.15, - "maxLeverage": 3, - "info": { - "bracket": "7", - "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", - "maintMarginRatio": "0.15", - "cum": "233035.0" - } - }, - { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 9223372036854776000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "8", - "initialLeverage": "2", - "maxNotional": "9223372036854775807", - "minNotional": "10000000", - "maintMarginRatio": "0.25", - "cum": "1233035.0" - } - } - ], "LINA/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -12731,91 +13045,97 @@ ], "AR/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -12823,91 +13143,97 @@ ], "RVN/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -12915,121 +13241,129 @@ ], "FIL/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "2", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "500.0" } }, { - "tier": 3, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8000.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58000.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108000.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.1665, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.1665", "cum": "315500.0" } }, { - "tier": 7, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1150500.0" } }, { - "tier": 8, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6150500.0" } @@ -13037,91 +13371,97 @@ ], "NKN/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -13129,91 +13469,97 @@ ], "KLAY/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -13221,91 +13567,97 @@ ], "DEFI/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -13313,91 +13665,97 @@ ], "COMP/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -13405,91 +13763,97 @@ ], "BTCDOM/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -13497,106 +13861,113 @@ ], "SOL/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "7000.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "57000.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "107000.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.25", "cum": "732000.0" } }, { - "tier": 7, - "minNotional": 10000000, - "maxNotional": 50000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "10000000", + "notionalCap": "50000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.5", "cum": "3232000.0" } @@ -13604,243 +13975,259 @@ ], "BTC/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.004, - "maxLeverage": 125, + "maxLeverage": 125.0, "info": { "bracket": "1", "initialLeverage": "125", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.004", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.005, - "maxLeverage": 100, + "maxLeverage": 100.0, "info": { "bracket": "2", "initialLeverage": "100", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.005", "cum": "50.0" } }, { - "tier": 3, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "3", "initialLeverage": "50", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.01", "cum": "1300.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 7500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "4", "initialLeverage": "20", - "maxNotional": "7500000", - "minNotional": "1000000", + "notionalCap": "10000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.025", "cum": "16300.0" } }, { - "tier": 5, - "minNotional": 7500000, - "maxNotional": 40000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "5", "initialLeverage": "10", - "maxNotional": "40000000", - "minNotional": "7500000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.05", - "cum": "203800.0" + "cum": "266300.0" } }, { - "tier": 6, - "minNotional": 40000000, - "maxNotional": 100000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "6", "initialLeverage": "5", - "maxNotional": "100000000", - "minNotional": "40000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.1", - "cum": "2203800.0" + "cum": "1266300.0" } }, { - "tier": 7, - "minNotional": 100000000, - "maxNotional": 200000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 50000000.0, + "maxNotional": 100000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "7", "initialLeverage": "4", - "maxNotional": "200000000", - "minNotional": "100000000", + "notionalCap": "100000000", + "notionalFloor": "50000000", "maintMarginRatio": "0.125", - "cum": "4703800.0" + "cum": "2516300.0" } }, { - "tier": 8, - "minNotional": 200000000, - "maxNotional": 400000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 100000000.0, + "maxNotional": 200000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "maxNotional": "400000000", - "minNotional": "200000000", + "notionalCap": "200000000", + "notionalFloor": "100000000", "maintMarginRatio": "0.15", - "cum": "9703800.0" + "cum": "5016300.0" } }, { - "tier": 9, - "minNotional": 400000000, - "maxNotional": 600000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 200000000.0, + "maxNotional": 300000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "9", "initialLeverage": "2", - "maxNotional": "600000000", - "minNotional": "400000000", + "notionalCap": "300000000", + "notionalFloor": "200000000", "maintMarginRatio": "0.25", - "cum": "4.97038E7" + "cum": "2.50163E7" } }, { - "tier": 10, - "minNotional": 600000000, - "maxNotional": 1000000000, + "tier": 10.0, + "currency": "USDT", + "minNotional": 300000000.0, + "maxNotional": 9.223372036854776e+18, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "10", "initialLeverage": "1", - "maxNotional": "1000000000", - "minNotional": "600000000", + "notionalCap": "9223372036854775807", + "notionalFloor": "300000000", "maintMarginRatio": "0.5", - "cum": "1.997038E8" + "cum": "1.000163E8" } } ], "OMG/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.024, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.024", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "5.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "630.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5630.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11880.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 10000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "10000000", - "minNotional": "1000000", + "notionalCap": "10000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386880.0" } @@ -13848,91 +14235,97 @@ ], "ICX/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -13940,810 +14333,521 @@ ], "BLZ/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], - "BTCUSDT_211231": [ + "GMT/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 375000, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25, - "info": { - "bracket": "1", - "initialLeverage": "25", - "maxNotional": "375000", - "minNotional": "0", - "maintMarginRatio": "0.02", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 375000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "2", - "initialLeverage": "10", - "maxNotional": "2000000", - "minNotional": "375000", - "maintMarginRatio": "0.05", - "cum": "11250.0" - } - }, - { - "tier": 3, - "minNotional": 2000000, - "maxNotional": 4000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "3", - "initialLeverage": "5", - "maxNotional": "4000000", - "minNotional": "2000000", - "maintMarginRatio": "0.1", - "cum": "111250.0" - } - }, - { - "tier": 4, - "minNotional": 4000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "4", - "initialLeverage": "4", - "maxNotional": "10000000", - "minNotional": "4000000", - "maintMarginRatio": "0.125", - "cum": "211250.0" - } - }, - { - "tier": 5, - "minNotional": 10000000, - "maxNotional": 20000000, - "maintenanceMarginRate": 0.15, - "maxLeverage": 3, - "info": { - "bracket": "5", - "initialLeverage": "3", - "maxNotional": "20000000", - "minNotional": "10000000", - "maintMarginRatio": "0.15", - "cum": "461250.0" - } - }, - { - "tier": 6, - "minNotional": 20000000, - "maxNotional": 40000000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "6", - "initialLeverage": "2", - "maxNotional": "40000000", - "minNotional": "20000000", - "maintMarginRatio": "0.25", - "cum": "2461250.0" - } - }, - { - "tier": 7, - "minNotional": 40000000, - "maxNotional": 400000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "7", - "initialLeverage": "1", - "maxNotional": "400000000", - "minNotional": "40000000", - "maintMarginRatio": "0.5", - "cum": "1.246125E7" - } - } - ], - "FTM/USDT": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 750000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "750000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 750000, - "maxNotional": 1000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "750000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "123250.0" + "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", - "cum": "373250.0" + "cum": "654500.0" } } ], - "YFII/USDT": [ + "FTM/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", - "cum": "75.0" + "cum": "750.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", - "cum": "700.0" + "cum": "7000.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", - "cum": "5700.0" + "cum": "57000.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "initialLeverage": "4", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", - "cum": "11950.0" + "cum": "107000.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "tier": 6.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "6", - "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", - "maintMarginRatio": "0.5", - "cum": "386950.0" - } - } - ], - "KEEP/USDT": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 50, - "info": { - "bracket": "1", - "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", - "maintMarginRatio": "0.01", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20, - "info": { - "bracket": "2", - "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", - "maintMarginRatio": "0.025", - "cum": "75.0" - } - }, - { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "3", - "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" - } - }, - { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "4", - "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", - "maintMarginRatio": "0.1", - "cum": "5700.0" - } - }, - { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 2, - "info": { - "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.125", - "cum": "11950.0" + "notionalCap": "10000000", + "notionalFloor": "5000000", + "maintMarginRatio": "0.25", + "cum": "732000.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { - "bracket": "6", + "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "50000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.5", - "cum": "386950.0" + "cum": "3232000.0" } } ], "BAND/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], - "BTCBUSD_210226": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, - "maintenanceMarginRate": 0.004, - "maxLeverage": 20, - "info": { - "bracket": "1", - "initialLeverage": "20", - "maxNotional": "5000", - "minNotional": "0", - "maintMarginRatio": "0.004", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, - "maintenanceMarginRate": 0.005, - "maxLeverage": 15, - "info": { - "bracket": "2", - "initialLeverage": "15", - "maxNotional": "25000", - "minNotional": "5000", - "maintMarginRatio": "0.005", - "cum": "5.0" - } - }, - { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 10, - "info": { - "bracket": "3", - "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", - "maintMarginRatio": "0.01", - "cum": "130.0" - } - }, - { - "tier": 4, - "minNotional": 100000, - "maxNotional": 500000, - "maintenanceMarginRate": 0.025, - "maxLeverage": 7, - "info": { - "bracket": "4", - "initialLeverage": "7", - "maxNotional": "500000", - "minNotional": "100000", - "maintMarginRatio": "0.025", - "cum": "1630.0" - } - }, - { - "tier": 5, - "minNotional": 500000, - "maxNotional": 2000000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6, - "info": { - "bracket": "5", - "initialLeverage": "6", - "maxNotional": "2000000", - "minNotional": "500000", - "maintMarginRatio": "0.05", - "cum": "14130.0" - } - }, - { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "6", - "initialLeverage": "5", - "maxNotional": "5000000", - "minNotional": "2000000", - "maintMarginRatio": "0.1", - "cum": "114130.0" - } - }, - { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4, - "info": { - "bracket": "7", - "initialLeverage": "4", - "maxNotional": "10000000", - "minNotional": "5000000", - "maintMarginRatio": "0.125", - "cum": "239130.0" - } - }, - { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, - "maintenanceMarginRate": 0.15, - "maxLeverage": 3, - "info": { - "bracket": "8", - "initialLeverage": "3", - "maxNotional": "20000000", - "minNotional": "10000000", - "maintMarginRatio": "0.15", - "cum": "489130.0" - } - }, - { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 9223372036854776000, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2, - "info": { - "bracket": "9", - "initialLeverage": "2", - "maxNotional": "9223372036854775807", - "minNotional": "20000000", - "maintMarginRatio": "0.25", - "cum": "2489130.0" - } - } - ], "XRP/BUSD": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 100000, + "tier": 1.0, + "currency": "BUSD", + "minNotional": 0.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "1", "initialLeverage": "20", - "maxNotional": "100000", - "minNotional": "0", + "notionalCap": "100000", + "notionalFloor": "0", "maintMarginRatio": "0.025", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 100000, - "maxNotional": 500000, + "tier": 2.0, + "currency": "BUSD", + "minNotional": 100000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "2", "initialLeverage": "10", - "maxNotional": "500000", - "minNotional": "100000", + "notionalCap": "500000", + "notionalFloor": "100000", "maintMarginRatio": "0.05", "cum": "2500.0" } }, { - "tier": 3, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "BUSD", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "3", "initialLeverage": "5", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.1", "cum": "27500.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "BUSD", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "4", "initialLeverage": "3", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.15", "cum": "77500.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "BUSD", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", "cum": "277500.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "BUSD", + "minNotional": 5000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "5000000", + "notionalCap": "30000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.5", "cum": "1527500.0" } @@ -14751,91 +14855,97 @@ ], "DOGE/BUSD": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 100000, + "tier": 1.0, + "currency": "BUSD", + "minNotional": 0.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "1", "initialLeverage": "20", - "maxNotional": "100000", - "minNotional": "0", + "notionalCap": "100000", + "notionalFloor": "0", "maintMarginRatio": "0.025", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 100000, - "maxNotional": 500000, + "tier": 2.0, + "currency": "BUSD", + "minNotional": 100000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "2", "initialLeverage": "10", - "maxNotional": "500000", - "minNotional": "100000", + "notionalCap": "500000", + "notionalFloor": "100000", "maintMarginRatio": "0.05", "cum": "2500.0" } }, { - "tier": 3, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "BUSD", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "3", "initialLeverage": "5", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.1", "cum": "27500.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "BUSD", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "4", "initialLeverage": "3", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.15", "cum": "77500.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "BUSD", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", "cum": "277500.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "BUSD", + "minNotional": 5000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "5000000", + "notionalCap": "30000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.5", "cum": "1527500.0" } @@ -14843,228 +14953,341 @@ ], "XRP/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 20000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "20000000", - "minNotional": "10000000", + "notionalCap": "20000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 20000000, - "maxNotional": 50000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "20000000", + "notionalCap": "50000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", "cum": "6233035.0" } } ], - "SXP/USDT": [ + "FTT/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "initialLeverage": "25", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.5", + "cum": "386950.0" + } + } + ], + "SXP/USDT": [ + { + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 50.0, + "info": { + "bracket": "1", + "initialLeverage": "50", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.01", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "2", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "5000", + "maintMarginRatio": "0.025", + "cum": "75.0" + } + }, + { + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "100000", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "700.0" + } + }, + { + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1", + "cum": "5700.0" + } + }, + { + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 2.0, + "info": { + "bracket": "5", + "initialLeverage": "2", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.125", + "cum": "11950.0" + } + }, + { + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "6", + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -15072,106 +15295,113 @@ ], "CRV/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -15179,91 +15409,97 @@ ], "BEL/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -15271,136 +15507,145 @@ ], "DOT/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 10000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.0065, - "maxLeverage": 75, + "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "maxNotional": "10000", - "minNotional": "0", + "notionalCap": "10000", + "notionalFloor": "0", "maintMarginRatio": "0.0065", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 10000, - "maxNotional": 50000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "10000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.01", "cum": "35.0" } }, { - "tier": 3, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "535.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8035.0" } }, { - "tier": 5, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58035.0" } }, { - "tier": 6, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108035.0" } }, { - "tier": 7, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.15, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.15", "cum": "233035.0" } }, { - "tier": 8, - "minNotional": 10000000, - "maxNotional": 50000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "maxNotional": "50000000", - "minNotional": "10000000", + "notionalCap": "50000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1233035.0" } }, { - "tier": 9, - "minNotional": 50000000, - "maxNotional": 100000000, + "tier": 9.0, + "currency": "USDT", + "minNotional": 50000000.0, + "maxNotional": 100000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "maxNotional": "100000000", - "minNotional": "50000000", + "notionalCap": "100000000", + "notionalFloor": "50000000", "maintMarginRatio": "0.5", "cum": "1.3733035E7" } @@ -15408,198 +15653,293 @@ ], "XEM/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], + "GMT/BUSD": [ + { + "tier": 1.0, + "currency": "BUSD", + "minNotional": 0.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "1", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "0", + "maintMarginRatio": "0.025", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "BUSD", + "minNotional": 25000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "2", + "initialLeverage": "10", + "notionalCap": "100000", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "625.0" + } + }, + { + "tier": 3.0, + "currency": "BUSD", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "3", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1", + "cum": "5625.0" + } + }, + { + "tier": 4.0, + "currency": "BUSD", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 2.0, + "info": { + "bracket": "4", + "initialLeverage": "2", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.125", + "cum": "11875.0" + } + }, + { + "tier": 5.0, + "currency": "BUSD", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "5", + "initialLeverage": "1", + "notionalCap": "30000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.5", + "cum": "386875.0" + } + } + ], "ONE/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 2000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "2000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", "cum": "654500.0" } @@ -15607,213 +15947,243 @@ ], "ZIL/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", - "cum": "75.0" + "cum": "750.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", - "cum": "700.0" + "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", - "cum": "5700.0" + "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "initialLeverage": "4", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", - "cum": "11950.0" + "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "6", + "initialLeverage": "2", + "notionalCap": "2000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.25", + "cum": "154500.0" + } + }, + { + "tier": 7.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 30000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", - "cum": "386950.0" + "cum": "654500.0" } } ], "AXS/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 250000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "2", "initialLeverage": "25", - "maxNotional": "250000", - "minNotional": "50000", + "notionalCap": "250000", + "notionalFloor": "50000", "maintMarginRatio": "0.02", "cum": "500.0" } }, { - "tier": 3, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.05", "cum": "8000.0" } }, { - "tier": 4, - "minNotional": 1000000, - "maxNotional": 2000000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "2000000", - "minNotional": "1000000", + "notionalCap": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.1", "cum": "58000.0" } }, { - "tier": 5, - "minNotional": 2000000, - "maxNotional": 5000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "5000000", - "minNotional": "2000000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.125", "cum": "108000.0" } }, { - "tier": 6, - "minNotional": 5000000, - "maxNotional": 10000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 5000000.0, + "maxNotional": 10000000.0, "maintenanceMarginRate": 0.1665, - "maxLeverage": 3, + "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "maxNotional": "10000000", - "minNotional": "5000000", + "notionalCap": "10000000", + "notionalFloor": "5000000", "maintMarginRatio": "0.1665", "cum": "315500.0" } }, { - "tier": 7, - "minNotional": 10000000, - "maxNotional": 15000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 15000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "maxNotional": "15000000", - "minNotional": "10000000", + "notionalCap": "15000000", + "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1150500.0" } }, { - "tier": 8, - "minNotional": 15000000, - "maxNotional": 50000000, + "tier": 8.0, + "currency": "USDT", + "minNotional": 15000000.0, + "maxNotional": 50000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "maxNotional": "50000000", - "minNotional": "15000000", + "notionalCap": "50000000", + "notionalFloor": "15000000", "maintMarginRatio": "0.5", "cum": "4900500.0" } @@ -15821,106 +16191,113 @@ ], "DYDX/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 50000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "50000", - "minNotional": "0", + "notionalCap": "50000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 50000, - "maxNotional": 150000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 150000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "150000", - "minNotional": "50000", + "notionalCap": "150000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", "cum": "750.0" } }, { - "tier": 3, - "minNotional": 150000, - "maxNotional": 250000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 150000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "250000", - "minNotional": "150000", + "notionalCap": "250000", + "notionalFloor": "150000", "maintMarginRatio": "0.05", "cum": "4500.0" } }, { - "tier": 4, - "minNotional": 250000, - "maxNotional": 500000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "500000", - "minNotional": "250000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1", "cum": "17000.0" } }, { - "tier": 5, - "minNotional": 500000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 4, + "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "maxNotional": "1000000", - "minNotional": "500000", + "notionalCap": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.125", "cum": "29500.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 4000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 4000000.0, "maintenanceMarginRate": 0.25, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "6", "initialLeverage": "2", - "maxNotional": "4000000", - "minNotional": "1000000", + "notionalCap": "4000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", "cum": "154500.0" } }, { - "tier": 7, - "minNotional": 4000000, - "maxNotional": 30000000, + "tier": 7.0, + "currency": "USDT", + "minNotional": 4000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "7", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "4000000", + "notionalCap": "30000000", + "notionalFloor": "4000000", "maintMarginRatio": "0.5", "cum": "1154500.0" } @@ -15928,91 +16305,97 @@ ], "OCEAN/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } @@ -16020,275 +16403,195 @@ ], "CHZ/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.012, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.012", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "65.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "690.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5690.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11940.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386940.0" } } ], - "LENDUSDT": [ - { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 50, - "info": { - "bracket": "1", - "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", - "maintMarginRatio": "0.01", - "cum": "0.0" - } - }, - { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20, - "info": { - "bracket": "2", - "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", - "maintMarginRatio": "0.025", - "cum": "75.0" - } - }, - { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10, - "info": { - "bracket": "3", - "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" - } - }, - { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5, - "info": { - "bracket": "4", - "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", - "maintMarginRatio": "0.1", - "cum": "5700.0" - } - }, - { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, - "maintenanceMarginRate": 0.125, - "maxLeverage": 2, - "info": { - "bracket": "5", - "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", - "maintMarginRatio": "0.125", - "cum": "11950.0" - } - }, - { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 9223372036854776000, - "maintenanceMarginRate": 0.5, - "maxLeverage": 1, - "info": { - "bracket": "6", - "initialLeverage": "1", - "maxNotional": "9223372036854775807", - "minNotional": "1000000", - "maintMarginRatio": "0.5", - "cum": "386950.0" - } - } - ], "ANKR/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.012, - "maxLeverage": 50, + "maxLeverage": 50.0, "info": { "bracket": "1", "initialLeverage": "50", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.012", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "65.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "690.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5690.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11940.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386940.0" } @@ -16296,183 +16599,309 @@ ], "DUSK/USDT": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } } ], - "CTSI/USDT": [ + "BTCUSDT_220624": [ { - "tier": 1, - "minNotional": 0, - "maxNotional": 5000, - "maintenanceMarginRate": 0.01, - "maxLeverage": 25, + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 375000.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", "initialLeverage": "25", - "maxNotional": "5000", - "minNotional": "0", + "notionalCap": "375000", + "notionalFloor": "0", + "maintMarginRatio": "0.02", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "currency": "USDT", + "minNotional": 375000.0, + "maxNotional": 2000000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "2", + "initialLeverage": "10", + "notionalCap": "2000000", + "notionalFloor": "375000", + "maintMarginRatio": "0.05", + "cum": "11250.0" + } + }, + { + "tier": 3.0, + "currency": "USDT", + "minNotional": 2000000.0, + "maxNotional": 4000000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "3", + "initialLeverage": "5", + "notionalCap": "4000000", + "notionalFloor": "2000000", + "maintMarginRatio": "0.1", + "cum": "111250.0" + } + }, + { + "tier": 4.0, + "currency": "USDT", + "minNotional": 4000000.0, + "maxNotional": 10000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "4", + "initialLeverage": "4", + "notionalCap": "10000000", + "notionalFloor": "4000000", + "maintMarginRatio": "0.125", + "cum": "211250.0" + } + }, + { + "tier": 5.0, + "currency": "USDT", + "minNotional": 10000000.0, + "maxNotional": 20000000.0, + "maintenanceMarginRate": 0.15, + "maxLeverage": 3.0, + "info": { + "bracket": "5", + "initialLeverage": "3", + "notionalCap": "20000000", + "notionalFloor": "10000000", + "maintMarginRatio": "0.15", + "cum": "461250.0" + } + }, + { + "tier": 6.0, + "currency": "USDT", + "minNotional": 20000000.0, + "maxNotional": 40000000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "6", + "initialLeverage": "2", + "notionalCap": "40000000", + "notionalFloor": "20000000", + "maintMarginRatio": "0.25", + "cum": "2461250.0" + } + }, + { + "tier": 7.0, + "currency": "USDT", + "minNotional": 40000000.0, + "maxNotional": 400000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "7", + "initialLeverage": "1", + "notionalCap": "400000000", + "notionalFloor": "40000000", + "maintMarginRatio": "0.5", + "cum": "1.246125E7" + } + } + ], + "CTSI/USDT": [ + { + "tier": 1.0, + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 25.0, + "info": { + "bracket": "1", + "initialLeverage": "25", + "notionalCap": "5000", + "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" } }, { - "tier": 2, - "minNotional": 5000, - "maxNotional": 25000, + "tier": 2.0, + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20, + "maxLeverage": 20.0, "info": { "bracket": "2", "initialLeverage": "20", - "maxNotional": "25000", - "minNotional": "5000", + "notionalCap": "25000", + "notionalFloor": "5000", "maintMarginRatio": "0.025", "cum": "75.0" } }, { - "tier": 3, - "minNotional": 25000, - "maxNotional": 100000, + "tier": 3.0, + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10, + "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "maxNotional": "100000", - "minNotional": "25000", + "notionalCap": "100000", + "notionalFloor": "25000", "maintMarginRatio": "0.05", "cum": "700.0" } }, { - "tier": 4, - "minNotional": 100000, - "maxNotional": 250000, + "tier": 4.0, + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1, - "maxLeverage": 5, + "maxLeverage": 5.0, "info": { "bracket": "4", "initialLeverage": "5", - "maxNotional": "250000", - "minNotional": "100000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1", "cum": "5700.0" } }, { - "tier": 5, - "minNotional": 250000, - "maxNotional": 1000000, + "tier": 5.0, + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.125, - "maxLeverage": 2, + "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "maxNotional": "1000000", - "minNotional": "250000", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "11950.0" } }, { - "tier": 6, - "minNotional": 1000000, - "maxNotional": 30000000, + "tier": 6.0, + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 30000000.0, "maintenanceMarginRate": 0.5, - "maxLeverage": 1, + "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "maxNotional": "30000000", - "minNotional": "1000000", + "notionalCap": "30000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.5", "cum": "386950.0" } diff --git a/tests/conftest.py b/tests/conftest.py index cc07de1de..3fe7ad2b0 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3058,43 +3058,37 @@ def leverage_tiers(): 'mmr': 0.01, 'lev': 50, 'maintAmt': 0.0 - }, - { + }, { 'min': 50000, 'max': 150000, 'mmr': 0.025, 'lev': 20, 'maintAmt': 750.0 - }, - { + }, { 'min': 150000, 'max': 250000, 'mmr': 0.05, 'lev': 10, 'maintAmt': 4500.0 - }, - { + }, { 'min': 250000, 'max': 500000, 'mmr': 0.1, 'lev': 5, 'maintAmt': 17000.0 - }, - { + }, { 'min': 500000, 'max': 1000000, 'mmr': 0.125, 'lev': 4, 'maintAmt': 29500.0 - }, - { + }, { 'min': 1000000, 'max': 2000000, 'mmr': 0.25, 'lev': 2, 'maintAmt': 154500.0 - }, - { + }, { 'min': 2000000, 'max': 30000000, 'mmr': 0.5, @@ -3109,36 +3103,31 @@ def leverage_tiers(): 'mmr': 0.012, 'lev': 50, 'maintAmt': 0.0 - }, - { + }, { 'min': 5000, 'max': 25000, 'mmr': 0.025, 'lev': 20, 'maintAmt': 65.0 - }, - { + }, { 'min': 25000, 'max': 100000, 'mmr': 0.05, 'lev': 10, 'maintAmt': 690.0 - }, - { + }, { 'min': 100000, 'max': 250000, 'mmr': 0.1, 'lev': 5, 'maintAmt': 5690.0 - }, - { + }, { 'min': 250000, 'max': 1000000, 'mmr': 0.125, 'lev': 2, 'maintAmt': 11940.0 - }, - { + }, { 'min': 1000000, 'max': 100000000, 'mmr': 0.5, @@ -3153,50 +3142,43 @@ def leverage_tiers(): 'mmr': 0.01, 'lev': 50, 'maintAmt': 0.0 - }, - { + }, { 'min': 50000, 'max': 250000, 'mmr': 0.02, 'lev': 25, 'maintAmt': 500.0 - }, - { + }, { 'min': 250000, 'max': 1000000, 'mmr': 0.05, 'lev': 10, 'maintAmt': 8000.0 - }, - { + }, { 'min': 1000000, 'max': 2000000, 'mmr': 0.1, 'lev': 5, 'maintAmt': 58000.0 - }, - { + }, { 'min': 2000000, 'max': 5000000, 'mmr': 0.125, 'lev': 4, 'maintAmt': 108000.0 - }, - { + }, { 'min': 5000000, 'max': 10000000, 'mmr': 0.1665, 'lev': 3, 'maintAmt': 315500.0 - }, - { + }, { 'min': 10000000, 'max': 20000000, 'mmr': 0.25, 'lev': 2, 'maintAmt': 1150500.0 - }, - { + }, { "min": 20000000, "max": 50000000, "mmr": 0.5, @@ -3211,36 +3193,31 @@ def leverage_tiers(): "mmr": 0.025, "lev": 20, "maintAmt": 0.0 - }, - { + }, { "min": 100000, "max": 500000, "mmr": 0.05, "lev": 10, "maintAmt": 2500.0 - }, - { + }, { "min": 500000, "max": 1000000, "mmr": 0.1, "lev": 5, "maintAmt": 27500.0 - }, - { + }, { "min": 1000000, "max": 2000000, "mmr": 0.15, "lev": 3, "maintAmt": 77500.0 - }, - { + }, { "min": 2000000, "max": 5000000, "mmr": 0.25, "lev": 2, "maintAmt": 277500.0 - }, - { + }, { "min": 5000000, "max": 30000000, "mmr": 0.5, @@ -3255,36 +3232,31 @@ def leverage_tiers(): "mmr": 0.025, "lev": 20, "maintAmt": 0.0 - }, - { + }, { "min": 100000, # stake = 10000.0 "max": 500000, # max_stake = 50000.0 "mmr": 0.05, "lev": 10, "maintAmt": 2500.0 - }, - { + }, { "min": 500000, # stake = 100000.0 "max": 1000000, # max_stake = 200000.0 "mmr": 0.1, "lev": 5, "maintAmt": 27500.0 - }, - { + }, { "min": 1000000, # stake = 333333.3333333333 "max": 2000000, # max_stake = 666666.6666666666 "mmr": 0.15, "lev": 3, "maintAmt": 77500.0 - }, - { + }, { "min": 2000000, # stake = 1000000.0 "max": 5000000, # max_stake = 2500000.0 "mmr": 0.25, "lev": 2, "maintAmt": 277500.0 - }, - { + }, { "min": 5000000, # stake = 5000000.0 "max": 30000000, # max_stake = 30000000.0 "mmr": 0.5, @@ -3299,57 +3271,49 @@ def leverage_tiers(): "mmr": 0.0065, "lev": 75, "maintAmt": 0.0 - }, - { + }, { "min": 10000, # stake = 200.0 "max": 50000, # max_stake = 1000.0 "mmr": 0.01, "lev": 50, "maintAmt": 35.0 - }, - { + }, { "min": 50000, # stake = 2000.0 "max": 250000, # max_stake = 10000.0 "mmr": 0.02, "lev": 25, "maintAmt": 535.0 - }, - { + }, { "min": 250000, # stake = 25000.0 "max": 1000000, # max_stake = 100000.0 "mmr": 0.05, "lev": 10, "maintAmt": 8035.0 - }, - { + }, { "min": 1000000, # stake = 200000.0 "max": 2000000, # max_stake = 400000.0 "mmr": 0.1, "lev": 5, "maintAmt": 58035.0 - }, - { + }, { "min": 2000000, # stake = 500000.0 "max": 5000000, # max_stake = 1250000.0 "mmr": 0.125, "lev": 4, "maintAmt": 108035.0 - }, - { + }, { "min": 5000000, # stake = 1666666.6666666667 "max": 10000000, # max_stake = 3333333.3333333335 "mmr": 0.15, "lev": 3, "maintAmt": 233035.0 - }, - { + }, { "min": 10000000, # stake = 5000000.0 "max": 20000000, # max_stake = 10000000.0 "mmr": 0.25, "lev": 2, "maintAmt": 1233035.0 - }, - { + }, { "min": 20000000, # stake = 20000000.0 "max": 50000000, # max_stake = 50000000.0 "mmr": 0.5, @@ -3359,75 +3323,66 @@ def leverage_tiers(): ], 'BTC/USDT': [ { - "min": 0, # stake = 0.0 - "max": 50000, # max_stake = 400.0 - "mmr": 0.004, - "lev": 125, - "maintAmt": 0.0 - }, - { - "min": 50000, # stake = 500.0 - "max": 250000, # max_stake = 2500.0 - "mmr": 0.005, - "lev": 100, - "maintAmt": 50.0 - }, - { - "min": 250000, # stake = 5000.0 - "max": 1000000, # max_stake = 20000.0 - "mmr": 0.01, - "lev": 50, - "maintAmt": 1300.0 - }, - { - "min": 1000000, # stake = 50000.0 - "max": 7500000, # max_stake = 375000.0 - "mmr": 0.025, - "lev": 20, - "maintAmt": 16300.0 - }, - { - "min": 7500000, # stake = 750000.0 - "max": 40000000, # max_stake = 4000000.0 - "mmr": 0.05, - "lev": 10, - "maintAmt": 203800.0 - }, - { - "min": 40000000, # stake = 8000000.0 - "max": 100000000, # max_stake = 20000000.0 - "mmr": 0.1, - "lev": 5, - "maintAmt": 2203800.0 - }, - { - "min": 100000000, # stake = 25000000.0 - "max": 200000000, # max_stake = 50000000.0 - "mmr": 0.125, - "lev": 4, - "maintAmt": 4703800.0 - }, - { - "min": 200000000, # stake = 66666666.666666664 - "max": 400000000, # max_stake = 133333333.33333333 - "mmr": 0.15, - "lev": 3, - "maintAmt": 9703800.0 - }, - { - "min": 400000000, # stake = 200000000.0 - "max": 600000000, # max_stake = 300000000.0 - "mmr": 0.25, - "lev": 2, - "maintAmt": 4.97038E7 - }, - { - "min": 600000000, # stake = 600000000.0 - "max": 1000000000, # max_stake = 1000000000.0 - "mmr": 0.5, - "lev": 1, - "maintAmt": 1.997038E8 - }, + 'min': 0.0, + 'max': 50000.0, + 'mmr': 0.004, + 'lev': 125.0, + 'maintAmt': 0.0 + }, { + 'min': 50000.0, + 'max': 250000.0, + 'mmr': 0.005, + 'lev': 100.0, + 'maintAmt': 50.0 + }, { + 'min': 250000.0, + 'max': 1000000.0, + 'mmr': 0.01, + 'lev': 50.0, + 'maintAmt': 1300.0 + }, { + 'min': 1000000.0, + 'max': 10000000.0, + 'mmr': 0.025, + 'lev': 20.0, + 'maintAmt': 16300.0 + }, { + 'min': 10000000.0, + 'max': 20000000.0, + 'mmr': 0.05, + 'lev': 10.0, + 'maintAmt': 266300.0 + }, { + 'min': 20000000.0, + 'max': 50000000.0, + 'mmr': 0.1, + 'lev': 5.0, + 'maintAmt': 1266300.0 + }, { + 'min': 50000000.0, + 'max': 100000000.0, + 'mmr': 0.125, + 'lev': 4.0, + 'maintAmt': 2516300.0 + }, { + 'min': 100000000.0, + 'max': 200000000.0, + 'mmr': 0.15, + 'lev': 3.0, + 'maintAmt': 5016300.0 + }, { + 'min': 200000000.0, + 'max': 300000000.0, + 'mmr': 0.25, + 'lev': 2.0, + 'maintAmt': 25016300.0 + }, { + 'min': 300000000.0, + 'max': 9.223372036854776e+18, + 'mmr': 0.5, + 'lev': 1.0, + 'maintAmt': 100016300.0 + } ], "ZEC/USDT": [ { @@ -3436,43 +3391,37 @@ def leverage_tiers(): 'mmr': 0.01, 'lev': 50, 'maintAmt': 0.0 - }, - { + }, { 'min': 50000, 'max': 150000, 'mmr': 0.025, 'lev': 20, 'maintAmt': 750.0 - }, - { + }, { 'min': 150000, 'max': 250000, 'mmr': 0.05, 'lev': 10, 'maintAmt': 4500.0 - }, - { + }, { 'min': 250000, 'max': 500000, 'mmr': 0.1, 'lev': 5, 'maintAmt': 17000.0 - }, - { + }, { 'min': 500000, 'max': 1000000, 'mmr': 0.125, 'lev': 4, 'maintAmt': 29500.0 - }, - { + }, { 'min': 1000000, 'max': 2000000, 'mmr': 0.25, 'lev': 2, 'maintAmt': 154500.0 - }, - { + }, { 'min': 2000000, 'max': 30000000, 'mmr': 0.5, From 97abcf4b320d9ee514f99392e52187b155437a61 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 21 May 2022 16:10:00 +0200 Subject: [PATCH 23/81] Add documentation for leverage_tiers update --- docs/developer.md | 26 +++++++++++++++++++ .../exchange/binance_leverage_tiers.json | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/docs/developer.md b/docs/developer.md index 185bfc92e..ce7fb37e1 100644 --- a/docs/developer.md +++ b/docs/developer.md @@ -314,6 +314,32 @@ The output will show the last entry from the Exchange as well as the current UTC If the day shows the same day, then the last candle can be assumed as incomplete and should be dropped (leave the setting `"ohlcv_partial_candle"` from the exchange-class untouched / True). Otherwise, set `"ohlcv_partial_candle"` to `False` to not drop Candles (shown in the example above). Another way is to run this command multiple times in a row and observe if the volume is changing (while the date remains the same). +### Update binance cached leverage tiers + +Updating leveraged tiers should be done regularly - and requires an authenticated account with futures enabled. + +``` python +import ccxt +import json +from pathlib import Path + +exchange = ccxt.binance({ + 'apiKey': '', + 'secret': '' + 'options': {'defaultType': 'future'} + }) +_ = exchange.load_markets() + +lev_tiers = exchange.fetch_leverage_tiers() + +# Assumes this is running in the root of the repository. +file = Path('freqtrade/exchange/binance_leverage_tiers.json') +json.dump(lev_tiers, file.open('w'), indent=2) + +``` + +This file should then be contributed upstream, so others can benefit from this, too. + ## Updating example notebooks To keep the jupyter notebooks aligned with the documentation, the following should be ran after updating a example notebook. diff --git a/freqtrade/exchange/binance_leverage_tiers.json b/freqtrade/exchange/binance_leverage_tiers.json index 9292509bf..126b3b62f 100644 --- a/freqtrade/exchange/binance_leverage_tiers.json +++ b/freqtrade/exchange/binance_leverage_tiers.json @@ -16907,4 +16907,4 @@ } } ] -} +} \ No newline at end of file From 681ef131741315a0c82d4a461577758eab9ff868 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 21 May 2022 16:23:29 +0200 Subject: [PATCH 24/81] Relax dry-run leverage test-case to simplify future updates --- tests/conftest.py | 255 ++++++++++++++++++++------------- tests/exchange/test_binance.py | 6 +- 2 files changed, 155 insertions(+), 106 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 3fe7ad2b0..cc07de1de 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3058,37 +3058,43 @@ def leverage_tiers(): 'mmr': 0.01, 'lev': 50, 'maintAmt': 0.0 - }, { + }, + { 'min': 50000, 'max': 150000, 'mmr': 0.025, 'lev': 20, 'maintAmt': 750.0 - }, { + }, + { 'min': 150000, 'max': 250000, 'mmr': 0.05, 'lev': 10, 'maintAmt': 4500.0 - }, { + }, + { 'min': 250000, 'max': 500000, 'mmr': 0.1, 'lev': 5, 'maintAmt': 17000.0 - }, { + }, + { 'min': 500000, 'max': 1000000, 'mmr': 0.125, 'lev': 4, 'maintAmt': 29500.0 - }, { + }, + { 'min': 1000000, 'max': 2000000, 'mmr': 0.25, 'lev': 2, 'maintAmt': 154500.0 - }, { + }, + { 'min': 2000000, 'max': 30000000, 'mmr': 0.5, @@ -3103,31 +3109,36 @@ def leverage_tiers(): 'mmr': 0.012, 'lev': 50, 'maintAmt': 0.0 - }, { + }, + { 'min': 5000, 'max': 25000, 'mmr': 0.025, 'lev': 20, 'maintAmt': 65.0 - }, { + }, + { 'min': 25000, 'max': 100000, 'mmr': 0.05, 'lev': 10, 'maintAmt': 690.0 - }, { + }, + { 'min': 100000, 'max': 250000, 'mmr': 0.1, 'lev': 5, 'maintAmt': 5690.0 - }, { + }, + { 'min': 250000, 'max': 1000000, 'mmr': 0.125, 'lev': 2, 'maintAmt': 11940.0 - }, { + }, + { 'min': 1000000, 'max': 100000000, 'mmr': 0.5, @@ -3142,43 +3153,50 @@ def leverage_tiers(): 'mmr': 0.01, 'lev': 50, 'maintAmt': 0.0 - }, { + }, + { 'min': 50000, 'max': 250000, 'mmr': 0.02, 'lev': 25, 'maintAmt': 500.0 - }, { + }, + { 'min': 250000, 'max': 1000000, 'mmr': 0.05, 'lev': 10, 'maintAmt': 8000.0 - }, { + }, + { 'min': 1000000, 'max': 2000000, 'mmr': 0.1, 'lev': 5, 'maintAmt': 58000.0 - }, { + }, + { 'min': 2000000, 'max': 5000000, 'mmr': 0.125, 'lev': 4, 'maintAmt': 108000.0 - }, { + }, + { 'min': 5000000, 'max': 10000000, 'mmr': 0.1665, 'lev': 3, 'maintAmt': 315500.0 - }, { + }, + { 'min': 10000000, 'max': 20000000, 'mmr': 0.25, 'lev': 2, 'maintAmt': 1150500.0 - }, { + }, + { "min": 20000000, "max": 50000000, "mmr": 0.5, @@ -3193,31 +3211,36 @@ def leverage_tiers(): "mmr": 0.025, "lev": 20, "maintAmt": 0.0 - }, { + }, + { "min": 100000, "max": 500000, "mmr": 0.05, "lev": 10, "maintAmt": 2500.0 - }, { + }, + { "min": 500000, "max": 1000000, "mmr": 0.1, "lev": 5, "maintAmt": 27500.0 - }, { + }, + { "min": 1000000, "max": 2000000, "mmr": 0.15, "lev": 3, "maintAmt": 77500.0 - }, { + }, + { "min": 2000000, "max": 5000000, "mmr": 0.25, "lev": 2, "maintAmt": 277500.0 - }, { + }, + { "min": 5000000, "max": 30000000, "mmr": 0.5, @@ -3232,31 +3255,36 @@ def leverage_tiers(): "mmr": 0.025, "lev": 20, "maintAmt": 0.0 - }, { + }, + { "min": 100000, # stake = 10000.0 "max": 500000, # max_stake = 50000.0 "mmr": 0.05, "lev": 10, "maintAmt": 2500.0 - }, { + }, + { "min": 500000, # stake = 100000.0 "max": 1000000, # max_stake = 200000.0 "mmr": 0.1, "lev": 5, "maintAmt": 27500.0 - }, { + }, + { "min": 1000000, # stake = 333333.3333333333 "max": 2000000, # max_stake = 666666.6666666666 "mmr": 0.15, "lev": 3, "maintAmt": 77500.0 - }, { + }, + { "min": 2000000, # stake = 1000000.0 "max": 5000000, # max_stake = 2500000.0 "mmr": 0.25, "lev": 2, "maintAmt": 277500.0 - }, { + }, + { "min": 5000000, # stake = 5000000.0 "max": 30000000, # max_stake = 30000000.0 "mmr": 0.5, @@ -3271,49 +3299,57 @@ def leverage_tiers(): "mmr": 0.0065, "lev": 75, "maintAmt": 0.0 - }, { + }, + { "min": 10000, # stake = 200.0 "max": 50000, # max_stake = 1000.0 "mmr": 0.01, "lev": 50, "maintAmt": 35.0 - }, { + }, + { "min": 50000, # stake = 2000.0 "max": 250000, # max_stake = 10000.0 "mmr": 0.02, "lev": 25, "maintAmt": 535.0 - }, { + }, + { "min": 250000, # stake = 25000.0 "max": 1000000, # max_stake = 100000.0 "mmr": 0.05, "lev": 10, "maintAmt": 8035.0 - }, { + }, + { "min": 1000000, # stake = 200000.0 "max": 2000000, # max_stake = 400000.0 "mmr": 0.1, "lev": 5, "maintAmt": 58035.0 - }, { + }, + { "min": 2000000, # stake = 500000.0 "max": 5000000, # max_stake = 1250000.0 "mmr": 0.125, "lev": 4, "maintAmt": 108035.0 - }, { + }, + { "min": 5000000, # stake = 1666666.6666666667 "max": 10000000, # max_stake = 3333333.3333333335 "mmr": 0.15, "lev": 3, "maintAmt": 233035.0 - }, { + }, + { "min": 10000000, # stake = 5000000.0 "max": 20000000, # max_stake = 10000000.0 "mmr": 0.25, "lev": 2, "maintAmt": 1233035.0 - }, { + }, + { "min": 20000000, # stake = 20000000.0 "max": 50000000, # max_stake = 50000000.0 "mmr": 0.5, @@ -3323,66 +3359,75 @@ def leverage_tiers(): ], 'BTC/USDT': [ { - 'min': 0.0, - 'max': 50000.0, - 'mmr': 0.004, - 'lev': 125.0, - 'maintAmt': 0.0 - }, { - 'min': 50000.0, - 'max': 250000.0, - 'mmr': 0.005, - 'lev': 100.0, - 'maintAmt': 50.0 - }, { - 'min': 250000.0, - 'max': 1000000.0, - 'mmr': 0.01, - 'lev': 50.0, - 'maintAmt': 1300.0 - }, { - 'min': 1000000.0, - 'max': 10000000.0, - 'mmr': 0.025, - 'lev': 20.0, - 'maintAmt': 16300.0 - }, { - 'min': 10000000.0, - 'max': 20000000.0, - 'mmr': 0.05, - 'lev': 10.0, - 'maintAmt': 266300.0 - }, { - 'min': 20000000.0, - 'max': 50000000.0, - 'mmr': 0.1, - 'lev': 5.0, - 'maintAmt': 1266300.0 - }, { - 'min': 50000000.0, - 'max': 100000000.0, - 'mmr': 0.125, - 'lev': 4.0, - 'maintAmt': 2516300.0 - }, { - 'min': 100000000.0, - 'max': 200000000.0, - 'mmr': 0.15, - 'lev': 3.0, - 'maintAmt': 5016300.0 - }, { - 'min': 200000000.0, - 'max': 300000000.0, - 'mmr': 0.25, - 'lev': 2.0, - 'maintAmt': 25016300.0 - }, { - 'min': 300000000.0, - 'max': 9.223372036854776e+18, - 'mmr': 0.5, - 'lev': 1.0, - 'maintAmt': 100016300.0 - } + "min": 0, # stake = 0.0 + "max": 50000, # max_stake = 400.0 + "mmr": 0.004, + "lev": 125, + "maintAmt": 0.0 + }, + { + "min": 50000, # stake = 500.0 + "max": 250000, # max_stake = 2500.0 + "mmr": 0.005, + "lev": 100, + "maintAmt": 50.0 + }, + { + "min": 250000, # stake = 5000.0 + "max": 1000000, # max_stake = 20000.0 + "mmr": 0.01, + "lev": 50, + "maintAmt": 1300.0 + }, + { + "min": 1000000, # stake = 50000.0 + "max": 7500000, # max_stake = 375000.0 + "mmr": 0.025, + "lev": 20, + "maintAmt": 16300.0 + }, + { + "min": 7500000, # stake = 750000.0 + "max": 40000000, # max_stake = 4000000.0 + "mmr": 0.05, + "lev": 10, + "maintAmt": 203800.0 + }, + { + "min": 40000000, # stake = 8000000.0 + "max": 100000000, # max_stake = 20000000.0 + "mmr": 0.1, + "lev": 5, + "maintAmt": 2203800.0 + }, + { + "min": 100000000, # stake = 25000000.0 + "max": 200000000, # max_stake = 50000000.0 + "mmr": 0.125, + "lev": 4, + "maintAmt": 4703800.0 + }, + { + "min": 200000000, # stake = 66666666.666666664 + "max": 400000000, # max_stake = 133333333.33333333 + "mmr": 0.15, + "lev": 3, + "maintAmt": 9703800.0 + }, + { + "min": 400000000, # stake = 200000000.0 + "max": 600000000, # max_stake = 300000000.0 + "mmr": 0.25, + "lev": 2, + "maintAmt": 4.97038E7 + }, + { + "min": 600000000, # stake = 600000000.0 + "max": 1000000000, # max_stake = 1000000000.0 + "mmr": 0.5, + "lev": 1, + "maintAmt": 1.997038E8 + }, ], "ZEC/USDT": [ { @@ -3391,37 +3436,43 @@ def leverage_tiers(): 'mmr': 0.01, 'lev': 50, 'maintAmt': 0.0 - }, { + }, + { 'min': 50000, 'max': 150000, 'mmr': 0.025, 'lev': 20, 'maintAmt': 750.0 - }, { + }, + { 'min': 150000, 'max': 250000, 'mmr': 0.05, 'lev': 10, 'maintAmt': 4500.0 - }, { + }, + { 'min': 250000, 'max': 500000, 'mmr': 0.1, 'lev': 5, 'maintAmt': 17000.0 - }, { + }, + { 'min': 500000, 'max': 1000000, 'mmr': 0.125, 'lev': 4, 'maintAmt': 29500.0 - }, { + }, + { 'min': 1000000, 'max': 2000000, 'mmr': 0.25, 'lev': 2, 'maintAmt': 154500.0 - }, { + }, + { 'min': 2000000, 'max': 30000000, 'mmr': 0.5, diff --git a/tests/exchange/test_binance.py b/tests/exchange/test_binance.py index 5c8d7d3b0..e00fa289a 100644 --- a/tests/exchange/test_binance.py +++ b/tests/exchange/test_binance.py @@ -490,11 +490,9 @@ def test_fill_leverage_tiers_binance_dryrun(default_conf, mocker, leverage_tiers default_conf['margin_mode'] = MarginMode.ISOLATED exchange = get_patched_exchange(mocker, default_conf, api_mock, id="binance") exchange.fill_leverage_tiers() - - leverage_tiers = leverage_tiers - + assert len(exchange._leverage_tiers.keys()) > 100 for key, value in leverage_tiers.items(): - assert exchange._leverage_tiers[key] == value + assert isinstance(exchange._leverage_tiers[key], list) def test__set_leverage_binance(mocker, default_conf): From f006978caf8d10df218c8643d4ed7f1c795b94ca Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 21 May 2022 17:35:49 +0200 Subject: [PATCH 25/81] Be more explicit in default value --- freqtrade/optimize/backtesting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 2c34e29b0..3a3660c39 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -279,7 +279,7 @@ class Backtesting: self.futures_data[pair] = self.exchange.combine_funding_and_mark( funding_rates=funding_rates_dict[pair], mark_rates=mark_rates_dict[pair], - futures_funding_rate=self.config.get('futures_funding_rate'), + futures_funding_rate=self.config.get('futures_funding_rate', None), ) if unavailable_pairs: From ea8fda0deef5801a18af2fce788da30ae16b8cff Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 May 2022 08:36:28 +0200 Subject: [PATCH 26/81] Slightly improve test --- tests/exchange/test_binance.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/exchange/test_binance.py b/tests/exchange/test_binance.py index e00fa289a..324be9962 100644 --- a/tests/exchange/test_binance.py +++ b/tests/exchange/test_binance.py @@ -492,7 +492,9 @@ def test_fill_leverage_tiers_binance_dryrun(default_conf, mocker, leverage_tiers exchange.fill_leverage_tiers() assert len(exchange._leverage_tiers.keys()) > 100 for key, value in leverage_tiers.items(): - assert isinstance(exchange._leverage_tiers[key], list) + v = exchange._leverage_tiers[key] + assert isinstance(v, list) + assert len(v) == len(value) def test__set_leverage_binance(mocker, default_conf): From 26d394ca744a8215238174b0f12f3dbe61fd24a7 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 May 2022 08:54:27 +0200 Subject: [PATCH 27/81] Add liquidation Price to api response --- freqtrade/rpc/api_server/api_schemas.py | 1 + tests/rpc/test_rpc_apiserver.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/freqtrade/rpc/api_server/api_schemas.py b/freqtrade/rpc/api_server/api_schemas.py index d78ea8b78..f21334bc6 100644 --- a/freqtrade/rpc/api_server/api_schemas.py +++ b/freqtrade/rpc/api_server/api_schemas.py @@ -256,6 +256,7 @@ class TradeSchema(BaseModel): leverage: Optional[float] interest_rate: Optional[float] + liquidation_price: Optional[float] funding_fees: Optional[float] trading_mode: Optional[TradingMode] diff --git a/tests/rpc/test_rpc_apiserver.py b/tests/rpc/test_rpc_apiserver.py index ac2f1c3ec..03ba895a1 100644 --- a/tests/rpc/test_rpc_apiserver.py +++ b/tests/rpc/test_rpc_apiserver.py @@ -972,6 +972,7 @@ def test_api_status(botclient, mocker, ticker, fee, markets, is_short, 'exchange': 'binance', 'leverage': 1.0, 'interest_rate': 0.0, + 'liquidation_price': None, 'funding_fees': None, 'trading_mode': ANY, 'orders': [ANY], @@ -1175,6 +1176,7 @@ def test_api_force_entry(botclient, mocker, fee, endpoint): 'exchange': 'binance', 'leverage': None, 'interest_rate': None, + 'liquidation_price': None, 'funding_fees': None, 'trading_mode': 'spot', 'orders': [], From 1315d024372d2d284f5b8fbd84f420104bf1220c Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 May 2022 09:01:46 +0200 Subject: [PATCH 28/81] Fix startup sending "longed" messages for open stoplosses --- freqtrade/freqtradebot.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index da35c12ff..3dccb45e4 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -299,7 +299,8 @@ class FreqtradeBot(LoggingMixin): fo = self.exchange.fetch_order_or_stoploss_order(order.order_id, order.ft_pair, order.ft_order_side == 'stoploss') - self.update_trade_state(order.trade, order.order_id, fo) + self.update_trade_state(order.trade, order.order_id, fo, + stoploss_order=(order.ft_order_side == 'stoploss')) except ExchangeError as e: @@ -1663,7 +1664,7 @@ class FreqtradeBot(LoggingMixin): if send_msg and not stoploss_order and not trade.open_order_id: self._notify_exit(trade, '', True) self.handle_protections(trade.pair, trade.trade_direction) - elif send_msg and not trade.open_order_id: + elif send_msg and not trade.open_order_id and not stoploss_order: # Enter fill self._notify_enter(trade, order, fill=True) From bdb904e7147650be3634f15dc3875545f6e5374b Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 May 2022 10:15:58 +0200 Subject: [PATCH 29/81] Should_exit should return all sell signals --- freqtrade/freqtradebot.py | 15 ++++++++------- freqtrade/optimize/backtesting.py | 14 +++++++++++--- freqtrade/strategy/interface.py | 16 +++++++--------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 3dccb45e4..4ae55e31c 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -1106,7 +1106,7 @@ class FreqtradeBot(LoggingMixin): """ Check and execute trade exit """ - should_exit: ExitCheckTuple = self.strategy.should_exit( + exits: List[ExitCheckTuple] = self.strategy.should_exit( trade, exit_rate, datetime.now(timezone.utc), @@ -1114,12 +1114,13 @@ class FreqtradeBot(LoggingMixin): exit_=exit_, force_stoploss=self.edge.stoploss(trade.pair) if self.edge else 0 ) - - if should_exit.exit_flag: - logger.info(f'Exit for {trade.pair} detected. Reason: {should_exit.exit_type}' - f'Tag: {exit_tag if exit_tag is not None else "None"}') - self.execute_trade_exit(trade, exit_rate, should_exit, exit_tag=exit_tag) - return True + for should_exit in exits: + if should_exit.exit_flag: + logger.info(f'Exit for {trade.pair} detected. Reason: {should_exit.exit_type}' + f'Tag: {exit_tag if exit_tag is not None else "None"}') + exited = self.execute_trade_exit(trade, exit_rate, should_exit, exit_tag=exit_tag) + if exited: + return True return False def manage_open_orders(self) -> None: diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 4e604898f..4286f5b95 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -527,15 +527,23 @@ class Backtesting: if check_adjust_entry: trade = self._get_adjust_trade_entry_for_candle(trade, row) - exit_candle_time: datetime = row[DATE_IDX].to_pydatetime() enter = row[SHORT_IDX] if trade.is_short else row[LONG_IDX] exit_sig = row[ESHORT_IDX] if trade.is_short else row[ELONG_IDX] - exit_ = self.strategy.should_exit( - trade, row[OPEN_IDX], exit_candle_time, # type: ignore + exits = self.strategy.should_exit( + trade, row[OPEN_IDX], row[DATE_IDX].to_pydatetime(), # type: ignore enter=enter, exit_=exit_sig, low=row[LOW_IDX], high=row[HIGH_IDX] ) + for exit_ in exits: + t = self._get_exit_for_signal(trade, row, exit_) + if t: + return t + return None + def _get_exit_for_signal(self, trade: LocalTrade, row: Tuple, + exit_: ExitCheckTuple) -> Optional[LocalTrade]: + + exit_candle_time: datetime = row[DATE_IDX].to_pydatetime() if exit_.exit_flag: trade.close_date = exit_candle_time exit_reason = exit_.exit_reason diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index 57afbf32a..15627722c 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -878,16 +878,16 @@ class IStrategy(ABC, HyperStrategyMixin): def should_exit(self, trade: Trade, rate: float, current_time: datetime, *, enter: bool, exit_: bool, low: float = None, high: float = None, - force_stoploss: float = 0) -> ExitCheckTuple: + force_stoploss: float = 0) -> List[ExitCheckTuple]: """ This function evaluates if one of the conditions required to trigger an exit order has been reached, which can either be a stop-loss, ROI or exit-signal. :param low: Only used during backtesting to simulate (long)stoploss/(short)ROI :param high: Only used during backtesting, to simulate (short)stoploss/(long)ROI :param force_stoploss: Externally provided stoploss - :return: True if trade should be exited, False otherwise + :return: List of exit reasons - or empty list. """ - + exits: List[ExitCheckTuple] = [] current_rate = rate current_profit = trade.calc_profit_ratio(current_rate) @@ -938,7 +938,7 @@ class IStrategy(ABC, HyperStrategyMixin): logger.debug(f"{trade.pair} - Sell signal received. " f"exit_type=ExitType.{exit_signal.name}" + (f", custom_reason={custom_reason}" if custom_reason else "")) - return ExitCheckTuple(exit_type=exit_signal, exit_reason=custom_reason) + exits.append(ExitCheckTuple(exit_type=exit_signal, exit_reason=custom_reason)) # Sequence: # Exit-signal @@ -946,16 +946,14 @@ class IStrategy(ABC, HyperStrategyMixin): # Stoploss if roi_reached and stoplossflag.exit_type != ExitType.STOP_LOSS: logger.debug(f"{trade.pair} - Required profit reached. exit_type=ExitType.ROI") - return ExitCheckTuple(exit_type=ExitType.ROI) + exits.append(ExitCheckTuple(exit_type=ExitType.ROI)) if stoplossflag.exit_flag: logger.debug(f"{trade.pair} - Stoploss hit. exit_type={stoplossflag.exit_type}") - return stoplossflag + exits.append(stoplossflag) - # This one is noisy, commented out... - # logger.debug(f"{trade.pair} - No exit signal.") - return ExitCheckTuple(exit_type=ExitType.NONE) + return exits def stop_loss_reached(self, current_rate: float, trade: Trade, current_time: datetime, current_profit: float, From b7388557a9418c2ec8cb1310a2aea6e41acc5366 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 May 2022 10:20:01 +0200 Subject: [PATCH 30/81] Update interface tests --- tests/strategy/test_interface.py | 21 ++++++++++----------- tests/test_integration.py | 14 +++++++------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/tests/strategy/test_interface.py b/tests/strategy/test_interface.py index 6e57a3182..55cfcaf98 100644 --- a/tests/strategy/test_interface.py +++ b/tests/strategy/test_interface.py @@ -495,34 +495,33 @@ def test_custom_exit(default_conf, fee, caplog) -> None: enter=False, exit_=False, low=None, high=None) - assert res.exit_flag is False - assert res.exit_type == ExitType.NONE + assert res == [] strategy.custom_exit = MagicMock(return_value=True) res = strategy.should_exit(trade, 1, now, enter=False, exit_=False, low=None, high=None) - assert res.exit_flag is True - assert res.exit_type == ExitType.CUSTOM_EXIT - assert res.exit_reason == 'custom_exit' + assert res[0].exit_flag is True + assert res[0].exit_type == ExitType.CUSTOM_EXIT + assert res[0].exit_reason == 'custom_exit' strategy.custom_exit = MagicMock(return_value='hello world') res = strategy.should_exit(trade, 1, now, enter=False, exit_=False, low=None, high=None) - assert res.exit_type == ExitType.CUSTOM_EXIT - assert res.exit_flag is True - assert res.exit_reason == 'hello world' + assert res[0].exit_type == ExitType.CUSTOM_EXIT + assert res[0].exit_flag is True + assert res[0].exit_reason == 'hello world' caplog.clear() strategy.custom_exit = MagicMock(return_value='h' * 100) res = strategy.should_exit(trade, 1, now, enter=False, exit_=False, low=None, high=None) - assert res.exit_type == ExitType.CUSTOM_EXIT - assert res.exit_flag is True - assert res.exit_reason == 'h' * 64 + assert res[0].exit_type == ExitType.CUSTOM_EXIT + assert res[0].exit_flag is True + assert res[0].exit_reason == 'h' * 64 assert log_has_re('Custom exit reason returned from custom_exit is too long.*', caplog) diff --git a/tests/test_integration.py b/tests/test_integration.py index d2ad8c981..83f54becb 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -52,8 +52,8 @@ def test_may_execute_exit_stoploss_on_exchange_multi(default_conf, ticker, fee, side_effect=[stoploss_order_closed, stoploss_order_open, stoploss_order_open]) # Sell 3rd trade (not called for the first trade) should_sell_mock = MagicMock(side_effect=[ - ExitCheckTuple(exit_type=ExitType.NONE), - ExitCheckTuple(exit_type=ExitType.EXIT_SIGNAL)] + [], + [ExitCheckTuple(exit_type=ExitType.EXIT_SIGNAL)]] ) cancel_order_mock = MagicMock() mocker.patch('freqtrade.exchange.Binance.stoploss', stoploss) @@ -160,11 +160,11 @@ def test_forcebuy_last_unlimited(default_conf, ticker, fee, mocker, balance_rati _notify_exit=MagicMock(), ) should_sell_mock = MagicMock(side_effect=[ - ExitCheckTuple(exit_type=ExitType.NONE), - ExitCheckTuple(exit_type=ExitType.EXIT_SIGNAL), - ExitCheckTuple(exit_type=ExitType.NONE), - ExitCheckTuple(exit_type=ExitType.NONE), - ExitCheckTuple(exit_type=ExitType.NONE)] + [], + [ExitCheckTuple(exit_type=ExitType.EXIT_SIGNAL)], + [], + [], + []] ) mocker.patch("freqtrade.strategy.interface.IStrategy.should_exit", should_sell_mock) From ce3bfd59f5e92f2b5f56848d76763fe17b76ad07 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 May 2022 10:31:29 +0200 Subject: [PATCH 31/81] Add explicit should_sell test --- freqtrade/enums/exitchecktuple.py | 3 ++ tests/strategy/test_interface.py | 74 +++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/freqtrade/enums/exitchecktuple.py b/freqtrade/enums/exitchecktuple.py index c245a05da..580b4e21c 100644 --- a/freqtrade/enums/exitchecktuple.py +++ b/freqtrade/enums/exitchecktuple.py @@ -15,3 +15,6 @@ class ExitCheckTuple: @property def exit_flag(self): return self.exit_type != ExitType.NONE + + def __eq__(self, other): + return self.exit_type == other.exit_type and self.exit_reason == other.exit_reason diff --git a/tests/strategy/test_interface.py b/tests/strategy/test_interface.py index 55cfcaf98..8bdea852a 100644 --- a/tests/strategy/test_interface.py +++ b/tests/strategy/test_interface.py @@ -525,6 +525,80 @@ def test_custom_exit(default_conf, fee, caplog) -> None: assert log_has_re('Custom exit reason returned from custom_exit is too long.*', caplog) +def test_should_sell(default_conf, fee, caplog) -> None: + + strategy = StrategyResolver.load_strategy(default_conf) + trade = Trade( + pair='ETH/BTC', + stake_amount=0.01, + amount=1, + open_date=arrow.utcnow().shift(hours=-1).datetime, + fee_open=fee.return_value, + fee_close=fee.return_value, + exchange='binance', + open_rate=1, + ) + now = arrow.utcnow().datetime + res = strategy.should_exit(trade, 1, now, + enter=False, exit_=False, + low=None, high=None) + + assert res == [] + strategy.min_roi_reached = MagicMock(return_value=True) + + res = strategy.should_exit(trade, 1, now, + enter=False, exit_=False, + low=None, high=None) + assert len(res) == 1 + assert res == [ExitCheckTuple(exit_type=ExitType.ROI)] + + strategy.min_roi_reached = MagicMock(return_value=True) + strategy.stop_loss_reached = MagicMock( + return_value=ExitCheckTuple(exit_type=ExitType.STOP_LOSS)) + + res = strategy.should_exit(trade, 1, now, + enter=False, exit_=False, + low=None, high=None) + assert len(res) == 2 + assert res == [ + ExitCheckTuple(exit_type=ExitType.ROI), + ExitCheckTuple(exit_type=ExitType.STOP_LOSS), + ] + + strategy.custom_exit = MagicMock(return_value='hello world') + + res = strategy.should_exit(trade, 1, now, + enter=False, exit_=False, + low=None, high=None) + assert len(res) == 3 + assert res == [ + ExitCheckTuple(exit_type=ExitType.CUSTOM_EXIT, exit_reason='hello world'), + ExitCheckTuple(exit_type=ExitType.ROI), + ExitCheckTuple(exit_type=ExitType.STOP_LOSS), + ] + + # Regular exit signal + res = strategy.should_exit(trade, 1, now, + enter=False, exit_=True, + low=None, high=None) + assert len(res) == 3 + assert res == [ + ExitCheckTuple(exit_type=ExitType.EXIT_SIGNAL), + ExitCheckTuple(exit_type=ExitType.ROI), + ExitCheckTuple(exit_type=ExitType.STOP_LOSS), + ] + + # Regular exit signal, no ROI + strategy.min_roi_reached = MagicMock(return_value=False) + res = strategy.should_exit(trade, 1, now, + enter=False, exit_=True, + low=None, high=None) + assert len(res) == 2 + assert res == [ + ExitCheckTuple(exit_type=ExitType.EXIT_SIGNAL), + ExitCheckTuple(exit_type=ExitType.STOP_LOSS), + ] + @pytest.mark.parametrize('side', TRADE_SIDES) def test_leverage_callback(default_conf, side) -> None: default_conf['strategy'] = 'StrategyTestV2' From 3692fcd3d5c56ca546496ac5b9bd65e899fa92f4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 May 2022 11:01:18 +0200 Subject: [PATCH 32/81] Improve exit signal sequence --- freqtrade/enums/exitchecktuple.py | 3 +++ freqtrade/strategy/interface.py | 15 +++++++++++---- tests/strategy/test_interface.py | 15 +++++++++------ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/freqtrade/enums/exitchecktuple.py b/freqtrade/enums/exitchecktuple.py index 580b4e21c..cb6411caf 100644 --- a/freqtrade/enums/exitchecktuple.py +++ b/freqtrade/enums/exitchecktuple.py @@ -18,3 +18,6 @@ class ExitCheckTuple: def __eq__(self, other): return self.exit_type == other.exit_type and self.exit_reason == other.exit_reason + + def __repr__(self): + return f"ExitCheckTuple({self.exit_type}, {self.exit_reason})" diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index 15627722c..69a3f9742 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -942,15 +942,22 @@ class IStrategy(ABC, HyperStrategyMixin): # Sequence: # Exit-signal - # ROI (if not stoploss) # Stoploss - if roi_reached and stoplossflag.exit_type != ExitType.STOP_LOSS: + # ROI + # Trailing stoploss + + if stoplossflag.exit_type == ExitType.STOP_LOSS: + + logger.debug(f"{trade.pair} - Stoploss hit. exit_type={stoplossflag.exit_type}") + exits.append(stoplossflag) + + if roi_reached: logger.debug(f"{trade.pair} - Required profit reached. exit_type=ExitType.ROI") exits.append(ExitCheckTuple(exit_type=ExitType.ROI)) - if stoplossflag.exit_flag: + if stoplossflag.exit_type == ExitType.TRAILING_STOP_LOSS: - logger.debug(f"{trade.pair} - Stoploss hit. exit_type={stoplossflag.exit_type}") + logger.debug(f"{trade.pair} - Trailing stoploss hit.") exits.append(stoplossflag) return exits diff --git a/tests/strategy/test_interface.py b/tests/strategy/test_interface.py index 8bdea852a..2cedea962 100644 --- a/tests/strategy/test_interface.py +++ b/tests/strategy/test_interface.py @@ -525,7 +525,7 @@ def test_custom_exit(default_conf, fee, caplog) -> None: assert log_has_re('Custom exit reason returned from custom_exit is too long.*', caplog) -def test_should_sell(default_conf, fee, caplog) -> None: +def test_should_sell(default_conf, fee) -> None: strategy = StrategyResolver.load_strategy(default_conf) trade = Trade( @@ -561,22 +561,24 @@ def test_should_sell(default_conf, fee, caplog) -> None: low=None, high=None) assert len(res) == 2 assert res == [ - ExitCheckTuple(exit_type=ExitType.ROI), ExitCheckTuple(exit_type=ExitType.STOP_LOSS), + ExitCheckTuple(exit_type=ExitType.ROI), ] strategy.custom_exit = MagicMock(return_value='hello world') - + # custom-exit and exit-signal is first res = strategy.should_exit(trade, 1, now, enter=False, exit_=False, low=None, high=None) assert len(res) == 3 assert res == [ ExitCheckTuple(exit_type=ExitType.CUSTOM_EXIT, exit_reason='hello world'), - ExitCheckTuple(exit_type=ExitType.ROI), ExitCheckTuple(exit_type=ExitType.STOP_LOSS), + ExitCheckTuple(exit_type=ExitType.ROI), ] + strategy.stop_loss_reached = MagicMock( + return_value=ExitCheckTuple(exit_type=ExitType.TRAILING_STOP_LOSS)) # Regular exit signal res = strategy.should_exit(trade, 1, now, enter=False, exit_=True, @@ -585,7 +587,7 @@ def test_should_sell(default_conf, fee, caplog) -> None: assert res == [ ExitCheckTuple(exit_type=ExitType.EXIT_SIGNAL), ExitCheckTuple(exit_type=ExitType.ROI), - ExitCheckTuple(exit_type=ExitType.STOP_LOSS), + ExitCheckTuple(exit_type=ExitType.TRAILING_STOP_LOSS), ] # Regular exit signal, no ROI @@ -596,9 +598,10 @@ def test_should_sell(default_conf, fee, caplog) -> None: assert len(res) == 2 assert res == [ ExitCheckTuple(exit_type=ExitType.EXIT_SIGNAL), - ExitCheckTuple(exit_type=ExitType.STOP_LOSS), + ExitCheckTuple(exit_type=ExitType.TRAILING_STOP_LOSS), ] + @pytest.mark.parametrize('side', TRADE_SIDES) def test_leverage_callback(default_conf, side) -> None: default_conf['strategy'] = 'StrategyTestV2' From 938a66511a4fcd9961c8e55334979e4fe7e15fe5 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 May 2022 11:28:11 +0200 Subject: [PATCH 33/81] Update Documentation for new confirm_trade_exit behavior --- docs/backtesting.md | 3 ++- docs/strategy-callbacks.md | 11 +++++++++++ freqtrade/freqtradebot.py | 6 +++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/backtesting.md b/docs/backtesting.md index b4d9aef80..76718d206 100644 --- a/docs/backtesting.md +++ b/docs/backtesting.md @@ -530,8 +530,9 @@ Since backtesting lacks some detailed information about what happens within a ca - Exit-reason does not explain if a trade was positive or negative, just what triggered the exit (this can look odd if negative ROI values are used) - Evaluation sequence (if multiple signals happen on the same candle) - Exit-signal - - ROI (if not stoploss) - Stoploss + - ROI + - Trailing stoploss Taking these assumptions, backtesting tries to mirror real trading as closely as possible. However, backtesting will **never** replace running a strategy in dry-run mode. Also, keep in mind that past results don't guarantee future success. diff --git a/docs/strategy-callbacks.md b/docs/strategy-callbacks.md index ab67a3c26..7f3249c88 100644 --- a/docs/strategy-callbacks.md +++ b/docs/strategy-callbacks.md @@ -563,6 +563,14 @@ class AwesomeStrategy(IStrategy): `confirm_trade_exit()` can be used to abort a trade exit (sell) at the latest second (maybe because the price is not what we expect). +`confirm_trade_exit()` may be called multiple times within one iteration for the same trade if different exit-reasons apply. +The exit-reasons (if applicable) will be in the following sequence: + +* `exit_signal` / `custom_exit` +* `stop_loss` +* `roi` +* `trailing_stop_loss` + ``` python from freqtrade.persistence import Trade @@ -605,6 +613,9 @@ class AwesomeStrategy(IStrategy): ``` +!!! Warning + `confirm_trade_exit()` can prevent stoploss exits, causing significant losses as this would ignore stoploss exits. + ## Adjust trade position The `position_adjustment_enable` strategy property enables the usage of `adjust_trade_position()` callback in the strategy. diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 4ae55e31c..08f5474fd 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -1117,7 +1117,7 @@ class FreqtradeBot(LoggingMixin): for should_exit in exits: if should_exit.exit_flag: logger.info(f'Exit for {trade.pair} detected. Reason: {should_exit.exit_type}' - f'Tag: {exit_tag if exit_tag is not None else "None"}') + f'{f" Tag: {exit_tag}" if exit_tag is not None else ""}') exited = self.execute_trade_exit(trade, exit_rate, should_exit, exit_tag=exit_tag) if exited: return True @@ -1407,7 +1407,7 @@ class FreqtradeBot(LoggingMixin): :param trade: Trade instance :param limit: limit rate for the sell order :param exit_check: CheckTuple with signal and reason - :return: True if it succeeds (supported) False (not supported) + :return: True if it succeeds False """ trade.funding_fees = self.exchange.get_funding_fees( pair=trade.pair, @@ -1454,7 +1454,7 @@ class FreqtradeBot(LoggingMixin): time_in_force=time_in_force, exit_reason=exit_reason, sell_reason=exit_reason, # sellreason -> compatibility current_time=datetime.now(timezone.utc)): - logger.info(f"User requested abortion of exiting {trade.pair}") + logger.info(f"User requested abortion of {trade.pair} exit.") return False try: From 0b5544ef9e521055196e5e3e2ddfc331156432e0 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 May 2022 19:16:31 +0200 Subject: [PATCH 34/81] Stoploss fill should fill as "filled" notification Closes #6873 --- freqtrade/constants.py | 4 ++-- freqtrade/freqtradebot.py | 2 +- tests/test_freqtradebot.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/freqtrade/constants.py b/freqtrade/constants.py index 372472db8..9fbd70e42 100644 --- a/freqtrade/constants.py +++ b/freqtrade/constants.py @@ -302,12 +302,12 @@ CONF_SCHEMA = { 'exit_fill': { 'type': 'string', 'enum': TELEGRAM_SETTING_OPTIONS, - 'default': 'off' + 'default': 'on' }, 'protection_trigger': { 'type': 'string', 'enum': TELEGRAM_SETTING_OPTIONS, - 'default': 'off' + 'default': 'on' }, 'protection_trigger_global': { 'type': 'string', diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 3dccb45e4..a8e1fa31f 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -1019,7 +1019,7 @@ class FreqtradeBot(LoggingMixin): # Lock pair for one candle to prevent immediate rebuys self.strategy.lock_pair(trade.pair, datetime.now(timezone.utc), reason='Auto lock') - self._notify_exit(trade, "stoploss") + self._notify_exit(trade, "stoploss", True) return True if trade.open_order_id or not trade.is_open: diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index d2df4e6a5..23ef4ffc2 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -3582,7 +3582,7 @@ def test_may_execute_trade_exit_after_stoploss_on_exchange_hit( assert rpc_mock.call_count == 3 assert rpc_mock.call_args_list[0][0][0]['type'] == RPCMessageType.ENTRY assert rpc_mock.call_args_list[1][0][0]['type'] == RPCMessageType.ENTRY_FILL - assert rpc_mock.call_args_list[2][0][0]['type'] == RPCMessageType.EXIT + assert rpc_mock.call_args_list[2][0][0]['type'] == RPCMessageType.EXIT_FILL @pytest.mark.parametrize( From e3beaae8be8f1603da4b255d3d09de8fdd4627d5 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 May 2022 19:32:32 +0200 Subject: [PATCH 35/81] update hyperopt typing --- freqtrade/optimize/hyperopt.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/freqtrade/optimize/hyperopt.py b/freqtrade/optimize/hyperopt.py index 1dafb483c..d1697709b 100644 --- a/freqtrade/optimize/hyperopt.py +++ b/freqtrade/optimize/hyperopt.py @@ -27,8 +27,7 @@ from freqtrade.misc import deep_merge_dicts, file_dump_json, plural from freqtrade.optimize.backtesting import Backtesting # Import IHyperOpt and IHyperOptLoss to allow unpickling classes from these modules from freqtrade.optimize.hyperopt_auto import HyperOptAuto -from freqtrade.optimize.hyperopt_interface import IHyperOpt # noqa: F401 -from freqtrade.optimize.hyperopt_loss_interface import IHyperOptLoss # noqa: F401 +from freqtrade.optimize.hyperopt_loss_interface import IHyperOptLoss from freqtrade.optimize.hyperopt_tools import HyperoptTools, hyperopt_serializer from freqtrade.optimize.optimize_reports import generate_strategy_stats from freqtrade.resolvers.hyperopt_resolver import HyperOptLossResolver @@ -62,7 +61,6 @@ class Hyperopt: hyperopt = Hyperopt(config) hyperopt.start() """ - custom_hyperopt: IHyperOpt def __init__(self, config: Dict[str, Any]) -> None: self.buy_space: List[Dimension] = [] @@ -77,6 +75,7 @@ class Hyperopt: self.backtesting = Backtesting(self.config) self.pairlist = self.backtesting.pairlists.whitelist + self.custom_hyperopt: HyperOptAuto if not self.config.get('hyperopt'): self.custom_hyperopt = HyperOptAuto(self.config) @@ -88,7 +87,8 @@ class Hyperopt: self.backtesting._set_strategy(self.backtesting.strategylist[0]) self.custom_hyperopt.strategy = self.backtesting.strategy - self.custom_hyperoptloss = HyperOptLossResolver.load_hyperoptloss(self.config) + self.custom_hyperoptloss: IHyperOptLoss = HyperOptLossResolver.load_hyperoptloss( + self.config) self.calculate_loss = self.custom_hyperoptloss.hyperopt_loss_function time_now = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") strategy = str(self.config['strategy']) From 27019339b5b3cb4cc48fd834755d432489f29ac4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 03:01:15 +0000 Subject: [PATCH 36/81] Bump ccxt from 1.83.12 to 1.83.62 Bumps [ccxt](https://github.com/ccxt/ccxt) from 1.83.12 to 1.83.62. - [Release notes](https://github.com/ccxt/ccxt/releases) - [Changelog](https://github.com/ccxt/ccxt/blob/master/exchanges.cfg) - [Commits](https://github.com/ccxt/ccxt/compare/1.83.12...1.83.62) --- updated-dependencies: - dependency-name: ccxt dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index a3c4c3dca..ea7b36865 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ numpy==1.22.3 pandas==1.4.2 pandas-ta==0.3.14b -ccxt==1.83.12 +ccxt==1.83.62 # Pin cryptography for now due to rust build errors with piwheels cryptography==37.0.2 aiohttp==3.8.1 From f819fafa1cc2f6f2f45586f6c3ac8bde685ca815 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 03:01:20 +0000 Subject: [PATCH 37/81] Bump psutil from 5.9.0 to 5.9.1 Bumps [psutil](https://github.com/giampaolo/psutil) from 5.9.0 to 5.9.1. - [Release notes](https://github.com/giampaolo/psutil/releases) - [Changelog](https://github.com/giampaolo/psutil/blob/master/HISTORY.rst) - [Commits](https://github.com/giampaolo/psutil/compare/release-5.9.0...release-5.9.1) --- updated-dependencies: - dependency-name: psutil dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index a3c4c3dca..2b5639c2a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -38,7 +38,7 @@ fastapi==0.78.0 uvicorn==0.17.6 pyjwt==2.4.0 aiofiles==0.8.0 -psutil==5.9.0 +psutil==5.9.1 # Support for colorized terminal output colorama==0.4.4 From 40f63ae51c1ce9f727557f20b696c5fd8efacec1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 03:01:30 +0000 Subject: [PATCH 38/81] Bump scipy from 1.8.0 to 1.8.1 Bumps [scipy](https://github.com/scipy/scipy) from 1.8.0 to 1.8.1. - [Release notes](https://github.com/scipy/scipy/releases) - [Commits](https://github.com/scipy/scipy/compare/v1.8.0...v1.8.1) --- updated-dependencies: - dependency-name: scipy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-hyperopt.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-hyperopt.txt b/requirements-hyperopt.txt index 0b91636f1..5370e0899 100644 --- a/requirements-hyperopt.txt +++ b/requirements-hyperopt.txt @@ -2,7 +2,7 @@ -r requirements.txt # Required for hyperopt -scipy==1.8.0 +scipy==1.8.1 scikit-learn==1.1.0 scikit-optimize==0.9.0 filelock==3.7.0 From ff9dcfe789bceb33e893536a8147d8a7daff29a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 03:01:32 +0000 Subject: [PATCH 39/81] Bump types-python-dateutil from 2.8.15 to 2.8.16 Bumps [types-python-dateutil](https://github.com/python/typeshed) from 2.8.15 to 2.8.16. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-python-dateutil dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index c7167cc8b..7c8d732f3 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -26,4 +26,4 @@ types-cachetools==5.0.1 types-filelock==3.2.5 types-requests==2.27.25 types-tabulate==0.8.9 -types-python-dateutil==2.8.15 +types-python-dateutil==2.8.16 From 34657639f8eb33db512e5382bebfa16f361649f2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 03:01:46 +0000 Subject: [PATCH 40/81] Bump numpy from 1.22.3 to 1.22.4 Bumps [numpy](https://github.com/numpy/numpy) from 1.22.3 to 1.22.4. - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/HOWTO_RELEASE.rst.txt) - [Commits](https://github.com/numpy/numpy/compare/v1.22.3...v1.22.4) --- updated-dependencies: - dependency-name: numpy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index a3c4c3dca..b970a1fca 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -numpy==1.22.3 +numpy==1.22.4 pandas==1.4.2 pandas-ta==0.3.14b From 7f5650699ebf446fdc7cc41f7f6d6033ee2a85d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 03:01:48 +0000 Subject: [PATCH 41/81] Bump types-requests from 2.27.25 to 2.27.27 Bumps [types-requests](https://github.com/python/typeshed) from 2.27.25 to 2.27.27. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-requests dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index c7167cc8b..27a7c4432 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -24,6 +24,6 @@ nbconvert==6.5.0 # mypy types types-cachetools==5.0.1 types-filelock==3.2.5 -types-requests==2.27.25 +types-requests==2.27.27 types-tabulate==0.8.9 types-python-dateutil==2.8.15 From 66497c28e8fe26107e09a5ba253a463ceeb3c118 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 23 May 2022 06:28:11 +0200 Subject: [PATCH 42/81] Bump pre-commit requests types --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ee909185a..3954c0dec 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,7 +15,7 @@ repos: additional_dependencies: - types-cachetools==5.0.1 - types-filelock==3.2.5 - - types-requests==2.27.25 + - types-requests==2.27.27 - types-tabulate==0.8.9 - types-python-dateutil==2.8.15 # stages: [push] From 596aeec6527f06e37e938a0d381b5faa67a928dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 04:33:43 +0000 Subject: [PATCH 43/81] Bump scikit-learn from 1.1.0 to 1.1.1 Bumps [scikit-learn](https://github.com/scikit-learn/scikit-learn) from 1.1.0 to 1.1.1. - [Release notes](https://github.com/scikit-learn/scikit-learn/releases) - [Commits](https://github.com/scikit-learn/scikit-learn/compare/1.1.0...1.1.1) --- updated-dependencies: - dependency-name: scikit-learn dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-hyperopt.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-hyperopt.txt b/requirements-hyperopt.txt index 5370e0899..b8762214a 100644 --- a/requirements-hyperopt.txt +++ b/requirements-hyperopt.txt @@ -3,7 +3,7 @@ # Required for hyperopt scipy==1.8.1 -scikit-learn==1.1.0 +scikit-learn==1.1.1 scikit-optimize==0.9.0 filelock==3.7.0 progressbar2==4.0.0 From cc3ec279c21c321b2665c59cd12d4e770dbce27d Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 23 May 2022 06:57:49 +0200 Subject: [PATCH 44/81] Bump dateutil types precommit --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ee909185a..8078bdda3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ repos: - types-filelock==3.2.5 - types-requests==2.27.25 - types-tabulate==0.8.9 - - types-python-dateutil==2.8.15 + - types-python-dateutil==2.8.16 # stages: [push] - repo: https://github.com/pycqa/isort From b88dfe42978a310b87ec098157f4505a566c4527 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 06:32:06 +0000 Subject: [PATCH 45/81] Bump types-filelock from 3.2.5 to 3.2.6 Bumps [types-filelock](https://github.com/python/typeshed) from 3.2.5 to 3.2.6. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-filelock dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 0f5d31636..e863238bd 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -23,7 +23,7 @@ nbconvert==6.5.0 # mypy types types-cachetools==5.0.1 -types-filelock==3.2.5 +types-filelock==3.2.6 types-requests==2.27.27 types-tabulate==0.8.9 types-python-dateutil==2.8.16 From 34b1231df307da98e4c1beed0ab0a7b3489e85b4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 23 May 2022 08:32:46 +0200 Subject: [PATCH 46/81] Bump filelock-precommit --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4893a3da9..d59010154 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,7 +14,7 @@ repos: exclude: build_helpers additional_dependencies: - types-cachetools==5.0.1 - - types-filelock==3.2.5 + - types-filelock==3.2.6 - types-requests==2.27.27 - types-tabulate==0.8.9 - types-python-dateutil==2.8.16 From 5c4014ee624f3e8e5c16a2036e7d8a4e680a69e4 Mon Sep 17 00:00:00 2001 From: robcaulk Date: Mon, 23 May 2022 10:24:58 +0200 Subject: [PATCH 47/81] Change default value of process_only_new_candles to True since False is an uncommon usecase for expert strategy devs --- docs/configuration.md | 2 +- freqtrade/strategy/interface.py | 2 +- freqtrade/templates/base_strategy.py.j2 | 2 +- freqtrade/templates/sample_strategy.py | 2 +- tests/strategy/test_strategy_loading.py | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 43151f51c..0f3069478 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -140,7 +140,7 @@ Mandatory parameters are marked as **Required**, which means that they are requi | `dry_run` | **Required.** Define if the bot must be in Dry Run or production mode.
*Defaults to `true`.*
**Datatype:** Boolean | `dry_run_wallet` | Define the starting amount in stake currency for the simulated wallet used by the bot running in Dry Run mode.
*Defaults to `1000`.*
**Datatype:** Float | `cancel_open_orders_on_exit` | Cancel open orders when the `/stop` RPC command is issued, `Ctrl+C` is pressed or the bot dies unexpectedly. When set to `true`, this allows you to use `/stop` to cancel unfilled and partially filled orders in the event of a market crash. It does not impact open positions.
*Defaults to `false`.*
**Datatype:** Boolean -| `process_only_new_candles` | Enable processing of indicators only when new candles arrive. If false each loop populates the indicators, this will mean the same candle is processed many times creating system load but can be useful of your strategy depends on tick data not only candle. [Strategy Override](#parameters-in-the-strategy).
*Defaults to `false`.*
**Datatype:** Boolean +| `process_only_new_candles` | Enable processing of indicators only when new candles arrive. If false each loop populates the indicators, this will mean the same candle is processed many times creating system load but can be useful of your strategy depends on tick data not only candle. [Strategy Override](#parameters-in-the-strategy).
*Defaults to `true`.*
**Datatype:** Boolean | `minimal_roi` | **Required.** Set the threshold as ratio the bot will use to exit a trade. [More information below](#understand-minimal_roi). [Strategy Override](#parameters-in-the-strategy).
**Datatype:** Dict | `stoploss` | **Required.** Value as ratio of the stoploss used by the bot. More details in the [stoploss documentation](stoploss.md). [Strategy Override](#parameters-in-the-strategy).
**Datatype:** Float (as ratio) | `trailing_stop` | Enables trailing stoploss (based on `stoploss` in either configuration or strategy file). More details in the [stoploss documentation](stoploss.md#trailing-stop-loss). [Strategy Override](#parameters-in-the-strategy).
**Datatype:** Boolean diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index 57afbf32a..473e58e6a 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -82,7 +82,7 @@ class IStrategy(ABC, HyperStrategyMixin): } # run "populate_indicators" only for new candle - process_only_new_candles: bool = False + process_only_new_candles: bool = True use_exit_signal: bool exit_profit_only: bool diff --git a/freqtrade/templates/base_strategy.py.j2 b/freqtrade/templates/base_strategy.py.j2 index 9e7e1fe50..d393574d9 100644 --- a/freqtrade/templates/base_strategy.py.j2 +++ b/freqtrade/templates/base_strategy.py.j2 @@ -64,7 +64,7 @@ class {{ strategy }}(IStrategy): # trailing_stop_positive_offset = 0.0 # Disabled / not configured # Run "populate_indicators()" only for new candle. - process_only_new_candles = False + process_only_new_candles = True # These values can be overridden in the config. use_exit_signal = True diff --git a/freqtrade/templates/sample_strategy.py b/freqtrade/templates/sample_strategy.py index f0ae6c10d..1b375714a 100644 --- a/freqtrade/templates/sample_strategy.py +++ b/freqtrade/templates/sample_strategy.py @@ -62,7 +62,7 @@ class SampleStrategy(IStrategy): timeframe = '5m' # Run "populate_indicators()" only for new candle. - process_only_new_candles = False + process_only_new_candles = True # These values can be overridden in the config. use_exit_signal = True diff --git a/tests/strategy/test_strategy_loading.py b/tests/strategy/test_strategy_loading.py index 3ed1eb0ce..919a4bd00 100644 --- a/tests/strategy/test_strategy_loading.py +++ b/tests/strategy/test_strategy_loading.py @@ -224,12 +224,12 @@ def test_strategy_override_process_only_new_candles(caplog, default_conf): default_conf.update({ 'strategy': CURRENT_TEST_STRATEGY, - 'process_only_new_candles': True + 'process_only_new_candles': False }) strategy = StrategyResolver.load_strategy(default_conf) - assert strategy.process_only_new_candles - assert log_has("Override strategy 'process_only_new_candles' with value in config file: True.", + assert not strategy.process_only_new_candles + assert log_has("Override strategy 'process_only_new_candles' with value in config file: False.", caplog) From 42ae8ba6fbf4007535afc85f467cfda5ccfaeed3 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 23 May 2022 20:18:09 +0200 Subject: [PATCH 48/81] Refactor hyperopt parameters to separate file --- freqtrade/strategy/__init__.py | 4 +- freqtrade/strategy/hyper.py | 284 +----------------------------- freqtrade/strategy/parameters.py | 287 +++++++++++++++++++++++++++++++ tests/optimize/test_hyperopt.py | 2 +- tests/strategy/test_interface.py | 4 +- 5 files changed, 296 insertions(+), 285 deletions(-) create mode 100644 freqtrade/strategy/parameters.py diff --git a/freqtrade/strategy/__init__.py b/freqtrade/strategy/__init__.py index 2ea0ad2b4..2d23bcd4d 100644 --- a/freqtrade/strategy/__init__.py +++ b/freqtrade/strategy/__init__.py @@ -1,9 +1,9 @@ # flake8: noqa: F401 from freqtrade.exchange import (timeframe_to_minutes, timeframe_to_msecs, timeframe_to_next_date, timeframe_to_prev_date, timeframe_to_seconds) -from freqtrade.strategy.hyper import (BooleanParameter, CategoricalParameter, DecimalParameter, - IntParameter, RealParameter) from freqtrade.strategy.informative_decorator import informative from freqtrade.strategy.interface import IStrategy +from freqtrade.strategy.parameters import (BooleanParameter, CategoricalParameter, DecimalParameter, + IntParameter, RealParameter) from freqtrade.strategy.strategy_helper import (merge_informative_pair, stoploss_from_absolute, stoploss_from_open) diff --git a/freqtrade/strategy/hyper.py b/freqtrade/strategy/hyper.py index 278954bb2..15f5be483 100644 --- a/freqtrade/strategy/hyper.py +++ b/freqtrade/strategy/hyper.py @@ -3,295 +3,19 @@ IHyperStrategy interface, hyperoptable Parameter class. This module defines a base class for auto-hyperoptable strategies. """ import logging -from abc import ABC, abstractmethod -from contextlib import suppress from pathlib import Path -from typing import Any, Dict, Iterator, List, Optional, Sequence, Tuple, Union - -from freqtrade.misc import deep_merge_dicts, json_load -from freqtrade.optimize.hyperopt_tools import HyperoptTools - - -with suppress(ImportError): - from skopt.space import Integer, Real, Categorical - from freqtrade.optimize.space import SKDecimal +from typing import Any, Dict, Iterator, List, Tuple from freqtrade.enums import RunMode from freqtrade.exceptions import OperationalException +from freqtrade.misc import deep_merge_dicts, json_load +from freqtrade.optimize.hyperopt_tools import HyperoptTools +from freqtrade.strategy.parameters import BaseParameter logger = logging.getLogger(__name__) -class BaseParameter(ABC): - """ - Defines a parameter that can be optimized by hyperopt. - """ - category: Optional[str] - default: Any - value: Any - in_space: bool = False - name: str - - def __init__(self, *, default: Any, space: Optional[str] = None, - optimize: bool = True, load: bool = True, **kwargs): - """ - Initialize hyperopt-optimizable parameter. - :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if - parameter field - name is prefixed with 'buy_' or 'sell_'. - :param optimize: Include parameter in hyperopt optimizations. - :param load: Load parameter value from {space}_params. - :param kwargs: Extra parameters to skopt.space.(Integer|Real|Categorical). - """ - if 'name' in kwargs: - raise OperationalException( - 'Name is determined by parameter field name and can not be specified manually.') - self.category = space - self._space_params = kwargs - self.value = default - self.optimize = optimize - self.load = load - - def __repr__(self): - return f'{self.__class__.__name__}({self.value})' - - @abstractmethod - def get_space(self, name: str) -> Union['Integer', 'Real', 'SKDecimal', 'Categorical']: - """ - Get-space - will be used by Hyperopt to get the hyperopt Space - """ - - -class NumericParameter(BaseParameter): - """ Internal parameter used for Numeric purposes """ - float_or_int = Union[int, float] - default: float_or_int - value: float_or_int - - def __init__(self, low: Union[float_or_int, Sequence[float_or_int]], - high: Optional[float_or_int] = None, *, default: float_or_int, - space: Optional[str] = None, optimize: bool = True, load: bool = True, **kwargs): - """ - Initialize hyperopt-optimizable numeric parameter. - Cannot be instantiated, but provides the validation for other numeric parameters - :param low: Lower end (inclusive) of optimization space or [low, high]. - :param high: Upper end (inclusive) of optimization space. - Must be none of entire range is passed first parameter. - :param default: A default value. - :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if - parameter fieldname is prefixed with 'buy_' or 'sell_'. - :param optimize: Include parameter in hyperopt optimizations. - :param load: Load parameter value from {space}_params. - :param kwargs: Extra parameters to skopt.space.*. - """ - if high is not None and isinstance(low, Sequence): - raise OperationalException(f'{self.__class__.__name__} space invalid.') - if high is None or isinstance(low, Sequence): - if not isinstance(low, Sequence) or len(low) != 2: - raise OperationalException(f'{self.__class__.__name__} space must be [low, high]') - self.low, self.high = low - else: - self.low = low - self.high = high - - super().__init__(default=default, space=space, optimize=optimize, - load=load, **kwargs) - - -class IntParameter(NumericParameter): - default: int - value: int - - def __init__(self, low: Union[int, Sequence[int]], high: Optional[int] = None, *, default: int, - space: Optional[str] = None, optimize: bool = True, load: bool = True, **kwargs): - """ - Initialize hyperopt-optimizable integer parameter. - :param low: Lower end (inclusive) of optimization space or [low, high]. - :param high: Upper end (inclusive) of optimization space. - Must be none of entire range is passed first parameter. - :param default: A default value. - :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if - parameter fieldname is prefixed with 'buy_' or 'sell_'. - :param optimize: Include parameter in hyperopt optimizations. - :param load: Load parameter value from {space}_params. - :param kwargs: Extra parameters to skopt.space.Integer. - """ - - super().__init__(low=low, high=high, default=default, space=space, optimize=optimize, - load=load, **kwargs) - - def get_space(self, name: str) -> 'Integer': - """ - Create skopt optimization space. - :param name: A name of parameter field. - """ - return Integer(low=self.low, high=self.high, name=name, **self._space_params) - - @property - def range(self): - """ - Get each value in this space as list. - Returns a List from low to high (inclusive) in Hyperopt mode. - Returns a List with 1 item (`value`) in "non-hyperopt" mode, to avoid - calculating 100ds of indicators. - """ - if self.in_space and self.optimize: - # Scikit-optimize ranges are "inclusive", while python's "range" is exclusive - return range(self.low, self.high + 1) - else: - return range(self.value, self.value + 1) - - -class RealParameter(NumericParameter): - default: float - value: float - - def __init__(self, low: Union[float, Sequence[float]], high: Optional[float] = None, *, - default: float, space: Optional[str] = None, optimize: bool = True, - load: bool = True, **kwargs): - """ - Initialize hyperopt-optimizable floating point parameter with unlimited precision. - :param low: Lower end (inclusive) of optimization space or [low, high]. - :param high: Upper end (inclusive) of optimization space. - Must be none if entire range is passed first parameter. - :param default: A default value. - :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if - parameter fieldname is prefixed with 'buy_' or 'sell_'. - :param optimize: Include parameter in hyperopt optimizations. - :param load: Load parameter value from {space}_params. - :param kwargs: Extra parameters to skopt.space.Real. - """ - super().__init__(low=low, high=high, default=default, space=space, optimize=optimize, - load=load, **kwargs) - - def get_space(self, name: str) -> 'Real': - """ - Create skopt optimization space. - :param name: A name of parameter field. - """ - return Real(low=self.low, high=self.high, name=name, **self._space_params) - - -class DecimalParameter(NumericParameter): - default: float - value: float - - def __init__(self, low: Union[float, Sequence[float]], high: Optional[float] = None, *, - default: float, decimals: int = 3, space: Optional[str] = None, - optimize: bool = True, load: bool = True, **kwargs): - """ - Initialize hyperopt-optimizable decimal parameter with a limited precision. - :param low: Lower end (inclusive) of optimization space or [low, high]. - :param high: Upper end (inclusive) of optimization space. - Must be none if entire range is passed first parameter. - :param default: A default value. - :param decimals: A number of decimals after floating point to be included in testing. - :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if - parameter fieldname is prefixed with 'buy_' or 'sell_'. - :param optimize: Include parameter in hyperopt optimizations. - :param load: Load parameter value from {space}_params. - :param kwargs: Extra parameters to skopt.space.Integer. - """ - self._decimals = decimals - default = round(default, self._decimals) - - super().__init__(low=low, high=high, default=default, space=space, optimize=optimize, - load=load, **kwargs) - - def get_space(self, name: str) -> 'SKDecimal': - """ - Create skopt optimization space. - :param name: A name of parameter field. - """ - return SKDecimal(low=self.low, high=self.high, decimals=self._decimals, name=name, - **self._space_params) - - @property - def range(self): - """ - Get each value in this space as list. - Returns a List from low to high (inclusive) in Hyperopt mode. - Returns a List with 1 item (`value`) in "non-hyperopt" mode, to avoid - calculating 100ds of indicators. - """ - if self.in_space and self.optimize: - low = int(self.low * pow(10, self._decimals)) - high = int(self.high * pow(10, self._decimals)) + 1 - return [round(n * pow(0.1, self._decimals), self._decimals) for n in range(low, high)] - else: - return [self.value] - - -class CategoricalParameter(BaseParameter): - default: Any - value: Any - opt_range: Sequence[Any] - - def __init__(self, categories: Sequence[Any], *, default: Optional[Any] = None, - space: Optional[str] = None, optimize: bool = True, load: bool = True, **kwargs): - """ - Initialize hyperopt-optimizable parameter. - :param categories: Optimization space, [a, b, ...]. - :param default: A default value. If not specified, first item from specified space will be - used. - :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if - parameter field - name is prefixed with 'buy_' or 'sell_'. - :param optimize: Include parameter in hyperopt optimizations. - :param load: Load parameter value from {space}_params. - :param kwargs: Extra parameters to skopt.space.Categorical. - """ - if len(categories) < 2: - raise OperationalException( - 'CategoricalParameter space must be [a, b, ...] (at least two parameters)') - self.opt_range = categories - super().__init__(default=default, space=space, optimize=optimize, - load=load, **kwargs) - - def get_space(self, name: str) -> 'Categorical': - """ - Create skopt optimization space. - :param name: A name of parameter field. - """ - return Categorical(self.opt_range, name=name, **self._space_params) - - @property - def range(self): - """ - Get each value in this space as list. - Returns a List of categories in Hyperopt mode. - Returns a List with 1 item (`value`) in "non-hyperopt" mode, to avoid - calculating 100ds of indicators. - """ - if self.in_space and self.optimize: - return self.opt_range - else: - return [self.value] - - -class BooleanParameter(CategoricalParameter): - - def __init__(self, *, default: Optional[Any] = None, - space: Optional[str] = None, optimize: bool = True, load: bool = True, **kwargs): - """ - Initialize hyperopt-optimizable Boolean Parameter. - It's a shortcut to `CategoricalParameter([True, False])`. - :param default: A default value. If not specified, first item from specified space will be - used. - :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if - parameter field - name is prefixed with 'buy_' or 'sell_'. - :param optimize: Include parameter in hyperopt optimizations. - :param load: Load parameter value from {space}_params. - :param kwargs: Extra parameters to skopt.space.Categorical. - """ - - categories = [True, False] - super().__init__(categories=categories, default=default, space=space, optimize=optimize, - load=load, **kwargs) - - class HyperStrategyMixin: """ A helper base class which allows HyperOptAuto class to reuse implementations of buy/sell diff --git a/freqtrade/strategy/parameters.py b/freqtrade/strategy/parameters.py new file mode 100644 index 000000000..02706690d --- /dev/null +++ b/freqtrade/strategy/parameters.py @@ -0,0 +1,287 @@ +""" +IHyperStrategy interface, hyperoptable Parameter class. +This module defines a base class for auto-hyperoptable strategies. +""" +import logging +from abc import ABC, abstractmethod +from contextlib import suppress +from typing import Any, Optional, Sequence, Union + + +with suppress(ImportError): + from skopt.space import Integer, Real, Categorical + from freqtrade.optimize.space import SKDecimal + +from freqtrade.exceptions import OperationalException + + +logger = logging.getLogger(__name__) + + +class BaseParameter(ABC): + """ + Defines a parameter that can be optimized by hyperopt. + """ + category: Optional[str] + default: Any + value: Any + in_space: bool = False + name: str + + def __init__(self, *, default: Any, space: Optional[str] = None, + optimize: bool = True, load: bool = True, **kwargs): + """ + Initialize hyperopt-optimizable parameter. + :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if + parameter field + name is prefixed with 'buy_' or 'sell_'. + :param optimize: Include parameter in hyperopt optimizations. + :param load: Load parameter value from {space}_params. + :param kwargs: Extra parameters to skopt.space.(Integer|Real|Categorical). + """ + if 'name' in kwargs: + raise OperationalException( + 'Name is determined by parameter field name and can not be specified manually.') + self.category = space + self._space_params = kwargs + self.value = default + self.optimize = optimize + self.load = load + + def __repr__(self): + return f'{self.__class__.__name__}({self.value})' + + @abstractmethod + def get_space(self, name: str) -> Union['Integer', 'Real', 'SKDecimal', 'Categorical']: + """ + Get-space - will be used by Hyperopt to get the hyperopt Space + """ + + +class NumericParameter(BaseParameter): + """ Internal parameter used for Numeric purposes """ + float_or_int = Union[int, float] + default: float_or_int + value: float_or_int + + def __init__(self, low: Union[float_or_int, Sequence[float_or_int]], + high: Optional[float_or_int] = None, *, default: float_or_int, + space: Optional[str] = None, optimize: bool = True, load: bool = True, **kwargs): + """ + Initialize hyperopt-optimizable numeric parameter. + Cannot be instantiated, but provides the validation for other numeric parameters + :param low: Lower end (inclusive) of optimization space or [low, high]. + :param high: Upper end (inclusive) of optimization space. + Must be none of entire range is passed first parameter. + :param default: A default value. + :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if + parameter fieldname is prefixed with 'buy_' or 'sell_'. + :param optimize: Include parameter in hyperopt optimizations. + :param load: Load parameter value from {space}_params. + :param kwargs: Extra parameters to skopt.space.*. + """ + if high is not None and isinstance(low, Sequence): + raise OperationalException(f'{self.__class__.__name__} space invalid.') + if high is None or isinstance(low, Sequence): + if not isinstance(low, Sequence) or len(low) != 2: + raise OperationalException(f'{self.__class__.__name__} space must be [low, high]') + self.low, self.high = low + else: + self.low = low + self.high = high + + super().__init__(default=default, space=space, optimize=optimize, + load=load, **kwargs) + + +class IntParameter(NumericParameter): + default: int + value: int + + def __init__(self, low: Union[int, Sequence[int]], high: Optional[int] = None, *, default: int, + space: Optional[str] = None, optimize: bool = True, load: bool = True, **kwargs): + """ + Initialize hyperopt-optimizable integer parameter. + :param low: Lower end (inclusive) of optimization space or [low, high]. + :param high: Upper end (inclusive) of optimization space. + Must be none of entire range is passed first parameter. + :param default: A default value. + :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if + parameter fieldname is prefixed with 'buy_' or 'sell_'. + :param optimize: Include parameter in hyperopt optimizations. + :param load: Load parameter value from {space}_params. + :param kwargs: Extra parameters to skopt.space.Integer. + """ + + super().__init__(low=low, high=high, default=default, space=space, optimize=optimize, + load=load, **kwargs) + + def get_space(self, name: str) -> 'Integer': + """ + Create skopt optimization space. + :param name: A name of parameter field. + """ + return Integer(low=self.low, high=self.high, name=name, **self._space_params) + + @property + def range(self): + """ + Get each value in this space as list. + Returns a List from low to high (inclusive) in Hyperopt mode. + Returns a List with 1 item (`value`) in "non-hyperopt" mode, to avoid + calculating 100ds of indicators. + """ + if self.in_space and self.optimize: + # Scikit-optimize ranges are "inclusive", while python's "range" is exclusive + return range(self.low, self.high + 1) + else: + return range(self.value, self.value + 1) + + +class RealParameter(NumericParameter): + default: float + value: float + + def __init__(self, low: Union[float, Sequence[float]], high: Optional[float] = None, *, + default: float, space: Optional[str] = None, optimize: bool = True, + load: bool = True, **kwargs): + """ + Initialize hyperopt-optimizable floating point parameter with unlimited precision. + :param low: Lower end (inclusive) of optimization space or [low, high]. + :param high: Upper end (inclusive) of optimization space. + Must be none if entire range is passed first parameter. + :param default: A default value. + :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if + parameter fieldname is prefixed with 'buy_' or 'sell_'. + :param optimize: Include parameter in hyperopt optimizations. + :param load: Load parameter value from {space}_params. + :param kwargs: Extra parameters to skopt.space.Real. + """ + super().__init__(low=low, high=high, default=default, space=space, optimize=optimize, + load=load, **kwargs) + + def get_space(self, name: str) -> 'Real': + """ + Create skopt optimization space. + :param name: A name of parameter field. + """ + return Real(low=self.low, high=self.high, name=name, **self._space_params) + + +class DecimalParameter(NumericParameter): + default: float + value: float + + def __init__(self, low: Union[float, Sequence[float]], high: Optional[float] = None, *, + default: float, decimals: int = 3, space: Optional[str] = None, + optimize: bool = True, load: bool = True, **kwargs): + """ + Initialize hyperopt-optimizable decimal parameter with a limited precision. + :param low: Lower end (inclusive) of optimization space or [low, high]. + :param high: Upper end (inclusive) of optimization space. + Must be none if entire range is passed first parameter. + :param default: A default value. + :param decimals: A number of decimals after floating point to be included in testing. + :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if + parameter fieldname is prefixed with 'buy_' or 'sell_'. + :param optimize: Include parameter in hyperopt optimizations. + :param load: Load parameter value from {space}_params. + :param kwargs: Extra parameters to skopt.space.Integer. + """ + self._decimals = decimals + default = round(default, self._decimals) + + super().__init__(low=low, high=high, default=default, space=space, optimize=optimize, + load=load, **kwargs) + + def get_space(self, name: str) -> 'SKDecimal': + """ + Create skopt optimization space. + :param name: A name of parameter field. + """ + return SKDecimal(low=self.low, high=self.high, decimals=self._decimals, name=name, + **self._space_params) + + @property + def range(self): + """ + Get each value in this space as list. + Returns a List from low to high (inclusive) in Hyperopt mode. + Returns a List with 1 item (`value`) in "non-hyperopt" mode, to avoid + calculating 100ds of indicators. + """ + if self.in_space and self.optimize: + low = int(self.low * pow(10, self._decimals)) + high = int(self.high * pow(10, self._decimals)) + 1 + return [round(n * pow(0.1, self._decimals), self._decimals) for n in range(low, high)] + else: + return [self.value] + + +class CategoricalParameter(BaseParameter): + default: Any + value: Any + opt_range: Sequence[Any] + + def __init__(self, categories: Sequence[Any], *, default: Optional[Any] = None, + space: Optional[str] = None, optimize: bool = True, load: bool = True, **kwargs): + """ + Initialize hyperopt-optimizable parameter. + :param categories: Optimization space, [a, b, ...]. + :param default: A default value. If not specified, first item from specified space will be + used. + :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if + parameter field + name is prefixed with 'buy_' or 'sell_'. + :param optimize: Include parameter in hyperopt optimizations. + :param load: Load parameter value from {space}_params. + :param kwargs: Extra parameters to skopt.space.Categorical. + """ + if len(categories) < 2: + raise OperationalException( + 'CategoricalParameter space must be [a, b, ...] (at least two parameters)') + self.opt_range = categories + super().__init__(default=default, space=space, optimize=optimize, + load=load, **kwargs) + + def get_space(self, name: str) -> 'Categorical': + """ + Create skopt optimization space. + :param name: A name of parameter field. + """ + return Categorical(self.opt_range, name=name, **self._space_params) + + @property + def range(self): + """ + Get each value in this space as list. + Returns a List of categories in Hyperopt mode. + Returns a List with 1 item (`value`) in "non-hyperopt" mode, to avoid + calculating 100ds of indicators. + """ + if self.in_space and self.optimize: + return self.opt_range + else: + return [self.value] + + +class BooleanParameter(CategoricalParameter): + + def __init__(self, *, default: Optional[Any] = None, + space: Optional[str] = None, optimize: bool = True, load: bool = True, **kwargs): + """ + Initialize hyperopt-optimizable Boolean Parameter. + It's a shortcut to `CategoricalParameter([True, False])`. + :param default: A default value. If not specified, first item from specified space will be + used. + :param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if + parameter field + name is prefixed with 'buy_' or 'sell_'. + :param optimize: Include parameter in hyperopt optimizations. + :param load: Load parameter value from {space}_params. + :param kwargs: Extra parameters to skopt.space.Categorical. + """ + + categories = [True, False] + super().__init__(categories=categories, default=default, space=space, optimize=optimize, + load=load, **kwargs) diff --git a/tests/optimize/test_hyperopt.py b/tests/optimize/test_hyperopt.py index dcc1ddeea..8522894f7 100644 --- a/tests/optimize/test_hyperopt.py +++ b/tests/optimize/test_hyperopt.py @@ -17,7 +17,7 @@ from freqtrade.optimize.hyperopt_auto import HyperOptAuto from freqtrade.optimize.hyperopt_tools import HyperoptTools from freqtrade.optimize.optimize_reports import generate_strategy_stats from freqtrade.optimize.space import SKDecimal -from freqtrade.strategy.hyper import IntParameter +from freqtrade.strategy import IntParameter from tests.conftest import (CURRENT_TEST_STRATEGY, get_args, log_has, log_has_re, patch_exchange, patched_configuration_load_config_file) diff --git a/tests/strategy/test_interface.py b/tests/strategy/test_interface.py index 6e57a3182..ee1a381da 100644 --- a/tests/strategy/test_interface.py +++ b/tests/strategy/test_interface.py @@ -16,8 +16,8 @@ from freqtrade.exceptions import OperationalException, StrategyError from freqtrade.optimize.space import SKDecimal from freqtrade.persistence import PairLocks, Trade from freqtrade.resolvers import StrategyResolver -from freqtrade.strategy.hyper import (BaseParameter, BooleanParameter, CategoricalParameter, - DecimalParameter, IntParameter, RealParameter) +from freqtrade.strategy.parameters import (BaseParameter, BooleanParameter, CategoricalParameter, + DecimalParameter, IntParameter, RealParameter) from freqtrade.strategy.strategy_wrapper import strategy_safe_wrapper from tests.conftest import CURRENT_TEST_STRATEGY, TRADE_SIDES, log_has, log_has_re From 07ec3b27fe03bdb5587ffdfaddf8fc605cbe77fe Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 15 Apr 2022 15:48:37 +0200 Subject: [PATCH 49/81] Add typing information to retrier decorator --- freqtrade/exchange/common.py | 21 ++++++++++++++++++--- freqtrade/exchange/exchange.py | 4 ++-- freqtrade/exchange/ftx.py | 4 ++-- freqtrade/exchange/gateio.py | 4 ++-- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/freqtrade/exchange/common.py b/freqtrade/exchange/common.py index 4355662a8..a9f03ba1a 100644 --- a/freqtrade/exchange/common.py +++ b/freqtrade/exchange/common.py @@ -2,6 +2,7 @@ import asyncio import logging import time from functools import wraps +from typing import Any, Callable, Optional, TypeVar, cast, overload from freqtrade.exceptions import DDosProtection, RetryableOrderError, TemporaryError from freqtrade.mixins import LoggingMixin @@ -133,8 +134,22 @@ def retrier_async(f): return wrapper -def retrier(_func=None, retries=API_RETRY_COUNT): - def decorator(f): +F = TypeVar('F', bound=Callable[..., Any]) + + +# Type shenanigans +@overload +def retrier(_func: F) -> F: + ... + + +@overload +def retrier(*, retries=API_RETRY_COUNT) -> Callable[[F], F]: + ... + + +def retrier(_func: Optional[F] = None, *, retries=API_RETRY_COUNT): + def decorator(f: F) -> F: @wraps(f) def wrapper(*args, **kwargs): count = kwargs.pop('count', retries) @@ -155,7 +170,7 @@ def retrier(_func=None, retries=API_RETRY_COUNT): else: logger.warning(msg + 'Giving up.') raise ex - return wrapper + return cast(F, wrapper) # Support both @retrier and @retrier(retries=2) syntax if _func is None: return decorator diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 2fa397300..b25886868 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1164,7 +1164,7 @@ class Exchange: raise OperationalException(e) from e @retrier(retries=API_FETCH_ORDER_RETRY_COUNT) - def fetch_order(self, order_id: str, pair: str, params={}) -> Dict: + def fetch_order(self, order_id: str, pair: str, params: Dict = {}) -> Dict: if self._config['dry_run']: return self.fetch_dry_run_order(order_id) try: @@ -1212,7 +1212,7 @@ class Exchange: and order.get('filled') == 0.0) @retrier - def cancel_order(self, order_id: str, pair: str, params={}) -> Dict: + def cancel_order(self, order_id: str, pair: str, params: Dict = {}) -> Dict: if self._config['dry_run']: try: order = self.fetch_dry_run_order(order_id) diff --git a/freqtrade/exchange/ftx.py b/freqtrade/exchange/ftx.py index 65c2a53ca..9ee6894f1 100644 --- a/freqtrade/exchange/ftx.py +++ b/freqtrade/exchange/ftx.py @@ -104,7 +104,7 @@ class Ftx(Exchange): raise OperationalException(e) from e @retrier(retries=API_FETCH_ORDER_RETRY_COUNT) - def fetch_stoploss_order(self, order_id: str, pair: str) -> Dict: + def fetch_stoploss_order(self, order_id: str, pair: str, params: Dict = {}) -> Dict: if self._config['dry_run']: return self.fetch_dry_run_order(order_id) @@ -145,7 +145,7 @@ class Ftx(Exchange): raise OperationalException(e) from e @retrier - def cancel_stoploss_order(self, order_id: str, pair: str) -> Dict: + def cancel_stoploss_order(self, order_id: str, pair: str, params: Dict = {}) -> Dict: if self._config['dry_run']: return {} try: diff --git a/freqtrade/exchange/gateio.py b/freqtrade/exchange/gateio.py index 609cf4901..4147e8290 100644 --- a/freqtrade/exchange/gateio.py +++ b/freqtrade/exchange/gateio.py @@ -71,14 +71,14 @@ class Gateio(Exchange): } return trades - def fetch_stoploss_order(self, order_id: str, pair: str, params={}) -> Dict: + def fetch_stoploss_order(self, order_id: str, pair: str, params: Dict = {}) -> Dict: return self.fetch_order( order_id=order_id, pair=pair, params={'stop': True} ) - def cancel_stoploss_order(self, order_id: str, pair: str, params={}) -> Dict: + def cancel_stoploss_order(self, order_id: str, pair: str, params: Dict = {}) -> Dict: return self.cancel_order( order_id=order_id, pair=pair, From 7f4161ff782857f648f5a55efe8bf5be30b15688 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 16 Apr 2022 06:53:38 +0200 Subject: [PATCH 50/81] Add typehints to strategy wrapper --- freqtrade/strategy/strategy_wrapper.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/freqtrade/strategy/strategy_wrapper.py b/freqtrade/strategy/strategy_wrapper.py index 9aead8395..8cb0bde15 100644 --- a/freqtrade/strategy/strategy_wrapper.py +++ b/freqtrade/strategy/strategy_wrapper.py @@ -1,5 +1,7 @@ import logging from copy import deepcopy +from functools import wraps +from typing import Any, Callable, TypeVar, cast from freqtrade.exceptions import StrategyError @@ -7,12 +9,16 @@ from freqtrade.exceptions import StrategyError logger = logging.getLogger(__name__) -def strategy_safe_wrapper(f, message: str = "", default_retval=None, supress_error=False): +F = TypeVar('F', bound=Callable[..., Any]) + + +def strategy_safe_wrapper(f: F, message: str = "", default_retval=None, supress_error=False) -> F: """ Wrapper around user-provided methods and functions. Caches all exceptions and returns either the default_retval (if it's not None) or raises a StrategyError exception, which then needs to be handled by the calling method. """ + @wraps(f) def wrapper(*args, **kwargs): try: if 'trade' in kwargs: @@ -37,4 +43,4 @@ def strategy_safe_wrapper(f, message: str = "", default_retval=None, supress_err raise StrategyError(str(error)) from error return default_retval - return wrapper + return cast(F, wrapper) From 502404c0cc3c36faafb0039b9e19aaed9fd3c5c8 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 7 May 2022 11:30:45 +0200 Subject: [PATCH 51/81] Use pyproject.toml instead of setup.cfg --- pyproject.toml | 11 +++++++++++ setup.cfg | 10 ---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e8d5ed47e..935874ab8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,17 @@ skip_glob = ["**/.env*", "**/env/*", "**/.venv/*", "**/docs/*", "**/user_data/*" [tool.pytest.ini_options] asyncio_mode = "auto" +[tool.mypy] +ignore_missing_imports = true +warn_unused_ignores = true +exclude = [ + '^build_helpers\.py$' +] + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_errors = true + [build-system] requires = ["setuptools >= 46.4.0", "wheel"] build-backend = "setuptools.build_meta" diff --git a/setup.cfg b/setup.cfg index 042517ec9..d711534d9 100644 --- a/setup.cfg +++ b/setup.cfg @@ -50,13 +50,3 @@ exclude = .eggs, user_data, -[mypy] -ignore_missing_imports = True -warn_unused_ignores = True -exclude = (?x)( - ^build_helpers\.py$ - ) - - -[mypy-tests.*] -ignore_errors = True From 3f68c3b68e8d23d1f5d7c42264c73af0670b9d65 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 7 May 2022 11:41:57 +0200 Subject: [PATCH 52/81] Update some types --- freqtrade/configuration/check_exchange.py | 2 +- freqtrade/exchange/exchange.py | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/freqtrade/configuration/check_exchange.py b/freqtrade/configuration/check_exchange.py index fa1f47f9b..2be13ce4f 100644 --- a/freqtrade/configuration/check_exchange.py +++ b/freqtrade/configuration/check_exchange.py @@ -27,7 +27,7 @@ def check_exchange(config: Dict[str, Any], check_for_bad: bool = True) -> bool: return True logger.info("Checking exchange...") - exchange = config.get('exchange', {}).get('name').lower() + exchange = config.get('exchange', {}).get('name', '').lower() if not exchange: raise OperationalException( f'This command requires a configured exchange. You should either use ' diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index b25886868..1044ad652 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -92,8 +92,8 @@ class Exchange: it does basic validation whether the specified exchange and pairs are valid. :return: None """ - self._api: ccxt.Exchange = None - self._api_async: ccxt_async.Exchange = None + self._api: ccxt.Exchange + self._api_async: ccxt_async.Exchange self._markets: Dict = {} self._trading_fees: Dict[str, Any] = {} self._leverage_tiers: Dict[str, List[Dict]] = {} @@ -291,7 +291,7 @@ class Exchange: return self._markets @property - def precisionMode(self) -> str: + def precisionMode(self) -> int: """exchange ccxt precisionMode""" return self._api.precisionMode @@ -322,7 +322,7 @@ class Exchange: return int(self._ft_has.get('ohlcv_candle_limit_per_timeframe', {}).get( timeframe, self._ft_has.get('ohlcv_candle_limit'))) - def get_markets(self, base_currencies: List[str] = None, quote_currencies: List[str] = None, + def get_markets(self, base_currencies: List[str] = [], quote_currencies: List[str] = [], spot_only: bool = False, margin_only: bool = False, futures_only: bool = False, tradable_only: bool = True, active_only: bool = False) -> Dict[str, Any]: @@ -1718,7 +1718,7 @@ class Exchange: async def _async_get_historic_ohlcv(self, pair: str, timeframe: str, since_ms: int, candle_type: CandleType, is_new_pair: bool = False, raise_: bool = False, - until_ms: int = None + until_ms: Optional[int] = None ) -> Tuple[str, str, str, List]: """ Download historic ohlcv @@ -1779,7 +1779,7 @@ class Exchange: def refresh_latest_ohlcv(self, pair_list: ListPairsWithTimeframes, *, since_ms: Optional[int] = None, cache: bool = True, - drop_incomplete: bool = None + drop_incomplete: Optional[bool] = None ) -> Dict[PairWithTimeframe, DataFrame]: """ Refresh in-memory OHLCV asynchronously and set `_klines` with the result From f1a72e448a49c0774a84202942575815ea948189 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 7 May 2022 11:55:49 +0200 Subject: [PATCH 53/81] Align interfaces and strategy templates --- docs/strategy-callbacks.md | 4 ++-- docs/strategy_migration.md | 4 ++-- freqtrade/strategy/interface.py | 7 ++++--- freqtrade/templates/base_strategy.py.j2 | 2 +- .../subtemplates/strategy_methods_advanced.j2 | 10 +++++----- tests/strategy/strats/strategy_test_v2.py | 4 +++- tests/strategy/strats/strategy_test_v3.py | 4 +++- 7 files changed, 20 insertions(+), 15 deletions(-) diff --git a/docs/strategy-callbacks.md b/docs/strategy-callbacks.md index ab67a3c26..63bd4f958 100644 --- a/docs/strategy-callbacks.md +++ b/docs/strategy-callbacks.md @@ -656,7 +656,7 @@ class DigDeeperStrategy(IStrategy): # This is called when placing the initial order (opening trade) def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float, - proposed_stake: float, min_stake: float, max_stake: float, + proposed_stake: float, min_stake: Optional[float], max_stake: float, entry_tag: Optional[str], side: str, **kwargs) -> float: # We need to leave most of the funds for possible further DCA orders @@ -664,7 +664,7 @@ class DigDeeperStrategy(IStrategy): return proposed_stake / self.max_dca_multiplier def adjust_trade_position(self, trade: Trade, current_time: datetime, - current_rate: float, current_profit: float, min_stake: float, + current_rate: float, current_profit: float, min_stake: Optional[float], max_stake: float, **kwargs): """ Custom trade adjustment logic, returning the stake amount that a trade should be increased. diff --git a/docs/strategy_migration.md b/docs/strategy_migration.md index 458e80d0e..471ffa601 100644 --- a/docs/strategy_migration.md +++ b/docs/strategy_migration.md @@ -199,7 +199,7 @@ New string argument `side` - which can be either `"long"` or `"short"`. ``` python hl_lines="4" class AwesomeStrategy(IStrategy): def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float, - proposed_stake: float, min_stake: float, max_stake: float, + proposed_stake: float, min_stake: Optional[float], max_stake: float, entry_tag: Optional[str], **kwargs) -> float: # ... return proposed_stake @@ -208,7 +208,7 @@ class AwesomeStrategy(IStrategy): ``` python hl_lines="4" class AwesomeStrategy(IStrategy): def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float, - proposed_stake: float, min_stake: float, max_stake: float, + proposed_stake: float, min_stake: Optional[float], max_stake: float, entry_tag: Optional[str], side: str, **kwargs) -> float: # ... return proposed_stake diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index 57afbf32a..44f7466ec 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -429,7 +429,7 @@ class IStrategy(ABC, HyperStrategyMixin): return self.custom_sell(pair, trade, current_time, current_rate, current_profit, **kwargs) def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float, - proposed_stake: float, min_stake: float, max_stake: float, + proposed_stake: float, min_stake: Optional[float], max_stake: float, entry_tag: Optional[str], side: str, **kwargs) -> float: """ Customize stake size for each new trade. @@ -447,8 +447,9 @@ class IStrategy(ABC, HyperStrategyMixin): return proposed_stake def adjust_trade_position(self, trade: Trade, current_time: datetime, - current_rate: float, current_profit: float, min_stake: float, - max_stake: float, **kwargs) -> Optional[float]: + current_rate: float, current_profit: float, + min_stake: Optional[float], max_stake: float, + **kwargs) -> Optional[float]: """ Custom trade adjustment logic, returning the stake amount that a trade should be increased. This means extra buy orders with additional fees. diff --git a/freqtrade/templates/base_strategy.py.j2 b/freqtrade/templates/base_strategy.py.j2 index 9e7e1fe50..8c7594322 100644 --- a/freqtrade/templates/base_strategy.py.j2 +++ b/freqtrade/templates/base_strategy.py.j2 @@ -6,7 +6,7 @@ import numpy as np # noqa import pandas as pd # noqa from pandas import DataFrame # noqa from datetime import datetime # noqa -from typing import Optional # noqa +from typing import Optional, Union # noqa from freqtrade.strategy import (BooleanParameter, CategoricalParameter, DecimalParameter, IStrategy, IntParameter) diff --git a/freqtrade/templates/subtemplates/strategy_methods_advanced.j2 b/freqtrade/templates/subtemplates/strategy_methods_advanced.j2 index 317602da9..3854efd85 100644 --- a/freqtrade/templates/subtemplates/strategy_methods_advanced.j2 +++ b/freqtrade/templates/subtemplates/strategy_methods_advanced.j2 @@ -13,7 +13,7 @@ def bot_loop_start(self, **kwargs) -> None: pass def custom_entry_price(self, pair: str, current_time: 'datetime', proposed_rate: float, - entry_tag: Optional[str], **kwargs) -> float: + entry_tag: 'Optional[str]', side: str, **kwargs) -> float: """ Custom entry price logic, returning the new entry price. @@ -80,8 +80,8 @@ def custom_exit_price(self, pair: str, trade: 'Trade', return proposed_rate def custom_stake_amount(self, pair: str, current_time: 'datetime', current_rate: float, - proposed_stake: float, min_stake: float, max_stake: float, - side: str, entry_tag: Optional[str], **kwargs) -> float: + proposed_stake: float, min_stake: Optional[float], max_stake: float, + entry_tag: 'Optional[str]', side: str, **kwargs) -> float: """ Customize stake size for each new trade. @@ -244,8 +244,8 @@ def check_exit_timeout(self, pair: str, trade: 'Trade', order: 'Order', return False def adjust_trade_position(self, trade: 'Trade', current_time: 'datetime', - current_rate: float, current_profit: float, min_stake: float, - max_stake: float, **kwargs) -> Optional[float]: + current_rate: float, current_profit: float, min_stake: Optional[float], + max_stake: float, **kwargs) -> 'Optional[float]': """ Custom trade adjustment logic, returning the stake amount that a trade should be increased. This means extra buy orders with additional fees. diff --git a/tests/strategy/strats/strategy_test_v2.py b/tests/strategy/strats/strategy_test_v2.py index 85ff856e1..46181ac7e 100644 --- a/tests/strategy/strats/strategy_test_v2.py +++ b/tests/strategy/strats/strategy_test_v2.py @@ -1,6 +1,7 @@ # pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement from datetime import datetime +from typing import Optional import talib.abstract as ta from pandas import DataFrame @@ -151,7 +152,8 @@ class StrategyTestV2(IStrategy): return dataframe def adjust_trade_position(self, trade: Trade, current_time: datetime, current_rate: float, - current_profit: float, min_stake: float, max_stake: float, **kwargs): + current_profit: float, + min_stake: Optional[float], max_stake: float, **kwargs): if current_profit < -0.0075: orders = trade.select_filled_orders('buy') diff --git a/tests/strategy/strats/strategy_test_v3.py b/tests/strategy/strats/strategy_test_v3.py index df83d3663..340001ef2 100644 --- a/tests/strategy/strats/strategy_test_v3.py +++ b/tests/strategy/strats/strategy_test_v3.py @@ -1,6 +1,7 @@ # pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement from datetime import datetime +from typing import Optional import talib.abstract as ta from pandas import DataFrame @@ -185,7 +186,8 @@ class StrategyTestV3(IStrategy): return 3.0 def adjust_trade_position(self, trade: Trade, current_time: datetime, current_rate: float, - current_profit: float, min_stake: float, max_stake: float, **kwargs): + current_profit: float, + min_stake: Optional[float], max_stake: float, **kwargs): if current_profit < -0.0075: orders = trade.select_filled_orders(trade.entry_side) From 0a713faca84c5039b9245ab6d25ba22c1b4d112e Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 7 May 2022 14:53:51 +0200 Subject: [PATCH 54/81] Fix some type errors --- freqtrade/optimize/backtesting.py | 22 ++++++++++++++++------ freqtrade/strategy/interface.py | 17 +++++++++-------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 3a3660c39..19922ee57 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -500,7 +500,8 @@ class Backtesting: stake_available = self.wallets.get_available_stake_amount() stake_amount = strategy_safe_wrapper(self.strategy.adjust_trade_position, default_retval=None)( - trade=trade, current_time=row[DATE_IDX].to_pydatetime(), current_rate=row[OPEN_IDX], + trade=trade, # type: ignore[arg-type] + current_time=row[DATE_IDX].to_pydatetime(), current_rate=row[OPEN_IDX], current_profit=current_profit, min_stake=min_stake, max_stake=min(max_stake, stake_available)) @@ -566,7 +567,8 @@ class Backtesting: if order_type == 'limit': close_rate = strategy_safe_wrapper(self.strategy.custom_exit_price, default_retval=close_rate)( - pair=trade.pair, trade=trade, + pair=trade.pair, + trade=trade, # type: ignore[arg-type] current_time=exit_candle_time, proposed_rate=close_rate, current_profit=current_profit, exit_tag=exit_reason) @@ -580,7 +582,10 @@ class Backtesting: time_in_force = self.strategy.order_time_in_force['exit'] if not strategy_safe_wrapper(self.strategy.confirm_trade_exit, default_retval=True)( - pair=trade.pair, trade=trade, order_type='limit', amount=trade.amount, + pair=trade.pair, + trade=trade, # type: ignore[arg-type] + order_type='limit', + amount=trade.amount, rate=close_rate, time_in_force=time_in_force, sell_reason=exit_reason, # deprecated @@ -656,7 +661,7 @@ class Backtesting: return self._get_exit_trade_entry_for_candle(trade, row) def get_valid_price_and_stake( - self, pair: str, row: Tuple, propose_rate: float, stake_amount: Optional[float], + self, pair: str, row: Tuple, propose_rate: float, stake_amount_inp: Optional[float], direction: LongShort, current_time: datetime, entry_tag: Optional[str], trade: Optional[LocalTrade], order_type: str ) -> Tuple[float, float, float, float]: @@ -694,6 +699,8 @@ class Backtesting: ) if self._can_short else 1.0 # Cap leverage between 1.0 and max_leverage. leverage = min(max(leverage, 1.0), max_leverage) + elif stake_amount_inp is not None: + stake_amount = stake_amount_inp min_stake_amount = self.exchange.get_min_pair_stake_amount( pair, propose_rate, -0.05, leverage=leverage) or 0 @@ -901,7 +908,9 @@ class Backtesting: Check if current analyzed order has to be canceled. Returns True if the trade should be Deleted (initial order was canceled). """ - timedout = self.strategy.ft_check_timed_out(trade, order, current_time) + timedout = self.strategy.ft_check_timed_out( + trade, # type: ignore[arg-type] + order, current_time) if timedout: if order.side == trade.entry_side: self.timedout_entry_orders += 1 @@ -930,7 +939,8 @@ class Backtesting: if order.side == trade.entry_side and current_time > order.order_date_utc: requested_rate = strategy_safe_wrapper(self.strategy.adjust_entry_price, default_retval=order.price)( - trade=trade, order=order, pair=trade.pair, current_time=current_time, + trade=trade, # type: ignore[arg-type] + order=order, pair=trade.pair, current_time=current_time, proposed_rate=row[OPEN_IDX], current_order_rate=order.price, entry_tag=trade.enter_tag, side=trade.trade_direction ) # default value is current order price diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index 44f7466ec..002a7aca5 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -16,7 +16,7 @@ from freqtrade.enums import (CandleType, ExitCheckTuple, ExitType, SignalDirecti SignalType, TradingMode) from freqtrade.exceptions import OperationalException, StrategyError from freqtrade.exchange import timeframe_to_minutes, timeframe_to_next_date, timeframe_to_seconds -from freqtrade.persistence import LocalTrade, Order, PairLocks, Trade +from freqtrade.persistence import Order, PairLocks, Trade from freqtrade.strategy.hyper import HyperStrategyMixin from freqtrade.strategy.informative_decorator import (InformativeData, PopulateIndicators, _create_and_merge_informative_pair, @@ -918,19 +918,20 @@ class IStrategy(ABC, HyperStrategyMixin): if exit_ and not enter: exit_signal = ExitType.EXIT_SIGNAL else: - custom_reason = strategy_safe_wrapper(self.custom_exit, default_retval=False)( + reason_cust = strategy_safe_wrapper(self.custom_exit, default_retval=False)( pair=trade.pair, trade=trade, current_time=current_time, current_rate=current_rate, current_profit=current_profit) - if custom_reason: + if reason_cust: exit_signal = ExitType.CUSTOM_EXIT - if isinstance(custom_reason, str): - if len(custom_reason) > CUSTOM_EXIT_MAX_LENGTH: + if isinstance(reason_cust, str): + custom_reason = reason_cust + if len(reason_cust) > CUSTOM_EXIT_MAX_LENGTH: logger.warning(f'Custom exit reason returned from ' f'custom_exit is too long and was trimmed' f'to {CUSTOM_EXIT_MAX_LENGTH} characters.') - custom_reason = custom_reason[:CUSTOM_EXIT_MAX_LENGTH] + custom_reason = reason_cust[:CUSTOM_EXIT_MAX_LENGTH] else: - custom_reason = None + custom_reason = '' if ( exit_signal == ExitType.CUSTOM_EXIT or (exit_signal == ExitType.EXIT_SIGNAL @@ -1071,7 +1072,7 @@ class IStrategy(ABC, HyperStrategyMixin): else: return current_profit > roi - def ft_check_timed_out(self, trade: LocalTrade, order: Order, + def ft_check_timed_out(self, trade: Trade, order: Order, current_time: datetime) -> bool: """ FT Internal method. From 904f094b806d9a7ee68034ca86c531f7fa83b876 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 24 May 2022 06:45:56 +0200 Subject: [PATCH 55/81] Don't reassign method, but implement it properly --- freqtrade/data/history/history_utils.py | 1 + freqtrade/exchange/exchange.py | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/freqtrade/data/history/history_utils.py b/freqtrade/data/history/history_utils.py index 4600d6ab4..bead59814 100644 --- a/freqtrade/data/history/history_utils.py +++ b/freqtrade/data/history/history_utils.py @@ -282,6 +282,7 @@ def refresh_backtest_ohlcv_data(exchange: Exchange, pairs: List[str], timeframes pairs_not_available = [] data_handler = get_datahandler(datadir, data_format) candle_type = CandleType.get_default(trading_mode) + process = '' for idx, pair in enumerate(pairs, start=1): if pair not in exchange.markets: pairs_not_available.append(pair) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 1044ad652..6ef61f227 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1186,8 +1186,8 @@ class Exchange: except ccxt.BaseError as e: raise OperationalException(e) from e - # Assign method to fetch_stoploss_order to allow easy overriding in other classes - fetch_stoploss_order = fetch_order + def fetch_stoploss_order(self, order_id: str, pair: str, params: Dict = {}) -> Dict: + return self.fetch_order(order_id, pair, params) def fetch_order_or_stoploss_order(self, order_id: str, pair: str, stoploss_order: bool = False) -> Dict: @@ -1238,8 +1238,8 @@ class Exchange: except ccxt.BaseError as e: raise OperationalException(e) from e - # Assign method to cancel_stoploss_order to allow easy overriding in other classes - cancel_stoploss_order = cancel_order + def cancel_stoploss_order(self, order_id: str, pair: str, params: Dict = {}) -> Dict: + return self.cancel_order(order_id, pair, params) def is_cancel_order_result_suitable(self, corder) -> bool: if not isinstance(corder, dict): From a8ee77cd5e39b002d629f649147a96264394ad45 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 24 May 2022 19:13:35 +0200 Subject: [PATCH 56/81] Simplify backtesting typechecking --- freqtrade/optimize/backtesting.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 19922ee57..445de69f0 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -661,7 +661,7 @@ class Backtesting: return self._get_exit_trade_entry_for_candle(trade, row) def get_valid_price_and_stake( - self, pair: str, row: Tuple, propose_rate: float, stake_amount_inp: Optional[float], + self, pair: str, row: Tuple, propose_rate: float, stake_amount: float, direction: LongShort, current_time: datetime, entry_tag: Optional[str], trade: Optional[LocalTrade], order_type: str ) -> Tuple[float, float, float, float]: @@ -699,8 +699,6 @@ class Backtesting: ) if self._can_short else 1.0 # Cap leverage between 1.0 and max_leverage. leverage = min(max(leverage, 1.0), max_leverage) - elif stake_amount_inp is not None: - stake_amount = stake_amount_inp min_stake_amount = self.exchange.get_min_pair_stake_amount( pair, propose_rate, -0.05, leverage=leverage) or 0 @@ -737,8 +735,9 @@ class Backtesting: order_type = self.strategy.order_types['entry'] pos_adjust = trade is not None and requested_rate is None + stake_amount_ = stake_amount or (trade.stake_amount if trade else 0.0) propose_rate, stake_amount, leverage, min_stake_amount = self.get_valid_price_and_stake( - pair, row, row[OPEN_IDX], stake_amount, direction, current_time, entry_tag, trade, + pair, row, row[OPEN_IDX], stake_amount_, direction, current_time, entry_tag, trade, order_type ) From 43f726ba8f18cfd4bc068727d69136edc5c0a20d Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 25 May 2022 06:14:45 +0000 Subject: [PATCH 57/81] Run CI against different templates --- .github/workflows/ci.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d11285ba4..d2e420e8e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,11 +78,13 @@ jobs: # Allow failure for coveralls coveralls || true - - name: Backtesting + - name: Backtesting (multi) run: | cp config_examples/config_bittrex.example.json config.json freqtrade create-userdir --userdir user_data - freqtrade backtesting --datadir tests/testdata --strategy SampleStrategy + freqtrade new-strategy -s AwesomeStrategy + freqtrade new-strategy -s AwesomeStrategyMin --template minimal + freqtrade backtesting --datadir tests/testdata --strategy-list AwesomeStrategy AwesomeStrategyMin -i 5m - name: Hyperopt run: | @@ -164,7 +166,8 @@ jobs: run: | cp config_examples/config_bittrex.example.json config.json freqtrade create-userdir --userdir user_data - freqtrade backtesting --datadir tests/testdata --strategy SampleStrategy + freqtrade new-strategy -s AwesomeStrategyAdv --template advanced + freqtrade backtesting --datadir tests/testdata --strategy AwesomeStrategyAdv - name: Hyperopt run: | From b2968df5dc3aa0e81ba366cea37fa68d1b7382b3 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 25 May 2022 10:13:37 +0000 Subject: [PATCH 58/81] Fix some type problems --- freqtrade/exchange/binance.py | 4 ++-- freqtrade/exchange/exchange.py | 4 ++-- freqtrade/exchange/kraken.py | 2 +- freqtrade/persistence/trade_model.py | 4 ++-- pyproject.toml | 8 ++++++++ 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/freqtrade/exchange/binance.py b/freqtrade/exchange/binance.py index 69ae5198a..1b6496a64 100644 --- a/freqtrade/exchange/binance.py +++ b/freqtrade/exchange/binance.py @@ -57,7 +57,7 @@ class Binance(Exchange): (side == "buy" and stop_loss < float(order['info']['stopPrice'])) ) - def get_tickers(self, symbols: List[str] = None, cached: bool = False) -> Dict: + def get_tickers(self, symbols: Optional[List[str]] = None, cached: bool = False) -> Dict: tickers = super().get_tickers(symbols=symbols, cached=cached) if self.trading_mode == TradingMode.FUTURES: # Binance's future result has no bid/ask values. @@ -95,7 +95,7 @@ class Binance(Exchange): async def _async_get_historic_ohlcv(self, pair: str, timeframe: str, since_ms: int, candle_type: CandleType, is_new_pair: bool = False, raise_: bool = False, - until_ms: int = None + until_ms: Optional[int] = None ) -> Tuple[str, str, str, List]: """ Overwrite to introduce "fast new pair" functionality by detecting the pair's listing date diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 6ef61f227..c1a9059a7 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1351,7 +1351,7 @@ class Exchange: raise OperationalException(e) from e @retrier - def fetch_bids_asks(self, symbols: List[str] = None, cached: bool = False) -> Dict: + def fetch_bids_asks(self, symbols: Optional[List[str]] = None, cached: bool = False) -> Dict: """ :param cached: Allow cached result :return: fetch_tickers result @@ -1379,7 +1379,7 @@ class Exchange: raise OperationalException(e) from e @retrier - def get_tickers(self, symbols: List[str] = None, cached: bool = False) -> Dict: + def get_tickers(self, symbols: Optional[List[str]] = None, cached: bool = False) -> Dict: """ :param cached: Allow cached result :return: fetch_tickers result diff --git a/freqtrade/exchange/kraken.py b/freqtrade/exchange/kraken.py index 900f6c898..0103e2702 100644 --- a/freqtrade/exchange/kraken.py +++ b/freqtrade/exchange/kraken.py @@ -45,7 +45,7 @@ class Kraken(Exchange): return (parent_check and market.get('darkpool', False) is False) - def get_tickers(self, symbols: List[str] = None, cached: bool = False) -> Dict: + def get_tickers(self, symbols: Optional[List[str]] = None, cached: bool = False) -> Dict: # Only fetch tickers for current stake currency # Otherwise the request for kraken becomes too large. symbols = list(self.get_markets(quote_currencies=[self._config['stake_currency']])) diff --git a/freqtrade/persistence/trade_model.py b/freqtrade/persistence/trade_model.py index d2abb48d6..45a16bfbd 100644 --- a/freqtrade/persistence/trade_model.py +++ b/freqtrade/persistence/trade_model.py @@ -868,8 +868,8 @@ class LocalTrade(): return o return None - def select_order( - self, order_side: str = None, is_open: Optional[bool] = None) -> Optional[Order]: + def select_order(self, order_side: Optional[str] = None, + is_open: Optional[bool] = None) -> Optional[Order]: """ Finds latest order for this orderside and status :param order_side: ft_order_side of the order (either 'buy', 'sell' or 'stoploss') diff --git a/pyproject.toml b/pyproject.toml index 935874ab8..0cb81f745 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,3 +42,11 @@ ignore_errors = true [build-system] requires = ["setuptools >= 46.4.0", "wheel"] build-backend = "setuptools.build_meta" + +[tool.pyright] +include = ["freqtrade"] +exclude = [ + "**/__pycache__", + "build_helpers/*.py", +] +ignore = ["freqtrade/vendor/**"] From 023f8171794e9d7415c1c3e7a7e268a1899b3828 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 25 May 2022 19:37:32 +0200 Subject: [PATCH 59/81] Improve wording for supported futures exchanges --- README.md | 2 +- docs/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6c3c8fe25..881895c9a 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Please read the [exchange specific notes](docs/exchanges.md) to learn about even - [X] [OKX](https://okx.com/) (Former OKEX) - [ ] [potentially many others](https://github.com/ccxt/ccxt/). _(We cannot guarantee they will work)_ -### Experimentally, freqtrade also supports futures on the following exchanges +### Supported Futures Exchanges (experimental) - [X] [Binance](https://www.binance.com/) - [X] [Gate.io](https://www.gate.io/ref/6266643) diff --git a/docs/index.md b/docs/index.md index 16c4ded94..7c35e92b6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -47,7 +47,7 @@ Please read the [exchange specific notes](exchanges.md) to learn about eventual, - [X] [OKX](https://okx.com/) (Former OKEX) - [ ] [potentially many others through ccxt](https://github.com/ccxt/ccxt/). _(We cannot guarantee they will work)_ -### Experimentally, freqtrade also supports futures on the following exchanges: +### Supported Futures Exchanges (experimental) - [X] [Binance](https://www.binance.com/) - [X] [Gate.io](https://www.gate.io/ref/6266643) From 3e66275c98d1a9d59bf97d48554141a4e4660bf8 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 25 May 2022 20:01:21 +0200 Subject: [PATCH 60/81] Refactor bot_start to separate function to be reused further ... --- freqtrade/freqtradebot.py | 2 +- freqtrade/optimize/backtesting.py | 2 +- freqtrade/optimize/edge_cli.py | 2 +- freqtrade/plot/plotting.py | 2 +- freqtrade/strategy/interface.py | 7 +++++++ 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index df541e3a9..a2a12a03a 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -123,7 +123,7 @@ class FreqtradeBot(LoggingMixin): self._schedule.every().day.at(t).do(update) self.last_process = datetime(1970, 1, 1, tzinfo=timezone.utc) - self.strategy.bot_start() + self.strategy.ft_bot_start() def notify_status(self, msg: str) -> None: """ diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index ef2b222a0..f1e9b7251 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -187,7 +187,7 @@ class Backtesting: # since a "perfect" stoploss-exit is assumed anyway # And the regular "stoploss" function would not apply to that case self.strategy.order_types['stoploss_on_exchange'] = False - self.strategy.bot_start() + self.strategy.ft_bot_start() def _load_protections(self, strategy: IStrategy): if self.config.get('enable_protections', False): diff --git a/freqtrade/optimize/edge_cli.py b/freqtrade/optimize/edge_cli.py index 30eabecd0..aa3b02529 100644 --- a/freqtrade/optimize/edge_cli.py +++ b/freqtrade/optimize/edge_cli.py @@ -44,7 +44,7 @@ class EdgeCli: self.edge._timerange = TimeRange.parse_timerange(None if self.config.get( 'timerange') is None else str(self.config.get('timerange'))) - self.strategy.bot_start() + self.strategy.ft_bot_start() def start(self) -> None: result = self.edge.calculate(self.config['exchange']['pair_whitelist']) diff --git a/freqtrade/plot/plotting.py b/freqtrade/plot/plotting.py index ce8f54cbd..a64281156 100644 --- a/freqtrade/plot/plotting.py +++ b/freqtrade/plot/plotting.py @@ -633,7 +633,7 @@ def load_and_plot_trades(config: Dict[str, Any]): exchange = ExchangeResolver.load_exchange(config['exchange']['name'], config) IStrategy.dp = DataProvider(config, exchange) - strategy.bot_start() + strategy.ft_bot_start() strategy.bot_loop_start() plot_elements = init_plotscript(config, list(exchange.markets), strategy.startup_candle_count) timerange = plot_elements['timerange'] diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index 60ac9da5a..c521943b1 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -144,6 +144,13 @@ class IStrategy(ABC, HyperStrategyMixin): informative_data.candle_type = config['candle_type_def'] self._ft_informative.append((informative_data, cls_method)) + def ft_bot_start(self, **kwargs) -> None: + """ + Strategy init - runs after dataprovider has been added. + Must call bot_start() + """ + strategy_safe_wrapper(self.bot_start)() + @abstractmethod def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: """ From 537d10c627bb307875507b69219ad29ce82a31da Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 25 May 2022 20:43:43 +0200 Subject: [PATCH 61/81] Improve some typing --- freqtrade/configuration/configuration.py | 5 +++-- freqtrade/configuration/directory_operations.py | 2 +- freqtrade/strategy/hyper.py | 4 ++-- freqtrade/strategy/parameters.py | 2 ++ pyproject.toml | 3 +++ 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/freqtrade/configuration/configuration.py b/freqtrade/configuration/configuration.py index 96b585cd1..3f563b6cd 100644 --- a/freqtrade/configuration/configuration.py +++ b/freqtrade/configuration/configuration.py @@ -490,7 +490,8 @@ class Configuration: if not pairs_file.exists(): raise OperationalException(f'No pairs file found with path "{pairs_file}".') config['pairs'] = load_file(pairs_file) - config['pairs'].sort() + if isinstance(config['pairs'], list): + config['pairs'].sort() return if 'config' in self.args and self.args['config']: @@ -501,5 +502,5 @@ class Configuration: pairs_file = config['datadir'] / 'pairs.json' if pairs_file.exists(): config['pairs'] = load_file(pairs_file) - if 'pairs' in config: + if 'pairs' in config and isinstance(config['pairs'], list): config['pairs'].sort() diff --git a/freqtrade/configuration/directory_operations.py b/freqtrade/configuration/directory_operations.py index ca305c260..771fd53cc 100644 --- a/freqtrade/configuration/directory_operations.py +++ b/freqtrade/configuration/directory_operations.py @@ -15,7 +15,7 @@ def create_datadir(config: Dict[str, Any], datadir: Optional[str] = None) -> Pat folder = Path(datadir) if datadir else Path(f"{config['user_data_dir']}/data") if not datadir: # set datadir - exchange_name = config.get('exchange', {}).get('name').lower() + exchange_name = config.get('exchange', {}).get('name', '').lower() folder = folder.joinpath(exchange_name) if not folder.is_dir(): diff --git a/freqtrade/strategy/hyper.py b/freqtrade/strategy/hyper.py index 15f5be483..5c09dd862 100644 --- a/freqtrade/strategy/hyper.py +++ b/freqtrade/strategy/hyper.py @@ -69,7 +69,7 @@ class HyperStrategyMixin: @classmethod def detect_all_parameters(cls) -> Dict: """ Detect all parameters and return them as a list""" - params: Dict = { + params: Dict[str, Any] = { 'buy': list(cls.detect_parameters('buy')), 'sell': list(cls.detect_parameters('sell')), 'protection': list(cls.detect_parameters('protection')), @@ -148,7 +148,7 @@ class HyperStrategyMixin: """ Returns list of Parameters that are not part of the current optimize job """ - params = { + params: Dict[str, Dict] = { 'buy': {}, 'sell': {}, 'protection': {}, diff --git a/freqtrade/strategy/parameters.py b/freqtrade/strategy/parameters.py index 02706690d..83dd41de9 100644 --- a/freqtrade/strategy/parameters.py +++ b/freqtrade/strategy/parameters.py @@ -97,6 +97,8 @@ class NumericParameter(BaseParameter): class IntParameter(NumericParameter): default: int value: int + low: int + high: int def __init__(self, low: Union[int, Sequence[int]], high: Optional[int] = None, *, default: int, space: Optional[str] = None, optimize: bool = True, load: bool = True, **kwargs): diff --git a/pyproject.toml b/pyproject.toml index 0cb81f745..8020b0636 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,3 +50,6 @@ exclude = [ "build_helpers/*.py", ] ignore = ["freqtrade/vendor/**"] + +# Align pyright to mypy config +strictParameterNoneValue = false From e1c6cf5f91d43f795968c191807e38bb8a36b015 Mon Sep 17 00:00:00 2001 From: Stefano Ariestasia Date: Thu, 26 May 2022 10:12:50 +0900 Subject: [PATCH 62/81] fix typo --- freqtrade/configuration/deprecated_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/configuration/deprecated_settings.py b/freqtrade/configuration/deprecated_settings.py index 70d29e2bd..e88383785 100644 --- a/freqtrade/configuration/deprecated_settings.py +++ b/freqtrade/configuration/deprecated_settings.py @@ -113,7 +113,7 @@ def process_temporary_deprecated_settings(config: Dict[str, Any]) -> None: process_removed_setting(config, 'experimental', 'ignore_roi_if_buy_signal', None, 'ignore_roi_if_entry_signal') - process_removed_setting(config, 'ask_strategy', 'use_sell_signal', None, 'exit_sell_signal') + process_removed_setting(config, 'ask_strategy', 'use_sell_signal', None, 'use_exit_signal') process_removed_setting(config, 'ask_strategy', 'sell_profit_only', None, 'exit_profit_only') process_removed_setting(config, 'ask_strategy', 'sell_profit_offset', None, 'exit_profit_offset') From 682daa4e941abf2235e60d9ecd1ad029eec5d3c4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 26 May 2022 18:05:40 +0200 Subject: [PATCH 63/81] Reset logging mixin to avoid random test failure --- freqtrade/exchange/common.py | 8 ++++++++ tests/exchange/test_exchange.py | 2 ++ 2 files changed, 10 insertions(+) diff --git a/freqtrade/exchange/common.py b/freqtrade/exchange/common.py index a9f03ba1a..841f45cd0 100644 --- a/freqtrade/exchange/common.py +++ b/freqtrade/exchange/common.py @@ -12,6 +12,14 @@ logger = logging.getLogger(__name__) __logging_mixin = None +def _reset_logging_mixin(): + """ + Reset global logging mixin - used in tests only. + """ + global __logging_mixin + __logging_mixin = LoggingMixin(logger) + + def _get_logging_mixin(): # Logging-mixin to cache kucoin responses # Only to be used in retrier diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index b19c59e50..9da2dbc11 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -2155,6 +2155,8 @@ async def test__async_get_candle_history(default_conf, mocker, caplog, exchange_ @pytest.mark.asyncio async def test__async_kucoin_get_candle_history(default_conf, mocker, caplog): + from freqtrade.exchange.common import _reset_logging_mixin + _reset_logging_mixin() caplog.set_level(logging.INFO) api_mock = MagicMock() api_mock.fetch_ohlcv = MagicMock(side_effect=ccxt.DDoSProtection( From 24cf0446468be71f2979b27affa66bd1f036745b Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 27 May 2022 08:18:04 +0000 Subject: [PATCH 64/81] Fix bybit spot mode --- freqtrade/exchange/bybit.py | 14 ++++++++++++++ tests/exchange/test_exchange.py | 1 + 2 files changed, 15 insertions(+) diff --git a/freqtrade/exchange/bybit.py b/freqtrade/exchange/bybit.py index 484b8b9d3..1c4bb858b 100644 --- a/freqtrade/exchange/bybit.py +++ b/freqtrade/exchange/bybit.py @@ -29,3 +29,17 @@ class Bybit(Exchange): # (TradingMode.FUTURES, MarginMode.CROSS), # (TradingMode.FUTURES, MarginMode.ISOLATED) ] + + @property + def _ccxt_config(self) -> Dict: + # Parameters to add directly to ccxt sync/async initialization. + # ccxt defaults to swap mode. + config = {} + if self.trading_mode == TradingMode.SPOT: + config.update({ + "options": { + "defaultType": "spot" + } + }) + config.update(super()._ccxt_config) + return config diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 9da2dbc11..708a0e889 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -3819,6 +3819,7 @@ def test_validate_trading_mode_and_margin_mode( ("bibox", "spot", {"has": {"fetchCurrencies": False}}), ("bibox", "margin", {"has": {"fetchCurrencies": False}, "options": {"defaultType": "margin"}}), ("bibox", "futures", {"has": {"fetchCurrencies": False}, "options": {"defaultType": "swap"}}), + ("bybit", "spot", {"options": {"defaultType": "spot"}}), ("bybit", "futures", {"options": {"defaultType": "linear"}}), ("ftx", "futures", {"options": {"defaultType": "swap"}}), ("gateio", "futures", {"options": {"defaultType": "swap"}}), From b04fe5d4ee7b9a0fb7ef79ec810064148ab3623b Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 27 May 2022 19:30:14 +0200 Subject: [PATCH 65/81] Simplify test v2 strategy --- tests/strategy/strats/strategy_test_v2.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/tests/strategy/strats/strategy_test_v2.py b/tests/strategy/strats/strategy_test_v2.py index 46181ac7e..4e45b1463 100644 --- a/tests/strategy/strats/strategy_test_v2.py +++ b/tests/strategy/strats/strategy_test_v2.py @@ -150,13 +150,3 @@ class StrategyTestV2(IStrategy): ), 'sell'] = 1 return dataframe - - def adjust_trade_position(self, trade: Trade, current_time: datetime, current_rate: float, - current_profit: float, - min_stake: Optional[float], max_stake: float, **kwargs): - - if current_profit < -0.0075: - orders = trade.select_filled_orders('buy') - return round(orders[0].cost, 0) - - return None From 3e7bf6a9ef786fa5b283347b9c7ba1c58f35ce93 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 27 May 2022 19:31:34 +0200 Subject: [PATCH 66/81] Remove imports in test_strategy2 --- tests/strategy/strats/strategy_test_v2.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/strategy/strats/strategy_test_v2.py b/tests/strategy/strats/strategy_test_v2.py index 4e45b1463..9e1c47575 100644 --- a/tests/strategy/strats/strategy_test_v2.py +++ b/tests/strategy/strats/strategy_test_v2.py @@ -1,13 +1,9 @@ # pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement -from datetime import datetime -from typing import Optional - import talib.abstract as ta from pandas import DataFrame import freqtrade.vendor.qtpylib.indicators as qtpylib -from freqtrade.persistence import Trade from freqtrade.strategy import IStrategy From f64f2b1ad8f1f5a289e14d305b205961375a5b46 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 29 May 2022 10:34:22 +0200 Subject: [PATCH 67/81] Fix /stats Formatting issue in multi-message settings --- freqtrade/rpc/telegram.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index f26de8b5c..4a274002e 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -785,7 +785,7 @@ class Telegram(RPCHandler): headers=['Exit Reason', 'Exits', 'Wins', 'Losses'] ) if len(exit_reasons_tabulate) > 25: - self._send_msg(exit_reasons_msg, ParseMode.MARKDOWN) + self._send_msg(f"```\n{exit_reasons_msg}```", ParseMode.MARKDOWN) exit_reasons_msg = '' durations = stats['durations'] From a875a7dc40996355cfe32bb9136b44fdea354213 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 29 May 2022 10:58:01 +0200 Subject: [PATCH 68/81] Use unified stopPrice for binance --- freqtrade/exchange/binance.py | 4 ++-- tests/exchange/test_binance.py | 1 + tests/test_freqtradebot.py | 4 +--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/freqtrade/exchange/binance.py b/freqtrade/exchange/binance.py index 1b6496a64..03546dcf9 100644 --- a/freqtrade/exchange/binance.py +++ b/freqtrade/exchange/binance.py @@ -53,8 +53,8 @@ class Binance(Exchange): ordertype = 'stop' if self.trading_mode == TradingMode.FUTURES else 'stop_loss_limit' return order['type'] == ordertype and ( - (side == "sell" and stop_loss > float(order['info']['stopPrice'])) or - (side == "buy" and stop_loss < float(order['info']['stopPrice'])) + (side == "sell" and stop_loss > float(order['stopPrice'])) or + (side == "buy" and stop_loss < float(order['stopPrice'])) ) def get_tickers(self, symbols: Optional[List[str]] = None, cached: bool = False) -> Dict: diff --git a/tests/exchange/test_binance.py b/tests/exchange/test_binance.py index 324be9962..45f8a3817 100644 --- a/tests/exchange/test_binance.py +++ b/tests/exchange/test_binance.py @@ -154,6 +154,7 @@ def test_stoploss_adjust_binance(mocker, default_conf, sl1, sl2, sl3, side): order = { 'type': 'stop_loss_limit', 'price': 1500, + 'stopPrice': 1500, 'info': {'stopPrice': 1500}, } assert exchange.stoploss_adjust(sl1, order, side=side) diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index 23ef4ffc2..5a5467370 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -1775,9 +1775,7 @@ def test_tsl_on_exchange_compatible_with_edge(mocker, edge_conf, fee, caplog, 'type': 'stop_loss_limit', 'price': 3, 'average': 2, - 'info': { - 'stopPrice': '2.178' - } + 'stopPrice': '2.178' }) mocker.patch('freqtrade.exchange.Exchange.fetch_stoploss_order', stoploss_order_hanging) From 1ee08d22d24973d0ec435e619ad168cc0ad7a3b6 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 29 May 2022 15:58:40 +0200 Subject: [PATCH 69/81] Delay parameter init closes #6894 --- freqtrade/optimize/backtesting.py | 3 +++ freqtrade/strategy/hyper.py | 33 ++++++++++++++++++++----------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index f1e9b7251..43bc97f32 100755 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -187,6 +187,9 @@ class Backtesting: # since a "perfect" stoploss-exit is assumed anyway # And the regular "stoploss" function would not apply to that case self.strategy.order_types['stoploss_on_exchange'] = False + if self.dataprovider.runmode == RunMode.BACKTEST: + # in hyperopt mode - don't re-init params + self.strategy.ft_load_hyper_params(False) self.strategy.ft_bot_start() def _load_protections(self, strategy: IStrategy): diff --git a/freqtrade/strategy/hyper.py b/freqtrade/strategy/hyper.py index 5c09dd862..bbd6ef5fe 100644 --- a/freqtrade/strategy/hyper.py +++ b/freqtrade/strategy/hyper.py @@ -31,7 +31,12 @@ class HyperStrategyMixin: self.ft_sell_params: List[BaseParameter] = [] self.ft_protection_params: List[BaseParameter] = [] - self._load_hyper_params(config.get('runmode') == RunMode.HYPEROPT) + params = self.load_params_from_file() + params = params.get('params', {}) + self._ft_params_from_file = params + + if config.get('runmode') != RunMode.BACKTEST: + self.ft_load_hyper_params(config.get('runmode') == RunMode.HYPEROPT) def enumerate_parameters(self, category: str = None) -> Iterator[Tuple[str, BaseParameter]]: """ @@ -80,21 +85,25 @@ class HyperStrategyMixin: return params - def _load_hyper_params(self, hyperopt: bool = False) -> None: + def ft_load_hyper_params(self, hyperopt: bool = False) -> None: """ Load Hyperoptable parameters + Prevalence: + * Parameters from parameter file + * Parameters defined in parameters objects (buy_params, sell_params, ...) + * Parameter defaults """ - params = self.load_params_from_file() - params = params.get('params', {}) - self._ft_params_from_file = params - buy_params = deep_merge_dicts(params.get('buy', {}), getattr(self, 'buy_params', {})) - sell_params = deep_merge_dicts(params.get('sell', {}), getattr(self, 'sell_params', {})) - protection_params = deep_merge_dicts(params.get('protection', {}), + + buy_params = deep_merge_dicts(self._ft_params_from_file.get('buy', {}), + getattr(self, 'buy_params', {})) + sell_params = deep_merge_dicts(self._ft_params_from_file.get('sell', {}), + getattr(self, 'sell_params', {})) + protection_params = deep_merge_dicts(self._ft_params_from_file.get('protection', {}), getattr(self, 'protection_params', {})) - self._load_params(buy_params, 'buy', hyperopt) - self._load_params(sell_params, 'sell', hyperopt) - self._load_params(protection_params, 'protection', hyperopt) + self._ft_load_params(buy_params, 'buy', hyperopt) + self._ft_load_params(sell_params, 'sell', hyperopt) + self._ft_load_params(protection_params, 'protection', hyperopt) def load_params_from_file(self) -> Dict: filename_str = getattr(self, '__file__', '') @@ -117,7 +126,7 @@ class HyperStrategyMixin: return {} - def _load_params(self, params: Dict, space: str, hyperopt: bool = False) -> None: + def _ft_load_params(self, params: Dict, space: str, hyperopt: bool = False) -> None: """ Set optimizable parameter values. :param params: Dictionary with new parameter values. From e6affcc23e01ecd8fe4a48ea41d7ca15b20f9727 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 29 May 2022 16:39:47 +0200 Subject: [PATCH 70/81] Move parameter file loading to hyper-mixin --- freqtrade/resolvers/strategy_resolver.py | 21 +-------------------- freqtrade/strategy/hyper.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/freqtrade/resolvers/strategy_resolver.py b/freqtrade/resolvers/strategy_resolver.py index 44d590b67..c63c133ce 100644 --- a/freqtrade/resolvers/strategy_resolver.py +++ b/freqtrade/resolvers/strategy_resolver.py @@ -47,26 +47,7 @@ class StrategyResolver(IResolver): strategy: IStrategy = StrategyResolver._load_strategy( strategy_name, config=config, extra_dir=config.get('strategy_path')) - - if strategy._ft_params_from_file: - # Set parameters from Hyperopt results file - params = strategy._ft_params_from_file - strategy.minimal_roi = params.get('roi', getattr(strategy, 'minimal_roi', {})) - - strategy.stoploss = params.get('stoploss', {}).get( - 'stoploss', getattr(strategy, 'stoploss', -0.1)) - trailing = params.get('trailing', {}) - strategy.trailing_stop = trailing.get( - 'trailing_stop', getattr(strategy, 'trailing_stop', False)) - strategy.trailing_stop_positive = trailing.get( - 'trailing_stop_positive', getattr(strategy, 'trailing_stop_positive', None)) - strategy.trailing_stop_positive_offset = trailing.get( - 'trailing_stop_positive_offset', - getattr(strategy, 'trailing_stop_positive_offset', 0)) - strategy.trailing_only_offset_is_reached = trailing.get( - 'trailing_only_offset_is_reached', - getattr(strategy, 'trailing_only_offset_is_reached', 0.0)) - + strategy.ft_load_hyper_params_from_file() # Set attributes # Check if we need to override configuration # (Attribute name, default, subkey) diff --git a/freqtrade/strategy/hyper.py b/freqtrade/strategy/hyper.py index bbd6ef5fe..c4119173b 100644 --- a/freqtrade/strategy/hyper.py +++ b/freqtrade/strategy/hyper.py @@ -85,6 +85,27 @@ class HyperStrategyMixin: return params + def ft_load_hyper_params_from_file(self) -> None: + """ Load Parameters from parameter file""" + if self._ft_params_from_file: + # Set parameters from Hyperopt results file + params = self._ft_params_from_file + self.minimal_roi = params.get('roi', getattr(self, 'minimal_roi', {})) + + self.stoploss = params.get('stoploss', {}).get( + 'stoploss', getattr(self, 'stoploss', -0.1)) + trailing = params.get('trailing', {}) + self.trailing_stop = trailing.get( + 'trailing_stop', getattr(self, 'trailing_stop', False)) + self.trailing_stop_positive = trailing.get( + 'trailing_stop_positive', getattr(self, 'trailing_stop_positive', None)) + self.trailing_stop_positive_offset = trailing.get( + 'trailing_stop_positive_offset', + getattr(self, 'trailing_stop_positive_offset', 0)) + self.trailing_only_offset_is_reached = trailing.get( + 'trailing_only_offset_is_reached', + getattr(self, 'trailing_only_offset_is_reached', 0.0)) + def ft_load_hyper_params(self, hyperopt: bool = False) -> None: """ Load Hyperoptable parameters From f65df4901e2acb3f400328950b17fa1333ce7078 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 29 May 2022 20:53:09 +0200 Subject: [PATCH 71/81] Update doc clarity --- docs/hyperopt.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hyperopt.md b/docs/hyperopt.md index 030d73f4b..63c7a4413 100644 --- a/docs/hyperopt.md +++ b/docs/hyperopt.md @@ -680,7 +680,7 @@ class MyAwesomeStrategy(IStrategy): !!! Note Values in the configuration file will overwrite Parameter-file level parameters - and both will overwrite parameters within the strategy. - The prevalence is therefore: config > parameter file > strategy + The prevalence is therefore: config > parameter file > strategy `*_params` > parameter default ### Understand Hyperopt ROI results From b52fd0b4df21dcd04c2aed91a486e0ccad4cf72f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 03:01:56 +0000 Subject: [PATCH 72/81] Bump python-telegram-bot from 13.11 to 13.12 Bumps [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) from 13.11 to 13.12. - [Release notes](https://github.com/python-telegram-bot/python-telegram-bot/releases) - [Changelog](https://github.com/python-telegram-bot/python-telegram-bot/blob/v13.12/CHANGES.rst) - [Commits](https://github.com/python-telegram-bot/python-telegram-bot/compare/v13.11...v13.12) --- updated-dependencies: - dependency-name: python-telegram-bot dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ae1ff7a89..9c12f7cdf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ ccxt==1.83.62 cryptography==37.0.2 aiohttp==3.8.1 SQLAlchemy==1.4.36 -python-telegram-bot==13.11 +python-telegram-bot==13.12 arrow==1.2.2 cachetools==4.2.2 requests==2.27.1 From e7c78529e97edc5514fc7d3c8177aef491d16a2e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 03:01:58 +0000 Subject: [PATCH 73/81] Bump types-python-dateutil from 2.8.16 to 2.8.17 Bumps [types-python-dateutil](https://github.com/python/typeshed) from 2.8.16 to 2.8.17. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-python-dateutil dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index e863238bd..3823e5ebb 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -26,4 +26,4 @@ types-cachetools==5.0.1 types-filelock==3.2.6 types-requests==2.27.27 types-tabulate==0.8.9 -types-python-dateutil==2.8.16 +types-python-dateutil==2.8.17 From 9366c1d36f0bfa88f2d734e81357babf926c4921 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 03:02:03 +0000 Subject: [PATCH 74/81] Bump mkdocs-material from 8.2.15 to 8.2.16 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 8.2.15 to 8.2.16. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/8.2.15...8.2.16) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- docs/requirements-docs.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt index 3fa35d80d..e7ca17c34 100644 --- a/docs/requirements-docs.txt +++ b/docs/requirements-docs.txt @@ -1,5 +1,5 @@ mkdocs==1.3.0 -mkdocs-material==8.2.15 +mkdocs-material==8.2.16 mdx_truly_sane_lists==1.2 pymdown-extensions==9.4 jinja2==3.1.2 From a937f36997b93d2f047f2174020b0c5a0f35e97b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 03:02:13 +0000 Subject: [PATCH 75/81] Bump mypy from 0.950 to 0.960 Bumps [mypy](https://github.com/python/mypy) from 0.950 to 0.960. - [Release notes](https://github.com/python/mypy/releases) - [Commits](https://github.com/python/mypy/compare/v0.950...v0.960) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index e863238bd..1c96108cc 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -7,7 +7,7 @@ coveralls==3.3.1 flake8==4.0.1 flake8-tidy-imports==4.8.0 -mypy==0.950 +mypy==0.960 pre-commit==2.19.0 pytest==7.1.2 pytest-asyncio==0.18.3 From 23fa00e29aca9d0da473a454201c595184a56525 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 03:02:26 +0000 Subject: [PATCH 76/81] Bump ccxt from 1.83.62 to 1.84.39 Bumps [ccxt](https://github.com/ccxt/ccxt) from 1.83.62 to 1.84.39. - [Release notes](https://github.com/ccxt/ccxt/releases) - [Changelog](https://github.com/ccxt/ccxt/blob/master/exchanges.cfg) - [Commits](https://github.com/ccxt/ccxt/compare/1.83.62...1.84.39) --- updated-dependencies: - dependency-name: ccxt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ae1ff7a89..08425294d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ numpy==1.22.4 pandas==1.4.2 pandas-ta==0.3.14b -ccxt==1.83.62 +ccxt==1.84.39 # Pin cryptography for now due to rust build errors with piwheels cryptography==37.0.2 aiohttp==3.8.1 From 41052b4e1e2cad4ad23bab66e2e2fd6764744950 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 30 May 2022 06:28:03 +0200 Subject: [PATCH 77/81] Bump types dateutil precommit --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d59010154..99bf35f7d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ repos: - types-filelock==3.2.6 - types-requests==2.27.27 - types-tabulate==0.8.9 - - types-python-dateutil==2.8.16 + - types-python-dateutil==2.8.17 # stages: [push] - repo: https://github.com/pycqa/isort From ad8ff10a05912d1075579060588e7e9328d24af5 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 30 May 2022 06:32:35 +0200 Subject: [PATCH 78/81] Minor doc changes --- docs/strategy-callbacks.md | 3 +++ freqtrade/strategy/hyper.py | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/strategy-callbacks.md b/docs/strategy-callbacks.md index 06e7152aa..e1e57a1f3 100644 --- a/docs/strategy-callbacks.md +++ b/docs/strategy-callbacks.md @@ -46,6 +46,9 @@ class AwesomeStrategy(IStrategy): self.cust_remote_data = requests.get('https://some_remote_source.example.com') ``` + +During hyperopt, this runs only once at startup. + ## Bot loop start A simple callback which is called once at the start of every bot throttling iteration (roughly every 5 seconds, unless configured differently). diff --git a/freqtrade/strategy/hyper.py b/freqtrade/strategy/hyper.py index c4119173b..622ad7718 100644 --- a/freqtrade/strategy/hyper.py +++ b/freqtrade/strategy/hyper.py @@ -86,7 +86,10 @@ class HyperStrategyMixin: return params def ft_load_hyper_params_from_file(self) -> None: - """ Load Parameters from parameter file""" + """ + Load Parameters from parameter file + Should/must run before config values are loaded in strategy_resolver. + """ if self._ft_params_from_file: # Set parameters from Hyperopt results file params = self._ft_params_from_file From 386d3e035337cea7cbe9e38a5a8100fa79948fbb Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 30 May 2022 06:52:44 +0200 Subject: [PATCH 79/81] Rename stop/roi loading method --- freqtrade/resolvers/strategy_resolver.py | 2 +- freqtrade/strategy/hyper.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/resolvers/strategy_resolver.py b/freqtrade/resolvers/strategy_resolver.py index c63c133ce..8b01980ce 100644 --- a/freqtrade/resolvers/strategy_resolver.py +++ b/freqtrade/resolvers/strategy_resolver.py @@ -47,7 +47,7 @@ class StrategyResolver(IResolver): strategy: IStrategy = StrategyResolver._load_strategy( strategy_name, config=config, extra_dir=config.get('strategy_path')) - strategy.ft_load_hyper_params_from_file() + strategy.ft_load_params_from_file() # Set attributes # Check if we need to override configuration # (Attribute name, default, subkey) diff --git a/freqtrade/strategy/hyper.py b/freqtrade/strategy/hyper.py index 622ad7718..ee62b5516 100644 --- a/freqtrade/strategy/hyper.py +++ b/freqtrade/strategy/hyper.py @@ -85,7 +85,7 @@ class HyperStrategyMixin: return params - def ft_load_hyper_params_from_file(self) -> None: + def ft_load_params_from_file(self) -> None: """ Load Parameters from parameter file Should/must run before config values are loaded in strategy_resolver. From 2b2967f34e0b83b386269d1c025fad3ee1ef95fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 04:54:54 +0000 Subject: [PATCH 80/81] Bump types-requests from 2.27.27 to 2.27.29 Bumps [types-requests](https://github.com/python/typeshed) from 2.27.27 to 2.27.29. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-requests dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 3823e5ebb..1c8cc2352 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -24,6 +24,6 @@ nbconvert==6.5.0 # mypy types types-cachetools==5.0.1 types-filelock==3.2.6 -types-requests==2.27.27 +types-requests==2.27.29 types-tabulate==0.8.9 types-python-dateutil==2.8.17 From f323cbc7694986588f8242646c2a6fb5178ad955 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 30 May 2022 07:23:05 +0200 Subject: [PATCH 81/81] Bump types-requests precommit --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 99bf35f7d..95a1d5002 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,7 +15,7 @@ repos: additional_dependencies: - types-cachetools==5.0.1 - types-filelock==3.2.6 - - types-requests==2.27.27 + - types-requests==2.27.29 - types-tabulate==0.8.9 - types-python-dateutil==2.8.17 # stages: [push]