From 6a98c19dab961e097943c8a246e5a1f4e72e1f64 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 16 Dec 2025 20:12:34 +0100 Subject: [PATCH 01/40] fix: improve binance stoploss "triggered" behavior --- freqtrade/exchange/binance.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/freqtrade/exchange/binance.py b/freqtrade/exchange/binance.py index 37c355d4d..e05b9c702 100644 --- a/freqtrade/exchange/binance.py +++ b/freqtrade/exchange/binance.py @@ -151,7 +151,21 @@ class Binance(Exchange): if self.trading_mode == TradingMode.FUTURES: params = params or {} params.update({"stop": True}) - return self.fetch_order(order_id, pair, params) + order = self.fetch_order(order_id, pair, params) + if self.trading_mode == TradingMode.FUTURES and order.get("status", "open") == "closed": + # Places a real order - which we need to fetch explicitly. + + if new_orderid := order.get("info", {}).get("actualOrderId"): + order1 = self.fetch_order(order_id=new_orderid, pair=pair, params={}) + order1["id_stop"] = order1["id"] + order1["id"] = order_id + order1["type"] = "stoploss" + order1["stopPrice"] = order.get("stopPrice") + order1["status_stop"] = "triggered" + + return order1 + + return order def cancel_stoploss_order(self, order_id: str, pair: str, params: dict | None = None) -> dict: if self.trading_mode == TradingMode.FUTURES: From 5800002d4214ae4f3d2502b3046eed16024ab6e4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 15 Dec 2025 06:48:53 +0100 Subject: [PATCH 02/40] feat: add stoploss_fetch_requires_stop_param property --- freqtrade/exchange/binance.py | 1 + freqtrade/exchange/bitget.py | 1 + freqtrade/exchange/exchange.py | 1 + freqtrade/exchange/exchange_types.py | 1 + freqtrade/exchange/gate.py | 1 + freqtrade/exchange/okx.py | 1 + 6 files changed, 6 insertions(+) diff --git a/freqtrade/exchange/binance.py b/freqtrade/exchange/binance.py index e05b9c702..258afc631 100644 --- a/freqtrade/exchange/binance.py +++ b/freqtrade/exchange/binance.py @@ -51,6 +51,7 @@ class Binance(Exchange): "funding_fee_candle_limit": 1000, "stoploss_order_types": {"limit": "stop", "market": "stop_market"}, "stoploss_blocks_assets": False, # Stoploss orders do not block assets + "stoploss_fetch_requires_stop_param": True, "tickers_have_price": False, "floor_leverage": True, "fetch_orders_limit_minutes": 7 * 1440, # "fetch_orders" is limited to 7 days diff --git a/freqtrade/exchange/bitget.py b/freqtrade/exchange/bitget.py index f0da55cb0..7fef482d2 100644 --- a/freqtrade/exchange/bitget.py +++ b/freqtrade/exchange/bitget.py @@ -31,6 +31,7 @@ class Bitget(Exchange): "stop_price_prop": "stopPrice", "stoploss_blocks_assets": False, # Stoploss orders do not block assets "stoploss_order_types": {"limit": "limit", "market": "market"}, + "stoploss_fetch_requires_stop_param": True, "ohlcv_candle_limit": 200, # 200 for historical candles, 1000 for recent ones. "order_time_in_force": ["GTC", "FOK", "IOC", "PO"], } diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index cc1cd3322..120b027e6 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -132,6 +132,7 @@ class Exchange: "stop_price_prop": "stopLossPrice", # Used for stoploss_on_exchange response parsing "stoploss_order_types": {}, "stoploss_blocks_assets": True, # By default stoploss orders block assets + "stoploss_fetch_requires_stop_param": False, # Require "stop": True" to fetch stop orders "order_time_in_force": ["GTC"], "ohlcv_params": {}, "ohlcv_has_history": True, # Some exchanges (Kraken) don't provide history via ohlcv diff --git a/freqtrade/exchange/exchange_types.py b/freqtrade/exchange/exchange_types.py index d2c2b46e2..0a69f8752 100644 --- a/freqtrade/exchange/exchange_types.py +++ b/freqtrade/exchange/exchange_types.py @@ -19,6 +19,7 @@ class FtHas(TypedDict, total=False): stop_price_type_value_mapping: dict stoploss_order_types: dict[str, str] stoploss_blocks_assets: bool + stoploss_fetch_requires_stop_param: bool # ohlcv ohlcv_params: dict ohlcv_candle_limit: int diff --git a/freqtrade/exchange/gate.py b/freqtrade/exchange/gate.py index 4c6d524d7..01be9d9cd 100644 --- a/freqtrade/exchange/gate.py +++ b/freqtrade/exchange/gate.py @@ -30,6 +30,7 @@ class Gate(Exchange): "stoploss_order_types": {"limit": "limit"}, "stop_price_param": "stopPrice", "stop_price_prop": "stopPrice", + "stoploss_fetch_requires_stop_param": True, "l2_limit_upper": 1000, "marketOrderRequiresPrice": True, "trades_has_history": False, # Endpoint would support this - but ccxt doesn't. diff --git a/freqtrade/exchange/okx.py b/freqtrade/exchange/okx.py index 14f20a0bb..43924d706 100644 --- a/freqtrade/exchange/okx.py +++ b/freqtrade/exchange/okx.py @@ -31,6 +31,7 @@ class Okx(Exchange): "ohlcv_candle_limit": 100, # Warning, special case with data prior to X months "stoploss_order_types": {"limit": "limit"}, "stoploss_on_exchange": True, + "stoploss_fetch_requires_stop_param": True, "trades_has_history": False, # Endpoint doesn't have a "since" parameter "ws_enabled": True, } From 84e9251fcd3d2f5bbab7404f3337791f6bf5da72 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 15 Dec 2025 07:01:23 +0100 Subject: [PATCH 03/40] test: use object patching instead of direct assignment --- tests/exchange/test_gate.py | 4 +--- tests/exchange/test_okx.py | 11 +++++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/tests/exchange/test_gate.py b/tests/exchange/test_gate.py index ee3d70c84..9c3246f46 100644 --- a/tests/exchange/test_gate.py +++ b/tests/exchange/test_gate.py @@ -42,9 +42,7 @@ def test_fetch_stoploss_order_gate(default_conf, mocker): def test_cancel_stoploss_order_gate(default_conf, mocker): exchange = get_patched_exchange(mocker, default_conf, exchange="gate") - - cancel_order_mock = MagicMock() - exchange.cancel_order = cancel_order_mock + cancel_order_mock = mocker.patch.object(exchange, "cancel_order") exchange.cancel_stoploss_order("1234", "ETH/BTC") assert cancel_order_mock.call_count == 1 diff --git a/tests/exchange/test_okx.py b/tests/exchange/test_okx.py index 750afbd40..43e14a51a 100644 --- a/tests/exchange/test_okx.py +++ b/tests/exchange/test_okx.py @@ -661,14 +661,13 @@ def test_stoploss_adjust_okx(mocker, default_conf, sl1, sl2, sl3, side): def test_stoploss_cancel_okx(mocker, default_conf): exchange = get_patched_exchange(mocker, default_conf, exchange="okx") - - exchange.cancel_order = MagicMock() + co_mock = mocker.patch.object(exchange, "cancel_order") exchange.cancel_stoploss_order("1234", "ETH/USDT") - assert exchange.cancel_order.call_count == 1 - assert exchange.cancel_order.call_args_list[0][1]["order_id"] == "1234" - assert exchange.cancel_order.call_args_list[0][1]["pair"] == "ETH/USDT" - assert exchange.cancel_order.call_args_list[0][1]["params"] == {"stop": True} + assert co_mock.call_count == 1 + assert co_mock.call_args_list[0][1]["order_id"] == "1234" + assert co_mock.call_args_list[0][1]["pair"] == "ETH/USDT" + assert co_mock.call_args_list[0][1]["params"] == {"stop": True} def test__get_stop_params_okx(mocker, default_conf): From cf6bf1b7b5d1c367da9754a4d3e20a9b3cd46a61 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 15 Dec 2025 06:56:26 +0100 Subject: [PATCH 04/40] refactor: reduce code duplication for cancel_stop_orders --- freqtrade/exchange/binance.py | 6 ------ freqtrade/exchange/bitget.py | 3 --- freqtrade/exchange/exchange.py | 3 +++ freqtrade/exchange/gate.py | 3 --- freqtrade/exchange/okx.py | 3 --- 5 files changed, 3 insertions(+), 15 deletions(-) diff --git a/freqtrade/exchange/binance.py b/freqtrade/exchange/binance.py index 258afc631..1486e5665 100644 --- a/freqtrade/exchange/binance.py +++ b/freqtrade/exchange/binance.py @@ -168,12 +168,6 @@ class Binance(Exchange): return order - def cancel_stoploss_order(self, order_id: str, pair: str, params: dict | None = None) -> dict: - if self.trading_mode == TradingMode.FUTURES: - params = params or {} - params.update({"stop": True}) - return self.cancel_order(order_id=order_id, pair=pair, params=params) - def get_historic_ohlcv( self, pair: str, diff --git a/freqtrade/exchange/bitget.py b/freqtrade/exchange/bitget.py index 7fef482d2..7c791a5a5 100644 --- a/freqtrade/exchange/bitget.py +++ b/freqtrade/exchange/bitget.py @@ -129,9 +129,6 @@ class Bitget(Exchange): return self._fetch_stop_order_fallback(order_id, pair) - def cancel_stoploss_order(self, order_id: str, pair: str, params: dict | None = None) -> dict: - return self.cancel_order(order_id=order_id, pair=pair, params={"stop": True}) - @retrier def additional_exchange_init(self) -> None: """ diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 120b027e6..18390d895 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1742,6 +1742,9 @@ class Exchange: raise OperationalException(e) from e def cancel_stoploss_order(self, order_id: str, pair: str, params: dict | None = None) -> dict: + if self.get_option("stoploss_fetch_requires_stop_param"): + params = params or {} + params["stop"] = True return self.cancel_order(order_id, pair, params) def is_cancel_order_result_suitable(self, corder) -> TypeGuard[CcxtOrder]: diff --git a/freqtrade/exchange/gate.py b/freqtrade/exchange/gate.py index 01be9d9cd..689959768 100644 --- a/freqtrade/exchange/gate.py +++ b/freqtrade/exchange/gate.py @@ -152,6 +152,3 @@ class Gate(Exchange): return order1 return order - - def cancel_stoploss_order(self, order_id: str, pair: str, params: dict | None = None) -> dict: - return self.cancel_order(order_id=order_id, pair=pair, params={"stop": True}) diff --git a/freqtrade/exchange/okx.py b/freqtrade/exchange/okx.py index 43924d706..d1777006d 100644 --- a/freqtrade/exchange/okx.py +++ b/freqtrade/exchange/okx.py @@ -264,9 +264,6 @@ class Okx(Exchange): return safe_value_fallback2(order, order, "id_stop", "id") return order["id"] - def cancel_stoploss_order(self, order_id: str, pair: str, params: dict | None = None) -> dict: - return self.cancel_order(order_id=order_id, pair=pair, params={"stop": True}) - def _fetch_orders_emulate(self, pair: str, since_ms: int) -> list[CcxtOrder]: orders = [] From f0908a10436b0ddf3842d1ace3d15e8c2edfd74a Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 15 Dec 2025 07:01:59 +0100 Subject: [PATCH 05/40] test: adapt test to new call logic --- tests/exchange/test_gate.py | 6 +++--- tests/exchange/test_okx.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/exchange/test_gate.py b/tests/exchange/test_gate.py index 9c3246f46..c78f9ce3e 100644 --- a/tests/exchange/test_gate.py +++ b/tests/exchange/test_gate.py @@ -46,9 +46,9 @@ def test_cancel_stoploss_order_gate(default_conf, mocker): exchange.cancel_stoploss_order("1234", "ETH/BTC") assert cancel_order_mock.call_count == 1 - assert cancel_order_mock.call_args_list[0][1]["order_id"] == "1234" - assert cancel_order_mock.call_args_list[0][1]["pair"] == "ETH/BTC" - assert cancel_order_mock.call_args_list[0][1]["params"] == {"stop": True} + assert cancel_order_mock.call_args_list[0][0][0] == "1234" + assert cancel_order_mock.call_args_list[0][0][1] == "ETH/BTC" + assert cancel_order_mock.call_args_list[0][0][2] == {"stop": True} @pytest.mark.parametrize( diff --git a/tests/exchange/test_okx.py b/tests/exchange/test_okx.py index 43e14a51a..5c5b8ed57 100644 --- a/tests/exchange/test_okx.py +++ b/tests/exchange/test_okx.py @@ -665,9 +665,9 @@ def test_stoploss_cancel_okx(mocker, default_conf): exchange.cancel_stoploss_order("1234", "ETH/USDT") assert co_mock.call_count == 1 - assert co_mock.call_args_list[0][1]["order_id"] == "1234" - assert co_mock.call_args_list[0][1]["pair"] == "ETH/USDT" - assert co_mock.call_args_list[0][1]["params"] == {"stop": True} + assert co_mock.call_args_list[0][0][0] == "1234" + assert co_mock.call_args_list[0][0][1] == "ETH/USDT" + assert co_mock.call_args_list[0][0][2] == {"stop": True} def test__get_stop_params_okx(mocker, default_conf): From d4aee7e433441f6fc03da1d0f6f20fc05e277a89 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 15 Dec 2025 07:04:40 +0100 Subject: [PATCH 06/40] test: add autospec=True to just changed tests --- tests/exchange/test_gate.py | 2 +- tests/exchange/test_okx.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/exchange/test_gate.py b/tests/exchange/test_gate.py index c78f9ce3e..5346e0efc 100644 --- a/tests/exchange/test_gate.py +++ b/tests/exchange/test_gate.py @@ -42,7 +42,7 @@ def test_fetch_stoploss_order_gate(default_conf, mocker): def test_cancel_stoploss_order_gate(default_conf, mocker): exchange = get_patched_exchange(mocker, default_conf, exchange="gate") - cancel_order_mock = mocker.patch.object(exchange, "cancel_order") + cancel_order_mock = mocker.patch.object(exchange, "cancel_order", autospec=True) exchange.cancel_stoploss_order("1234", "ETH/BTC") assert cancel_order_mock.call_count == 1 diff --git a/tests/exchange/test_okx.py b/tests/exchange/test_okx.py index 5c5b8ed57..5c8983858 100644 --- a/tests/exchange/test_okx.py +++ b/tests/exchange/test_okx.py @@ -661,7 +661,7 @@ def test_stoploss_adjust_okx(mocker, default_conf, sl1, sl2, sl3, side): def test_stoploss_cancel_okx(mocker, default_conf): exchange = get_patched_exchange(mocker, default_conf, exchange="okx") - co_mock = mocker.patch.object(exchange, "cancel_order") + co_mock = mocker.patch.object(exchange, "cancel_order", autospec=True) exchange.cancel_stoploss_order("1234", "ETH/USDT") assert co_mock.call_count == 1 From 8859b9009a7f015d229621ce4bfdc59a0f63aea8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Dec 2025 22:56:31 +0000 Subject: [PATCH 07/40] chore(deps): bump filelock from 3.20.0 to 3.20.1 Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.20.0 to 3.20.1. - [Release notes](https://github.com/tox-dev/py-filelock/releases) - [Changelog](https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst) - [Commits](https://github.com/tox-dev/py-filelock/compare/3.20.0...3.20.1) --- updated-dependencies: - dependency-name: filelock dependency-version: 3.20.1 dependency-type: direct:production ... 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 9c36b2385..b655f2ac9 100644 --- a/requirements-hyperopt.txt +++ b/requirements-hyperopt.txt @@ -4,6 +4,6 @@ # Required for hyperopt scipy==1.16.3 scikit-learn==1.7.2 -filelock==3.20.0 +filelock==3.20.1 optuna==4.6.0 cmaes==0.12.0 From c8d74baaa1a4fefc1064895d67402e5c0e9786cd Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 16 Dec 2025 20:43:02 +0100 Subject: [PATCH 08/40] refactor: unify fetch_stoploss_order --- freqtrade/exchange/binance.py | 25 ++----------------------- freqtrade/exchange/exchange.py | 20 +++++++++++++++++++- freqtrade/exchange/exchange_types.py | 1 + freqtrade/exchange/gate.py | 21 ++------------------- 4 files changed, 24 insertions(+), 43 deletions(-) diff --git a/freqtrade/exchange/binance.py b/freqtrade/exchange/binance.py index 1486e5665..3b3f0fb73 100644 --- a/freqtrade/exchange/binance.py +++ b/freqtrade/exchange/binance.py @@ -17,7 +17,7 @@ from freqtrade.exchange.binance_public_data import ( download_archive_trades, ) from freqtrade.exchange.common import retrier -from freqtrade.exchange.exchange_types import CcxtOrder, FtHas, Tickers +from freqtrade.exchange.exchange_types import FtHas, Tickers from freqtrade.exchange.exchange_utils_timeframe import timeframe_to_msecs from freqtrade.misc import deep_merge_dicts, json_load from freqtrade.util import FtTTLCache @@ -52,6 +52,7 @@ class Binance(Exchange): "stoploss_order_types": {"limit": "stop", "market": "stop_market"}, "stoploss_blocks_assets": False, # Stoploss orders do not block assets "stoploss_fetch_requires_stop_param": True, + "stoploss_algo_order_info_id": "actualOrderId", "tickers_have_price": False, "floor_leverage": True, "fetch_orders_limit_minutes": 7 * 1440, # "fetch_orders" is limited to 7 days @@ -146,28 +147,6 @@ class Binance(Exchange): except ccxt.BaseError as e: raise OperationalException(e) from e - def fetch_stoploss_order( - self, order_id: str, pair: str, params: dict | None = None - ) -> CcxtOrder: - if self.trading_mode == TradingMode.FUTURES: - params = params or {} - params.update({"stop": True}) - order = self.fetch_order(order_id, pair, params) - if self.trading_mode == TradingMode.FUTURES and order.get("status", "open") == "closed": - # Places a real order - which we need to fetch explicitly. - - if new_orderid := order.get("info", {}).get("actualOrderId"): - order1 = self.fetch_order(order_id=new_orderid, pair=pair, params={}) - order1["id_stop"] = order1["id"] - order1["id"] = order_id - order1["type"] = "stoploss" - order1["stopPrice"] = order.get("stopPrice") - order1["status_stop"] = "triggered" - - return order1 - - return order - def get_historic_ohlcv( self, pair: str, diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 18390d895..bf87e76e7 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1688,7 +1688,25 @@ class Exchange: def fetch_stoploss_order( self, order_id: str, pair: str, params: dict | None = None ) -> CcxtOrder: - return self.fetch_order(order_id, pair, params) + if self.get_option("stoploss_fetch_requires_stop_param"): + params = params or {} + params["stop"] = True + order = self.fetch_order(order_id, pair, params) + if (val := self.get_option("stoploss_algo_order_info_id")) and order.get( + "status", "open" + ) == "closed": + if new_orderid := order.get("info", {}).get(val): + # Fetch real order, which was placed by the algo order. + order1 = self.fetch_order(order_id=new_orderid, pair=pair, params=None) + order1["id_stop"] = order1["id"] + order1["id"] = order_id + order1["type"] = "stoploss" + order1["stopPrice"] = order.get("stopPrice") + order1["status_stop"] = "triggered" + + return order1 + + return order def fetch_order_or_stoploss_order( self, order_id: str, pair: str, stoploss_order: bool = False diff --git a/freqtrade/exchange/exchange_types.py b/freqtrade/exchange/exchange_types.py index 0a69f8752..d427f6182 100644 --- a/freqtrade/exchange/exchange_types.py +++ b/freqtrade/exchange/exchange_types.py @@ -20,6 +20,7 @@ class FtHas(TypedDict, total=False): stoploss_order_types: dict[str, str] stoploss_blocks_assets: bool stoploss_fetch_requires_stop_param: bool + stoploss_algo_order_info_id: str # ohlcv ohlcv_params: dict ohlcv_candle_limit: int diff --git a/freqtrade/exchange/gate.py b/freqtrade/exchange/gate.py index 689959768..83b61c6ad 100644 --- a/freqtrade/exchange/gate.py +++ b/freqtrade/exchange/gate.py @@ -31,6 +31,7 @@ class Gate(Exchange): "stop_price_param": "stopPrice", "stop_price_prop": "stopPrice", "stoploss_fetch_requires_stop_param": True, + "stoploss_algo_order_info_id": "fired_order_id", "l2_limit_upper": 1000, "marketOrderRequiresPrice": True, "trades_has_history": False, # Endpoint would support this - but ccxt doesn't. @@ -43,6 +44,7 @@ class Gate(Exchange): "stop_price_type_field": "price_type", "l2_limit_upper": 300, "stoploss_blocks_assets": False, + "stoploss_algo_order_info_id": "trade_id", "stop_price_type_value_mapping": { PriceType.LAST: 0, PriceType.MARK: 1, @@ -133,22 +135,3 @@ class Gate(Exchange): def get_order_id_conditional(self, order: CcxtOrder) -> str: return safe_value_fallback2(order, order, "id_stop", "id") - - def fetch_stoploss_order( - self, order_id: str, pair: str, params: dict | None = None - ) -> CcxtOrder: - order = self.fetch_order(order_id=order_id, pair=pair, params={"stop": True}) - if order.get("status", "open") == "closed": - # Places a real order - which we need to fetch explicitly. - val = "trade_id" if self.trading_mode == TradingMode.FUTURES else "fired_order_id" - - if new_orderid := order.get("info", {}).get(val): - order1 = self.fetch_order(order_id=new_orderid, pair=pair, params=params) - order1["id_stop"] = order1["id"] - order1["id"] = order_id - order1["type"] = "stoploss" - order1["stopPrice"] = order.get("stopPrice") - order1["status_stop"] = "triggered" - - return order1 - return order From c63fba2e578ec30b7ad1a39b29e905e6fd31a2b7 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 16 Dec 2025 20:44:06 +0100 Subject: [PATCH 09/40] chore: rename flag to better match what it does --- freqtrade/exchange/binance.py | 2 +- freqtrade/exchange/bitget.py | 2 +- freqtrade/exchange/exchange.py | 6 +++--- freqtrade/exchange/exchange_types.py | 2 +- freqtrade/exchange/gate.py | 2 +- freqtrade/exchange/okx.py | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/freqtrade/exchange/binance.py b/freqtrade/exchange/binance.py index 3b3f0fb73..40de29470 100644 --- a/freqtrade/exchange/binance.py +++ b/freqtrade/exchange/binance.py @@ -51,7 +51,7 @@ class Binance(Exchange): "funding_fee_candle_limit": 1000, "stoploss_order_types": {"limit": "stop", "market": "stop_market"}, "stoploss_blocks_assets": False, # Stoploss orders do not block assets - "stoploss_fetch_requires_stop_param": True, + "stoploss_query_requires_stop_flag": True, "stoploss_algo_order_info_id": "actualOrderId", "tickers_have_price": False, "floor_leverage": True, diff --git a/freqtrade/exchange/bitget.py b/freqtrade/exchange/bitget.py index 7c791a5a5..d298d14d6 100644 --- a/freqtrade/exchange/bitget.py +++ b/freqtrade/exchange/bitget.py @@ -31,7 +31,7 @@ class Bitget(Exchange): "stop_price_prop": "stopPrice", "stoploss_blocks_assets": False, # Stoploss orders do not block assets "stoploss_order_types": {"limit": "limit", "market": "market"}, - "stoploss_fetch_requires_stop_param": True, + "stoploss_query_requires_stop_flag": True, "ohlcv_candle_limit": 200, # 200 for historical candles, 1000 for recent ones. "order_time_in_force": ["GTC", "FOK", "IOC", "PO"], } diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index bf87e76e7..e01d341e6 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -132,7 +132,7 @@ class Exchange: "stop_price_prop": "stopLossPrice", # Used for stoploss_on_exchange response parsing "stoploss_order_types": {}, "stoploss_blocks_assets": True, # By default stoploss orders block assets - "stoploss_fetch_requires_stop_param": False, # Require "stop": True" to fetch stop orders + "stoploss_query_requires_stop_flag": False, # Require "stop": True" to fetch stop orders "order_time_in_force": ["GTC"], "ohlcv_params": {}, "ohlcv_has_history": True, # Some exchanges (Kraken) don't provide history via ohlcv @@ -1688,7 +1688,7 @@ class Exchange: def fetch_stoploss_order( self, order_id: str, pair: str, params: dict | None = None ) -> CcxtOrder: - if self.get_option("stoploss_fetch_requires_stop_param"): + if self.get_option("stoploss_query_requires_stop_flag"): params = params or {} params["stop"] = True order = self.fetch_order(order_id, pair, params) @@ -1760,7 +1760,7 @@ class Exchange: raise OperationalException(e) from e def cancel_stoploss_order(self, order_id: str, pair: str, params: dict | None = None) -> dict: - if self.get_option("stoploss_fetch_requires_stop_param"): + if self.get_option("stoploss_query_requires_stop_flag"): params = params or {} params["stop"] = True return self.cancel_order(order_id, pair, params) diff --git a/freqtrade/exchange/exchange_types.py b/freqtrade/exchange/exchange_types.py index d427f6182..fd5faecf7 100644 --- a/freqtrade/exchange/exchange_types.py +++ b/freqtrade/exchange/exchange_types.py @@ -19,7 +19,7 @@ class FtHas(TypedDict, total=False): stop_price_type_value_mapping: dict stoploss_order_types: dict[str, str] stoploss_blocks_assets: bool - stoploss_fetch_requires_stop_param: bool + stoploss_query_requires_stop_flag: bool stoploss_algo_order_info_id: str # ohlcv ohlcv_params: dict diff --git a/freqtrade/exchange/gate.py b/freqtrade/exchange/gate.py index 83b61c6ad..585dddad5 100644 --- a/freqtrade/exchange/gate.py +++ b/freqtrade/exchange/gate.py @@ -30,7 +30,7 @@ class Gate(Exchange): "stoploss_order_types": {"limit": "limit"}, "stop_price_param": "stopPrice", "stop_price_prop": "stopPrice", - "stoploss_fetch_requires_stop_param": True, + "stoploss_query_requires_stop_flag": True, "stoploss_algo_order_info_id": "fired_order_id", "l2_limit_upper": 1000, "marketOrderRequiresPrice": True, diff --git a/freqtrade/exchange/okx.py b/freqtrade/exchange/okx.py index d1777006d..4640d5647 100644 --- a/freqtrade/exchange/okx.py +++ b/freqtrade/exchange/okx.py @@ -31,7 +31,7 @@ class Okx(Exchange): "ohlcv_candle_limit": 100, # Warning, special case with data prior to X months "stoploss_order_types": {"limit": "limit"}, "stoploss_on_exchange": True, - "stoploss_fetch_requires_stop_param": True, + "stoploss_query_requires_stop_flag": True, "trades_has_history": False, # Endpoint doesn't have a "since" parameter "ws_enabled": True, } From d5b296c75cf8c713a235719852bc4706518bd0f5 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 16 Dec 2025 20:47:33 +0100 Subject: [PATCH 10/40] test: fix gate stoploss test --- tests/exchange/test_gate.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/exchange/test_gate.py b/tests/exchange/test_gate.py index 5346e0efc..66dfd13f8 100644 --- a/tests/exchange/test_gate.py +++ b/tests/exchange/test_gate.py @@ -16,9 +16,9 @@ def test_fetch_stoploss_order_gate(default_conf, mocker): exchange.fetch_stoploss_order("1234", "ETH/BTC") assert fetch_order_mock.call_count == 1 - assert fetch_order_mock.call_args_list[0][1]["order_id"] == "1234" - assert fetch_order_mock.call_args_list[0][1]["pair"] == "ETH/BTC" - assert fetch_order_mock.call_args_list[0][1]["params"] == {"stop": True} + assert fetch_order_mock.call_args_list[0][0][0] == "1234" + assert fetch_order_mock.call_args_list[0][0][1] == "ETH/BTC" + assert fetch_order_mock.call_args_list[0][0][2] == {"stop": True} default_conf["trading_mode"] = "futures" default_conf["margin_mode"] = "isolated" @@ -36,7 +36,7 @@ def test_fetch_stoploss_order_gate(default_conf, mocker): exchange.fetch_stoploss_order("1234", "ETH/BTC") assert exchange.fetch_order.call_count == 2 - assert exchange.fetch_order.call_args_list[0][1]["order_id"] == "1234" + assert exchange.fetch_order.call_args_list[0][0][0] == "1234" assert exchange.fetch_order.call_args_list[1][1]["order_id"] == "222555" From 278bd0e97d762983507eded604e043a963aa46eb Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 16 Dec 2025 21:02:36 +0100 Subject: [PATCH 11/40] chore: improve variable naming --- freqtrade/exchange/exchange.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index e01d341e6..9d6807fa2 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1692,19 +1692,18 @@ class Exchange: params = params or {} params["stop"] = True order = self.fetch_order(order_id, pair, params) - if (val := self.get_option("stoploss_algo_order_info_id")) and order.get( - "status", "open" - ) == "closed": + val = self.get_option("stoploss_algo_order_info_id") + if val and order.get("status", "open") == "closed": if new_orderid := order.get("info", {}).get(val): # Fetch real order, which was placed by the algo order. - order1 = self.fetch_order(order_id=new_orderid, pair=pair, params=None) - order1["id_stop"] = order1["id"] - order1["id"] = order_id - order1["type"] = "stoploss" - order1["stopPrice"] = order.get("stopPrice") - order1["status_stop"] = "triggered" + actual_order = self.fetch_order(order_id=new_orderid, pair=pair, params=None) + actual_order["id_stop"] = actual_order["id"] + actual_order["id"] = order_id + actual_order["type"] = "stoploss" + actual_order["stopPrice"] = order.get("stopPrice") + actual_order["status_stop"] = "triggered" - return order1 + return actual_order return order From 1143aba6718309ab928a0519c222035c194adf86 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 16 Dec 2025 21:02:48 +0100 Subject: [PATCH 12/40] test: simplify test call --- tests/exchange/test_okx.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/exchange/test_okx.py b/tests/exchange/test_okx.py index 5c8983858..ae52bd1ff 100644 --- a/tests/exchange/test_okx.py +++ b/tests/exchange/test_okx.py @@ -665,9 +665,10 @@ def test_stoploss_cancel_okx(mocker, default_conf): exchange.cancel_stoploss_order("1234", "ETH/USDT") assert co_mock.call_count == 1 - assert co_mock.call_args_list[0][0][0] == "1234" - assert co_mock.call_args_list[0][0][1] == "ETH/USDT" - assert co_mock.call_args_list[0][0][2] == {"stop": True} + args, _ = co_mock.call_args + assert args[0] == "1234" + assert args[1] == "ETH/USDT" + assert args[2] == {"stop": True} def test__get_stop_params_okx(mocker, default_conf): From 6905b8059db3b459d5ba0378f4f50d6e383a8a6c Mon Sep 17 00:00:00 2001 From: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com> Date: Thu, 18 Dec 2025 03:28:09 +0000 Subject: [PATCH 13/40] chore: update pre-commit hooks --- .../exchange/binance_leverage_tiers.json | 3520 +++++++++-------- 1 file changed, 1764 insertions(+), 1756 deletions(-) diff --git a/freqtrade/exchange/binance_leverage_tiers.json b/freqtrade/exchange/binance_leverage_tiers.json index e5bf4695d..84ff22362 100644 --- a/freqtrade/exchange/binance_leverage_tiers.json +++ b/freqtrade/exchange/binance_leverage_tiers.json @@ -160,15 +160,15 @@ "symbol": "1000000BOB/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -176,106 +176,72 @@ "tier": 2.0, "symbol": "1000000BOB/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" + "initialLeverage": "5", + "notionalCap": "60000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "1000000BOB/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2000.0" } }, { "tier": 4.0, "symbol": "1000000BOB/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "25000", - "maintMarginRatio": "0.1", - "cum": "1525.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "4919.0" } }, { "tier": 5.0, "symbol": "1000000BOB/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 100000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, - "info": { - "bracket": "5", - "initialLeverage": "4", - "notionalCap": "100000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2775.0" - } - }, - { - "tier": 6.0, - "symbol": "1000000BOB/USDT:USDT", - "currency": "USDT", - "minNotional": 100000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "250000", - "notionalFloor": "100000", - "maintMarginRatio": "0.1667", - "cum": "6945.0" - } - }, - { - "tier": 7.0, - "symbol": "1000000BOB/USDT:USDT", - "currency": "USDT", - "minNotional": 250000.0, + "minNotional": 700000.0, "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", - "notionalFloor": "250000", + "notionalFloor": "700000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "63229.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "1000000BOB/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -283,12 +249,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", "notionalCap": "5000000", "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "652770.0" + "cum": "688229.0" } } ], @@ -8225,14 +8191,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "20", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.025", "cum": "0.0" } }, @@ -8242,15 +8208,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "10", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "maintMarginRatio": "0.05", + "cum": "125.0" } }, { @@ -8258,101 +8224,84 @@ "symbol": "ALPINE/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "20000", + "initialLeverage": "5", + "notionalCap": "60000", "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "maintMarginRatio": "0.1", + "cum": "625.0" } }, { "tier": 4.0, "symbol": "ALPINE/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "20000", - "maintMarginRatio": "0.1", - "cum": "1300.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2125.0" } }, { "tier": 5.0, "symbol": "ALPINE/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2550.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "5044.0" } }, { "tier": 6.0, "symbol": "ALPINE/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "minNotional": 700000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "6", - "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "700000", + "maintMarginRatio": "0.25", + "cum": "63354.0" } }, { "tier": 7.0, "symbol": "ALPINE/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.25", - "cum": "54625.0" - } - }, - { - "tier": 8.0, - "symbol": "ALPINE/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "688354.0" } } ], @@ -10774,15 +10723,15 @@ "symbol": "ASR/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -10790,119 +10739,85 @@ "tier": 2.0, "symbol": "ASR/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "60000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "ASR/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2000.0" } }, { "tier": 4.0, "symbol": "ASR/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "20000", - "maintMarginRatio": "0.1", - "cum": "1300.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "4919.0" } }, { "tier": 5.0, "symbol": "ASR/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 700000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2550.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "700000", + "maintMarginRatio": "0.25", + "cum": "63229.0" } }, { "tier": 6.0, "symbol": "ASR/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" - } - }, - { - "tier": 7.0, - "symbol": "ASR/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.25", - "cum": "54625.0" - } - }, - { - "tier": 8.0, - "symbol": "ASR/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "688229.0" } } ], @@ -12170,14 +12085,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -12195,7 +12110,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -12203,23 +12118,23 @@ "symbol": "AVAAI/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "AVAAI/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -12227,9 +12142,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -12237,67 +12152,67 @@ "symbol": "AVAAI/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "AVAAI/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "AVAAI/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "AVAAI/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -16356,15 +16271,15 @@ "symbol": "BEL/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -16372,119 +16287,85 @@ "tier": 2.0, "symbol": "BEL/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "60000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "BEL/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2000.0" } }, { "tier": 4.0, "symbol": "BEL/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "20000", - "maintMarginRatio": "0.1", - "cum": "1300.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "4919.0" } }, { "tier": 5.0, "symbol": "BEL/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 700000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2550.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "700000", + "maintMarginRatio": "0.25", + "cum": "63229.0" } }, { "tier": 6.0, "symbol": "BEL/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" - } - }, - { - "tier": 7.0, - "symbol": "BEL/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.25", - "cum": "54625.0" - } - }, - { - "tier": 8.0, - "symbol": "BEL/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "688229.0" } } ], @@ -17613,15 +17494,15 @@ "symbol": "BLUAI/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -17629,119 +17510,85 @@ "tier": 2.0, "symbol": "BLUAI/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "60000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "BLUAI/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2000.0" } }, { "tier": 4.0, "symbol": "BLUAI/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "20000", - "maintMarginRatio": "0.1", - "cum": "1300.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "4919.0" } }, { "tier": 5.0, "symbol": "BLUAI/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 700000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2550.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "700000", + "maintMarginRatio": "0.25", + "cum": "63229.0" } }, { "tier": 6.0, "symbol": "BLUAI/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" - } - }, - { - "tier": 7.0, - "symbol": "BLUAI/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.25", - "cum": "54625.0" - } - }, - { - "tier": 8.0, - "symbol": "BLUAI/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "688229.0" } } ], @@ -18028,14 +17875,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -18053,7 +17900,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -18061,23 +17908,23 @@ "symbol": "BMT/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "BMT/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -18085,9 +17932,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -18095,67 +17942,67 @@ "symbol": "BMT/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "BMT/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "BMT/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "BMT/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -19320,15 +19167,15 @@ "symbol": "BR/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 500.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "500", + "initialLeverage": "25", + "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -19336,38 +19183,21 @@ "tier": 2.0, "symbol": "BR/USDT:USDT", "currency": "USDT", - "minNotional": 500.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, - "info": { - "bracket": "2", - "initialLeverage": "40", - "notionalCap": "5000", - "notionalFloor": "500", - "maintMarginRatio": "0.02", - "cum": "2.5" - } - }, - { - "tier": 3.0, - "symbol": "BR/USDT:USDT", - "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, "maxLeverage": 20.0, "info": { - "bracket": "3", + "bracket": "2", "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "27.5" + "cum": "25.0" } }, { - "tier": 4.0, + "tier": 3.0, "symbol": "BR/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, @@ -19375,16 +19205,16 @@ "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { - "bracket": "4", + "bracket": "3", "initialLeverage": "10", "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "277.5" + "cum": "275.0" } }, { - "tier": 5.0, + "tier": 4.0, "symbol": "BR/USDT:USDT", "currency": "USDT", "minNotional": 25000.0, @@ -19392,16 +19222,16 @@ "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "5", + "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1527.5" + "cum": "1525.0" } }, { - "tier": 6.0, + "tier": 5.0, "symbol": "BR/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -19409,16 +19239,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2777.5" + "cum": "2775.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "BR/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -19426,46 +19256,46 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6947.5" + "cum": "6945.0" + } + }, + { + "tier": 7.0, + "symbol": "BR/USDT:USDT", + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "7", + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "250000", + "maintMarginRatio": "0.25", + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "BR/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "8", - "initialLeverage": "2", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.25", - "cum": "27772.5" - } - }, - { - "tier": 9.0, - "symbol": "BR/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 800000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "800000", - "notionalFloor": "500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "152772.5" + "cum": "652770.0" } } ], @@ -19648,14 +19478,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -19673,7 +19503,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -19681,23 +19511,23 @@ "symbol": "BROCCOLI714/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "BROCCOLI714/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -19705,9 +19535,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -19715,67 +19545,67 @@ "symbol": "BROCCOLI714/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "BROCCOLI714/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "BROCCOLI714/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "BROCCOLI714/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -24199,15 +24029,15 @@ "symbol": "COMMON/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -24215,119 +24045,85 @@ "tier": 2.0, "symbol": "COMMON/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "60000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "COMMON/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2000.0" } }, { "tier": 4.0, "symbol": "COMMON/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "20000", - "maintMarginRatio": "0.1", - "cum": "1300.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "4919.0" } }, { "tier": 5.0, "symbol": "COMMON/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 700000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2550.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "700000", + "maintMarginRatio": "0.25", + "cum": "63229.0" } }, { "tier": 6.0, "symbol": "COMMON/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" - } - }, - { - "tier": 7.0, - "symbol": "COMMON/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.25", - "cum": "54625.0" - } - }, - { - "tier": 8.0, - "symbol": "COMMON/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "688229.0" } } ], @@ -26416,21 +26212,142 @@ } } ], + "CYS/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "CYS/USDT:USDT", + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "1", + "initialLeverage": "20", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.025", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "symbol": "CYS/USDT:USDT", + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "2", + "initialLeverage": "10", + "notionalCap": "10000", + "notionalFloor": "5000", + "maintMarginRatio": "0.05", + "cum": "125.0" + } + }, + { + "tier": 3.0, + "symbol": "CYS/USDT:USDT", + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "3", + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "625.0" + } + }, + { + "tier": 4.0, + "symbol": "CYS/USDT:USDT", + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "4", + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1875.0" + } + }, + { + "tier": 5.0, + "symbol": "CYS/USDT:USDT", + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "5", + "initialLeverage": "3", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6045.0" + } + }, + { + "tier": 6.0, + "symbol": "CYS/USDT:USDT", + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "6", + "initialLeverage": "2", + "notionalCap": "500000", + "notionalFloor": "250000", + "maintMarginRatio": "0.25", + "cum": "26870.0" + } + }, + { + "tier": 7.0, + "symbol": "CYS/USDT:USDT", + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 800000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "7", + "initialLeverage": "1", + "notionalCap": "800000", + "notionalFloor": "500000", + "maintMarginRatio": "0.5", + "cum": "151870.0" + } + } + ], "D/USDT:USDT": [ { "tier": 1.0, "symbol": "D/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -26438,119 +26355,85 @@ "tier": 2.0, "symbol": "D/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "60000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "D/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2000.0" } }, { "tier": 4.0, "symbol": "D/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "20000", - "maintMarginRatio": "0.1", - "cum": "1300.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "4919.0" } }, { "tier": 5.0, "symbol": "D/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 700000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2550.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "700000", + "maintMarginRatio": "0.25", + "cum": "63229.0" } }, { "tier": 6.0, "symbol": "D/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" - } - }, - { - "tier": 7.0, - "symbol": "D/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.25", - "cum": "54625.0" - } - }, - { - "tier": 8.0, - "symbol": "D/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "688229.0" } } ], @@ -27405,15 +27288,15 @@ "symbol": "DEGO/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -27421,106 +27304,72 @@ "tier": 2.0, "symbol": "DEGO/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" + "initialLeverage": "5", + "notionalCap": "60000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "DEGO/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2000.0" } }, { "tier": 4.0, "symbol": "DEGO/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "25000", - "maintMarginRatio": "0.1", - "cum": "1525.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "4919.0" } }, { "tier": 5.0, "symbol": "DEGO/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 100000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, - "info": { - "bracket": "5", - "initialLeverage": "4", - "notionalCap": "100000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2775.0" - } - }, - { - "tier": 6.0, - "symbol": "DEGO/USDT:USDT", - "currency": "USDT", - "minNotional": 100000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "250000", - "notionalFloor": "100000", - "maintMarginRatio": "0.1667", - "cum": "6945.0" - } - }, - { - "tier": 7.0, - "symbol": "DEGO/USDT:USDT", - "currency": "USDT", - "minNotional": 250000.0, + "minNotional": 700000.0, "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", - "notionalFloor": "250000", + "notionalFloor": "700000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "63229.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "DEGO/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -27528,12 +27377,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", "notionalCap": "5000000", "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "652770.0" + "cum": "688229.0" } } ], @@ -27854,14 +27703,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -27879,7 +27728,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -27887,23 +27736,23 @@ "symbol": "DF/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "DF/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -27911,9 +27760,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -27921,67 +27770,67 @@ "symbol": "DF/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "DF/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "DF/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "DF/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -30060,14 +29909,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.01, - "maxLeverage": 75.0, + "maintenanceMarginRate": 0.015, + "maxLeverage": 50.0, "info": { "bracket": "1", - "initialLeverage": "75", + "initialLeverage": "50", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.01", + "maintMarginRatio": "0.015", "cum": "0.0" } }, @@ -30077,15 +29926,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "50", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.015", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -30093,33 +29942,33 @@ "symbol": "EDEN/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "25", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.02", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "EDEN/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, + "minNotional": 20000.0, "maxNotional": 50000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "20", + "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", - "maintMarginRatio": "0.025", - "cum": "200.0" + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { @@ -30127,88 +29976,54 @@ "symbol": "EDEN/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "10", - "notionalCap": "125000", + "initialLeverage": "4", + "notionalCap": "250000", "notionalFloor": "50000", - "maintMarginRatio": "0.05", - "cum": "1450.0" + "maintMarginRatio": "0.125", + "cum": "2550.0" } }, { "tier": 6.0, "symbol": "EDEN/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 250000.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "5", - "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.1", - "cum": "7700.0" + "initialLeverage": "3", + "notionalCap": "500000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1667", + "cum": "12975.0" } }, { "tier": 7.0, "symbol": "EDEN/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, - "info": { - "bracket": "7", - "initialLeverage": "4", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.125", - "cum": "13950.0" - } - }, - { - "tier": 8.0, - "symbol": "EDEN/USDT:USDT", - "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 1000000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "8", - "initialLeverage": "3", - "notionalCap": "1000000", - "notionalFloor": "500000", - "maintMarginRatio": "0.1667", - "cum": "34800.0" - } - }, - { - "tier": 9.0, - "symbol": "EDEN/USDT:USDT", - "currency": "USDT", - "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "9", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "118100.0" + "cum": "54625.0" } }, { - "tier": 10.0, + "tier": 8.0, "symbol": "EDEN/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -30216,12 +30031,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "10", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1993100.0" + "cum": "1929625.0" } } ], @@ -31385,14 +31200,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.01, - "maxLeverage": 75.0, + "maintenanceMarginRate": 0.015, + "maxLeverage": 50.0, "info": { "bracket": "1", - "initialLeverage": "75", + "initialLeverage": "50", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.01", + "maintMarginRatio": "0.015", "cum": "0.0" } }, @@ -31402,15 +31217,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "50", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.015", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -31418,33 +31233,33 @@ "symbol": "ENSO/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "25", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.02", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "ENSO/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, + "minNotional": 20000.0, "maxNotional": 50000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "20", + "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", - "maintMarginRatio": "0.025", - "cum": "200.0" + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { @@ -31452,88 +31267,54 @@ "symbol": "ENSO/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "10", - "notionalCap": "125000", + "initialLeverage": "4", + "notionalCap": "250000", "notionalFloor": "50000", - "maintMarginRatio": "0.05", - "cum": "1450.0" + "maintMarginRatio": "0.125", + "cum": "2550.0" } }, { "tier": 6.0, "symbol": "ENSO/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 250000.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "5", - "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.1", - "cum": "7700.0" + "initialLeverage": "3", + "notionalCap": "500000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1667", + "cum": "12975.0" } }, { "tier": 7.0, "symbol": "ENSO/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, - "info": { - "bracket": "7", - "initialLeverage": "4", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.125", - "cum": "13950.0" - } - }, - { - "tier": 8.0, - "symbol": "ENSO/USDT:USDT", - "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 1000000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "8", - "initialLeverage": "3", - "notionalCap": "1000000", - "notionalFloor": "500000", - "maintMarginRatio": "0.1667", - "cum": "34800.0" - } - }, - { - "tier": 9.0, - "symbol": "ENSO/USDT:USDT", - "currency": "USDT", - "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "9", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "118100.0" + "cum": "54625.0" } }, { - "tier": 10.0, + "tier": 8.0, "symbol": "ENSO/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -31541,12 +31322,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "10", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1993100.0" + "cum": "1929625.0" } } ], @@ -37793,14 +37574,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -37818,7 +37599,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -37826,23 +37607,23 @@ "symbol": "GHST/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "GHST/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -37850,9 +37631,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -37860,67 +37641,67 @@ "symbol": "GHST/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "GHST/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "GHST/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "GHST/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -39481,14 +39262,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -39506,7 +39287,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -39514,23 +39295,23 @@ "symbol": "GTC/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "GTC/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -39538,9 +39319,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -39548,67 +39329,67 @@ "symbol": "GTC/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "GTC/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "GTC/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "GTC/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -41396,14 +41177,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -41421,7 +41202,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -41429,23 +41210,23 @@ "symbol": "HMSTR/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "HMSTR/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -41453,9 +41234,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -41463,67 +41244,67 @@ "symbol": "HMSTR/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "HMSTR/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "HMSTR/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "HMSTR/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -41877,15 +41658,15 @@ "symbol": "HOOK/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -41893,119 +41674,85 @@ "tier": 2.0, "symbol": "HOOK/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "60000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "HOOK/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2000.0" } }, { "tier": 4.0, "symbol": "HOOK/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "20000", - "maintMarginRatio": "0.1", - "cum": "1300.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "4919.0" } }, { "tier": 5.0, "symbol": "HOOK/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 700000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2550.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "700000", + "maintMarginRatio": "0.25", + "cum": "63229.0" } }, { "tier": 6.0, "symbol": "HOOK/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" - } - }, - { - "tier": 7.0, - "symbol": "HOOK/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.25", - "cum": "54625.0" - } - }, - { - "tier": 8.0, - "symbol": "HOOK/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "688229.0" } } ], @@ -58622,14 +58369,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -58647,7 +58394,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -58655,23 +58402,23 @@ "symbol": "NFP/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "NFP/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -58679,9 +58426,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -58689,67 +58436,67 @@ "symbol": "NFP/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "NFP/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "NFP/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "NFP/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -59052,15 +58799,15 @@ "symbol": "NKN/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "25", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -59068,119 +58815,85 @@ "tier": 2.0, "symbol": "NKN/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" + "initialLeverage": "5", + "notionalCap": "60000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "NKN/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2000.0" } }, { "tier": 4.0, "symbol": "NKN/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "25000", - "maintMarginRatio": "0.1", - "cum": "1525.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "4919.0" } }, { "tier": 5.0, "symbol": "NKN/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 100000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 700000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "100000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2775.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "700000", + "maintMarginRatio": "0.25", + "cum": "63229.0" } }, { "tier": 6.0, "symbol": "NKN/USDT:USDT", "currency": "USDT", - "minNotional": 100000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "250000", - "notionalFloor": "100000", - "maintMarginRatio": "0.1667", - "cum": "6945.0" - } - }, - { - "tier": 7.0, - "symbol": "NKN/USDT:USDT", - "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.25", - "cum": "27770.0" - } - }, - { - "tier": 8.0, - "symbol": "NKN/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 800000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "800000", - "notionalFloor": "500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "152770.0" + "cum": "688229.0" } } ], @@ -64908,15 +64621,15 @@ "symbol": "PIPPIN/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 2000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "5000", + "initialLeverage": "20", + "notionalCap": "2000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.025", "cum": "0.0" } }, @@ -64924,16 +64637,16 @@ "tier": 2.0, "symbol": "PIPPIN/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, + "minNotional": 2000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "10", "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", + "notionalFloor": "2000", + "maintMarginRatio": "0.05", "cum": "50.0" } }, @@ -64942,101 +64655,84 @@ "symbol": "PIPPIN/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "20000", + "initialLeverage": "5", + "notionalCap": "60000", "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "maintMarginRatio": "0.1", + "cum": "550.0" } }, { "tier": 4.0, "symbol": "PIPPIN/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 60000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "20000", - "maintMarginRatio": "0.1", - "cum": "1300.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2050.0" } }, { "tier": 5.0, "symbol": "PIPPIN/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 100000.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2550.0" + "initialLeverage": "3", + "notionalCap": "500000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6220.0" } }, { "tier": 6.0, "symbol": "PIPPIN/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "minNotional": 500000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "6", - "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "500000", + "maintMarginRatio": "0.25", + "cum": "47870.0" } }, { "tier": 7.0, "symbol": "PIPPIN/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.25", - "cum": "54625.0" - } - }, - { - "tier": 8.0, - "symbol": "PIPPIN/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "672870.0" } } ], @@ -67580,14 +67276,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -67605,7 +67301,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -67613,23 +67309,23 @@ "symbol": "PUFFER/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "PUFFER/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -67637,9 +67333,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -67647,67 +67343,67 @@ "symbol": "PUFFER/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "PUFFER/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "PUFFER/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "PUFFER/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -69142,6 +68838,127 @@ } } ], + "RAVE/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "RAVE/USDT:USDT", + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "1", + "initialLeverage": "20", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.025", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "symbol": "RAVE/USDT:USDT", + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "2", + "initialLeverage": "10", + "notionalCap": "10000", + "notionalFloor": "5000", + "maintMarginRatio": "0.05", + "cum": "125.0" + } + }, + { + "tier": 3.0, + "symbol": "RAVE/USDT:USDT", + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "3", + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "625.0" + } + }, + { + "tier": 4.0, + "symbol": "RAVE/USDT:USDT", + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "4", + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1875.0" + } + }, + { + "tier": 5.0, + "symbol": "RAVE/USDT:USDT", + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "5", + "initialLeverage": "3", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6045.0" + } + }, + { + "tier": 6.0, + "symbol": "RAVE/USDT:USDT", + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "6", + "initialLeverage": "2", + "notionalCap": "500000", + "notionalFloor": "250000", + "maintMarginRatio": "0.25", + "cum": "26870.0" + } + }, + { + "tier": 7.0, + "symbol": "RAVE/USDT:USDT", + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 800000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "7", + "initialLeverage": "1", + "notionalCap": "800000", + "notionalFloor": "500000", + "maintMarginRatio": "0.5", + "cum": "151870.0" + } + } + ], "RAY/USDT:USDT": [ { "tier": 1.0, @@ -69425,14 +69242,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -69450,7 +69267,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -69458,23 +69275,23 @@ "symbol": "RDNT/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "RDNT/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -69482,9 +69299,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -69492,67 +69309,67 @@ "symbol": "RDNT/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "RDNT/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "RDNT/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "RDNT/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -80262,14 +80079,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -80287,7 +80104,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -80295,23 +80112,23 @@ "symbol": "SWARMS/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "SWARMS/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -80319,9 +80136,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -80329,67 +80146,67 @@ "symbol": "SWARMS/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "SWARMS/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "SWARMS/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "SWARMS/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -80762,15 +80579,15 @@ "symbol": "SYN/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -80778,119 +80595,85 @@ "tier": 2.0, "symbol": "SYN/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "60000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "SYN/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2000.0" } }, { "tier": 4.0, "symbol": "SYN/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "20000", - "maintMarginRatio": "0.1", - "cum": "1300.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "4919.0" } }, { "tier": 5.0, "symbol": "SYN/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 700000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2550.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "700000", + "maintMarginRatio": "0.25", + "cum": "63229.0" } }, { "tier": 6.0, "symbol": "SYN/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" - } - }, - { - "tier": 7.0, - "symbol": "SYN/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.25", - "cum": "54625.0" - } - }, - { - "tier": 8.0, - "symbol": "SYN/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "688229.0" } } ], @@ -81452,15 +81235,15 @@ "symbol": "TAC/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -81468,119 +81251,85 @@ "tier": 2.0, "symbol": "TAC/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "60000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "TAC/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2000.0" } }, { "tier": 4.0, "symbol": "TAC/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "20000", - "maintMarginRatio": "0.1", - "cum": "1300.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "4919.0" } }, { "tier": 5.0, "symbol": "TAC/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 700000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2550.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "700000", + "maintMarginRatio": "0.25", + "cum": "63229.0" } }, { "tier": 6.0, "symbol": "TAC/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" - } - }, - { - "tier": 7.0, - "symbol": "TAC/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.25", - "cum": "54625.0" - } - }, - { - "tier": 8.0, - "symbol": "TAC/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "688229.0" } } ], @@ -82884,14 +82633,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -82909,7 +82658,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -82917,23 +82666,23 @@ "symbol": "TLM/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "TLM/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -82941,9 +82690,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -82951,67 +82700,67 @@ "symbol": "TLM/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "TLM/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "TLM/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "TLM/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -85296,14 +85045,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -85321,7 +85070,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -85329,23 +85078,23 @@ "symbol": "TST/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "TST/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -85353,9 +85102,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -85363,67 +85112,67 @@ "symbol": "TST/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "TST/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "TST/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "TST/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -85761,14 +85510,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -85786,7 +85535,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -85794,23 +85543,23 @@ "symbol": "TUT/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "TUT/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -85818,9 +85567,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -85828,67 +85577,67 @@ "symbol": "TUT/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "TUT/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "TUT/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "TUT/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -86960,6 +86709,144 @@ } } ], + "US/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "US/USDT:USDT", + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, + "info": { + "bracket": "1", + "initialLeverage": "40", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.02", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "symbol": "US/USDT:USDT", + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "2", + "initialLeverage": "20", + "notionalCap": "10000", + "notionalFloor": "5000", + "maintMarginRatio": "0.025", + "cum": "25.0" + } + }, + { + "tier": 3.0, + "symbol": "US/USDT:USDT", + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "20000", + "notionalFloor": "10000", + "maintMarginRatio": "0.05", + "cum": "275.0" + } + }, + { + "tier": 4.0, + "symbol": "US/USDT:USDT", + "currency": "USDT", + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" + } + }, + { + "tier": 5.0, + "symbol": "US/USDT:USDT", + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "5", + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" + } + }, + { + "tier": 6.0, + "symbol": "US/USDT:USDT", + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "6", + "initialLeverage": "3", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" + } + }, + { + "tier": 7.0, + "symbol": "US/USDT:USDT", + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "7", + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "250000", + "maintMarginRatio": "0.25", + "cum": "27520.0" + } + }, + { + "tier": 8.0, + "symbol": "US/USDT:USDT", + "currency": "USDT", + "minNotional": 2500000.0, + "maxNotional": 5000000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "8", + "initialLeverage": "1", + "notionalCap": "5000000", + "notionalFloor": "2500000", + "maintMarginRatio": "0.5", + "cum": "652520.0" + } + } + ], "USDC/USDT:USDT": [ { "tier": 1.0, @@ -88570,14 +88457,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -88595,7 +88482,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -88603,23 +88490,23 @@ "symbol": "VIC/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "20000", + "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "VIC/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -88627,9 +88514,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "25000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1525.0" } }, { @@ -88637,67 +88524,67 @@ "symbol": "VIC/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 250000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "5", "initialLeverage": "4", - "notionalCap": "250000", + "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "2775.0" } }, { "tier": 6.0, "symbol": "VIC/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6945.0" } }, { "tier": 7.0, "symbol": "VIC/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "27770.0" } }, { "tier": 8.0, "symbol": "VIC/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "652770.0" } } ], @@ -91837,6 +91724,161 @@ } } ], + "XAU/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "XAU/USDT:USDT", + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.015, + "maxLeverage": 50.0, + "info": { + "bracket": "1", + "initialLeverage": "50", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.015", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "symbol": "XAU/USDT:USDT", + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, + "info": { + "bracket": "2", + "initialLeverage": "25", + "notionalCap": "10000", + "notionalFloor": "5000", + "maintMarginRatio": "0.02", + "cum": "25.0" + } + }, + { + "tier": 3.0, + "symbol": "XAU/USDT:USDT", + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "3", + "initialLeverage": "20", + "notionalCap": "25000", + "notionalFloor": "10000", + "maintMarginRatio": "0.025", + "cum": "75.0" + } + }, + { + "tier": 4.0, + "symbol": "XAU/USDT:USDT", + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 62500.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "4", + "initialLeverage": "10", + "notionalCap": "62500", + "notionalFloor": "25000", + "maintMarginRatio": "0.05", + "cum": "700.0" + } + }, + { + "tier": 5.0, + "symbol": "XAU/USDT:USDT", + "currency": "USDT", + "minNotional": 62500.0, + "maxNotional": 125000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "5", + "initialLeverage": "5", + "notionalCap": "125000", + "notionalFloor": "62500", + "maintMarginRatio": "0.1", + "cum": "3825.0" + } + }, + { + "tier": 6.0, + "symbol": "XAU/USDT:USDT", + "currency": "USDT", + "minNotional": 125000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "6", + "initialLeverage": "4", + "notionalCap": "250000", + "notionalFloor": "125000", + "maintMarginRatio": "0.125", + "cum": "6950.0" + } + }, + { + "tier": 7.0, + "symbol": "XAU/USDT:USDT", + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "7", + "initialLeverage": "3", + "notionalCap": "500000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1667", + "cum": "17375.0" + } + }, + { + "tier": 8.0, + "symbol": "XAU/USDT:USDT", + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 7500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "8", + "initialLeverage": "2", + "notionalCap": "7500000", + "notionalFloor": "500000", + "maintMarginRatio": "0.25", + "cum": "59025.0" + } + }, + { + "tier": 9.0, + "symbol": "XAU/USDT:USDT", + "currency": "USDT", + "minNotional": 7500000.0, + "maxNotional": 12500000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "9", + "initialLeverage": "1", + "notionalCap": "12500000", + "notionalFloor": "7500000", + "maintMarginRatio": "0.5", + "cum": "1934025.0" + } + } + ], "XCN/USDT:USDT": [ { "tier": 1.0, @@ -92412,15 +92454,15 @@ "symbol": "XNY/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -92428,119 +92470,85 @@ "tier": 2.0, "symbol": "XNY/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 60000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "60000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "XNY/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 60000.0, + "maxNotional": 70000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "70000", + "notionalFloor": "60000", + "maintMarginRatio": "0.125", + "cum": "2000.0" } }, { "tier": 4.0, "symbol": "XNY/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 70000.0, + "maxNotional": 700000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "20000", - "maintMarginRatio": "0.1", - "cum": "1300.0" + "initialLeverage": "3", + "notionalCap": "700000", + "notionalFloor": "70000", + "maintMarginRatio": "0.1667", + "cum": "4919.0" } }, { "tier": 5.0, "symbol": "XNY/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 700000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2550.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "700000", + "maintMarginRatio": "0.25", + "cum": "63229.0" } }, { "tier": 6.0, "symbol": "XNY/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" - } - }, - { - "tier": 7.0, - "symbol": "XNY/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.25", - "cum": "54625.0" - } - }, - { - "tier": 8.0, - "symbol": "XNY/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "688229.0" } } ], From 21d723b35dcab4c0b56a750aa5ba7e6f8f979d41 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 18 Dec 2025 07:06:34 +0100 Subject: [PATCH 14/40] chore(ci): visualize disk sizes for docker build --- .github/workflows/docker-build.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 500e02614..d0169dc2d 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -37,6 +37,9 @@ jobs: with: persist-credentials: false + - name: Visualize disk usage before build + run: df -h + - name: Set docker tag names id: tags uses: ./.github/actions/docker-tags @@ -142,6 +145,9 @@ jobs: run: | docker images + - name: Visualize disk usage after build + run: df -h + deploy-arm: name: "Deploy Docker ARM64" permissions: From aa38a36b567a9758b5273d7cbd32b7596c5883d9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 21 Dec 2025 12:58:13 +0100 Subject: [PATCH 15/40] docs: add override_exchange_check to documentation --- docs/freqai-parameter-table.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/freqai-parameter-table.md b/docs/freqai-parameter-table.md index 5a493dd83..5fe23e710 100644 --- a/docs/freqai-parameter-table.md +++ b/docs/freqai-parameter-table.md @@ -107,7 +107,6 @@ Mandatory parameters are marked as **Required** and have to be set in one of the | `n_steps` | An alternative way of setting `n_epochs` - the number of training iterations to run. Iteration here refer to the number of times we call `optimizer.step()`. Ignored if `n_epochs` is set. A simplified version of the function:

n_epochs = n_steps / (n_obs / batch_size)

The motivation here is that `n_steps` is easier to optimize and keep stable across different n_obs - the number of data points.

**Datatype:** int. optional.
Default: `None`. | `batch_size` | The size of the batches to use during training.

**Datatype:** int.
Default: `64`. - ### Additional parameters | Parameter | Description | @@ -116,3 +115,4 @@ Mandatory parameters are marked as **Required** and have to be set in one of the | `freqai.keras` | If the selected model makes use of Keras (typical for TensorFlow-based prediction models), this flag needs to be activated so that the model save/loading follows Keras standards.
**Datatype:** Boolean.
Default: `False`. | `freqai.conv_width` | The width of a neural network input tensor. This replaces the need for shifting candles (`include_shifted_candles`) by feeding in historical data points as the second dimension of the tensor. Technically, this parameter can also be used for regressors, but it only adds computational overhead and does not change the model training/prediction.
**Datatype:** Integer.
Default: `2`. | `freqai.reduce_df_footprint` | Recast all numeric columns to float32/int32, with the objective of reducing ram/disk usage and decreasing train/inference timing. This parameter is set in the main level of the Freqtrade configuration file (not inside FreqAI).
**Datatype:** Boolean.
Default: `False`. +| `freqai.override_exchange_check` | Override the exchange check to force FreqAI to use exchanges that may not have enough historic data. Turn this to True if you know your FreqAI model and strategy do not require historical data.
**Datatype:** Boolean.
Default: `False`. From 13c63c0bf5e12b3fbcdd5e5b62254ad536b56074 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 21 Dec 2025 13:31:10 +0100 Subject: [PATCH 16/40] fix: exception when backtesting in webserver mode Running a futures backtest more than once without cache caused the process to crash due to detail data not being loaded. --- freqtrade/rpc/api_server/api_backtest.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/freqtrade/rpc/api_server/api_backtest.py b/freqtrade/rpc/api_server/api_backtest.py index a393a5c65..d038f5f6a 100644 --- a/freqtrade/rpc/api_server/api_backtest.py +++ b/freqtrade/rpc/api_server/api_backtest.py @@ -52,29 +52,25 @@ def __run_backtest_bg(btconfig: Config): lastconfig = ApiBG.bt["last_config"] strat = StrategyResolver.load_strategy(btconfig) validate_config_consistency(btconfig) - - if ( - not ApiBG.bt["bt"] - or lastconfig.get("timeframe") != strat.timeframe + time_settings_changed = ( + lastconfig.get("timeframe") != strat.timeframe or lastconfig.get("timeframe_detail") != btconfig.get("timeframe_detail") or lastconfig.get("timerange") != btconfig["timerange"] - ): + ) + + if not ApiBG.bt["bt"] or time_settings_changed: from freqtrade.optimize.backtesting import Backtesting ApiBG.bt["bt"] = Backtesting(btconfig) else: ApiBG.bt["bt"].config = deep_merge_dicts(btconfig, ApiBG.bt["bt"].config) ApiBG.bt["bt"].init_backtest() - # Only reload data if timeframe changed. - if ( - not ApiBG.bt["data"] - or not ApiBG.bt["timerange"] - or lastconfig.get("timeframe") != strat.timeframe - or lastconfig.get("timerange") != btconfig["timerange"] - ): + # Only reload data if timerange is open or settings changed + if not ApiBG.bt["data"] or not ApiBG.bt["timerange"] or time_settings_changed: ApiBG.bt["data"], ApiBG.bt["timerange"] = ApiBG.bt["bt"].load_bt_data() lastconfig["timerange"] = btconfig["timerange"] + lastconfig["timeframe_detail"] = btconfig.get("timeframe_detail") lastconfig["timeframe"] = strat.timeframe lastconfig["enable_protections"] = btconfig.get("enable_protections") lastconfig["dry_run_wallet"] = btconfig.get("dry_run_wallet") From 092da6aee590b253cc25d8b02914b1f1e9a62321 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 21 Dec 2025 13:43:16 +0100 Subject: [PATCH 17/40] chore(ci): Try to cleanup docker build host --- .github/workflows/docker-build.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index d0169dc2d..cd8994453 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -40,6 +40,14 @@ jobs: - name: Visualize disk usage before build run: df -h + - name: Cleanup some disk space + run: | + docker system prune -a --force || true + docker builder prune -af || true + + - name: Visualize disk usage after cleanup + run: df -h + - name: Set docker tag names id: tags uses: ./.github/actions/docker-tags From a1b4a4dbfb185c245577e7fb661e48cddcecde4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 03:01:32 +0000 Subject: [PATCH 18/40] chore(deps): bump cachetools from 6.2.2 to 6.2.3 Bumps [cachetools](https://github.com/tkem/cachetools) from 6.2.2 to 6.2.3. - [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst) - [Commits](https://github.com/tkem/cachetools/compare/v6.2.2...v6.2.3) --- updated-dependencies: - dependency-name: cachetools dependency-version: 6.2.3 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 d14fddede..296d8a982 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,7 +15,7 @@ python-telegram-bot==22.5 # can't be hard-pinned due to telegram-bot pinning httpx with ~ httpx>=0.24.1 humanize==4.14.0 -cachetools==6.2.2 +cachetools==6.2.3 requests==2.32.5 urllib3==2.6.0 certifi==2025.11.12 From 0d62fab36777c4f2187b84995ee5b6aa2cc226a8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 03:01:42 +0000 Subject: [PATCH 19/40] chore(deps): bump sqlalchemy from 2.0.44 to 2.0.45 Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.44 to 2.0.45. - [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases) - [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst) - [Commits](https://github.com/sqlalchemy/sqlalchemy/commits) --- updated-dependencies: - dependency-name: sqlalchemy dependency-version: 2.0.45 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 d14fddede..723870d82 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,7 @@ technical==1.5.3 ccxt==4.5.27 cryptography==46.0.3 aiohttp==3.13.2 -SQLAlchemy==2.0.44 +SQLAlchemy==2.0.45 python-telegram-bot==22.5 # can't be hard-pinned due to telegram-bot pinning httpx with ~ httpx>=0.24.1 From 6a6dce323dfbd197725192c4e239a2ad6f0690dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 03:01:51 +0000 Subject: [PATCH 20/40] chore(deps): bump peter-evans/create-pull-request from 7.0.9 to 8.0.0 Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7.0.9 to 8.0.0. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/84ae59a2cdc2258d6fa0732dd66352dddae2a412...98357b18bf14b5342f975ff684046ec3b2a07725) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/binance-lev-tier-update.yml | 2 +- .github/workflows/pre-commit-update.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/binance-lev-tier-update.yml b/.github/workflows/binance-lev-tier-update.yml index 2a3b8bb95..bf24ec1bf 100644 --- a/.github/workflows/binance-lev-tier-update.yml +++ b/.github/workflows/binance-lev-tier-update.yml @@ -34,7 +34,7 @@ jobs: run: python build_helpers/binance_update_lev_tiers.py - - uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9 + - uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8.0.0 with: token: ${{ secrets.REPO_SCOPED_TOKEN }} add-paths: freqtrade/exchange/binance_leverage_tiers.json diff --git a/.github/workflows/pre-commit-update.yml b/.github/workflows/pre-commit-update.yml index fe46aa6fe..31a0f8c5a 100644 --- a/.github/workflows/pre-commit-update.yml +++ b/.github/workflows/pre-commit-update.yml @@ -28,7 +28,7 @@ jobs: - name: Run auto-update run: pre-commit autoupdate - - uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9 + - uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8.0.0 with: token: ${{ secrets.REPO_SCOPED_TOKEN }} add-paths: .pre-commit-config.yaml From 0cb676a677af2a0609fc651f6c9fcd1a24350539 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 03:01:57 +0000 Subject: [PATCH 21/40] chore(deps): bump fastapi from 0.124.0 to 0.124.4 Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.124.0 to 0.124.4. - [Release notes](https://github.com/fastapi/fastapi/releases) - [Commits](https://github.com/fastapi/fastapi/compare/0.124.0...0.124.4) --- updated-dependencies: - dependency-name: fastapi dependency-version: 0.124.4 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 d14fddede..51d11d2a5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -37,7 +37,7 @@ orjson==3.11.5 sdnotify==0.3.2 # API Server -fastapi==0.124.0 +fastapi==0.124.4 pydantic==2.12.5 uvicorn==0.38.0 pyjwt==2.10.1 From 5ebffb27aac674bfd90565111166354add78bc5f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 03:02:03 +0000 Subject: [PATCH 22/40] chore(deps): bump actions/download-artifact from 6 to 7 Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6 to 7. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8013bd7b0..81b198ca7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -372,7 +372,7 @@ jobs: persist-credentials: false - name: Download artifact 📦 - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v7 with: pattern: freqtrade*-build path: dist @@ -401,7 +401,7 @@ jobs: persist-credentials: false - name: Download artifact 📦 - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v7 with: pattern: freqtrade*-build path: dist From 811112f0ce8d146b7b8b7789175a29c3f5cf79a1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 03:02:08 +0000 Subject: [PATCH 23/40] chore(deps): bump actions/upload-artifact from 5 to 6 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8013bd7b0..e0455d543 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -335,7 +335,7 @@ jobs: python -m build --sdist --wheel - name: Upload artifacts 📦 - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: freqtrade-build path: | @@ -348,7 +348,7 @@ jobs: python -m build --sdist --wheel ft_client - name: Upload artifacts 📦 - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: freqtrade-client-build path: | From ea30f906f91b0ac4c1c3c86c238ad4a72a4a9d81 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 03:02:10 +0000 Subject: [PATCH 24/40] chore(deps): bump urllib3 from 2.6.0 to 2.6.2 Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.6.0 to 2.6.2. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/2.6.0...2.6.2) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.6.2 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 d14fddede..e7dc8bd48 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ httpx>=0.24.1 humanize==4.14.0 cachetools==6.2.2 requests==2.32.5 -urllib3==2.6.0 +urllib3==2.6.2 certifi==2025.11.12 jsonschema==4.25.1 tabulate==0.9.0 From 978ca8f852969968839036735cbfb68bbb27a8e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 03:02:16 +0000 Subject: [PATCH 25/40] chore(deps): bump codecov/codecov-action from 5.5.1 to 5.5.2 Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.5.1 to 5.5.2. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/5a1091511ad55cbe89839c7260b706298ca349f7...671740ac38dd9b0130fbe1cec585b89eea48d3de) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: 5.5.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8013bd7b0..eb6554435 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -74,7 +74,7 @@ jobs: run: | pytest --random-order --cov=freqtrade --cov=freqtrade_client --cov-config=.coveragerc - - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 + - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-24.04') with: fail_ci_if_error: true From a9a686c64e77e8d9ed338c512acdb0f66d590164 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 03:02:24 +0000 Subject: [PATCH 26/40] chore(deps-dev): bump ruff from 0.14.8 to 0.14.9 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.8 to 0.14.9. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.14.8...0.14.9) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.14.9 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 80699e8bb..b90e96d6c 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -6,7 +6,7 @@ -r requirements-freqai-rl.txt -r docs/requirements-docs.txt -ruff==0.14.8 +ruff==0.14.9 mypy==1.19.0 pre-commit==4.5.0 pytest==9.0.2 From 3f5ed399b5643d1ccb540b77935e9cd2dd2de010 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 03:02:26 +0000 Subject: [PATCH 27/40] chore(deps): bump astral-sh/setup-uv from 7.1.4 to 7.1.6 Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 7.1.4 to 7.1.6. - [Release notes](https://github.com/astral-sh/setup-uv/releases) - [Commits](https://github.com/astral-sh/setup-uv/compare/1e862dfacbd1d6d858c55d9b792c756523627244...681c641aba71e4a1c380be3ab5e12ad51f415867) --- updated-dependencies: - dependency-name: astral-sh/setup-uv dependency-version: 7.1.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8013bd7b0..9b52c6e71 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install uv - uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 + uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867 # v7.1.6 with: activate-environment: true enable-cache: true @@ -250,7 +250,7 @@ jobs: python-version: "3.12" - name: Install uv - uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 + uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867 # v7.1.6 with: activate-environment: true enable-cache: true From 5ed590d862d05d82a86a013f04870a7b120a7b66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 03:02:35 +0000 Subject: [PATCH 28/40] chore(deps): bump ccxt from 4.5.27 to 4.5.28 Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.5.27 to 4.5.28. - [Release notes](https://github.com/ccxt/ccxt/releases) - [Commits](https://github.com/ccxt/ccxt/compare/v4.5.27...v4.5.28) --- updated-dependencies: - dependency-name: ccxt dependency-version: 4.5.28 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 d14fddede..2e884acc4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ ft-pandas-ta==0.3.16 ta-lib==0.6.8 technical==1.5.3 -ccxt==4.5.27 +ccxt==4.5.28 cryptography==46.0.3 aiohttp==3.13.2 SQLAlchemy==2.0.44 From c54b94b5a4eac74d78367d80d571cb59786050d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 03:02:39 +0000 Subject: [PATCH 29/40] chore(deps): bump pymdown-extensions from 10.18 to 10.19.1 Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.18 to 10.19.1. - [Release notes](https://github.com/facelessuser/pymdown-extensions/releases) - [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.18...10.19.1) --- updated-dependencies: - dependency-name: pymdown-extensions dependency-version: 10.19.1 dependency-type: direct:production update-type: version-update:semver-minor ... 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 becef5127..d9a07258b 100644 --- a/docs/requirements-docs.txt +++ b/docs/requirements-docs.txt @@ -2,6 +2,6 @@ markdown==3.10 mkdocs==1.6.1 mkdocs-material==9.7.0 mdx_truly_sane_lists==1.3 -pymdown-extensions==10.18 +pymdown-extensions==10.19.1 jinja2==3.1.6 mike==2.1.3 From a3c19d10f7f193ed1a47eaad88240e13797a00f2 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 22 Dec 2025 06:38:34 +0100 Subject: [PATCH 30/40] chore: bump sqlalchemy in pre-commit-config --- .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 e174acc50..1b0c886a9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -32,7 +32,7 @@ repos: - types-tabulate==0.9.0.20241207 - types-python-dateutil==2.9.0.20251115 - scipy-stubs==1.16.3.2 - - SQLAlchemy==2.0.44 + - SQLAlchemy==2.0.45 # stages: [push] - repo: https://github.com/pycqa/isort From 78d602f7b470a3a8312522369289d2a8224fdcd9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 05:58:11 +0000 Subject: [PATCH 31/40] chore(deps-dev): bump scipy-stubs in the scipy group Bumps the scipy group with 1 update: [scipy-stubs](https://github.com/scipy/scipy-stubs). Updates `scipy-stubs` from 1.16.3.2 to 1.16.3.3 - [Release notes](https://github.com/scipy/scipy-stubs/releases) - [Commits](https://github.com/scipy/scipy-stubs/compare/v1.16.3.2...v1.16.3.3) --- updated-dependencies: - dependency-name: scipy-stubs dependency-version: 1.16.3.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: scipy ... 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 b90e96d6c..d450e3fc4 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -24,7 +24,7 @@ time-machine==3.1.0 nbconvert==7.16.6 # mypy types -scipy-stubs==1.16.3.2 # keep in sync with `scipy` in `requirements-hyperopt.txt` +scipy-stubs==1.16.3.3 # keep in sync with `scipy` in `requirements-hyperopt.txt` types-cachetools==6.2.0.20251022 types-filelock==3.2.7 types-requests==2.32.4.20250913 From 1780d2db239b15984274489022c5d4af22365ddf Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 22 Dec 2025 06:59:35 +0100 Subject: [PATCH 32/40] chore: bump scipy-stubs in pre-commit-config --- .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 1b0c886a9..c886ddcc3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -31,7 +31,7 @@ repos: - types-requests==2.32.4.20250913 - types-tabulate==0.9.0.20241207 - types-python-dateutil==2.9.0.20251115 - - scipy-stubs==1.16.3.2 + - scipy-stubs==1.16.3.3 - SQLAlchemy==2.0.45 # stages: [push] From c6f3b0081927e161a16b116cc47fb663f7831d30 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 22 Dec 2025 07:02:01 +0100 Subject: [PATCH 33/40] chore: combine updates on actions from the `actions/* ` org --- .github/dependabot.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index a33f75428..096e29001 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -56,3 +56,8 @@ updates: interval: "weekly" open-pull-requests-limit: 10 target-branch: develop + groups: + actions: + patterns: + # Combine updates for github provided actions + - "actions/*" From 5c9f140c5db6330a751c88ec7984bc01931d18e8 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 22 Dec 2025 07:11:11 +0100 Subject: [PATCH 34/40] feat: remove catboost models and dependency --- .../prediction_models/CatboostClassifier.py | 61 -------------- .../CatboostClassifierMultiTarget.py | 79 ------------------- .../prediction_models/CatboostRegressor.py | 60 -------------- .../CatboostRegressorMultiTarget.py | 78 ------------------ pyproject.toml | 1 - requirements-freqai.txt | 1 - 6 files changed, 280 deletions(-) delete mode 100644 freqtrade/freqai/prediction_models/CatboostClassifier.py delete mode 100644 freqtrade/freqai/prediction_models/CatboostClassifierMultiTarget.py delete mode 100644 freqtrade/freqai/prediction_models/CatboostRegressor.py delete mode 100644 freqtrade/freqai/prediction_models/CatboostRegressorMultiTarget.py diff --git a/freqtrade/freqai/prediction_models/CatboostClassifier.py b/freqtrade/freqai/prediction_models/CatboostClassifier.py deleted file mode 100644 index 632dc781e..000000000 --- a/freqtrade/freqai/prediction_models/CatboostClassifier.py +++ /dev/null @@ -1,61 +0,0 @@ -import logging -from pathlib import Path -from typing import Any - -from catboost import CatBoostClassifier, Pool - -from freqtrade.freqai.base_models.BaseClassifierModel import BaseClassifierModel -from freqtrade.freqai.data_kitchen import FreqaiDataKitchen - - -logger = logging.getLogger(__name__) - - -class CatboostClassifier(BaseClassifierModel): - """ - User created prediction model. The class inherits IFreqaiModel, which - means it has full access to all Frequency AI functionality. Typically, - users would use this to override the common `fit()`, `train()`, or - `predict()` methods to add their custom data handling tools or change - various aspects of the training that cannot be configured via the - top level config.json file. - """ - - def fit(self, data_dictionary: dict, dk: FreqaiDataKitchen, **kwargs) -> Any: - """ - User sets up the training and test data to fit their desired model here - :param data_dictionary: the dictionary holding all data for train, test, - labels, weights - :param dk: The datakitchen object for the current coin/model - """ - - train_data = Pool( - data=data_dictionary["train_features"], - label=data_dictionary["train_labels"], - weight=data_dictionary["train_weights"], - ) - if self.freqai_info.get("data_split_parameters", {}).get("test_size", 0.1) == 0: - test_data = None - else: - test_data = Pool( - data=data_dictionary["test_features"], - label=data_dictionary["test_labels"], - weight=data_dictionary["test_weights"], - ) - - cbr = CatBoostClassifier( - allow_writing_files=True, - loss_function="MultiClass", - train_dir=Path(dk.data_path), - **self.model_training_parameters, - ) - - init_model = self.get_init_model(dk.pair) - - cbr.fit( - X=train_data, - eval_set=test_data, - init_model=init_model, - ) - - return cbr diff --git a/freqtrade/freqai/prediction_models/CatboostClassifierMultiTarget.py b/freqtrade/freqai/prediction_models/CatboostClassifierMultiTarget.py deleted file mode 100644 index a277bc2d7..000000000 --- a/freqtrade/freqai/prediction_models/CatboostClassifierMultiTarget.py +++ /dev/null @@ -1,79 +0,0 @@ -import logging -from pathlib import Path -from typing import Any - -from catboost import CatBoostClassifier, Pool - -from freqtrade.freqai.base_models.BaseClassifierModel import BaseClassifierModel -from freqtrade.freqai.base_models.FreqaiMultiOutputClassifier import FreqaiMultiOutputClassifier -from freqtrade.freqai.data_kitchen import FreqaiDataKitchen - - -logger = logging.getLogger(__name__) - - -class CatboostClassifierMultiTarget(BaseClassifierModel): - """ - User created prediction model. The class inherits IFreqaiModel, which - means it has full access to all Frequency AI functionality. Typically, - users would use this to override the common `fit()`, `train()`, or - `predict()` methods to add their custom data handling tools or change - various aspects of the training that cannot be configured via the - top level config.json file. - """ - - def fit(self, data_dictionary: dict, dk: FreqaiDataKitchen, **kwargs) -> Any: - """ - User sets up the training and test data to fit their desired model here - :param data_dictionary: the dictionary holding all data for train, test, - labels, weights - :param dk: The datakitchen object for the current coin/model - """ - - cbc = CatBoostClassifier( - allow_writing_files=True, - loss_function="MultiClass", - train_dir=Path(dk.data_path), - **self.model_training_parameters, - ) - - X = data_dictionary["train_features"] - y = data_dictionary["train_labels"] - - sample_weight = data_dictionary["train_weights"] - - eval_sets = [None] * y.shape[1] - - if self.freqai_info.get("data_split_parameters", {}).get("test_size", 0.1) != 0: - eval_sets = [None] * data_dictionary["test_labels"].shape[1] - - for i in range(data_dictionary["test_labels"].shape[1]): - eval_sets[i] = Pool( - data=data_dictionary["test_features"], - label=data_dictionary["test_labels"].iloc[:, i], - weight=data_dictionary["test_weights"], - ) - - init_model = self.get_init_model(dk.pair) - - if init_model: - init_models = init_model.estimators_ - else: - init_models = [None] * y.shape[1] - - fit_params = [] - for i in range(len(eval_sets)): - fit_params.append( - { - "eval_set": eval_sets[i], - "init_model": init_models[i], - } - ) - - model = FreqaiMultiOutputClassifier(estimator=cbc) - thread_training = self.freqai_info.get("multitarget_parallel_training", False) - if thread_training: - model.n_jobs = y.shape[1] - model.fit(X=X, y=y, sample_weight=sample_weight, fit_params=fit_params) - - return model diff --git a/freqtrade/freqai/prediction_models/CatboostRegressor.py b/freqtrade/freqai/prediction_models/CatboostRegressor.py deleted file mode 100644 index fb2727b33..000000000 --- a/freqtrade/freqai/prediction_models/CatboostRegressor.py +++ /dev/null @@ -1,60 +0,0 @@ -import logging -from pathlib import Path -from typing import Any - -from catboost import CatBoostRegressor, Pool - -from freqtrade.freqai.base_models.BaseRegressionModel import BaseRegressionModel -from freqtrade.freqai.data_kitchen import FreqaiDataKitchen - - -logger = logging.getLogger(__name__) - - -class CatboostRegressor(BaseRegressionModel): - """ - User created prediction model. The class inherits IFreqaiModel, which - means it has full access to all Frequency AI functionality. Typically, - users would use this to override the common `fit()`, `train()`, or - `predict()` methods to add their custom data handling tools or change - various aspects of the training that cannot be configured via the - top level config.json file. - """ - - def fit(self, data_dictionary: dict, dk: FreqaiDataKitchen, **kwargs) -> Any: - """ - User sets up the training and test data to fit their desired model here - :param data_dictionary: the dictionary holding all data for train, test, - labels, weights - :param dk: The datakitchen object for the current coin/model - """ - - train_data = Pool( - data=data_dictionary["train_features"], - label=data_dictionary["train_labels"], - weight=data_dictionary["train_weights"], - ) - if self.freqai_info.get("data_split_parameters", {}).get("test_size", 0.1) == 0: - test_data = None - else: - test_data = Pool( - data=data_dictionary["test_features"], - label=data_dictionary["test_labels"], - weight=data_dictionary["test_weights"], - ) - - init_model = self.get_init_model(dk.pair) - - model = CatBoostRegressor( - allow_writing_files=True, - train_dir=Path(dk.data_path), - **self.model_training_parameters, - ) - - model.fit( - X=train_data, - eval_set=test_data, - init_model=init_model, - ) - - return model diff --git a/freqtrade/freqai/prediction_models/CatboostRegressorMultiTarget.py b/freqtrade/freqai/prediction_models/CatboostRegressorMultiTarget.py deleted file mode 100644 index ad3ddcd9b..000000000 --- a/freqtrade/freqai/prediction_models/CatboostRegressorMultiTarget.py +++ /dev/null @@ -1,78 +0,0 @@ -import logging -from pathlib import Path -from typing import Any - -from catboost import CatBoostRegressor, Pool - -from freqtrade.freqai.base_models.BaseRegressionModel import BaseRegressionModel -from freqtrade.freqai.base_models.FreqaiMultiOutputRegressor import FreqaiMultiOutputRegressor -from freqtrade.freqai.data_kitchen import FreqaiDataKitchen - - -logger = logging.getLogger(__name__) - - -class CatboostRegressorMultiTarget(BaseRegressionModel): - """ - User created prediction model. The class inherits IFreqaiModel, which - means it has full access to all Frequency AI functionality. Typically, - users would use this to override the common `fit()`, `train()`, or - `predict()` methods to add their custom data handling tools or change - various aspects of the training that cannot be configured via the - top level config.json file. - """ - - def fit(self, data_dictionary: dict, dk: FreqaiDataKitchen, **kwargs) -> Any: - """ - User sets up the training and test data to fit their desired model here - :param data_dictionary: the dictionary holding all data for train, test, - labels, weights - :param dk: The datakitchen object for the current coin/model - """ - - cbr = CatBoostRegressor( - allow_writing_files=True, - train_dir=Path(dk.data_path), - **self.model_training_parameters, - ) - - X = data_dictionary["train_features"] - y = data_dictionary["train_labels"] - - sample_weight = data_dictionary["train_weights"] - - eval_sets = [None] * y.shape[1] - - if self.freqai_info.get("data_split_parameters", {}).get("test_size", 0.1) != 0: - eval_sets = [None] * data_dictionary["test_labels"].shape[1] - - for i in range(data_dictionary["test_labels"].shape[1]): - eval_sets[i] = Pool( - data=data_dictionary["test_features"], - label=data_dictionary["test_labels"].iloc[:, i], - weight=data_dictionary["test_weights"], - ) - - init_model = self.get_init_model(dk.pair) - - if init_model: - init_models = init_model.estimators_ - else: - init_models = [None] * y.shape[1] - - fit_params = [] - for i in range(len(eval_sets)): - fit_params.append( - { - "eval_set": eval_sets[i], - "init_model": init_models[i], - } - ) - - model = FreqaiMultiOutputRegressor(estimator=cbr) - thread_training = self.freqai_info.get("multitarget_parallel_training", False) - if thread_training: - model.n_jobs = y.shape[1] - model.fit(X=X, y=y, sample_weight=sample_weight, fit_params=fit_params) - - return model diff --git a/pyproject.toml b/pyproject.toml index 7ada3385c..ab22b1583 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -85,7 +85,6 @@ hyperopt = [ freqai = [ "scikit-learn", "joblib", - "catboost; platform_machine != 'arm'", "lightgbm", "xgboost", "tensorboard", diff --git a/requirements-freqai.txt b/requirements-freqai.txt index 24bf58986..b274f3914 100644 --- a/requirements-freqai.txt +++ b/requirements-freqai.txt @@ -5,7 +5,6 @@ # Required for freqai scikit-learn==1.7.2 joblib==1.5.2 -catboost==1.2.8; 'arm' not in platform_machine lightgbm==4.6.0 xgboost==3.1.2 tensorboard==2.20.0 From 006d2305af1ca7071b7bf303eea40c182fbf3a39 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 22 Dec 2025 07:13:10 +0100 Subject: [PATCH 35/40] chore: update samples and comments to use lightgbm / xgboost instead of catboost --- docs/freqai-configuration.md | 10 +++++----- freqtrade/freqai/base_models/BaseClassifierModel.py | 2 +- freqtrade/freqai/base_models/BaseRegressionModel.py | 2 +- freqtrade/freqai/freqai_interface.py | 4 ++-- freqtrade/freqai/utils.py | 4 +++- freqtrade/templates/FreqaiExampleHybridStrategy.py | 2 +- freqtrade/templates/FreqaiExampleStrategy.py | 4 ++-- 7 files changed, 15 insertions(+), 13 deletions(-) diff --git a/docs/freqai-configuration.md b/docs/freqai-configuration.md index 5ab7b2602..29b0c0d70 100644 --- a/docs/freqai-configuration.md +++ b/docs/freqai-configuration.md @@ -200,14 +200,14 @@ If this value is set, FreqAI will initially use the predictions from the trainin ## Using different prediction models -FreqAI has multiple example prediction model libraries that are ready to be used as is via the flag `--freqaimodel`. These libraries include `CatBoost`, `LightGBM`, and `XGBoost` regression, classification, and multi-target models, and can be found in `freqai/prediction_models/`. +FreqAI has multiple example prediction model libraries that are ready to be used as is via the flag `--freqaimodel`. These libraries include `LightGBM`, and `XGBoost` regression, classification, and multi-target models, and can be found in `freqai/prediction_models/`. Regression and classification models differ in what targets they predict - a regression model will predict a target of continuous values, for example what price BTC will be at tomorrow, whilst a classifier will predict a target of discrete values, for example if the price of BTC will go up tomorrow or not. This means that you have to specify your targets differently depending on which model type you are using (see details [below](#setting-model-targets)). All of the aforementioned model libraries implement gradient boosted decision tree algorithms. They all work on the principle of ensemble learning, where predictions from multiple simple learners are combined to get a final prediction that is more stable and generalized. The simple learners in this case are decision trees. Gradient boosting refers to the method of learning, where each simple learner is built in sequence - the subsequent learner is used to improve on the error from the previous learner. If you want to learn more about the different model libraries you can find the information in their respective docs: -* CatBoost: https://catboost.ai/en/docs/ -* LightGBM: https://lightgbm.readthedocs.io/en/v3.3.2/# +* CatBoost: (No longer actively supported since 2025.12) +* LightGBM: * XGBoost: https://xgboost.readthedocs.io/en/stable/# There are also numerous online articles describing and comparing the algorithms. Some relatively lightweight examples would be [CatBoost vs. LightGBM vs. XGBoost — Which is the best algorithm?](https://towardsdatascience.com/catboost-vs-lightgbm-vs-xgboost-c80f40662924#:~:text=In%20CatBoost%2C%20symmetric%20trees%2C%20or,the%20same%20depth%20can%20differ.) and [XGBoost, LightGBM or CatBoost — which boosting algorithm should I use?](https://medium.com/riskified-technology/xgboost-lightgbm-or-catboost-which-boosting-algorithm-should-i-use-e7fda7bb36bc). Keep in mind that the performance of each model is highly dependent on the application and so any reported metrics might not be true for your particular use of the model. @@ -219,7 +219,7 @@ Make sure to use unique names to avoid overriding built-in models. #### Regressors -If you are using a regressor, you need to specify a target that has continuous values. FreqAI includes a variety of regressors, such as the `CatboostRegressor`via the flag `--freqaimodel CatboostRegressor`. An example of how you could set a regression target for predicting the price 100 candles into the future would be +If you are using a regressor, you need to specify a target that has continuous values. FreqAI includes a variety of regressors, such as the `LightGBMRegressor`via the flag `--freqaimodel LightGBMRegressor`. An example of how you could set a regression target for predicting the price 100 candles into the future would be ```python df['&s-close_price'] = df['close'].shift(-100) @@ -229,7 +229,7 @@ If you want to predict multiple targets, you need to define multiple labels usin #### Classifiers -If you are using a classifier, you need to specify a target that has discrete values. FreqAI includes a variety of classifiers, such as the `CatboostClassifier` via the flag `--freqaimodel CatboostClassifier`. If you elects to use a classifier, the classes need to be set using strings. For example, if you want to predict if the price 100 candles into the future goes up or down you would set +If you are using a classifier, you need to specify a target that has discrete values. FreqAI includes a variety of classifiers, such as the `LightGBMClassifier` via the flag `--freqaimodel LightGBMClassifier`. If you elects to use a classifier, the classes need to be set using strings. For example, if you want to predict if the price 100 candles into the future goes up or down you would set ```python df['&s-up_or_down'] = np.where( df["close"].shift(-100) > df["close"], 'up', 'down') diff --git a/freqtrade/freqai/base_models/BaseClassifierModel.py b/freqtrade/freqai/base_models/BaseClassifierModel.py index fe3254792..350a6f0ce 100644 --- a/freqtrade/freqai/base_models/BaseClassifierModel.py +++ b/freqtrade/freqai/base_models/BaseClassifierModel.py @@ -18,7 +18,7 @@ class BaseClassifierModel(IFreqaiModel): """ Base class for regression type models (e.g. Catboost, LightGBM, XGboost etc.). User *must* inherit from this class and set fit(). See example scripts - such as prediction_models/CatboostClassifier.py for guidance. + such as prediction_models/XGBoostClassifier.py for guidance. """ def train(self, unfiltered_df: DataFrame, pair: str, dk: FreqaiDataKitchen, **kwargs) -> Any: diff --git a/freqtrade/freqai/base_models/BaseRegressionModel.py b/freqtrade/freqai/base_models/BaseRegressionModel.py index 75958f4c9..0c7c95569 100644 --- a/freqtrade/freqai/base_models/BaseRegressionModel.py +++ b/freqtrade/freqai/base_models/BaseRegressionModel.py @@ -18,7 +18,7 @@ class BaseRegressionModel(IFreqaiModel): """ Base class for regression type models (e.g. Catboost, LightGBM, XGboost etc.). User *must* inherit from this class and set fit(). See example scripts - such as prediction_models/CatboostRegressor.py for guidance. + such as prediction_models/XGBoostRegressor.py for guidance. """ def train(self, unfiltered_df: DataFrame, pair: str, dk: FreqaiDataKitchen, **kwargs) -> Any: diff --git a/freqtrade/freqai/freqai_interface.py b/freqtrade/freqai/freqai_interface.py index b70b7c67e..b4f37adf1 100644 --- a/freqtrade/freqai/freqai_interface.py +++ b/freqtrade/freqai/freqai_interface.py @@ -948,7 +948,7 @@ class IFreqaiModel(ABC): return dk # Following methods which are overridden by user made prediction models. - # See freqai/prediction_models/CatboostPredictionModel.py for an example. + # See freqai/prediction_models/XGBoostRegressor.py for an example. @abstractmethod def train(self, unfiltered_df: DataFrame, pair: str, dk: FreqaiDataKitchen, **kwargs) -> Any: @@ -964,7 +964,7 @@ class IFreqaiModel(ABC): def fit(self, data_dictionary: dict[str, Any], dk: FreqaiDataKitchen, **kwargs) -> Any: """ Most regressors use the same function names and arguments e.g. user - can drop in LGBMRegressor in place of CatBoostRegressor and all data + can drop in LGBMRegressor in place of XGBoostRegressor and all data management will be properly handled by Freqai. :param data_dictionary: Dict = the dictionary constructed by DataHandler to hold all the training and test data/labels. diff --git a/freqtrade/freqai/utils.py b/freqtrade/freqai/utils.py index d3aeaefe3..7862d78b4 100644 --- a/freqtrade/freqai/utils.py +++ b/freqtrade/freqai/utils.py @@ -97,7 +97,7 @@ def plot_feature_importance( """ Plot Best and worst features by importance for a single sub-train. :param model: Any = A model which was `fit` using a common library - such as catboost or lightgbm + such as XGBoost or lightgbm :param pair: str = pair e.g. BTC/USD :param dk: FreqaiDataKitchen = non-persistent data container for current coin/loop :param count_max: int = the amount of features to be loaded per column @@ -115,6 +115,8 @@ def plot_feature_importance( for label in models: mdl = models[label] if "catboost.core" in str(mdl.__class__): + # CatBoost is no longer actively supported since 2025.12 + # However users can still use it in their custom models feature_importance = mdl.get_feature_importance() elif "lightgbm.sklearn" in str(mdl.__class__): feature_importance = mdl.feature_importances_ diff --git a/freqtrade/templates/FreqaiExampleHybridStrategy.py b/freqtrade/templates/FreqaiExampleHybridStrategy.py index 908c4b174..fca913657 100644 --- a/freqtrade/templates/FreqaiExampleHybridStrategy.py +++ b/freqtrade/templates/FreqaiExampleHybridStrategy.py @@ -20,7 +20,7 @@ class FreqaiExampleHybridStrategy(IStrategy): Launching this strategy would be: freqtrade trade --strategy FreqaiExampleHybridStrategy --strategy-path freqtrade/templates - --freqaimodel CatboostClassifier --config config_examples/config_freqai.example.json + --freqaimodel XGBoostClassifier --config config_examples/config_freqai.example.json or the user simply adds this to their config: diff --git a/freqtrade/templates/FreqaiExampleStrategy.py b/freqtrade/templates/FreqaiExampleStrategy.py index b07487496..6c7de279b 100644 --- a/freqtrade/templates/FreqaiExampleStrategy.py +++ b/freqtrade/templates/FreqaiExampleStrategy.py @@ -205,8 +205,8 @@ class FreqaiExampleStrategy(IStrategy): # If user wishes to use multiple targets, they can add more by # appending more columns with '&'. User should keep in mind that multi targets # requires a multioutput prediction model such as - # freqai/prediction_models/CatboostRegressorMultiTarget.py, - # freqtrade trade --freqaimodel CatboostRegressorMultiTarget + # freqai/prediction_models/LightGBMClassifierMultiTarget.py, + # freqtrade trade --freqaimodel LightGBMClassifierMultiTarget # df["&-s_range"] = ( # df["close"] From fc113f7bbf76413a40cfe3aa35e0741100d3b616 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 06:32:34 +0000 Subject: [PATCH 36/40] chore(deps-dev): bump mypy from 1.19.0 to 1.19.1 Bumps [mypy](https://github.com/python/mypy) from 1.19.0 to 1.19.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.19.0...v1.19.1) --- updated-dependencies: - dependency-name: mypy dependency-version: 1.19.1 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 d450e3fc4..38a49f661 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -7,7 +7,7 @@ -r docs/requirements-docs.txt ruff==0.14.9 -mypy==1.19.0 +mypy==1.19.1 pre-commit==4.5.0 pytest==9.0.2 pytest-asyncio==1.3.0 From 51f3f0d65ad1d4e95e818ff73f40440564452681 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 22 Dec 2025 19:53:02 +0100 Subject: [PATCH 37/40] test: Remove catboost tests --- tests/freqai/test_freqai_interface.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/tests/freqai/test_freqai_interface.py b/tests/freqai/test_freqai_interface.py index 3e7e96d85..053554dcc 100644 --- a/tests/freqai/test_freqai_interface.py +++ b/tests/freqai/test_freqai_interface.py @@ -31,9 +31,6 @@ from tests.freqai.conftest import ( def can_run_model(model: str) -> None: is_pytorch_model = "Reinforcement" in model or "PyTorch" in model - if is_arm() and "Catboost" in model: - pytest.skip("CatBoost is not supported on ARM.") - if is_pytorch_model and is_mac(): pytest.skip("Reinforcement learning / PyTorch module not available on intel based Mac OS.") @@ -44,7 +41,6 @@ def can_run_model(model: str) -> None: ("LightGBMRegressor", True, False, True, True, False, 0, 0), ("XGBoostRegressor", False, True, False, True, False, 10, 0.05), ("XGBoostRFRegressor", False, False, False, True, False, 0, 0), - ("CatboostRegressor", False, False, False, True, True, 0, 0), ("PyTorchMLPRegressor", False, False, False, False, False, 0, 0), ("PyTorchTransformerRegressor", False, False, False, False, False, 0, 0), ("ReinforcementLearner", False, True, False, True, False, 0, 0), @@ -138,9 +134,7 @@ def test_extract_data_and_train_model_Standard( [ ("LightGBMRegressorMultiTarget", "freqai_test_multimodel_strat"), ("XGBoostRegressorMultiTarget", "freqai_test_multimodel_strat"), - ("CatboostRegressorMultiTarget", "freqai_test_multimodel_strat"), ("LightGBMClassifierMultiTarget", "freqai_test_multimodel_classifier_strat"), - ("CatboostClassifierMultiTarget", "freqai_test_multimodel_classifier_strat"), ], ) @pytest.mark.filterwarnings(r"ignore:.*__sklearn_tags__.*:DeprecationWarning") @@ -184,7 +178,6 @@ def test_extract_data_and_train_model_MultiTargets(mocker, freqai_conf, model, s "model", [ "LightGBMClassifier", - "CatboostClassifier", "XGBoostClassifier", "XGBoostRFClassifier", "SKLearnRandomForestClassifier", @@ -246,13 +239,11 @@ def test_extract_data_and_train_model_Classifiers(mocker, freqai_conf, model): [ ("LightGBMRegressor", 2, "freqai_test_strat"), ("XGBoostRegressor", 2, "freqai_test_strat"), - ("CatboostRegressor", 2, "freqai_test_strat"), ("PyTorchMLPRegressor", 2, "freqai_test_strat"), ("PyTorchTransformerRegressor", 2, "freqai_test_strat"), ("ReinforcementLearner", 3, "freqai_rl_test_strat"), ("XGBoostClassifier", 2, "freqai_test_classifier"), ("LightGBMClassifier", 2, "freqai_test_classifier"), - ("CatboostClassifier", 2, "freqai_test_classifier"), ("PyTorchMLPClassifier", 2, "freqai_test_classifier"), ], ) From 5e5495e050aa20163b7480dbfe776cd754435c81 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 22 Dec 2025 19:56:41 +0100 Subject: [PATCH 38/40] docs: Add deprecation notice for Catboost models --- docs/deprecated.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/deprecated.md b/docs/deprecated.md index ce3bf3b95..1b2835ea2 100644 --- a/docs/deprecated.md +++ b/docs/deprecated.md @@ -135,3 +135,13 @@ you can verify this with `freqtrade list-data --exchange --show`. Additional arguments to the above commands may be necessary, like configuration files or explicit user_data if they deviate from the default. **Hyperliquid** is a special case now - which will no longer require 1h mark data - but will use regular candles instead (this data never existed and is identical to 1h futures candles). As we don't support download-data for hyperliquid (they don't provide historic data) - there won't be actions necessary for hyperliquid users. + +## Catboost models in freqAI + +CatBoost models have been removed with version 2025.12 and are no longer actively supported. +If you have existing bots using CatBoost models, you can still use them in your custom models by copy/pasting them from the git history (as linked below) and installing the Catboost library manually. +We do however recommend switching to other supported model libraries like LightGBM or XGBoost for better support and future compatibility. + +* [CatboostRegressor](https://github.com/freqtrade/freqtrade/blob/c6f3b0081927e161a16b116cc47fb663f7831d30/freqtrade/freqai/prediction_models/CatboostRegressor.py) +* [CatboostClassifier](https://github.com/freqtrade/freqtrade/blob/c6f3b0081927e161a16b116cc47fb663f7831d30/freqtrade/freqai/prediction_models/CatboostClassifier.py) +* [CatboostClassifierMultiTarget](https://github.com/freqtrade/freqtrade/blob/c6f3b0081927e161a16b116cc47fb663f7831d30/freqtrade/freqai/prediction_models/CatboostClassifierMultiTarget.py) From d2c4bd1b50b840d608fa37f8ac3becaa3024190c Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 22 Dec 2025 20:00:13 +0100 Subject: [PATCH 39/40] docs: update formatting of link --- docs/freqai-configuration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/freqai-configuration.md b/docs/freqai-configuration.md index 29b0c0d70..984a1f17b 100644 --- a/docs/freqai-configuration.md +++ b/docs/freqai-configuration.md @@ -206,9 +206,9 @@ Regression and classification models differ in what targets they predict - a reg All of the aforementioned model libraries implement gradient boosted decision tree algorithms. They all work on the principle of ensemble learning, where predictions from multiple simple learners are combined to get a final prediction that is more stable and generalized. The simple learners in this case are decision trees. Gradient boosting refers to the method of learning, where each simple learner is built in sequence - the subsequent learner is used to improve on the error from the previous learner. If you want to learn more about the different model libraries you can find the information in their respective docs: -* CatBoost: (No longer actively supported since 2025.12) * LightGBM: -* XGBoost: https://xgboost.readthedocs.io/en/stable/# +* XGBoost: +* CatBoost: (No longer actively supported since 2025.12) There are also numerous online articles describing and comparing the algorithms. Some relatively lightweight examples would be [CatBoost vs. LightGBM vs. XGBoost — Which is the best algorithm?](https://towardsdatascience.com/catboost-vs-lightgbm-vs-xgboost-c80f40662924#:~:text=In%20CatBoost%2C%20symmetric%20trees%2C%20or,the%20same%20depth%20can%20differ.) and [XGBoost, LightGBM or CatBoost — which boosting algorithm should I use?](https://medium.com/riskified-technology/xgboost-lightgbm-or-catboost-which-boosting-algorithm-should-i-use-e7fda7bb36bc). Keep in mind that the performance of each model is highly dependent on the application and so any reported metrics might not be true for your particular use of the model. From 802d42cc00280def52ff8fc65bf927cb275ad214 Mon Sep 17 00:00:00 2001 From: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com> Date: Tue, 23 Dec 2025 03:30:45 +0000 Subject: [PATCH 40/40] chore: update pre-commit hooks --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c886ddcc3..09b08f0cc 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -44,7 +44,7 @@ repos: - repo: https://github.com/charliermarsh/ruff-pre-commit # Ruff version. - rev: 'v0.14.9' + rev: 'v0.14.10' hooks: - id: ruff - id: ruff-format @@ -83,6 +83,6 @@ repos: # Ensure github actions remain safe - repo: https://github.com/woodruffw/zizmor-pre-commit - rev: v1.18.0 + rev: v1.19.0 hooks: - id: zizmor