From 14d3096a22efdc98d0ad4bbf7d60ef5acf9617ca Mon Sep 17 00:00:00 2001 From: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com> Date: Thu, 13 Nov 2025 03:22:53 +0000 Subject: [PATCH 001/243] chore: update pre-commit hooks --- .../exchange/binance_leverage_tiers.json | 1709 +++++++++++++---- 1 file changed, 1312 insertions(+), 397 deletions(-) diff --git a/freqtrade/exchange/binance_leverage_tiers.json b/freqtrade/exchange/binance_leverage_tiers.json index 50e1022d3..efbf873bf 100644 --- a/freqtrade/exchange/binance_leverage_tiers.json +++ b/freqtrade/exchange/binance_leverage_tiers.json @@ -6343,15 +6343,15 @@ "symbol": "AIA/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 3000.0, + "maintenanceMarginRate": 0.03, + "maxLeverage": 20.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "5000", + "initialLeverage": "20", + "notionalCap": "3000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.03", "cum": "0.0" } }, @@ -6359,136 +6359,102 @@ "tier": 2.0, "symbol": "AIA/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "minNotional": 3000.0, + "maxNotional": 15000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "2", - "initialLeverage": "25", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "initialLeverage": "10", + "notionalCap": "15000", + "notionalFloor": "3000", + "maintMarginRatio": "0.05", + "cum": "60.0" } }, { "tier": 3.0, "symbol": "AIA/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 15000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "15000", + "maintMarginRatio": "0.1", + "cum": "810.0" } }, { "tier": 4.0, "symbol": "AIA/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 50000.0, + "maxNotional": 150000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "4", + "notionalCap": "150000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2060.0" } }, { "tier": 5.0, "symbol": "AIA/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 150000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "3", + "notionalCap": "1000000", + "notionalFloor": "150000", + "maintMarginRatio": "0.1667", + "cum": "8315.0" } }, { "tier": 6.0, "symbol": "AIA/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 1000000.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "6", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "initialLeverage": "2", + "notionalCap": "2500000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.25", + "cum": "91615.0" } }, { "tier": 7.0, "symbol": "AIA/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 4500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "7", - "initialLeverage": "3", - "notionalCap": "4500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" - } - }, - { - "tier": 8.0, - "symbol": "AIA/USDT:USDT", - "currency": "USDT", - "minNotional": 4500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "8", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "4500000", - "maintMarginRatio": "0.25", - "cum": "392225.0" - } - }, - { - "tier": 9.0, - "symbol": "AIA/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "7", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "716615.0" } } ], @@ -8025,6 +7991,161 @@ } } ], + "ALLO/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "ALLO/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": "ALLO/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": "ALLO/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": "ALLO/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": "ALLO/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": "ALLO/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": "ALLO/USDT:USDT", + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 4500000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "7", + "initialLeverage": "3", + "notionalCap": "4500000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1667", + "cum": "17375.0" + } + }, + { + "tier": 8.0, + "symbol": "ALLO/USDT:USDT", + "currency": "USDT", + "minNotional": 4500000.0, + "maxNotional": 7500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "8", + "initialLeverage": "2", + "notionalCap": "7500000", + "notionalFloor": "4500000", + "maintMarginRatio": "0.25", + "cum": "392225.0" + } + }, + { + "tier": 9.0, + "symbol": "ALLO/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": "2267225.0" + } + } + ], "ALPACA/USDT:USDT": [ { "tier": 1.0, @@ -16295,6 +16416,144 @@ } } ], + "BEAT/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "BEAT/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": "BEAT/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": "BEAT/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": "BEAT/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": "BEAT/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": "BEAT/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": "BEAT/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": "BEAT/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" + } + } + ], "BEL/USDT:USDT": [ { "tier": 1.0, @@ -22005,14 +22264,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 75.0, "info": { "bracket": "1", - "initialLeverage": "5", + "initialLeverage": "75", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.1", + "maintMarginRatio": "0.01", "cum": "0.0" } }, @@ -22022,15 +22281,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.015, + "maxLeverage": 50.0, "info": { "bracket": "2", - "initialLeverage": "4", + "initialLeverage": "50", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.125", - "cum": "125.0" + "maintMarginRatio": "0.015", + "cum": "25.0" } }, { @@ -22038,50 +22297,135 @@ "symbol": "CC/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 30000.0, - "maintenanceMarginRate": 0.167, - "maxLeverage": 3.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "3", - "initialLeverage": "3", - "notionalCap": "30000", + "initialLeverage": "25", + "notionalCap": "25000", "notionalFloor": "10000", - "maintMarginRatio": "0.167", - "cum": "545.0" + "maintMarginRatio": "0.02", + "cum": "75.0" } }, { "tier": 4.0, "symbol": "CC/USDT:USDT", "currency": "USDT", - "minNotional": 30000.0, - "maxNotional": 80000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, + "minNotional": 25000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "4", - "initialLeverage": "2", - "notionalCap": "80000", - "notionalFloor": "30000", - "maintMarginRatio": "0.25", - "cum": "3035.0" + "initialLeverage": "20", + "notionalCap": "50000", + "notionalFloor": "25000", + "maintMarginRatio": "0.025", + "cum": "200.0" } }, { "tier": 5.0, "symbol": "CC/USDT:USDT", "currency": "USDT", - "minNotional": 80000.0, - "maxNotional": 200000.0, + "minNotional": 50000.0, + "maxNotional": 125000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "5", + "initialLeverage": "10", + "notionalCap": "125000", + "notionalFloor": "50000", + "maintMarginRatio": "0.05", + "cum": "1450.0" + } + }, + { + "tier": 6.0, + "symbol": "CC/USDT:USDT", + "currency": "USDT", + "minNotional": 125000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "6", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "125000", + "maintMarginRatio": "0.1", + "cum": "7700.0" + } + }, + { + "tier": 7.0, + "symbol": "CC/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": "CC/USDT:USDT", + "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 4500000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "8", + "initialLeverage": "3", + "notionalCap": "4500000", + "notionalFloor": "500000", + "maintMarginRatio": "0.1667", + "cum": "34800.0" + } + }, + { + "tier": 9.0, + "symbol": "CC/USDT:USDT", + "currency": "USDT", + "minNotional": 4500000.0, + "maxNotional": 7500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "9", + "initialLeverage": "2", + "notionalCap": "7500000", + "notionalFloor": "4500000", + "maintMarginRatio": "0.25", + "cum": "409650.0" + } + }, + { + "tier": 10.0, + "symbol": "CC/USDT:USDT", + "currency": "USDT", + "minNotional": 7500000.0, + "maxNotional": 12500000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "5", + "bracket": "10", "initialLeverage": "1", - "notionalCap": "200000", - "notionalFloor": "80000", + "notionalCap": "12500000", + "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "23035.0" + "cum": "2284650.0" } } ], @@ -23635,6 +23979,144 @@ } } ], + "CLANKER/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "CLANKER/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": "CLANKER/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": "50.0" + } + }, + { + "tier": 3.0, + "symbol": "CLANKER/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": "300.0" + } + }, + { + "tier": 4.0, + "symbol": "CLANKER/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": "1300.0" + } + }, + { + "tier": 5.0, + "symbol": "CLANKER/USDT:USDT", + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "5", + "initialLeverage": "4", + "notionalCap": "250000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2550.0" + } + }, + { + "tier": 6.0, + "symbol": "CLANKER/USDT:USDT", + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "6", + "initialLeverage": "3", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1667", + "cum": "12975.0" + } + }, + { + "tier": 7.0, + "symbol": "CLANKER/USDT:USDT", + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 7500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "7", + "initialLeverage": "2", + "notionalCap": "7500000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.25", + "cum": "96275.0" + } + }, + { + "tier": 8.0, + "symbol": "CLANKER/USDT:USDT", + "currency": "USDT", + "minNotional": 7500000.0, + "maxNotional": 12500000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "8", + "initialLeverage": "1", + "notionalCap": "12500000", + "notionalFloor": "7500000", + "maintMarginRatio": "0.5", + "cum": "1971275.0" + } + } + ], "CLO/USDT:USDT": [ { "tier": 1.0, @@ -36243,6 +36725,144 @@ } } ], + "FOLKS/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "FOLKS/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": "FOLKS/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": "50.0" + } + }, + { + "tier": 3.0, + "symbol": "FOLKS/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": "300.0" + } + }, + { + "tier": 4.0, + "symbol": "FOLKS/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": "1300.0" + } + }, + { + "tier": 5.0, + "symbol": "FOLKS/USDT:USDT", + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "5", + "initialLeverage": "4", + "notionalCap": "250000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2550.0" + } + }, + { + "tier": 6.0, + "symbol": "FOLKS/USDT:USDT", + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "6", + "initialLeverage": "3", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1667", + "cum": "12975.0" + } + }, + { + "tier": 7.0, + "symbol": "FOLKS/USDT:USDT", + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 7500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "7", + "initialLeverage": "2", + "notionalCap": "7500000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.25", + "cum": "96275.0" + } + }, + { + "tier": 8.0, + "symbol": "FOLKS/USDT:USDT", + "currency": "USDT", + "minNotional": 7500000.0, + "maxNotional": 12500000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "8", + "initialLeverage": "1", + "notionalCap": "12500000", + "notionalFloor": "7500000", + "maintMarginRatio": "0.5", + "cum": "1971275.0" + } + } + ], "FORM/USDT:USDT": [ { "tier": 1.0, @@ -41022,15 +41642,15 @@ "symbol": "HIPPO/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" } }, @@ -41038,119 +41658,85 @@ "tier": 2.0, "symbol": "HIPPO/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 10000.0, + "maxNotional": 50000.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": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "HIPPO/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 50000.0, + "maxNotional": 100000.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": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1750.0" } }, { "tier": 4.0, "symbol": "HIPPO/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 100000.0, + "maxNotional": 1000000.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": "1000000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "5920.0" } }, { "tier": 5.0, "symbol": "HIPPO/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 1000000.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": "1000000", + "maintMarginRatio": "0.25", + "cum": "89220.0" } }, { "tier": 6.0, "symbol": "HIPPO/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 4500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "6", - "initialLeverage": "3", - "notionalCap": "4500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" - } - }, - { - "tier": 7.0, - "symbol": "HIPPO/USDT:USDT", - "currency": "USDT", - "minNotional": 4500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "4500000", - "maintMarginRatio": "0.25", - "cum": "387825.0" - } - }, - { - "tier": 8.0, - "symbol": "HIPPO/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": "2262825.0" + "cum": "714220.0" } } ], @@ -45390,6 +45976,144 @@ } } ], + "JCT/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "JCT/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": "JCT/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": "JCT/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": "JCT/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": "JCT/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": "JCT/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": "JCT/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": "JCT/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" + } + } + ], "JELLYJELLY/USDT:USDT": [ { "tier": 1.0, @@ -65723,14 +66447,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" } }, @@ -65740,14 +66464,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "2", - "initialLeverage": "50", + "initialLeverage": "25", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "25.0" } }, @@ -65757,14 +66481,14 @@ "currency": "USDT", "minNotional": 10000.0, "maxNotional": 25000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "3", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "25000", "notionalFloor": "10000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "75.0" } }, @@ -65773,33 +66497,33 @@ "symbol": "POPCAT/USDT:USDT", "currency": "USDT", "minNotional": 25000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 62500.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "4", - "initialLeverage": "20", - "notionalCap": "50000", + "initialLeverage": "10", + "notionalCap": "62500", "notionalFloor": "25000", - "maintMarginRatio": "0.025", - "cum": "200.0" + "maintMarginRatio": "0.05", + "cum": "700.0" } }, { "tier": 5.0, "symbol": "POPCAT/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, + "minNotional": 62500.0, "maxNotional": 125000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "5", - "initialLeverage": "10", + "initialLeverage": "5", "notionalCap": "125000", - "notionalFloor": "50000", - "maintMarginRatio": "0.05", - "cum": "1450.0" + "notionalFloor": "62500", + "maintMarginRatio": "0.1", + "cum": "3825.0" } }, { @@ -65808,15 +66532,15 @@ "currency": "USDT", "minNotional": 125000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "6", - "initialLeverage": "5", + "initialLeverage": "4", "notionalCap": "250000", "notionalFloor": "125000", - "maintMarginRatio": "0.1", - "cum": "7700.0" + "maintMarginRatio": "0.125", + "cum": "6950.0" } }, { @@ -65824,37 +66548,20 @@ "symbol": "POPCAT/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": "POPCAT/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, "maxNotional": 4500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "3", "notionalCap": "4500000", - "notionalFloor": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "34800.0" + "cum": "17375.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "POPCAT/USDT:USDT", "currency": "USDT", "minNotional": 4500000.0, @@ -65862,16 +66569,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "4500000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "392225.0" } }, { - "tier": 10.0, + "tier": 9.0, "symbol": "POPCAT/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -65879,12 +66586,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "10", + "bracket": "9", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "2267225.0" } } ], @@ -76076,14 +76783,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" } }, @@ -76093,15 +76800,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" } }, { @@ -76109,33 +76816,33 @@ "symbol": "SOON/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": "SOON/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" } }, { @@ -76143,88 +76850,54 @@ "symbol": "SOON/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": "SOON/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 250000.0, + "maxNotional": 1000000.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": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1667", + "cum": "12975.0" } }, { "tier": 7.0, "symbol": "SOON/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": "SOON/USDT:USDT", - "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 4500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "8", - "initialLeverage": "3", - "notionalCap": "4500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.1667", - "cum": "34800.0" - } - }, - { - "tier": 9.0, - "symbol": "SOON/USDT:USDT", - "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "9", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "96275.0" } }, { - "tier": 10.0, + "tier": 8.0, "symbol": "SOON/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -76232,12 +76905,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "10", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1971275.0" } } ], @@ -77256,6 +77929,144 @@ } } ], + "STABLE/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "STABLE/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": "STABLE/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": "STABLE/USDT:USDT", + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "25000", + "notionalFloor": "10000", + "maintMarginRatio": "0.05", + "cum": "275.0" + } + }, + { + "tier": 4.0, + "symbol": "STABLE/USDT:USDT", + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "25000", + "maintMarginRatio": "0.1", + "cum": "1525.0" + } + }, + { + "tier": 5.0, + "symbol": "STABLE/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": "STABLE/USDT:USDT", + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.167, + "maxLeverage": 3.0, + "info": { + "bracket": "6", + "initialLeverage": "3", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.167", + "cum": "6975.0" + } + }, + { + "tier": 7.0, + "symbol": "STABLE/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": "27725.0" + } + }, + { + "tier": 8.0, + "symbol": "STABLE/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": "652725.0" + } + } + ], "STBL/USDT:USDT": [ { "tier": 1.0, @@ -80640,15 +81451,15 @@ "symbol": "TA/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxNotional": 15000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "15000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -80656,55 +81467,21 @@ "tier": 2.0, "symbol": "TA/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": "TA/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": "TA/USDT:USDT", - "currency": "USDT", - "minNotional": 20000.0, + "minNotional": 15000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "15000", "maintMarginRatio": "0.1", - "cum": "1275.0" + "cum": "750.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "TA/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -80712,16 +81489,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2525.0" + "cum": "2000.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "TA/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -80729,16 +81506,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6695.0" + "cum": "6170.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "TA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -80746,16 +81523,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27520.0" + "cum": "26995.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "TA/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -80763,12 +81540,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", "notionalCap": "5000000", "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "652520.0" + "cum": "651995.0" } } ], @@ -85492,6 +86269,144 @@ } } ], + "UAI/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "UAI/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": "UAI/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": "50.0" + } + }, + { + "tier": 3.0, + "symbol": "UAI/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": "300.0" + } + }, + { + "tier": 4.0, + "symbol": "UAI/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": "1300.0" + } + }, + { + "tier": 5.0, + "symbol": "UAI/USDT:USDT", + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "5", + "initialLeverage": "4", + "notionalCap": "250000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2550.0" + } + }, + { + "tier": 6.0, + "symbol": "UAI/USDT:USDT", + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "6", + "initialLeverage": "3", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1667", + "cum": "12975.0" + } + }, + { + "tier": 7.0, + "symbol": "UAI/USDT:USDT", + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 7500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "7", + "initialLeverage": "2", + "notionalCap": "7500000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.25", + "cum": "96275.0" + } + }, + { + "tier": 8.0, + "symbol": "UAI/USDT:USDT", + "currency": "USDT", + "minNotional": 7500000.0, + "maxNotional": 12500000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "8", + "initialLeverage": "1", + "notionalCap": "12500000", + "notionalFloor": "7500000", + "maintMarginRatio": "0.5", + "cum": "1971275.0" + } + } + ], "UB/USDT:USDT": [ { "tier": 1.0, From 47451dd9895b38d61aeb35ac60b003ec308c1fa1 Mon Sep 17 00:00:00 2001 From: mrpabloyeah Date: Thu, 13 Nov 2025 20:14:39 +0100 Subject: [PATCH 002/243] Fix high_value calculation in calculate_max_drawdown() --- freqtrade/data/metrics.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/data/metrics.py b/freqtrade/data/metrics.py index 7e0b279f4..557d0ddcc 100644 --- a/freqtrade/data/metrics.py +++ b/freqtrade/data/metrics.py @@ -225,7 +225,7 @@ def calculate_max_drawdown( high_idx = max_drawdown_df.iloc[: idxmin + 1]["high_value"].idxmax() high_date = profit_results.loc[high_idx, date_col] low_date = profit_results.loc[idxmin, date_col] - high_val = max_drawdown_df.loc[high_idx, "cumulative"] + high_val = max_drawdown_df.loc[high_idx, "high_value"] low_val = max_drawdown_df.loc[idxmin, "cumulative"] max_drawdown_rel = max_drawdown_df.loc[idxmin, "drawdown_relative"] From 1a506dc4b441133d38625edada2a0329cd1314c2 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 14 Nov 2025 19:41:52 +0100 Subject: [PATCH 003/243] test: add tests for high/low logic --- tests/data/test_btanalysis.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/data/test_btanalysis.py b/tests/data/test_btanalysis.py index e7c914040..41b42d175 100644 --- a/tests/data/test_btanalysis.py +++ b/tests/data/test_btanalysis.py @@ -581,6 +581,8 @@ def test_calculate_max_drawdown2(): # No winning trade ... drawdown = calculate_max_drawdown(df1, date_col="open_date", value_col="profit") assert drawdown.drawdown_abs == 0.055545 + assert drawdown.high_value == 0.0 + assert drawdown.current_high_value == 0.0 @pytest.mark.parametrize( From 70ec376657b14d1846488a32136caf78f6f9d370 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 14 Nov 2025 19:53:22 +0100 Subject: [PATCH 004/243] test: further expand drawdown test --- tests/data/test_btanalysis.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/data/test_btanalysis.py b/tests/data/test_btanalysis.py index 41b42d175..a09db5898 100644 --- a/tests/data/test_btanalysis.py +++ b/tests/data/test_btanalysis.py @@ -575,6 +575,9 @@ def test_calculate_max_drawdown2(): # No losing trade ... drawdown = calculate_max_drawdown(df, date_col="open_date", value_col="profit") assert drawdown.drawdown_abs == 0.0 + assert drawdown.low_value == 0.0 + assert drawdown.current_high_value >= 0.0 + assert drawdown.current_drawdown_abs == 0.0 df1 = DataFrame(zip(values[:5], dates[:5], strict=False), columns=["profit", "open_date"]) df1.loc[:, "profit"] = df1["profit"] * -1 @@ -583,6 +586,7 @@ def test_calculate_max_drawdown2(): assert drawdown.drawdown_abs == 0.055545 assert drawdown.high_value == 0.0 assert drawdown.current_high_value == 0.0 + assert drawdown.current_drawdown_abs == 0.055545 @pytest.mark.parametrize( From 38ff75553353688d68d6182fda880cb25ea69e86 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 15 Nov 2025 09:52:24 +0100 Subject: [PATCH 005/243] fix: start drawdown series with a 0 row This will account for edge-cases with no winning / losing trades --- freqtrade/data/metrics.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/freqtrade/data/metrics.py b/freqtrade/data/metrics.py index 557d0ddcc..a4b6898e2 100644 --- a/freqtrade/data/metrics.py +++ b/freqtrade/data/metrics.py @@ -143,6 +143,20 @@ def _calc_drawdown_series( max_drawdown_df["drawdown_relative"] = ( max_drawdown_df["high_value"] - max_drawdown_df["cumulative"] ) / max_drawdown_df["high_value"] + + # Add zero row at start to account for edge-cases with no winning / losing trades - so high/low + # will be 0.0 in such cases. + zero_row = pd.DataFrame( + { + "cumulative": [0.0], + "high_value": [0.0], + "drawdown": [0.0], + "drawdown_relative": [0.0], + "date": [profit_results.loc[0, date_col]], + } + ) + + max_drawdown_df = pd.concat([zero_row, max_drawdown_df], ignore_index=True) return max_drawdown_df @@ -215,6 +229,7 @@ def calculate_max_drawdown( max_drawdown_df = _calc_drawdown_series( profit_results, date_col=date_col, value_col=value_col, starting_balance=starting_balance ) + # max_drawdown_df has an extra zero row at the start # Calculate maximum drawdown idxmin = ( @@ -223,15 +238,15 @@ def calculate_max_drawdown( else max_drawdown_df["drawdown"].idxmin() ) high_idx = max_drawdown_df.iloc[: idxmin + 1]["high_value"].idxmax() - high_date = profit_results.loc[high_idx, date_col] - low_date = profit_results.loc[idxmin, date_col] - high_val = max_drawdown_df.loc[high_idx, "high_value"] - low_val = max_drawdown_df.loc[idxmin, "cumulative"] - max_drawdown_rel = max_drawdown_df.loc[idxmin, "drawdown_relative"] + high_date = profit_results.at[max(high_idx - 1, 0), date_col] + low_date = profit_results.at[max(idxmin - 1, 0), date_col] + high_val = max_drawdown_df.at[high_idx, "cumulative"] + low_val = max_drawdown_df.at[idxmin, "cumulative"] + max_drawdown_rel = max_drawdown_df.at[idxmin, "drawdown_relative"] # Calculate current drawdown current_high_idx = max_drawdown_df["high_value"].iloc[:-1].idxmax() - current_high_date = profit_results.loc[current_high_idx, date_col] + current_high_date = profit_results.at[max(current_high_idx - 1, 0), date_col] current_high_value = max_drawdown_df.iloc[-1]["high_value"] current_cumulative = max_drawdown_df.iloc[-1]["cumulative"] current_drawdown_abs = current_high_value - current_cumulative From ef86b4113dfbeecc01278dfb49380282eda4a00b Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 15 Nov 2025 13:11:10 +0100 Subject: [PATCH 006/243] feat: add trading-mode to list-timeframes some exchanges provide different timeframe configurations depending on the market type --- freqtrade/commands/arguments.py | 2 +- freqtrade/exchange/exchange.py | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/freqtrade/commands/arguments.py b/freqtrade/commands/arguments.py index e6805ed5a..ca3b2b422 100755 --- a/freqtrade/commands/arguments.py +++ b/freqtrade/commands/arguments.py @@ -104,7 +104,7 @@ ARGS_BACKTEST_SHOW = [ ARGS_LIST_EXCHANGES = ["print_one_column", "list_exchanges_all", "trading_mode", "dex_exchanges"] -ARGS_LIST_TIMEFRAMES = ["exchange", "print_one_column"] +ARGS_LIST_TIMEFRAMES = ["exchange", "print_one_column", "trading_mode"] ARGS_LIST_PAIRS = [ "exchange", diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 20d8e20c4..dcd1e4f18 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -430,7 +430,15 @@ class Exchange: @property def timeframes(self) -> list[str]: - return list((self._api.timeframes or {}).keys()) + market_type = ( + "spot" + if self.trading_mode != TradingMode.FUTURES + else self._ft_has["ccxt_futures_name"] + ) + timeframes = self._api.options.get("timeframes", {}).get(market_type) + if timeframes is None: + timeframes = self._api.timeframes + return list((timeframes or {}).keys()) @property def markets(self) -> dict[str, Any]: From 89274bfcdb55de4a0a8ebbd7458e5985c2290adb Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 15 Nov 2025 15:46:09 +0100 Subject: [PATCH 007/243] test: update tests for new timeframe approach --- tests/commands/test_commands.py | 2 ++ tests/exchange/test_exchange.py | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/tests/commands/test_commands.py b/tests/commands/test_commands.py index 036352acf..9d71ad448 100644 --- a/tests/commands/test_commands.py +++ b/tests/commands/test_commands.py @@ -198,6 +198,8 @@ def test_list_timeframes(mocker, capsys): "1h": "hour", "1d": "day", } + api_mock.options = {} + patch_exchange(mocker, api_mock=api_mock, exchange="bybit") args = [ "list-timeframes", diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index a55fa51bf..634034a37 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -742,10 +742,11 @@ def test_get_pair_base_currency(default_conf, mocker, pair, expected): def test_validate_timeframes(default_conf, mocker, timeframe): default_conf["timeframe"] = timeframe api_mock = MagicMock() - id_mock = PropertyMock(return_value="test_exchange") - type(api_mock).id = id_mock - timeframes = PropertyMock(return_value={"1m": "1m", "5m": "5m", "15m": "15m", "1h": "1h"}) - type(api_mock).timeframes = timeframes + id_mock = MagicMock(return_value="test_exchange") + api_mock.id = id_mock + api_mock.options = {} + timeframes = {"1m": "1m", "5m": "5m", "15m": "15m", "1h": "1h"} + api_mock.timeframes = timeframes mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) mocker.patch(f"{EXMS}.reload_markets") @@ -757,12 +758,11 @@ def test_validate_timeframes(default_conf, mocker, timeframe): def test_validate_timeframes_failed(default_conf, mocker): default_conf["timeframe"] = "3m" api_mock = MagicMock() - id_mock = PropertyMock(return_value="test_exchange") - type(api_mock).id = id_mock - timeframes = PropertyMock( - return_value={"15s": "15s", "1m": "1m", "5m": "5m", "15m": "15m", "1h": "1h"} - ) - type(api_mock).timeframes = timeframes + id_mock = MagicMock(return_value="test_exchange") + api_mock.id = id_mock + timeframes = {"15s": "15s", "1m": "1m", "5m": "5m", "15m": "15m", "1h": "1h"} + api_mock.timeframes = timeframes + api_mock.options = {} mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) mocker.patch(f"{EXMS}.reload_markets") From 500092793978666832cde3bb93e5173eb78c02c1 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 15 Nov 2025 15:49:45 +0100 Subject: [PATCH 008/243] test: add tests for new list-timeframes behavior --- tests/commands/test_commands.py | 46 +++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tests/commands/test_commands.py b/tests/commands/test_commands.py index 9d71ad448..bae3d7fd1 100644 --- a/tests/commands/test_commands.py +++ b/tests/commands/test_commands.py @@ -288,6 +288,52 @@ def test_list_timeframes(mocker, capsys): assert re.search(r"^1h$", captured.out, re.MULTILINE) assert re.search(r"^1d$", captured.out, re.MULTILINE) + api_mock.options = { + "timeframes": { + "spot": {"1m": "1m", "5m": "5m", "15m": "15m"}, + "swap": {"1m": "1m", "15m": "15m", "1h": "1h"}, + } + } + + args = [ + "list-timeframes", + "--exchange", + "binance", + ] + start_list_timeframes(get_args(args)) + captured = capsys.readouterr() + assert re.match( + "Timeframes available for the exchange `Binance`: 1m, 5m, 15m", + captured.out, + ) + + args = [ + "list-timeframes", + "--exchange", + "binance", + "--trading-mode", + "spot", + ] + start_list_timeframes(get_args(args)) + captured = capsys.readouterr() + assert re.match( + "Timeframes available for the exchange `Binance`: 1m, 5m, 15m", + captured.out, + ) + args = [ + "list-timeframes", + "--exchange", + "binance", + "--trading-mode", + "futures", + ] + start_list_timeframes(get_args(args)) + captured = capsys.readouterr() + assert re.match( + "Timeframes available for the exchange `Binance`: 1m, 15m, 1h", + captured.out, + ) + def test_list_markets(mocker, markets_static, capsys): api_mock = MagicMock() From af728f8224fe0ea04f85bed84fbfc7713d0f52a1 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 15 Nov 2025 15:50:58 +0100 Subject: [PATCH 009/243] chore: update command partial --- docs/commands/list-timeframes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/commands/list-timeframes.md b/docs/commands/list-timeframes.md index a2c3a4f67..8d3c0da48 100644 --- a/docs/commands/list-timeframes.md +++ b/docs/commands/list-timeframes.md @@ -2,11 +2,14 @@ usage: freqtrade list-timeframes [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH] [-d PATH] [--userdir PATH] [--exchange EXCHANGE] [-1] + [--trading-mode {spot,margin,futures}] options: -h, --help show this help message and exit --exchange EXCHANGE Exchange name. Only valid if no config is provided. -1, --one-column Print output in one column. + --trading-mode, --tradingmode {spot,margin,futures} + Select Trading mode Common arguments: -v, --verbose Verbose mode (-vv for more, -vvv to get all messages). From 5c0cf8f2280b5d1daadba20505628100ba024fd9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 16 Nov 2025 08:41:14 +0100 Subject: [PATCH 010/243] chore: prevent execution of command partials on python <3.13 --- build_helpers/create_command_partials.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build_helpers/create_command_partials.py b/build_helpers/create_command_partials.py index dc69117b7..0d161c64e 100644 --- a/build_helpers/create_command_partials.py +++ b/build_helpers/create_command_partials.py @@ -1,4 +1,5 @@ import subprocess # noqa: S404, RUF100 +import sys from pathlib import Path @@ -62,4 +63,9 @@ def extract_command_partials(): if __name__ == "__main__": + if sys.version_info < (3, 13): # pragma: no cover + sys.exit( + "argparse output changed in Python 3.13+. " + "To keep command partials up to date, please run this script with Python 3.13+." + ) extract_command_partials() From bc516db3f85e570a6ec7e641bb0f8267fe04a0c9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 16 Nov 2025 09:11:02 +0100 Subject: [PATCH 011/243] refactor: add generic "migrate" method --- freqtrade/freqtradebot.py | 4 ++-- freqtrade/util/migrations/__init__.py | 15 +++++++++++++-- freqtrade/util/migrations/binance_mig.py | 4 ++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index e1b6fa674..6485b5d11 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -63,7 +63,7 @@ from freqtrade.rpc.rpc_types import ( from freqtrade.strategy.interface import IStrategy from freqtrade.strategy.strategy_wrapper import strategy_safe_wrapper from freqtrade.util import FtPrecise, MeasureTime, PeriodicCache, dt_from_ts, dt_now -from freqtrade.util.migrations.binance_mig import migrate_binance_futures_names +from freqtrade.util.migrations import migrate_live_content from freqtrade.wallets import Wallets @@ -229,7 +229,7 @@ class FreqtradeBot(LoggingMixin): Called on startup and after reloading the bot - triggers notifications and performs startup tasks """ - migrate_binance_futures_names(self.config) + migrate_live_content(self.config, self.exchange) set_startup_time() self.rpc.startup_messages(self.config, self.pairlists, self.protections) diff --git a/freqtrade/util/migrations/__init__.py b/freqtrade/util/migrations/__init__.py index 8a9f10949..50f7dff01 100644 --- a/freqtrade/util/migrations/__init__.py +++ b/freqtrade/util/migrations/__init__.py @@ -1,12 +1,23 @@ from freqtrade.exchange import Exchange -from freqtrade.util.migrations.binance_mig import migrate_binance_futures_data +from freqtrade.util.migrations.binance_mig import ( + migrate_binance_futures_data, + migrate_binance_futures_names, +) from freqtrade.util.migrations.funding_rate_mig import migrate_funding_fee_timeframe -def migrate_data(config, exchange: Exchange | None = None): +def migrate_data(config, exchange: Exchange | None = None) -> None: """ Migrate persisted data from old formats to new formats """ migrate_binance_futures_data(config) migrate_funding_fee_timeframe(config, exchange) + + +def migrate_live_content(config, exchange: Exchange | None = None) -> None: + """ + Migrate database content from old formats to new formats + Used for dry/live mode. + """ + migrate_binance_futures_names(config) diff --git a/freqtrade/util/migrations/binance_mig.py b/freqtrade/util/migrations/binance_mig.py index 248d5810d..b85ee721d 100644 --- a/freqtrade/util/migrations/binance_mig.py +++ b/freqtrade/util/migrations/binance_mig.py @@ -14,6 +14,10 @@ logger = logging.getLogger(__name__) def migrate_binance_futures_names(config: Config): + """ + Migrate binance futures names in both database and data files. + This is needed because ccxt naming changed from "BTC/USDT" to "BTC/USDT:USDT" + """ if not ( config.get("trading_mode", TradingMode.SPOT) == TradingMode.FUTURES and config["exchange"]["name"] == "binance" From d2c380c83b79efd7ae96224c460d0a6e96ba031a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:01:12 +0000 Subject: [PATCH 012/243] chore(deps-dev): bump types-python-dateutil in the types group Bumps the types group with 1 update: [types-python-dateutil](https://github.com/typeshed-internal/stub_uploader). Updates `types-python-dateutil` from 2.9.0.20251008 to 2.9.0.20251108 - [Commits](https://github.com/typeshed-internal/stub_uploader/commits) --- updated-dependencies: - dependency-name: types-python-dateutil dependency-version: 2.9.0.20251108 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: types ... 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 c8eb4ccb8..4ef3d912a 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -29,4 +29,4 @@ types-cachetools==6.2.0.20251022 types-filelock==3.2.7 types-requests==2.32.4.20250913 types-tabulate==0.9.0.20241207 -types-python-dateutil==2.9.0.20251008 +types-python-dateutil==2.9.0.20251108 From 22707b8664ea570ecdb6b1b4f5d95e6ba41efa38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:01:46 +0000 Subject: [PATCH 013/243] chore(deps): bump mkdocs-material in the mkdocs group Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material). Updates `mkdocs-material` from 9.6.23 to 9.7.0 - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.23...9.7.0) --- updated-dependencies: - dependency-name: mkdocs-material dependency-version: 9.7.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: mkdocs ... 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 3c927da23..2bf1548f2 100644 --- a/docs/requirements-docs.txt +++ b/docs/requirements-docs.txt @@ -1,6 +1,6 @@ markdown==3.10 mkdocs==1.6.1 -mkdocs-material==9.6.23 +mkdocs-material==9.7.0 mdx_truly_sane_lists==1.3 pymdown-extensions==10.16.1 jinja2==3.1.6 From 3877fb46de7a5e2bb570b9926231bf812239fbb9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:01:56 +0000 Subject: [PATCH 014/243] chore(deps): bump fastapi from 0.121.0 to 0.121.1 Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.121.0 to 0.121.1. - [Release notes](https://github.com/fastapi/fastapi/releases) - [Commits](https://github.com/fastapi/fastapi/compare/0.121.0...0.121.1) --- updated-dependencies: - dependency-name: fastapi dependency-version: 0.121.1 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 271b675d3..ba99f52fb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -37,7 +37,7 @@ orjson==3.11.4 sdnotify==0.3.2 # API Server -fastapi==0.121.0 +fastapi==0.121.1 pydantic==2.12.4 uvicorn==0.38.0 pyjwt==2.10.1 From 4297207226464dff1d1f436f60b0351c28d73315 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:02:14 +0000 Subject: [PATCH 015/243] chore(deps): bump torch from 2.9.0 to 2.9.1 Bumps [torch](https://github.com/pytorch/pytorch) from 2.9.0 to 2.9.1. - [Release notes](https://github.com/pytorch/pytorch/releases) - [Changelog](https://github.com/pytorch/pytorch/blob/main/RELEASE.md) - [Commits](https://github.com/pytorch/pytorch/compare/v2.9.0...v2.9.1) --- updated-dependencies: - dependency-name: torch dependency-version: 2.9.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-freqai-rl.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-freqai-rl.txt b/requirements-freqai-rl.txt index 69918710f..af86a1d0a 100644 --- a/requirements-freqai-rl.txt +++ b/requirements-freqai-rl.txt @@ -2,7 +2,7 @@ -r requirements-freqai.txt # Required for freqai-rl -torch==2.9.0; sys_platform != 'darwin' or platform_machine != 'x86_64' +torch==2.9.1; sys_platform != 'darwin' or platform_machine != 'x86_64' gymnasium==1.2.2 # SB3 >=2.5.0 depends on torch 2.3.0 - which implies it dropped support x86 macos stable_baselines3==2.7.0; sys_platform != 'darwin' or platform_machine != 'x86_64' From 81c49136d1ac10ae849e272e9d786549ef55c8b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:02:18 +0000 Subject: [PATCH 016/243] chore(deps): bump certifi from 2025.10.5 to 2025.11.12 Bumps [certifi](https://github.com/certifi/python-certifi) from 2025.10.5 to 2025.11.12. - [Commits](https://github.com/certifi/python-certifi/compare/2025.10.05...2025.11.12) --- updated-dependencies: - dependency-name: certifi dependency-version: 2025.11.12 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 271b675d3..8eae29b2f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ humanize==4.14.0 cachetools==6.2.1 requests==2.32.5 urllib3==2.5.0 -certifi==2025.10.5 +certifi==2025.11.12 jsonschema==4.25.1 tabulate==0.9.0 pycoingecko==3.2.0 From d27ee227cb99dd676f86d920b2a5fec7219097a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:02:21 +0000 Subject: [PATCH 017/243] chore(deps-dev): bump pre-commit from 4.3.0 to 4.4.0 Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 4.3.0 to 4.4.0. - [Release notes](https://github.com/pre-commit/pre-commit/releases) - [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) - [Commits](https://github.com/pre-commit/pre-commit/compare/v4.3.0...v4.4.0) --- updated-dependencies: - dependency-name: pre-commit dependency-version: 4.4.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index c8eb4ccb8..2a04f96ba 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -8,7 +8,7 @@ ruff==0.14.3 mypy==1.18.2 -pre-commit==4.3.0 +pre-commit==4.4.0 pytest==8.4.2 pytest-asyncio==1.2.0 pytest-cov==7.0.0 From 028c60ce5abbd336119a7fe0d204b1d73b81605d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:02:36 +0000 Subject: [PATCH 018/243] chore(deps-dev): bump ruff from 0.14.3 to 0.14.4 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.3 to 0.14.4. - [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.3...0.14.4) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.14.4 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 c8eb4ccb8..71197c267 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.3 +ruff==0.14.4 mypy==1.18.2 pre-commit==4.3.0 pytest==8.4.2 From 64f680ed86aa73923cac2fdcd8e683b11dea850e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:02:44 +0000 Subject: [PATCH 019/243] chore(deps): bump pymdown-extensions from 10.16.1 to 10.17.1 Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.16.1 to 10.17.1. - [Release notes](https://github.com/facelessuser/pymdown-extensions/releases) - [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.16.1...10.17.1) --- updated-dependencies: - dependency-name: pymdown-extensions dependency-version: 10.17.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 3c927da23..9327f701f 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.6.23 mdx_truly_sane_lists==1.3 -pymdown-extensions==10.16.1 +pymdown-extensions==10.17.1 jinja2==3.1.6 mike==2.1.3 From 1056b2562e5866b27f0586b4d4b884073e1de1d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:02:48 +0000 Subject: [PATCH 020/243] chore(deps): bump optuna from 4.5.0 to 4.6.0 Bumps [optuna](https://github.com/optuna/optuna) from 4.5.0 to 4.6.0. - [Release notes](https://github.com/optuna/optuna/releases) - [Commits](https://github.com/optuna/optuna/compare/v4.5.0...v4.6.0) --- updated-dependencies: - dependency-name: optuna dependency-version: 4.6.0 dependency-type: direct:production update-type: version-update:semver-minor ... 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 6b777b47b..9c36b2385 100644 --- a/requirements-hyperopt.txt +++ b/requirements-hyperopt.txt @@ -5,5 +5,5 @@ scipy==1.16.3 scikit-learn==1.7.2 filelock==3.20.0 -optuna==4.5.0 +optuna==4.6.0 cmaes==0.12.0 From 1747114b57b1e0421209760d552bbe9559c35684 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:02:58 +0000 Subject: [PATCH 021/243] chore(deps): bump ccxt from 4.5.17 to 4.5.19 Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.5.17 to 4.5.19. - [Release notes](https://github.com/ccxt/ccxt/releases) - [Changelog](https://github.com/ccxt/ccxt/blob/master/exchanges.cfg) - [Commits](https://github.com/ccxt/ccxt/compare/v4.5.17...v4.5.19) --- updated-dependencies: - dependency-name: ccxt dependency-version: 4.5.19 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 271b675d3..1c2ed61be 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.17 +ccxt==4.5.19 cryptography==46.0.3 aiohttp==3.13.2 SQLAlchemy==2.0.44 From 57f216e9c784d0f8eb1c82ba0b0d4f01e2a8b0c7 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 17 Nov 2025 06:32:18 +0100 Subject: [PATCH 022/243] chore: bump dateutil 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 ade5cc702..358453cd8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -30,7 +30,7 @@ repos: - types-filelock==3.2.7 - types-requests==2.32.4.20250913 - types-tabulate==0.9.0.20241207 - - types-python-dateutil==2.9.0.20251008 + - types-python-dateutil==2.9.0.20251108 - scipy-stubs==1.16.3.0 - SQLAlchemy==2.0.44 # stages: [push] From 89a8adcbcf28cb6424dee575dfc71a207fab21b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 05:39:17 +0000 Subject: [PATCH 023/243] chore(deps-dev): bump the pytest group with 2 updates Bumps the pytest group with 2 updates: [pytest](https://github.com/pytest-dev/pytest) and [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio). Updates `pytest` from 8.4.2 to 9.0.1 - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.4.2...9.0.1) Updates `pytest-asyncio` from 1.2.0 to 1.3.0 - [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases) - [Commits](https://github.com/pytest-dev/pytest-asyncio/compare/v1.2.0...v1.3.0) --- updated-dependencies: - dependency-name: pytest dependency-version: 9.0.1 dependency-type: direct:development update-type: version-update:semver-major dependency-group: pytest - dependency-name: pytest-asyncio dependency-version: 1.3.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: pytest ... Signed-off-by: dependabot[bot] --- requirements-dev.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 0a797c311..259790c2e 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -9,8 +9,8 @@ ruff==0.14.4 mypy==1.18.2 pre-commit==4.4.0 -pytest==8.4.2 -pytest-asyncio==1.2.0 +pytest==9.0.1 +pytest-asyncio==1.3.0 pytest-cov==7.0.0 pytest-mock==3.15.1 pytest-random-order==1.2.0 From e67c2eefff3d6b6a06895aebea64e1da62df51ea Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 17 Nov 2025 07:20:36 +0100 Subject: [PATCH 024/243] test: live test "get_fee" for futures exchange --- tests/exchange_online/test_ccxt_compat.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/tests/exchange_online/test_ccxt_compat.py b/tests/exchange_online/test_ccxt_compat.py index c71e4809b..f619c2617 100644 --- a/tests/exchange_online/test_ccxt_compat.py +++ b/tests/exchange_online/test_ccxt_compat.py @@ -11,7 +11,7 @@ import pytest from freqtrade.enums import CandleType from freqtrade.exchange import timeframe_to_minutes, timeframe_to_prev_date -from freqtrade.exchange.exchange import timeframe_to_msecs +from freqtrade.exchange.exchange import Exchange, timeframe_to_msecs from freqtrade.util import dt_floor_day, dt_now, dt_ts from tests.exchange_online.conftest import EXCHANGE_FIXTURE_TYPE, EXCHANGES @@ -422,15 +422,26 @@ class TestCCXTExchange: trades_orig = nvspy.call_args_list[2][0][0] assert len(trades_orig[-1].get("info")) > len(trades_orig[-2].get("info")) - def test_ccxt_get_fee(self, exchange: EXCHANGE_FIXTURE_TYPE): - exch, exchangename = exchange - pair = EXCHANGES[exchangename]["pair"] + def _ccxt_get_fee(self, exch: Exchange, pair: str): threshold = 0.01 assert 0 < exch.get_fee(pair, "limit", "buy") < threshold assert 0 < exch.get_fee(pair, "limit", "sell") < threshold assert 0 < exch.get_fee(pair, "market", "buy") < threshold assert 0 < exch.get_fee(pair, "market", "sell") < threshold + def test_ccxt_get_fee_spot(self, exchange: EXCHANGE_FIXTURE_TYPE): + exch, exchangename = exchange + pair = EXCHANGES[exchangename]["pair"] + self._ccxt_get_fee(exch, pair) + + def test_ccxt_get_fee_futures(self, exchange_futures: EXCHANGE_FIXTURE_TYPE): + exch, exchangename = exchange_futures + pair = EXCHANGES[exchangename].get("futures_pair", EXCHANGES[exchangename]["pair"]) + if exchangename == "gate": + # gate futures fees are sometimes zero + pytest.skip("Gate futures fees are currently not working.") + self._ccxt_get_fee(exch, pair) + def test_ccxt_get_max_leverage_spot(self, exchange: EXCHANGE_FIXTURE_TYPE): spot, spot_name = exchange if spot: From f98efdbe0787d9ea543d0589508f9511be2ea778 Mon Sep 17 00:00:00 2001 From: mrpabloyeah Date: Mon, 17 Nov 2025 13:09:48 +0100 Subject: [PATCH 025/243] Fix backtesting exception when no data is available for a pair --- freqtrade/optimize/backtesting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 9dc878fae..8a260cd76 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -1425,7 +1425,7 @@ class Backtesting: # Row is treated as "current incomplete candle". # entry / exit signals are shifted by 1 to compensate for this. row = data[pair][row_index] - except IndexError: + except (IndexError, KeyError): # missing Data for one pair at the end. # Warnings for this are shown during data loading return None From 1c96dfd58fae475512df0a6063210af057ef5962 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 17 Nov 2025 18:24:10 +0100 Subject: [PATCH 026/243] chore: add TODO comment for pytest migration --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 1adb31364..7ada3385c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -183,6 +183,7 @@ skip_glob = ["**/.env*", "**/env/*", "**/.venv/*", "**/docs/*", "**/user_data/*" known_first_party = ["freqtrade_client"] [tool.pytest.ini_options] +# TODO: should be migrated to [tool.pytest] as support for this was added in 9.0 log_format = "%(asctime)s %(levelname)s %(message)s" log_date_format = "%Y-%m-%d %H:%M:%S" From 1321991fcacd0c27f8028789119106d1af224d50 Mon Sep 17 00:00:00 2001 From: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com> Date: Tue, 18 Nov 2025 03:22:24 +0000 Subject: [PATCH 027/243] chore: update pre-commit hooks --- .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 358453cd8..e7b802233 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.4' + rev: 'v0.14.5' hooks: - id: ruff - id: ruff-format From 58452ebc7c18d3955d28c956a3c5afac4ff27382 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 18 Nov 2025 19:15:47 +0100 Subject: [PATCH 028/243] chore: bump ccxt to 4.5.20 closes #12516 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 782b38d5c..a7a0f941c 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.19 +ccxt==4.5.20 cryptography==46.0.3 aiohttp==3.13.2 SQLAlchemy==2.0.44 From 6e1367fa9427630816d7f7c77be0900cee5f7e5a Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 18 Nov 2025 19:16:32 +0100 Subject: [PATCH 029/243] test: enable gate futures test --- tests/exchange_online/test_ccxt_compat.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/exchange_online/test_ccxt_compat.py b/tests/exchange_online/test_ccxt_compat.py index f619c2617..073ce0a38 100644 --- a/tests/exchange_online/test_ccxt_compat.py +++ b/tests/exchange_online/test_ccxt_compat.py @@ -437,9 +437,6 @@ class TestCCXTExchange: def test_ccxt_get_fee_futures(self, exchange_futures: EXCHANGE_FIXTURE_TYPE): exch, exchangename = exchange_futures pair = EXCHANGES[exchangename].get("futures_pair", EXCHANGES[exchangename]["pair"]) - if exchangename == "gate": - # gate futures fees are sometimes zero - pytest.skip("Gate futures fees are currently not working.") self._ccxt_get_fee(exch, pair) def test_ccxt_get_max_leverage_spot(self, exchange: EXCHANGE_FIXTURE_TYPE): From d1e71544af66b3b2c4cf83ba26f8b6575cb83ac9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 18 Nov 2025 19:41:32 +0100 Subject: [PATCH 030/243] test: imrpove testcase --- tests/conftest_trades_usdt.py | 2 ++ tests/freqtradebot/test_freqtradebot.py | 1 + 2 files changed, 3 insertions(+) diff --git a/tests/conftest_trades_usdt.py b/tests/conftest_trades_usdt.py index 462f0dfc6..292e46080 100644 --- a/tests/conftest_trades_usdt.py +++ b/tests/conftest_trades_usdt.py @@ -303,6 +303,7 @@ def mock_order_usdt_6(is_short: bool): "side": entry_side(is_short), "type": "limit", "price": 10.0, + "cost": 20.0, "amount": 2.0, "filled": 2.0, "remaining": 0.0, @@ -317,6 +318,7 @@ def mock_order_usdt_6_exit(is_short: bool): "side": exit_side(is_short), "type": "limit", "price": 12.0, + "cost": 24.0, "amount": 2.0, "filled": 0.0, "remaining": 2.0, diff --git a/tests/freqtradebot/test_freqtradebot.py b/tests/freqtradebot/test_freqtradebot.py index 1360f2d77..e36d70c12 100644 --- a/tests/freqtradebot/test_freqtradebot.py +++ b/tests/freqtradebot/test_freqtradebot.py @@ -4525,6 +4525,7 @@ def test_check_for_open_trades(mocker, default_conf_usdt, fee, is_short): def test_startup_update_open_orders(mocker, default_conf_usdt, fee, caplog, is_short): freqtrade = get_patched_freqtradebot(mocker, default_conf_usdt) create_mock_trades(fee, is_short=is_short) + mocker.patch(f"{EXMS}._dry_is_price_crossed", return_value=False) freqtrade.startup_update_open_orders() assert not log_has_re(r"Error updating Order .*", caplog) From b55e7bcf4e8e22158ecd3bdc33b7cde50c2a60be Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 18 Nov 2025 19:45:43 +0100 Subject: [PATCH 031/243] chore: Improve fetch_dry_run_order --- freqtrade/exchange/exchange.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index dcd1e4f18..e86a37b73 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1303,7 +1303,7 @@ class Exchange: return order - def fetch_dry_run_order(self, order_id) -> CcxtOrder: + def fetch_dry_run_order(self, order_id: str) -> CcxtOrder: """ Return dry-run order Only call if running in dry-run mode. @@ -1315,11 +1315,12 @@ class Exchange: except KeyError as e: from freqtrade.persistence import Order - order = Order.order_by_id(order_id) - if order: - ccxt_order = order.to_ccxt_object(self._ft_has["stop_price_prop"]) - self._dry_run_open_orders[order_id] = ccxt_order - return ccxt_order + order_obj = Order.order_by_id(order_id) + if order_obj: + order = order_obj.to_ccxt_object(self._ft_has["stop_price_prop"]) + order = self.check_dry_limit_order_filled(order) + self._dry_run_open_orders[order_id] = order + return order # Gracefully handle errors with dry-run orders. raise InvalidOrderException( f"Tried to get an invalid dry-run-order (id: {order_id}). Message: {e}" From b5be462dd169d2adb9767971ebf47e8dea73d3f4 Mon Sep 17 00:00:00 2001 From: Stefano Date: Wed, 19 Nov 2025 12:25:35 +0900 Subject: [PATCH 032/243] add delisting check for bybit futures --- freqtrade/exchange/bybit.py | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/freqtrade/exchange/bybit.py b/freqtrade/exchange/bybit.py index 7db300acc..a5cba4997 100644 --- a/freqtrade/exchange/bybit.py +++ b/freqtrade/exchange/bybit.py @@ -1,15 +1,17 @@ import logging +import time from datetime import datetime, timedelta import ccxt from freqtrade.constants import BuySell -from freqtrade.enums import MarginMode, PriceType, TradingMode +from freqtrade.enums import TRADE_MODES, MarginMode, PriceType, TradingMode from freqtrade.exceptions import DDosProtection, ExchangeError, OperationalException, TemporaryError from freqtrade.exchange import Exchange from freqtrade.exchange.common import retrier from freqtrade.exchange.exchange_types import CcxtOrder, FtHas from freqtrade.misc import deep_merge_dicts +from freqtrade.util.datetime_helpers import dt_from_ts logger = logging.getLogger(__name__) @@ -54,6 +56,7 @@ class Bybit(Exchange): "exchange_has_overrides": { "fetchOrder": True, }, + "has_delisting": True, } _supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [ @@ -294,3 +297,35 @@ class Bybit(Exchange): self.cache_leverage_tiers(tiers, self._config["stake_currency"]) return tiers + + def check_delisting_time(self, pair: str) -> datetime | None: + """ + Check if the pair gonna be delisted. + By default, it returns None. + :param pair: Market symbol + :return: Datetime if the pair gonna be delisted, None otherwise + """ + if self._config["runmode"] not in TRADE_MODES: + return None + + if self.trading_mode == TradingMode.FUTURES: + return self._check_delisting_futures(pair) + return None + + def _check_delisting_futures(self, pair: str) -> datetime | None: + delivery_time = self.markets.get(pair, {}).get("info", {}).get("deliveryTime", 0) + if delivery_time: + if isinstance(delivery_time, str) and (delivery_time != ""): + delivery_time = int(delivery_time) + + if not isinstance(delivery_time, int) or delivery_time <= 0: + return None + + max_delivery = int(time.time() * 1000) + ( + 14 * 24 * 60 * 60 * 1000 + ) # Assume exchange don't announce delisting more than 14 days in advance + + if delivery_time < max_delivery: + return dt_from_ts(delivery_time) + + return None From a731b73457973d3ece525459654cd1aa9bc39d58 Mon Sep 17 00:00:00 2001 From: Stefano Date: Wed, 19 Nov 2025 12:36:34 +0900 Subject: [PATCH 033/243] add delisting check for bitget futures --- freqtrade/exchange/bitget.py | 43 +++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/freqtrade/exchange/bitget.py b/freqtrade/exchange/bitget.py index a1d6db255..bb1fc5fb4 100644 --- a/freqtrade/exchange/bitget.py +++ b/freqtrade/exchange/bitget.py @@ -1,10 +1,11 @@ import logging -from datetime import timedelta +import time +from datetime import datetime, timedelta import ccxt from freqtrade.constants import BuySell -from freqtrade.enums import CandleType, MarginMode, TradingMode +from freqtrade.enums import TRADE_MODES, CandleType, MarginMode, TradingMode from freqtrade.exceptions import ( DDosProtection, OperationalException, @@ -14,7 +15,7 @@ from freqtrade.exceptions import ( from freqtrade.exchange import Exchange from freqtrade.exchange.common import API_RETRY_COUNT, retrier from freqtrade.exchange.exchange_types import CcxtOrder, FtHas -from freqtrade.util.datetime_helpers import dt_now, dt_ts +from freqtrade.util.datetime_helpers import dt_from_ts, dt_now, dt_ts logger = logging.getLogger(__name__) @@ -37,6 +38,7 @@ class Bitget(Exchange): _ft_has_futures: FtHas = { "mark_ohlcv_timeframe": "4h", "funding_fee_candle_limit": 100, + "has_delisting": True, } _supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [ @@ -236,3 +238,38 @@ class Bitget(Exchange): raise OperationalException( "Freqtrade currently only supports isolated futures for bitget" ) + + def check_delisting_time(self, pair: str) -> datetime | None: + """ + Check if the pair gonna be delisted. + By default, it returns None. + :param pair: Market symbol + :return: Datetime if the pair gonna be delisted, None otherwise + """ + if self._config["runmode"] not in TRADE_MODES: + return None + + if self.trading_mode == TradingMode.FUTURES: + return self._check_delisting_futures(pair) + return None + + def _check_delisting_futures(self, pair: str) -> datetime | None: + delivery_time = self.markets.get(pair, {}).get("info", {}).get("limitOpenTime", None) + if delivery_time: + if delivery_time == "-1": + return None + + if isinstance(delivery_time, str) and (delivery_time != ""): + delivery_time = int(delivery_time) + + if not isinstance(delivery_time, int) or delivery_time <= 0: + return None + + max_delivery = int(time.time() * 1000) + ( + 14 * 24 * 60 * 60 * 1000 + ) # Assume exchange don't announce delisting more than 14 days in advance + + if delivery_time < max_delivery: + return dt_from_ts(delivery_time) + + return None From f437d4a55b652b4af5501c763caa888892eb4733 Mon Sep 17 00:00:00 2001 From: Stefano Date: Wed, 19 Nov 2025 14:53:57 +0900 Subject: [PATCH 034/243] use dt_ts --- freqtrade/exchange/bitget.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/freqtrade/exchange/bitget.py b/freqtrade/exchange/bitget.py index bb1fc5fb4..c7fd39f66 100644 --- a/freqtrade/exchange/bitget.py +++ b/freqtrade/exchange/bitget.py @@ -1,5 +1,4 @@ import logging -import time from datetime import datetime, timedelta import ccxt @@ -265,7 +264,7 @@ class Bitget(Exchange): if not isinstance(delivery_time, int) or delivery_time <= 0: return None - max_delivery = int(time.time() * 1000) + ( + max_delivery = dt_ts() + ( 14 * 24 * 60 * 60 * 1000 ) # Assume exchange don't announce delisting more than 14 days in advance From e17936c407d77e480f24ec1d85bacb9a3b5fa849 Mon Sep 17 00:00:00 2001 From: Stefano Date: Wed, 19 Nov 2025 14:55:31 +0900 Subject: [PATCH 035/243] use dt_ts --- freqtrade/exchange/bybit.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/freqtrade/exchange/bybit.py b/freqtrade/exchange/bybit.py index a5cba4997..76daaed47 100644 --- a/freqtrade/exchange/bybit.py +++ b/freqtrade/exchange/bybit.py @@ -1,5 +1,4 @@ import logging -import time from datetime import datetime, timedelta import ccxt @@ -11,7 +10,7 @@ from freqtrade.exchange import Exchange from freqtrade.exchange.common import retrier from freqtrade.exchange.exchange_types import CcxtOrder, FtHas from freqtrade.misc import deep_merge_dicts -from freqtrade.util.datetime_helpers import dt_from_ts +from freqtrade.util.datetime_helpers import dt_from_ts, dt_ts logger = logging.getLogger(__name__) @@ -321,7 +320,7 @@ class Bybit(Exchange): if not isinstance(delivery_time, int) or delivery_time <= 0: return None - max_delivery = int(time.time() * 1000) + ( + max_delivery = dt_ts() + ( 14 * 24 * 60 * 60 * 1000 ) # Assume exchange don't announce delisting more than 14 days in advance From 7e178cb0320d429a3564fcbbc3db6752245c4520 Mon Sep 17 00:00:00 2001 From: Stefano Date: Thu, 20 Nov 2025 09:26:16 +0900 Subject: [PATCH 036/243] add test --- tests/exchange/test_bybit.py | 47 +++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/tests/exchange/test_bybit.py b/tests/exchange/test_bybit.py index 511d8bab4..d5d169b3d 100644 --- a/tests/exchange/test_bybit.py +++ b/tests/exchange/test_bybit.py @@ -1,10 +1,11 @@ +from copy import deepcopy from datetime import UTC, datetime, timedelta -from unittest.mock import MagicMock +from unittest.mock import MagicMock, PropertyMock import pytest -from freqtrade.enums.marginmode import MarginMode -from freqtrade.enums.tradingmode import TradingMode +from freqtrade.enums import MarginMode, RunMode, TradingMode +from freqtrade.util.datetime_helpers import dt_utc from tests.conftest import EXMS, get_mock_coro, get_patched_exchange, log_has from tests.exchange.test_exchange import ccxt_exceptionhandlers @@ -214,3 +215,43 @@ def test_bybit__order_needs_price( exchange.unified_account = uta assert exchange._order_needs_price(side, order_type) == expected + + +def test_check_delisting_time_bybit(default_conf_usdt, mocker): + exchange = get_patched_exchange(mocker, default_conf_usdt, exchange="bybit") + exchange._config["runmode"] = RunMode.BACKTEST + delist_fut_mock = MagicMock(return_value=None) + mocker.patch.object(exchange, "_check_delisting_futures", delist_fut_mock) + + # Invalid run mode + resp = exchange.check_delisting_time("BTC/USDT:USDT") + assert resp is None + assert delist_fut_mock.call_count == 0 + + # Delist spot called + exchange._config["runmode"] = RunMode.DRY_RUN + resp1 = exchange.check_delisting_time("BTC/USDT") + assert resp1 is None + assert delist_fut_mock.call_count == 0 + + # Delist futures called + exchange.trading_mode = TradingMode.FUTURES + resp1 = exchange.check_delisting_time("BTC/USDT:USDT") + assert resp1 is None + assert delist_fut_mock.call_count == 1 + + +def test__check_delisting_futures_bybit(default_conf_usdt, mocker, markets): + markets["BTC/USDT:USDT"] = deepcopy(markets["SOL/BUSD:BUSD"]) + markets["BTC/USDT:USDT"]["info"]["deliveryTime"] = "0" + markets["SOL/BUSD:BUSD"]["info"]["deliveryTime"] = "0" + markets["ADA/USDT:USDT"]["info"]["deliveryTime"] = "1760745600000" # 2025-10-18 + exchange = get_patched_exchange(mocker, default_conf_usdt, exchange="bybit") + mocker.patch(f"{EXMS}.markets", PropertyMock(return_value=markets)) + + resp_sol = exchange._check_delisting_futures("SOL/BUSD:BUSD") + # SOL has no delisting date + assert resp_sol is None + # Actually has a delisting date + resp_ada = exchange._check_delisting_futures("ADA/USDT:USDT") + assert resp_ada == dt_utc(2025, 10, 18) From 4017b010f499ecab5757d38be77201902c9507fc Mon Sep 17 00:00:00 2001 From: Stefano Date: Thu, 20 Nov 2025 09:36:17 +0900 Subject: [PATCH 037/243] add test --- tests/exchange/test_bitget.py | 45 +++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/tests/exchange/test_bitget.py b/tests/exchange/test_bitget.py index ca32ba536..b4dafb0ae 100644 --- a/tests/exchange/test_bitget.py +++ b/tests/exchange/test_bitget.py @@ -1,12 +1,13 @@ +from copy import deepcopy from datetime import timedelta from unittest.mock import MagicMock, PropertyMock import pytest -from freqtrade.enums import CandleType, MarginMode, TradingMode +from freqtrade.enums import CandleType, MarginMode, RunMode, TradingMode from freqtrade.exceptions import OperationalException, RetryableOrderError from freqtrade.exchange.common import API_RETRY_COUNT -from freqtrade.util import dt_now, dt_ts +from freqtrade.util import dt_now, dt_ts, dt_utc from tests.conftest import EXMS, get_patched_exchange from tests.exchange.test_exchange import ccxt_exceptionhandlers @@ -193,3 +194,43 @@ def test__lev_prep_bitget(default_conf, mocker): assert api_mock.set_margin_mode.call_count == 0 assert api_mock.set_leverage.call_count == 1 api_mock.set_leverage.assert_called_with(symbol="BTC/USDC:USDC", leverage=19.99) + + +def test_check_delisting_time_bitget(default_conf_usdt, mocker): + exchange = get_patched_exchange(mocker, default_conf_usdt, exchange="bitget") + exchange._config["runmode"] = RunMode.BACKTEST + delist_fut_mock = MagicMock(return_value=None) + mocker.patch.object(exchange, "_check_delisting_futures", delist_fut_mock) + + # Invalid run mode + resp = exchange.check_delisting_time("BTC/USDT") + assert resp is None + assert delist_fut_mock.call_count == 0 + + # Delist spot called + exchange._config["runmode"] = RunMode.DRY_RUN + resp1 = exchange.check_delisting_time("BTC/USDT") + assert resp1 is None + assert delist_fut_mock.call_count == 0 + + # Delist futures called + exchange.trading_mode = TradingMode.FUTURES + resp1 = exchange.check_delisting_time("BTC/USDT:USDT") + assert resp1 is None + assert delist_fut_mock.call_count == 1 + + +def test__check_delisting_futures_bitget(default_conf_usdt, mocker, markets): + markets["BTC/USDT:USDT"] = deepcopy(markets["SOL/BUSD:BUSD"]) + markets["BTC/USDT:USDT"]["info"]["limitOpenTime"] = "-1" + markets["SOL/BUSD:BUSD"]["info"]["limitOpenTime"] = "-1" + markets["ADA/USDT:USDT"]["info"]["limitOpenTime"] = "1760745600000" # 2025-10-18 + exchange = get_patched_exchange(mocker, default_conf_usdt, exchange="bitget") + mocker.patch(f"{EXMS}.markets", PropertyMock(return_value=markets)) + + resp_sol = exchange._check_delisting_futures("SOL/BUSD:BUSD") + # No delisting date + assert resp_sol is None + # Has a delisting date + resp_ada = exchange._check_delisting_futures("ADA/USDT:USDT") + assert resp_ada == dt_utc(2025, 10, 18) From b8d558a4558e166787ede52994bc6bd4268cf601 Mon Sep 17 00:00:00 2001 From: Stefano Date: Thu, 20 Nov 2025 09:41:57 +0900 Subject: [PATCH 038/243] remove unnecessary check because it will be catch anyway --- freqtrade/exchange/bitget.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/freqtrade/exchange/bitget.py b/freqtrade/exchange/bitget.py index c7fd39f66..d4087550e 100644 --- a/freqtrade/exchange/bitget.py +++ b/freqtrade/exchange/bitget.py @@ -255,9 +255,6 @@ class Bitget(Exchange): def _check_delisting_futures(self, pair: str) -> datetime | None: delivery_time = self.markets.get(pair, {}).get("info", {}).get("limitOpenTime", None) if delivery_time: - if delivery_time == "-1": - return None - if isinstance(delivery_time, str) and (delivery_time != ""): delivery_time = int(delivery_time) From 644907465860803077e00af9092e79b8f42515da Mon Sep 17 00:00:00 2001 From: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com> Date: Thu, 20 Nov 2025 03:20:59 +0000 Subject: [PATCH 039/243] chore: update pre-commit hooks --- .../exchange/binance_leverage_tiers.json | 5452 +++++++++-------- 1 file changed, 2950 insertions(+), 2502 deletions(-) diff --git a/freqtrade/exchange/binance_leverage_tiers.json b/freqtrade/exchange/binance_leverage_tiers.json index efbf873bf..5daeaa071 100644 --- a/freqtrade/exchange/binance_leverage_tiers.json +++ b/freqtrade/exchange/binance_leverage_tiers.json @@ -417,13 +417,13 @@ "symbol": "1000000MOG/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -433,7 +433,7 @@ "tier": 9.0, "symbol": "1000000MOG/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -441,9 +441,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -460,7 +460,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -899,13 +899,13 @@ "symbol": "1000CAT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -915,7 +915,7 @@ "tier": 8.0, "symbol": "1000CAT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -923,9 +923,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -942,7 +942,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -1071,13 +1071,13 @@ "symbol": "1000CHEEMS/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -1087,7 +1087,7 @@ "tier": 9.0, "symbol": "1000CHEEMS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -1095,9 +1095,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -1114,7 +1114,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -1432,13 +1432,13 @@ "symbol": "1000LUNC/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -1448,7 +1448,7 @@ "tier": 9.0, "symbol": "1000LUNC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -1456,9 +1456,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -1475,7 +1475,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -2035,13 +2035,13 @@ "symbol": "1000SATS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -2051,7 +2051,7 @@ "tier": 8.0, "symbol": "1000SATS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -2059,9 +2059,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -2078,7 +2078,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -2776,13 +2776,13 @@ "symbol": "1000XEC/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -2792,7 +2792,7 @@ "tier": 9.0, "symbol": "1000XEC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -2800,9 +2800,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -2819,7 +2819,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -2948,13 +2948,13 @@ "symbol": "1INCH/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -2964,7 +2964,7 @@ "tier": 9.0, "symbol": "1INCH/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -2972,9 +2972,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -2991,7 +2991,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -3120,13 +3120,13 @@ "symbol": "1MBABYDOGE/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -3136,7 +3136,7 @@ "tier": 9.0, "symbol": "1MBABYDOGE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -3144,9 +3144,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -3163,7 +3163,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -3275,13 +3275,13 @@ "symbol": "2Z/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -3291,7 +3291,7 @@ "tier": 8.0, "symbol": "2Z/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -3299,9 +3299,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -3318,7 +3318,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -3430,13 +3430,13 @@ "symbol": "4/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -3446,7 +3446,7 @@ "tier": 8.0, "symbol": "4/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -3454,9 +3454,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -3473,7 +3473,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -3568,13 +3568,13 @@ "symbol": "42/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -3584,7 +3584,7 @@ "tier": 7.0, "symbol": "42/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -3592,9 +3592,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -3611,7 +3611,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -3895,13 +3895,13 @@ "symbol": "A2Z/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -3911,7 +3911,7 @@ "tier": 7.0, "symbol": "A2Z/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -3919,9 +3919,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -3938,7 +3938,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -4343,13 +4343,13 @@ "symbol": "ACE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -4359,7 +4359,7 @@ "tier": 7.0, "symbol": "ACE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -4367,9 +4367,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -4386,7 +4386,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -4515,13 +4515,13 @@ "symbol": "ACH/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -4531,7 +4531,7 @@ "tier": 9.0, "symbol": "ACH/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -4539,9 +4539,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -4558,7 +4558,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -4569,14 +4569,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -4594,7 +4594,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -4611,7 +4611,7 @@ "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { @@ -4628,7 +4628,7 @@ "notionalCap": "50000", "notionalFloor": "20000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "1275.0" } }, { @@ -4636,67 +4636,67 @@ "symbol": "ACT/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": "2525.0" } }, { "tier": 6.0, "symbol": "ACT/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 4500000.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", - "notionalFloor": "250000", + "notionalCap": "250000", + "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "6695.0" } }, { "tier": 7.0, "symbol": "ACT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, - "maxNotional": 7500000.0, + "minNotional": 250000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "7", "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalCap": "2500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "ACT/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": "2262825.0" + "cum": "652520.0" } } ], @@ -4791,13 +4791,13 @@ "symbol": "ACX/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -4807,7 +4807,7 @@ "tier": 7.0, "symbol": "ACX/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -4815,9 +4815,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -4834,7 +4834,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -5256,13 +5256,13 @@ "symbol": "AERGO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -5272,7 +5272,7 @@ "tier": 7.0, "symbol": "AERGO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -5280,9 +5280,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -5299,7 +5299,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -5600,13 +5600,13 @@ "symbol": "AEVO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -5616,7 +5616,7 @@ "tier": 8.0, "symbol": "AEVO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -5624,9 +5624,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -5643,7 +5643,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -5876,13 +5876,13 @@ "symbol": "AGLD/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -5892,7 +5892,7 @@ "tier": 8.0, "symbol": "AGLD/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -5900,9 +5900,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -5919,7 +5919,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -6014,13 +6014,13 @@ "symbol": "AGT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -6030,7 +6030,7 @@ "tier": 7.0, "symbol": "AGT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -6038,9 +6038,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -6057,7 +6057,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -6152,13 +6152,13 @@ "symbol": "AI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -6168,7 +6168,7 @@ "tier": 7.0, "symbol": "AI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -6176,9 +6176,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -6195,7 +6195,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -6687,13 +6687,13 @@ "symbol": "AIO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -6703,7 +6703,7 @@ "tier": 7.0, "symbol": "AIO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -6711,9 +6711,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -6730,7 +6730,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -6825,13 +6825,13 @@ "symbol": "AIOT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "13225.0" @@ -6841,7 +6841,7 @@ "tier": 7.0, "symbol": "AIOT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -6849,9 +6849,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "388075.0" + "cum": "54875.0" } }, { @@ -6868,7 +6868,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2263075.0" + "cum": "1929875.0" } } ], @@ -6997,13 +6997,13 @@ "symbol": "AIXBT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -7013,7 +7013,7 @@ "tier": 9.0, "symbol": "AIXBT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -7021,9 +7021,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -7040,7 +7040,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -7135,13 +7135,13 @@ "symbol": "AKE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -7151,7 +7151,7 @@ "tier": 7.0, "symbol": "AKE/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -7159,9 +7159,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -7178,7 +7178,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -7290,13 +7290,13 @@ "symbol": "AKT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -7306,7 +7306,7 @@ "tier": 8.0, "symbol": "AKT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -7314,9 +7314,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -7333,7 +7333,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -7755,13 +7755,13 @@ "symbol": "ALICE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -7771,7 +7771,7 @@ "tier": 7.0, "symbol": "ALICE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -7779,9 +7779,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -7798,7 +7798,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -8462,13 +8462,13 @@ "symbol": "ALPINE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -8478,7 +8478,7 @@ "tier": 7.0, "symbol": "ALPINE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -8486,9 +8486,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -8505,7 +8505,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -8617,13 +8617,13 @@ "symbol": "ALT/USDT:USDT", "currency": "USDT", "minNotional": 300000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "300000", "maintMarginRatio": "0.1667", "cum": "20285.0" @@ -8633,7 +8633,7 @@ "tier": 8.0, "symbol": "ALT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -8641,9 +8641,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "395135.0" + "cum": "61935.0" } }, { @@ -8660,7 +8660,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2270135.0" + "cum": "1936935.0" } } ], @@ -8876,13 +8876,13 @@ "symbol": "ANIME/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -8892,7 +8892,7 @@ "tier": 8.0, "symbol": "ANIME/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -8900,9 +8900,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -8919,7 +8919,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -9031,13 +9031,13 @@ "symbol": "ANKR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -9047,7 +9047,7 @@ "tier": 8.0, "symbol": "ANKR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -9055,9 +9055,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -9074,7 +9074,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -9203,13 +9203,13 @@ "symbol": "APE/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -9219,7 +9219,7 @@ "tier": 9.0, "symbol": "APE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -9227,9 +9227,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -9246,7 +9246,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -9375,13 +9375,13 @@ "symbol": "API3/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -9391,7 +9391,7 @@ "tier": 9.0, "symbol": "API3/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -9399,9 +9399,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -9418,7 +9418,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -9513,13 +9513,13 @@ "symbol": "APR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -9529,7 +9529,7 @@ "tier": 7.0, "symbol": "APR/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -9537,9 +9537,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -9556,7 +9556,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -9840,13 +9840,13 @@ "symbol": "AR/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -9856,7 +9856,7 @@ "tier": 9.0, "symbol": "AR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -9864,9 +9864,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -9883,7 +9883,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -10426,13 +10426,13 @@ "symbol": "ARIA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -10442,7 +10442,7 @@ "tier": 7.0, "symbol": "ARIA/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -10450,9 +10450,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -10469,7 +10469,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -10736,13 +10736,13 @@ "symbol": "ARKM/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -10752,7 +10752,7 @@ "tier": 9.0, "symbol": "ARKM/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -10760,9 +10760,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -10779,7 +10779,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -10874,13 +10874,13 @@ "symbol": "ARPA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -10890,7 +10890,7 @@ "tier": 7.0, "symbol": "ARPA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -10898,9 +10898,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -10917,7 +10917,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -11012,13 +11012,13 @@ "symbol": "ASR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -11028,7 +11028,7 @@ "tier": 7.0, "symbol": "ASR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -11036,9 +11036,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -11055,7 +11055,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -11322,13 +11322,13 @@ "symbol": "ASTR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17825.0" @@ -11338,7 +11338,7 @@ "tier": 8.0, "symbol": "ASTR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -11346,9 +11346,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392675.0" + "cum": "59475.0" } }, { @@ -11365,7 +11365,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267675.0" + "cum": "1934475.0" } } ], @@ -11460,13 +11460,13 @@ "symbol": "AT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -11476,7 +11476,7 @@ "tier": 7.0, "symbol": "AT/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -11484,9 +11484,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -11503,7 +11503,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -11598,13 +11598,13 @@ "symbol": "ATA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -11614,7 +11614,7 @@ "tier": 7.0, "symbol": "ATA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -11622,9 +11622,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -11641,7 +11641,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -12131,13 +12131,13 @@ "symbol": "AUCTION/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -12147,7 +12147,7 @@ "tier": 9.0, "symbol": "AUCTION/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -12155,9 +12155,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -12174,7 +12174,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -12269,13 +12269,13 @@ "symbol": "AVA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -12285,7 +12285,7 @@ "tier": 7.0, "symbol": "AVA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -12293,9 +12293,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -12312,7 +12312,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -12407,13 +12407,13 @@ "symbol": "AVAAI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -12423,7 +12423,7 @@ "tier": 7.0, "symbol": "AVAAI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -12431,9 +12431,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -12450,7 +12450,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -12923,13 +12923,13 @@ "symbol": "AVNT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -12939,7 +12939,7 @@ "tier": 9.0, "symbol": "AVNT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -12947,9 +12947,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -12966,7 +12966,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -13233,13 +13233,13 @@ "symbol": "AXL/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -13249,7 +13249,7 @@ "tier": 9.0, "symbol": "AXL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -13257,9 +13257,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -13276,7 +13276,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -13405,13 +13405,13 @@ "symbol": "AXS/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -13421,7 +13421,7 @@ "tier": 9.0, "symbol": "AXS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -13429,9 +13429,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -13448,7 +13448,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -13715,13 +13715,13 @@ "symbol": "B2/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -13731,7 +13731,7 @@ "tier": 7.0, "symbol": "B2/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -13739,9 +13739,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -13758,7 +13758,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -13853,13 +13853,13 @@ "symbol": "B3/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -13869,7 +13869,7 @@ "tier": 7.0, "symbol": "B3/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -13877,9 +13877,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -13896,7 +13896,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -14025,13 +14025,13 @@ "symbol": "BABY/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -14041,7 +14041,7 @@ "tier": 9.0, "symbol": "BABY/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -14049,9 +14049,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -14068,7 +14068,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -14647,13 +14647,13 @@ "symbol": "BANANA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -14663,7 +14663,7 @@ "tier": 8.0, "symbol": "BANANA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -14671,9 +14671,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -14690,7 +14690,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -14802,13 +14802,13 @@ "symbol": "BANANAS31/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -14818,7 +14818,7 @@ "tier": 8.0, "symbol": "BANANAS31/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -14826,9 +14826,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -14845,7 +14845,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -14957,13 +14957,13 @@ "symbol": "BAND/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -14973,7 +14973,7 @@ "tier": 8.0, "symbol": "BAND/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -14981,9 +14981,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -15000,7 +15000,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -15095,13 +15095,13 @@ "symbol": "BANK/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -15111,7 +15111,7 @@ "tier": 7.0, "symbol": "BANK/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -15119,9 +15119,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -15138,7 +15138,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -15250,13 +15250,13 @@ "symbol": "BARD/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "2000000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -15266,7 +15266,7 @@ "tier": 8.0, "symbol": "BARD/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 2000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -15274,9 +15274,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "183975.0" } }, { @@ -15293,7 +15293,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "2058975.0" } } ], @@ -15405,13 +15405,13 @@ "symbol": "BAS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -15421,7 +15421,7 @@ "tier": 8.0, "symbol": "BAS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -15429,9 +15429,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -15448,7 +15448,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -15560,13 +15560,13 @@ "symbol": "BAT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -15576,7 +15576,7 @@ "tier": 8.0, "symbol": "BAT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -15584,9 +15584,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -15603,7 +15603,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -15715,13 +15715,13 @@ "symbol": "BB/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -15731,7 +15731,7 @@ "tier": 8.0, "symbol": "BB/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -15739,9 +15739,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -15758,7 +15758,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -16645,13 +16645,13 @@ "symbol": "BEL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -16661,7 +16661,7 @@ "tier": 7.0, "symbol": "BEL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -16669,9 +16669,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -16688,7 +16688,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -16989,13 +16989,13 @@ "symbol": "BICO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -17005,7 +17005,7 @@ "tier": 8.0, "symbol": "BICO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -17013,9 +17013,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -17032,7 +17032,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -17299,13 +17299,13 @@ "symbol": "BIGTIME/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -17315,7 +17315,7 @@ "tier": 9.0, "symbol": "BIGTIME/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -17323,9 +17323,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -17342,7 +17342,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -17936,13 +17936,13 @@ "symbol": "BLUAI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -17952,7 +17952,7 @@ "tier": 7.0, "symbol": "BLUAI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -17960,9 +17960,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -17979,7 +17979,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -18108,13 +18108,13 @@ "symbol": "BLUR/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -18124,7 +18124,7 @@ "tier": 9.0, "symbol": "BLUR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -18132,9 +18132,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -18151,7 +18151,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -18350,13 +18350,13 @@ "symbol": "BMT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -18366,7 +18366,7 @@ "tier": 7.0, "symbol": "BMT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -18374,9 +18374,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -18393,7 +18393,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -18832,13 +18832,13 @@ "symbol": "BNT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -18848,7 +18848,7 @@ "tier": 7.0, "symbol": "BNT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -18856,9 +18856,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -18875,7 +18875,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -19263,13 +19263,13 @@ "symbol": "BOME/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -19279,7 +19279,7 @@ "tier": 9.0, "symbol": "BOME/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -19287,9 +19287,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -19306,7 +19306,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -19711,13 +19711,13 @@ "symbol": "BRETT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -19727,7 +19727,7 @@ "tier": 9.0, "symbol": "BRETT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -19735,9 +19735,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -19754,7 +19754,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -19849,13 +19849,13 @@ "symbol": "BROCCOLI714/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -19865,7 +19865,7 @@ "tier": 7.0, "symbol": "BROCCOLI714/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -19873,9 +19873,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -19892,7 +19892,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -20159,13 +20159,13 @@ "symbol": "BSV/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -20175,7 +20175,7 @@ "tier": 9.0, "symbol": "BSV/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -20183,9 +20183,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -20202,7 +20202,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -21297,13 +21297,13 @@ "symbol": "BTR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -21313,7 +21313,7 @@ "tier": 7.0, "symbol": "BTR/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -21321,9 +21321,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -21340,7 +21340,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -21435,13 +21435,13 @@ "symbol": "BULLA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -21451,7 +21451,7 @@ "tier": 7.0, "symbol": "BULLA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -21459,9 +21459,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -21478,7 +21478,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -21573,13 +21573,13 @@ "symbol": "C/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -21589,7 +21589,7 @@ "tier": 7.0, "symbol": "C/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -21597,9 +21597,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -21616,7 +21616,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -21728,13 +21728,13 @@ "symbol": "C98/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -21744,7 +21744,7 @@ "tier": 8.0, "symbol": "C98/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -21752,9 +21752,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -21771,7 +21771,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -22072,13 +22072,13 @@ "symbol": "CARV/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -22088,7 +22088,7 @@ "tier": 8.0, "symbol": "CARV/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -22096,9 +22096,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -22115,7 +22115,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -22210,13 +22210,13 @@ "symbol": "CATI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -22226,7 +22226,7 @@ "tier": 7.0, "symbol": "CATI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -22234,9 +22234,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -22253,7 +22253,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -22554,13 +22554,13 @@ "symbol": "CELO/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -22570,7 +22570,7 @@ "tier": 9.0, "symbol": "CELO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -22578,9 +22578,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -22597,7 +22597,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -22709,13 +22709,13 @@ "symbol": "CELR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -22725,7 +22725,7 @@ "tier": 8.0, "symbol": "CELR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -22733,9 +22733,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -22752,7 +22752,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -22864,13 +22864,13 @@ "symbol": "CETUS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -22880,7 +22880,7 @@ "tier": 8.0, "symbol": "CETUS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -22888,9 +22888,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -22907,7 +22907,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -23208,13 +23208,13 @@ "symbol": "CGPT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -23224,7 +23224,7 @@ "tier": 8.0, "symbol": "CGPT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -23232,9 +23232,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -23251,7 +23251,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -23605,13 +23605,13 @@ "symbol": "CHR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -23621,7 +23621,7 @@ "tier": 8.0, "symbol": "CHR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -23629,9 +23629,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -23648,7 +23648,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -23777,13 +23777,13 @@ "symbol": "CHZ/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -23793,7 +23793,7 @@ "tier": 9.0, "symbol": "CHZ/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -23801,9 +23801,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -23820,7 +23820,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -23932,13 +23932,13 @@ "symbol": "CKB/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17825.0" @@ -23948,7 +23948,7 @@ "tier": 8.0, "symbol": "CKB/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -23956,9 +23956,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392675.0" + "cum": "59475.0" } }, { @@ -23975,7 +23975,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267675.0" + "cum": "1934475.0" } } ], @@ -24208,13 +24208,13 @@ "symbol": "CLO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -24224,7 +24224,7 @@ "tier": 7.0, "symbol": "CLO/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -24232,9 +24232,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -24251,7 +24251,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -24554,13 +24554,13 @@ "symbol": "COMMON/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -24570,7 +24570,7 @@ "tier": 7.0, "symbol": "COMMON/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -24578,9 +24578,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -24597,7 +24597,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -24915,13 +24915,13 @@ "symbol": "COOKIE/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -24931,7 +24931,7 @@ "tier": 9.0, "symbol": "COOKIE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -24939,9 +24939,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -24958,7 +24958,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -25208,13 +25208,13 @@ "symbol": "COTI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -25224,7 +25224,7 @@ "tier": 8.0, "symbol": "COTI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -25232,9 +25232,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -25251,7 +25251,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -25380,13 +25380,13 @@ "symbol": "COW/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -25396,7 +25396,7 @@ "tier": 9.0, "symbol": "COW/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -25404,9 +25404,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -25423,7 +25423,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -25535,13 +25535,13 @@ "symbol": "CROSS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -25551,7 +25551,7 @@ "tier": 8.0, "symbol": "CROSS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -25559,9 +25559,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -25578,7 +25578,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -25966,13 +25966,13 @@ "symbol": "CTK/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -25982,7 +25982,7 @@ "tier": 7.0, "symbol": "CTK/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -25990,9 +25990,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -26009,7 +26009,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -26121,13 +26121,13 @@ "symbol": "CTSI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -26137,7 +26137,7 @@ "tier": 8.0, "symbol": "CTSI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -26145,9 +26145,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -26164,7 +26164,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -26259,13 +26259,13 @@ "symbol": "CUDIS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -26275,7 +26275,7 @@ "tier": 7.0, "symbol": "CUDIS/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -26283,9 +26283,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -26302,7 +26302,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -26397,13 +26397,13 @@ "symbol": "CVC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -26413,7 +26413,7 @@ "tier": 7.0, "symbol": "CVC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -26421,9 +26421,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -26440,7 +26440,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -26569,13 +26569,13 @@ "symbol": "CVX/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -26585,7 +26585,7 @@ "tier": 9.0, "symbol": "CVX/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -26593,9 +26593,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -26612,7 +26612,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -26724,13 +26724,13 @@ "symbol": "CYBER/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -26740,7 +26740,7 @@ "tier": 8.0, "symbol": "CYBER/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -26748,9 +26748,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -26767,7 +26767,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -26862,13 +26862,13 @@ "symbol": "D/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -26878,7 +26878,7 @@ "tier": 7.0, "symbol": "D/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -26886,9 +26886,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -26905,7 +26905,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -27000,13 +27000,13 @@ "symbol": "DAM/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -27016,7 +27016,7 @@ "tier": 7.0, "symbol": "DAM/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -27024,9 +27024,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -27043,7 +27043,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -27482,13 +27482,13 @@ "symbol": "DEEP/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, + "maxNotional": 400000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "notionalCap": "500000", + "notionalCap": "400000", "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "13825.0" @@ -27498,24 +27498,24 @@ "tier": 7.0, "symbol": "DEEP/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 4500000.0, + "minNotional": 400000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", - "notionalFloor": "500000", + "notionalCap": "500000", + "notionalFloor": "400000", "maintMarginRatio": "0.1667", - "cum": "34675.0" + "cum": "30505.0" } }, { "tier": 8.0, "symbol": "DEEP/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -27523,9 +27523,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "409525.0" + "cum": "72155.0" } }, { @@ -27542,7 +27542,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284525.0" + "cum": "1947155.0" } } ], @@ -27741,13 +27741,13 @@ "symbol": "DEGEN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -27757,7 +27757,7 @@ "tier": 7.0, "symbol": "DEGEN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -27765,9 +27765,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -27784,7 +27784,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -28034,13 +28034,13 @@ "symbol": "DENT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -28050,7 +28050,7 @@ "tier": 8.0, "symbol": "DENT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -28058,9 +28058,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -28077,7 +28077,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -28189,13 +28189,13 @@ "symbol": "DEXE/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34725.0" @@ -28205,7 +28205,7 @@ "tier": 8.0, "symbol": "DEXE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -28213,9 +28213,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "409575.0" + "cum": "76375.0" } }, { @@ -28232,7 +28232,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284575.0" + "cum": "1951375.0" } } ], @@ -28327,13 +28327,13 @@ "symbol": "DF/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -28343,7 +28343,7 @@ "tier": 7.0, "symbol": "DF/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -28351,9 +28351,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -28370,7 +28370,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -28586,13 +28586,13 @@ "symbol": "DIA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -28602,7 +28602,7 @@ "tier": 8.0, "symbol": "DIA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -28610,9 +28610,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -28629,7 +28629,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -28862,13 +28862,13 @@ "symbol": "DODOX/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -28878,7 +28878,7 @@ "tier": 7.0, "symbol": "DODOX/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -28886,9 +28886,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -28905,7 +28905,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -29361,13 +29361,13 @@ "symbol": "DOGS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -29377,7 +29377,7 @@ "tier": 8.0, "symbol": "DOGS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -29385,9 +29385,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -29404,7 +29404,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -29516,13 +29516,13 @@ "symbol": "DOLO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -29532,7 +29532,7 @@ "tier": 8.0, "symbol": "DOLO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -29540,9 +29540,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -29559,7 +29559,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -29654,13 +29654,13 @@ "symbol": "DOOD/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -29670,7 +29670,7 @@ "tier": 7.0, "symbol": "DOOD/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -29678,9 +29678,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -29697,7 +29697,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -29981,13 +29981,13 @@ "symbol": "DRIFT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -29997,7 +29997,7 @@ "tier": 8.0, "symbol": "DRIFT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -30005,9 +30005,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -30024,7 +30024,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -30119,13 +30119,13 @@ "symbol": "DUSK/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -30135,7 +30135,7 @@ "tier": 7.0, "symbol": "DUSK/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -30143,9 +30143,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -30162,7 +30162,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -30291,13 +30291,13 @@ "symbol": "DYDX/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -30307,7 +30307,7 @@ "tier": 9.0, "symbol": "DYDX/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -30315,9 +30315,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -30334,7 +30334,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -30446,13 +30446,13 @@ "symbol": "DYM/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -30462,7 +30462,7 @@ "tier": 8.0, "symbol": "DYM/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -30470,9 +30470,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -30489,7 +30489,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -30618,13 +30618,13 @@ "symbol": "EDEN/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -30634,7 +30634,7 @@ "tier": 9.0, "symbol": "EDEN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -30642,9 +30642,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -30661,7 +30661,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -30773,13 +30773,13 @@ "symbol": "EDU/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -30789,7 +30789,7 @@ "tier": 8.0, "symbol": "EDU/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -30797,9 +30797,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -30816,7 +30816,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -30945,13 +30945,13 @@ "symbol": "EGLD/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -30961,7 +30961,7 @@ "tier": 9.0, "symbol": "EGLD/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -30969,9 +30969,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -30988,7 +30988,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -31582,13 +31582,13 @@ "symbol": "ENJ/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -31598,7 +31598,7 @@ "tier": 8.0, "symbol": "ENJ/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -31606,9 +31606,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -31625,7 +31625,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -31943,13 +31943,13 @@ "symbol": "ENSO/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -31959,7 +31959,7 @@ "tier": 9.0, "symbol": "ENSO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -31967,9 +31967,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -31986,7 +31986,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -32098,13 +32098,13 @@ "symbol": "EPIC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -32114,7 +32114,7 @@ "tier": 8.0, "symbol": "EPIC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -32122,9 +32122,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -32141,7 +32141,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -34094,13 +34094,13 @@ "symbol": "ETHW/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -34110,7 +34110,7 @@ "tier": 8.0, "symbol": "ETHW/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -34118,9 +34118,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -34137,7 +34137,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -34266,13 +34266,13 @@ "symbol": "EUL/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -34282,7 +34282,7 @@ "tier": 9.0, "symbol": "EUL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -34290,9 +34290,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -34309,7 +34309,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -34404,13 +34404,13 @@ "symbol": "EVAA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -34420,7 +34420,7 @@ "tier": 7.0, "symbol": "EVAA/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -34428,9 +34428,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -34447,7 +34447,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -34542,13 +34542,13 @@ "symbol": "F/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -34558,7 +34558,7 @@ "tier": 7.0, "symbol": "F/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -34566,9 +34566,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -34585,7 +34585,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -35334,13 +35334,13 @@ "symbol": "FIDA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -35350,7 +35350,7 @@ "tier": 8.0, "symbol": "FIDA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -35358,9 +35358,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -35377,7 +35377,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -36058,13 +36058,13 @@ "symbol": "FLM/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 2500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "notionalCap": "2500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", "cum": "26995.0" @@ -36074,17 +36074,17 @@ "tier": 6.0, "symbol": "FLM/USDT:USDT", "currency": "USDT", - "minNotional": 2500000.0, - "maxNotional": 5000000.0, + "minNotional": 500000.0, + "maxNotional": 800000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "notionalCap": "5000000", - "notionalFloor": "2500000", + "notionalCap": "800000", + "notionalFloor": "500000", "maintMarginRatio": "0.5", - "cum": "651995.0" + "cum": "151995.0" } } ], @@ -36196,13 +36196,13 @@ "symbol": "FLOCK/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -36212,7 +36212,7 @@ "tier": 8.0, "symbol": "FLOCK/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -36220,9 +36220,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -36239,7 +36239,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -36368,13 +36368,13 @@ "symbol": "FLOW/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -36384,7 +36384,7 @@ "tier": 9.0, "symbol": "FLOW/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -36392,9 +36392,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -36411,7 +36411,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -36540,13 +36540,13 @@ "symbol": "FLUID/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -36556,7 +36556,7 @@ "tier": 9.0, "symbol": "FLUID/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -36564,9 +36564,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -36583,7 +36583,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -36678,13 +36678,13 @@ "symbol": "FLUX/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -36694,7 +36694,7 @@ "tier": 7.0, "symbol": "FLUX/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -36702,9 +36702,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -36721,7 +36721,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -36816,13 +36816,13 @@ "symbol": "FOLKS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -36832,7 +36832,7 @@ "tier": 7.0, "symbol": "FOLKS/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -36840,9 +36840,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -36859,7 +36859,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -36971,13 +36971,13 @@ "symbol": "FORM/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -36987,7 +36987,7 @@ "tier": 8.0, "symbol": "FORM/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -36995,9 +36995,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -37014,7 +37014,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -37109,13 +37109,13 @@ "symbol": "FORTH/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -37125,7 +37125,7 @@ "tier": 7.0, "symbol": "FORTH/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -37133,9 +37133,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -37152,7 +37152,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -37695,13 +37695,13 @@ "symbol": "FXS/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -37711,7 +37711,7 @@ "tier": 9.0, "symbol": "FXS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -37719,9 +37719,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -37738,7 +37738,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -37833,13 +37833,13 @@ "symbol": "G/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -37849,7 +37849,7 @@ "tier": 7.0, "symbol": "G/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -37857,9 +37857,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -37876,7 +37876,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -38194,13 +38194,13 @@ "symbol": "GAS/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -38210,7 +38210,7 @@ "tier": 9.0, "symbol": "GAS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -38218,9 +38218,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -38237,7 +38237,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -38332,13 +38332,13 @@ "symbol": "GHST/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -38348,7 +38348,7 @@ "tier": 7.0, "symbol": "GHST/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -38356,9 +38356,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -38375,7 +38375,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -38642,13 +38642,13 @@ "symbol": "GLM/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17825.0" @@ -38658,7 +38658,7 @@ "tier": 8.0, "symbol": "GLM/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -38666,9 +38666,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392675.0" + "cum": "59475.0" } }, { @@ -38685,7 +38685,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267675.0" + "cum": "1934475.0" } } ], @@ -38918,13 +38918,13 @@ "symbol": "GMT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -38934,7 +38934,7 @@ "tier": 9.0, "symbol": "GMT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -38942,9 +38942,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -38961,7 +38961,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -39073,13 +39073,13 @@ "symbol": "GMX/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -39089,7 +39089,7 @@ "tier": 8.0, "symbol": "GMX/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -39097,9 +39097,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -39116,7 +39116,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -39245,13 +39245,13 @@ "symbol": "GOAT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -39261,7 +39261,7 @@ "tier": 9.0, "symbol": "GOAT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -39269,9 +39269,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -39288,7 +39288,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -39400,13 +39400,13 @@ "symbol": "GPS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -39416,7 +39416,7 @@ "tier": 8.0, "symbol": "GPS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -39424,9 +39424,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -39443,7 +39443,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -39572,13 +39572,13 @@ "symbol": "GRASS/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -39588,7 +39588,7 @@ "tier": 9.0, "symbol": "GRASS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -39596,9 +39596,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -39615,7 +39615,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -39710,13 +39710,13 @@ "symbol": "GRIFFAIN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -39726,7 +39726,7 @@ "tier": 7.0, "symbol": "GRIFFAIN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -39734,9 +39734,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -39753,7 +39753,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -39882,13 +39882,13 @@ "symbol": "GRT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -39898,7 +39898,7 @@ "tier": 9.0, "symbol": "GRT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -39906,9 +39906,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -39925,7 +39925,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -40020,13 +40020,13 @@ "symbol": "GTC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -40036,7 +40036,7 @@ "tier": 7.0, "symbol": "GTC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -40044,9 +40044,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -40063,7 +40063,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -40158,13 +40158,13 @@ "symbol": "GUN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -40174,7 +40174,7 @@ "tier": 7.0, "symbol": "GUN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -40182,9 +40182,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -40201,7 +40201,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -40451,13 +40451,13 @@ "symbol": "HAEDAL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -40467,7 +40467,7 @@ "tier": 7.0, "symbol": "HAEDAL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -40475,9 +40475,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -40494,7 +40494,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -40589,13 +40589,13 @@ "symbol": "HANA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -40605,7 +40605,7 @@ "tier": 7.0, "symbol": "HANA/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -40613,9 +40613,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -40632,7 +40632,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -41037,13 +41037,13 @@ "symbol": "HEI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -41053,7 +41053,7 @@ "tier": 7.0, "symbol": "HEI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -41061,9 +41061,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -41080,7 +41080,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -41192,13 +41192,13 @@ "symbol": "HEMI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -41208,7 +41208,7 @@ "tier": 8.0, "symbol": "HEMI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -41216,9 +41216,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -41235,7 +41235,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -41347,13 +41347,13 @@ "symbol": "HFT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -41363,7 +41363,7 @@ "tier": 8.0, "symbol": "HFT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -41371,9 +41371,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -41390,7 +41390,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -41589,13 +41589,13 @@ "symbol": "HIGH/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -41605,7 +41605,7 @@ "tier": 7.0, "symbol": "HIGH/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -41613,9 +41613,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -41632,7 +41632,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -41831,13 +41831,13 @@ "symbol": "HIVE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -41847,7 +41847,7 @@ "tier": 7.0, "symbol": "HIVE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -41855,9 +41855,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -41874,7 +41874,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -41969,13 +41969,13 @@ "symbol": "HMSTR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -41985,7 +41985,7 @@ "tier": 7.0, "symbol": "HMSTR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -41993,9 +41993,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -42012,7 +42012,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -42141,13 +42141,13 @@ "symbol": "HOLO/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -42157,7 +42157,7 @@ "tier": 9.0, "symbol": "HOLO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -42165,9 +42165,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -42184,7 +42184,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -42451,13 +42451,13 @@ "symbol": "HOOK/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -42467,7 +42467,7 @@ "tier": 7.0, "symbol": "HOOK/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -42475,9 +42475,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -42494,7 +42494,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -42606,13 +42606,13 @@ "symbol": "HOT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -42622,7 +42622,7 @@ "tier": 8.0, "symbol": "HOT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -42630,9 +42630,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -42649,7 +42649,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -42778,13 +42778,13 @@ "symbol": "HUMA/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -42794,7 +42794,7 @@ "tier": 9.0, "symbol": "HUMA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -42802,9 +42802,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -42821,7 +42821,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -43088,13 +43088,13 @@ "symbol": "HYPER/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -43104,7 +43104,7 @@ "tier": 8.0, "symbol": "HYPER/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -43112,9 +43112,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -43131,7 +43131,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -43226,13 +43226,13 @@ "symbol": "ICNT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -43242,7 +43242,7 @@ "tier": 7.0, "symbol": "ICNT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -43250,9 +43250,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -43269,7 +43269,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -43570,13 +43570,13 @@ "symbol": "ICX/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -43586,7 +43586,7 @@ "tier": 8.0, "symbol": "ICX/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -43594,9 +43594,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -43613,7 +43613,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -43725,13 +43725,13 @@ "symbol": "ID/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -43741,7 +43741,7 @@ "tier": 8.0, "symbol": "ID/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -43749,9 +43749,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -43768,7 +43768,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -43984,13 +43984,13 @@ "symbol": "IDOL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -44000,7 +44000,7 @@ "tier": 7.0, "symbol": "IDOL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -44008,9 +44008,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -44027,7 +44027,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -44139,13 +44139,13 @@ "symbol": "ILV/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -44155,7 +44155,7 @@ "tier": 8.0, "symbol": "ILV/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -44163,9 +44163,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -44182,7 +44182,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -44466,13 +44466,13 @@ "symbol": "IN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -44482,7 +44482,7 @@ "tier": 7.0, "symbol": "IN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -44490,9 +44490,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -44509,7 +44509,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -44621,13 +44621,13 @@ "symbol": "INIT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -44637,7 +44637,7 @@ "tier": 8.0, "symbol": "INIT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -44645,9 +44645,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -44664,7 +44664,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -44948,13 +44948,13 @@ "symbol": "IO/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -44964,7 +44964,7 @@ "tier": 9.0, "symbol": "IO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -44972,9 +44972,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -44991,7 +44991,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -45103,13 +45103,13 @@ "symbol": "IOST/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -45119,7 +45119,7 @@ "tier": 8.0, "symbol": "IOST/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -45127,9 +45127,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -45146,7 +45146,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -45275,13 +45275,13 @@ "symbol": "IOTA/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -45291,7 +45291,7 @@ "tier": 9.0, "symbol": "IOTA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -45299,9 +45299,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -45318,7 +45318,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -45430,13 +45430,13 @@ "symbol": "IOTX/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -45446,7 +45446,7 @@ "tier": 8.0, "symbol": "IOTX/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -45454,9 +45454,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -45473,7 +45473,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -45929,13 +45929,13 @@ "symbol": "JASMY/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -45945,7 +45945,7 @@ "tier": 9.0, "symbol": "JASMY/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -45953,9 +45953,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -45972,7 +45972,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -46343,13 +46343,13 @@ "symbol": "JOE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -46359,7 +46359,7 @@ "tier": 8.0, "symbol": "JOE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -46367,9 +46367,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -46386,7 +46386,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -46498,13 +46498,13 @@ "symbol": "JST/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -46514,7 +46514,7 @@ "tier": 8.0, "symbol": "JST/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -46522,9 +46522,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -46541,7 +46541,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -46670,13 +46670,13 @@ "symbol": "JTO/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -46686,7 +46686,7 @@ "tier": 9.0, "symbol": "JTO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -46694,9 +46694,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -46713,7 +46713,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -47031,13 +47031,13 @@ "symbol": "KAIA/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -47047,7 +47047,7 @@ "tier": 9.0, "symbol": "KAIA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -47055,9 +47055,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -47074,7 +47074,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -47736,13 +47736,13 @@ "symbol": "KAVA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -47752,7 +47752,7 @@ "tier": 8.0, "symbol": "KAVA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -47760,9 +47760,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -47779,7 +47779,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -47978,13 +47978,13 @@ "symbol": "KERNEL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -47994,7 +47994,7 @@ "tier": 7.0, "symbol": "KERNEL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -48002,9 +48002,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -48021,7 +48021,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -48237,13 +48237,13 @@ "symbol": "KGEN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -48253,7 +48253,7 @@ "tier": 7.0, "symbol": "KGEN/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -48261,9 +48261,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -48280,7 +48280,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -48392,13 +48392,13 @@ "symbol": "KITE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -48408,7 +48408,7 @@ "tier": 8.0, "symbol": "KITE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -48416,9 +48416,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -48435,7 +48435,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -48668,13 +48668,13 @@ "symbol": "KMNO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -48684,7 +48684,7 @@ "tier": 8.0, "symbol": "KMNO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -48692,9 +48692,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -48711,7 +48711,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -48823,13 +48823,13 @@ "symbol": "KNC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -48839,7 +48839,7 @@ "tier": 8.0, "symbol": "KNC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -48847,9 +48847,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -48866,7 +48866,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -49116,13 +49116,13 @@ "symbol": "KSM/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -49132,7 +49132,7 @@ "tier": 8.0, "symbol": "KSM/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -49140,9 +49140,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -49159,7 +49159,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -49288,13 +49288,13 @@ "symbol": "LA/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -49304,7 +49304,7 @@ "tier": 9.0, "symbol": "LA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -49312,9 +49312,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -49331,7 +49331,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -49443,13 +49443,13 @@ "symbol": "LAB/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -49459,7 +49459,7 @@ "tier": 8.0, "symbol": "LAB/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -49467,9 +49467,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -49486,7 +49486,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -49615,13 +49615,13 @@ "symbol": "LAYER/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -49631,7 +49631,7 @@ "tier": 9.0, "symbol": "LAYER/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -49639,9 +49639,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -49658,7 +49658,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -50770,13 +50770,13 @@ "symbol": "LISTA/USDT:USDT", "currency": "USDT", "minNotional": 5000.0, - "maxNotional": 15000.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.02, "maxLeverage": 25.0, "info": { "bracket": "2", "initialLeverage": "25", - "notionalCap": "15000", + "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.02", "cum": "25.0" @@ -50786,92 +50786,92 @@ "tier": 3.0, "symbol": "LISTA/USDT:USDT", "currency": "USDT", - "minNotional": 15000.0, - "maxNotional": 33333.0, + "minNotional": 10000.0, + "maxNotional": 25000.0, "maintenanceMarginRate": 0.025, "maxLeverage": 20.0, "info": { "bracket": "3", "initialLeverage": "20", - "notionalCap": "33333", - "notionalFloor": "15000", + "notionalCap": "25000", + "notionalFloor": "10000", "maintMarginRatio": "0.025", - "cum": "100.0" + "cum": "75.0" } }, { "tier": 4.0, "symbol": "LISTA/USDT:USDT", "currency": "USDT", - "minNotional": 33333.0, - "maxNotional": 83333.0, + "minNotional": 25000.0, + "maxNotional": 62500.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "4", "initialLeverage": "10", - "notionalCap": "83333", - "notionalFloor": "33333", + "notionalCap": "62500", + "notionalFloor": "25000", "maintMarginRatio": "0.05", - "cum": "933.325" + "cum": "700.0" } }, { "tier": 5.0, "symbol": "LISTA/USDT:USDT", "currency": "USDT", - "minNotional": 83333.0, - "maxNotional": 166666.0, + "minNotional": 62500.0, + "maxNotional": 125000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { "bracket": "5", "initialLeverage": "5", - "notionalCap": "166666", - "notionalFloor": "83333", + "notionalCap": "125000", + "notionalFloor": "62500", "maintMarginRatio": "0.1", - "cum": "5099.975" + "cum": "3825.0" } }, { "tier": 6.0, "symbol": "LISTA/USDT:USDT", "currency": "USDT", - "minNotional": 166666.0, - "maxNotional": 333333.0, + "minNotional": 125000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "notionalCap": "333333", - "notionalFloor": "166666", + "notionalCap": "250000", + "notionalFloor": "125000", "maintMarginRatio": "0.125", - "cum": "9266.625" + "cum": "6950.0" } }, { "tier": 7.0, "symbol": "LISTA/USDT:USDT", "currency": "USDT", - "minNotional": 333333.0, - "maxNotional": 4500000.0, + "minNotional": 250000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", - "notionalFloor": "333333", + "notionalCap": "1000000", + "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "23166.6111" + "cum": "17375.0" } }, { "tier": 8.0, "symbol": "LISTA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -50879,9 +50879,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "398016.6111" + "cum": "100675.0" } }, { @@ -50898,7 +50898,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2273016.6111" + "cum": "1975675.0" } } ], @@ -51407,13 +51407,13 @@ "symbol": "LPT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -51423,7 +51423,7 @@ "tier": 9.0, "symbol": "LPT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -51431,9 +51431,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -51450,7 +51450,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -51562,13 +51562,13 @@ "symbol": "LQTY/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -51578,7 +51578,7 @@ "tier": 8.0, "symbol": "LQTY/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -51586,9 +51586,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -51605,7 +51605,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -51717,13 +51717,13 @@ "symbol": "LRC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -51733,7 +51733,7 @@ "tier": 8.0, "symbol": "LRC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -51741,9 +51741,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -51760,7 +51760,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -51855,13 +51855,13 @@ "symbol": "LSK/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -51871,7 +51871,7 @@ "tier": 7.0, "symbol": "LSK/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -51879,9 +51879,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -51898,7 +51898,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -52337,13 +52337,13 @@ "symbol": "LUMIA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -52353,7 +52353,7 @@ "tier": 7.0, "symbol": "LUMIA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -52361,9 +52361,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -52380,7 +52380,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -52492,13 +52492,13 @@ "symbol": "LUNA2/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -52508,7 +52508,7 @@ "tier": 8.0, "symbol": "LUNA2/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -52516,9 +52516,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -52535,7 +52535,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -52647,13 +52647,13 @@ "symbol": "LYN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -52663,7 +52663,7 @@ "tier": 8.0, "symbol": "LYN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -52671,9 +52671,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -52690,7 +52690,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -52802,13 +52802,13 @@ "symbol": "M/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "2000000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -52818,7 +52818,7 @@ "tier": 8.0, "symbol": "M/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 2000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -52826,9 +52826,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "183975.0" } }, { @@ -52845,7 +52845,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "2058975.0" } } ], @@ -52974,13 +52974,13 @@ "symbol": "MAGIC/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -52990,7 +52990,7 @@ "tier": 9.0, "symbol": "MAGIC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -52998,9 +52998,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -53017,7 +53017,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -53146,13 +53146,13 @@ "symbol": "MANA/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -53162,7 +53162,7 @@ "tier": 9.0, "symbol": "MANA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -53170,9 +53170,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -53189,7 +53189,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -53301,13 +53301,13 @@ "symbol": "MANTA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -53317,7 +53317,7 @@ "tier": 8.0, "symbol": "MANTA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -53325,9 +53325,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -53344,7 +53344,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -53473,13 +53473,13 @@ "symbol": "MASK/USDT:USDT", "currency": "USDT", "minNotional": 300000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "300000", "maintMarginRatio": "0.1667", "cum": "20862.5" @@ -53489,7 +53489,7 @@ "tier": 9.0, "symbol": "MASK/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -53497,9 +53497,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "395712.5" + "cum": "104162.5" } }, { @@ -53516,7 +53516,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2270712.5" + "cum": "1979162.5" } } ], @@ -53611,13 +53611,13 @@ "symbol": "MAV/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -53627,7 +53627,7 @@ "tier": 7.0, "symbol": "MAV/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -53635,9 +53635,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -53654,7 +53654,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -53749,13 +53749,13 @@ "symbol": "MAVIA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -53765,7 +53765,7 @@ "tier": 7.0, "symbol": "MAVIA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -53773,9 +53773,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -53792,7 +53792,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -53887,13 +53887,13 @@ "symbol": "MBOX/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -53903,7 +53903,7 @@ "tier": 7.0, "symbol": "MBOX/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -53911,9 +53911,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -53930,7 +53930,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -54163,13 +54163,13 @@ "symbol": "ME/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -54179,7 +54179,7 @@ "tier": 8.0, "symbol": "ME/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -54187,9 +54187,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -54206,7 +54206,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -54335,13 +54335,13 @@ "symbol": "MELANIA/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -54351,7 +54351,7 @@ "tier": 9.0, "symbol": "MELANIA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -54359,9 +54359,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -54378,7 +54378,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -54507,13 +54507,13 @@ "symbol": "MEME/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -54523,7 +54523,7 @@ "tier": 9.0, "symbol": "MEME/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -54531,9 +54531,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -54550,7 +54550,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -54854,14 +54854,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 75.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "75", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.01", "cum": "0.0" } }, @@ -54871,14 +54871,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.015, + "maxLeverage": 50.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "50", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.015", "cum": "25.0" } }, @@ -54888,14 +54888,14 @@ "currency": "USDT", "minNotional": 10000.0, "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "3", - "initialLeverage": "20", + "initialLeverage": "25", "notionalCap": "25000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", + "maintMarginRatio": "0.02", "cum": "75.0" } }, @@ -54904,33 +54904,33 @@ "symbol": "MET/USDT:USDT", "currency": "USDT", "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", + "initialLeverage": "20", + "notionalCap": "50000", "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "maintMarginRatio": "0.025", + "cum": "200.0" } }, { "tier": 5.0, "symbol": "MET/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, + "minNotional": 50000.0, "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "5", - "initialLeverage": "5", + "initialLeverage": "10", "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "notionalFloor": "50000", + "maintMarginRatio": "0.05", + "cum": "1450.0" } }, { @@ -54939,15 +54939,15 @@ "currency": "USDT", "minNotional": 125000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "5", "notionalCap": "250000", "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "maintMarginRatio": "0.1", + "cum": "7700.0" } }, { @@ -54955,37 +54955,54 @@ "symbol": "MET/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "4500000", + "initialLeverage": "4", + "notionalCap": "500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.125", + "cum": "13950.0" } }, { "tier": 8.0, "symbol": "MET/USDT:USDT", "currency": "USDT", + "minNotional": 500000.0, + "maxNotional": 4500000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "8", + "initialLeverage": "3", + "notionalCap": "4500000", + "notionalFloor": "500000", + "maintMarginRatio": "0.1667", + "cum": "34800.0" + } + }, + { + "tier": 9.0, + "symbol": "MET/USDT:USDT", + "currency": "USDT", "minNotional": 4500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "4500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "409650.0" } }, { - "tier": 9.0, + "tier": 10.0, "symbol": "MET/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -54993,12 +55010,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "10", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "2284650.0" } } ], @@ -55110,13 +55127,13 @@ "symbol": "METIS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -55126,7 +55143,7 @@ "tier": 8.0, "symbol": "METIS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -55134,9 +55151,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -55153,7 +55170,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -55265,13 +55282,13 @@ "symbol": "MEW/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -55281,7 +55298,7 @@ "tier": 8.0, "symbol": "MEW/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -55289,9 +55306,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -55308,7 +55325,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -55403,13 +55420,13 @@ "symbol": "MILK/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -55419,7 +55436,7 @@ "tier": 7.0, "symbol": "MILK/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -55427,9 +55444,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -55446,7 +55463,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -55575,13 +55592,13 @@ "symbol": "MINA/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -55591,7 +55608,7 @@ "tier": 9.0, "symbol": "MINA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -55599,9 +55616,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -55618,7 +55635,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -55747,13 +55764,13 @@ "symbol": "MIRA/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -55763,7 +55780,7 @@ "tier": 9.0, "symbol": "MIRA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -55771,9 +55788,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -55790,7 +55807,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -55902,13 +55919,13 @@ "symbol": "MITO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -55918,7 +55935,7 @@ "tier": 8.0, "symbol": "MITO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -55926,9 +55943,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -55945,7 +55962,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -56212,13 +56229,13 @@ "symbol": "MLN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -56228,7 +56245,7 @@ "tier": 7.0, "symbol": "MLN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -56236,9 +56253,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -56255,7 +56272,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -56367,13 +56384,13 @@ "symbol": "MMT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -56383,7 +56400,7 @@ "tier": 8.0, "symbol": "MMT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -56391,9 +56408,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -56410,7 +56427,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -56593,14 +56610,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "5", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.1", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -56610,15 +56627,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "4", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.125", - "cum": "125.0" + "maintMarginRatio": "0.025", + "cum": "25.0" } }, { @@ -56626,50 +56643,101 @@ "symbol": "MON/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 30000.0, - "maintenanceMarginRate": 0.167, - "maxLeverage": 3.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "3", - "notionalCap": "30000", + "initialLeverage": "10", + "notionalCap": "25000", "notionalFloor": "10000", - "maintMarginRatio": "0.167", - "cum": "545.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "MON/USDT:USDT", "currency": "USDT", - "minNotional": 30000.0, - "maxNotional": 80000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, + "minNotional": 25000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "2", - "notionalCap": "80000", - "notionalFloor": "30000", - "maintMarginRatio": "0.25", - "cum": "3035.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "25000", + "maintMarginRatio": "0.1", + "cum": "1525.0" } }, { "tier": 5.0, "symbol": "MON/USDT:USDT", "currency": "USDT", - "minNotional": 80000.0, - "maxNotional": 200000.0, + "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": "MON/USDT:USDT", + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.167, + "maxLeverage": 3.0, + "info": { + "bracket": "6", + "initialLeverage": "3", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.167", + "cum": "6975.0" + } + }, + { + "tier": 7.0, + "symbol": "MON/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": "27725.0" + } + }, + { + "tier": 8.0, + "symbol": "MON/USDT:USDT", + "currency": "USDT", + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "5", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "200000", - "notionalFloor": "80000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "23035.0" + "cum": "652725.0" } } ], @@ -56987,13 +57055,13 @@ "symbol": "MORPHO/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -57003,7 +57071,7 @@ "tier": 9.0, "symbol": "MORPHO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -57011,9 +57079,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -57030,7 +57098,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -57297,13 +57365,13 @@ "symbol": "MOVR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -57313,7 +57381,7 @@ "tier": 7.0, "symbol": "MOVR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -57321,9 +57389,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -57340,7 +57408,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -57435,13 +57503,13 @@ "symbol": "MTL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -57451,7 +57519,7 @@ "tier": 7.0, "symbol": "MTL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -57459,9 +57527,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -57478,7 +57546,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -57573,13 +57641,13 @@ "symbol": "MUBARAK/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -57589,7 +57657,7 @@ "tier": 7.0, "symbol": "MUBARAK/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -57597,9 +57665,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -57616,7 +57684,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -58384,13 +58452,13 @@ "symbol": "NEIRO/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -58400,7 +58468,7 @@ "tier": 9.0, "symbol": "NEIRO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -58408,9 +58476,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -58427,7 +58495,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -58815,13 +58883,13 @@ "symbol": "NEO/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -58831,7 +58899,7 @@ "tier": 9.0, "symbol": "NEO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -58839,9 +58907,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -58858,7 +58926,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -58970,13 +59038,13 @@ "symbol": "NEWT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -58986,7 +59054,7 @@ "tier": 8.0, "symbol": "NEWT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -58994,9 +59062,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -59013,7 +59081,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -59108,13 +59176,13 @@ "symbol": "NFP/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -59124,7 +59192,7 @@ "tier": 7.0, "symbol": "NFP/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -59132,9 +59200,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -59151,7 +59219,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -59263,13 +59331,13 @@ "symbol": "NIL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -59279,7 +59347,7 @@ "tier": 8.0, "symbol": "NIL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -59287,9 +59355,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -59306,7 +59374,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -59762,13 +59830,13 @@ "symbol": "NOM/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -59778,7 +59846,7 @@ "tier": 9.0, "symbol": "NOM/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -59786,9 +59854,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -59805,7 +59873,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -59934,13 +60002,13 @@ "symbol": "NOT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -59950,7 +60018,7 @@ "tier": 9.0, "symbol": "NOT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -59958,9 +60026,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -59977,7 +60045,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -60072,13 +60140,13 @@ "symbol": "NTRN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -60088,7 +60156,7 @@ "tier": 7.0, "symbol": "NTRN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -60096,9 +60164,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -60115,7 +60183,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -60399,13 +60467,13 @@ "symbol": "NXPC/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -60415,7 +60483,7 @@ "tier": 9.0, "symbol": "NXPC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -60423,9 +60491,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -60442,7 +60510,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -60537,13 +60605,13 @@ "symbol": "OBOL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -60553,7 +60621,7 @@ "tier": 7.0, "symbol": "OBOL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -60561,9 +60629,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -60580,7 +60648,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -60779,13 +60847,13 @@ "symbol": "OG/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, + "maxNotional": 400000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "notionalCap": "500000", + "notionalCap": "400000", "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "13825.0" @@ -60795,24 +60863,24 @@ "tier": 7.0, "symbol": "OG/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 4500000.0, + "minNotional": 400000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", - "notionalFloor": "500000", + "notionalCap": "500000", + "notionalFloor": "400000", "maintMarginRatio": "0.1667", - "cum": "34675.0" + "cum": "30505.0" } }, { "tier": 8.0, "symbol": "OG/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -60820,9 +60888,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "409525.0" + "cum": "72155.0" } }, { @@ -60839,7 +60907,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284525.0" + "cum": "1947155.0" } } ], @@ -60934,13 +61002,13 @@ "symbol": "OGN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -60950,7 +61018,7 @@ "tier": 7.0, "symbol": "OGN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -60958,9 +61026,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -60977,7 +61045,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -61072,13 +61140,13 @@ "symbol": "OL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -61088,7 +61156,7 @@ "tier": 7.0, "symbol": "OL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -61096,9 +61164,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -61115,7 +61183,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -61244,13 +61312,13 @@ "symbol": "OM/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -61260,7 +61328,7 @@ "tier": 9.0, "symbol": "OM/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -61268,9 +61336,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -61287,7 +61355,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -61675,13 +61743,13 @@ "symbol": "ON/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -61691,7 +61759,7 @@ "tier": 7.0, "symbol": "ON/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -61699,9 +61767,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -61718,7 +61786,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -62019,13 +62087,13 @@ "symbol": "ONE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -62035,7 +62103,7 @@ "tier": 8.0, "symbol": "ONE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -62043,9 +62111,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -62062,7 +62130,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -62157,13 +62225,13 @@ "symbol": "ONG/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -62173,7 +62241,7 @@ "tier": 7.0, "symbol": "ONG/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -62181,9 +62249,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -62200,7 +62268,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -62329,13 +62397,13 @@ "symbol": "ONT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -62345,7 +62413,7 @@ "tier": 9.0, "symbol": "ONT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -62353,9 +62421,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -62372,7 +62440,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -62673,13 +62741,13 @@ "symbol": "OPEN/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -62689,7 +62757,7 @@ "tier": 9.0, "symbol": "OPEN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -62697,9 +62765,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -62716,7 +62784,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -62983,13 +63051,13 @@ "symbol": "ORCA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -62999,7 +63067,7 @@ "tier": 8.0, "symbol": "ORCA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -63007,9 +63075,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -63026,7 +63094,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -63138,13 +63206,13 @@ "symbol": "ORDER/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -63154,7 +63222,7 @@ "tier": 8.0, "symbol": "ORDER/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -63162,9 +63230,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -63181,7 +63249,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -63482,13 +63550,13 @@ "symbol": "ORDI/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -63498,7 +63566,7 @@ "tier": 9.0, "symbol": "ORDI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -63506,9 +63574,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -63525,7 +63593,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -63620,13 +63688,13 @@ "symbol": "OXT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -63636,7 +63704,7 @@ "tier": 7.0, "symbol": "OXT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -63644,9 +63712,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -63663,7 +63731,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -63758,13 +63826,13 @@ "symbol": "PARTI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -63774,7 +63842,7 @@ "tier": 7.0, "symbol": "PARTI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -63782,9 +63850,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -63801,7 +63869,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -64601,13 +64669,13 @@ "symbol": "PEOPLE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17377.5" @@ -64617,7 +64685,7 @@ "tier": 9.0, "symbol": "PEOPLE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -64625,9 +64693,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "392227.5" + "cum": "100677.5" } }, { @@ -64644,7 +64712,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267227.5" + "cum": "1975677.5" } } ], @@ -64860,13 +64928,13 @@ "symbol": "PHA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -64876,7 +64944,7 @@ "tier": 8.0, "symbol": "PHA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -64884,9 +64952,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -64903,7 +64971,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -64998,13 +65066,13 @@ "symbol": "PHB/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -65014,7 +65082,7 @@ "tier": 7.0, "symbol": "PHB/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -65022,9 +65090,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -65041,7 +65109,145 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" + } + } + ], + "PIEVERSE/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "PIEVERSE/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": "PIEVERSE/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": "PIEVERSE/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": "PIEVERSE/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": "PIEVERSE/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": "PIEVERSE/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": "PIEVERSE/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": "PIEVERSE/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" } } ], @@ -65136,13 +65342,13 @@ "symbol": "PIPPIN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "2000000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -65152,7 +65358,7 @@ "tier": 7.0, "symbol": "PIPPIN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 2000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -65160,9 +65366,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "179575.0" } }, { @@ -65179,7 +65385,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "2054575.0" } } ], @@ -65291,13 +65497,13 @@ "symbol": "PIXEL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -65307,7 +65513,7 @@ "tier": 8.0, "symbol": "PIXEL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -65315,9 +65521,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -65334,7 +65540,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -65429,13 +65635,13 @@ "symbol": "PLAY/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -65445,7 +65651,7 @@ "tier": 7.0, "symbol": "PLAY/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -65453,9 +65659,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -65472,7 +65678,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -65601,13 +65807,13 @@ "symbol": "PLUME/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "2000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -65617,7 +65823,7 @@ "tier": 9.0, "symbol": "PLUME/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 2000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -65625,9 +65831,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "201400.0" } }, { @@ -65644,7 +65850,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "2076400.0" } } ], @@ -66289,13 +66495,13 @@ "symbol": "POLYX/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -66305,7 +66511,7 @@ "tier": 8.0, "symbol": "POLYX/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -66313,9 +66519,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -66332,7 +66538,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -66548,13 +66754,13 @@ "symbol": "POPCAT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -66564,7 +66770,7 @@ "tier": 8.0, "symbol": "POPCAT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -66572,9 +66778,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -66591,7 +66797,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -66686,13 +66892,13 @@ "symbol": "PORT3/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 1500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -66702,7 +66908,7 @@ "tier": 7.0, "symbol": "PORT3/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -66710,9 +66916,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "137925.0" } }, { @@ -66729,7 +66935,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "2012925.0" } } ], @@ -66962,13 +67168,13 @@ "symbol": "POWR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -66978,7 +67184,7 @@ "tier": 7.0, "symbol": "POWR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -66986,9 +67192,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -67005,7 +67211,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -67117,13 +67323,13 @@ "symbol": "PROM/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "2000000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -67133,7 +67339,7 @@ "tier": 8.0, "symbol": "PROM/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 2000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -67141,9 +67347,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "183975.0" } }, { @@ -67160,7 +67366,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "2058975.0" } } ], @@ -67272,13 +67478,13 @@ "symbol": "PROMPT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -67288,7 +67494,7 @@ "tier": 8.0, "symbol": "PROMPT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -67296,9 +67502,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -67315,7 +67521,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -67616,13 +67822,13 @@ "symbol": "PTB/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -67632,7 +67838,7 @@ "tier": 8.0, "symbol": "PTB/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -67640,9 +67846,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -67659,7 +67865,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -67754,13 +67960,13 @@ "symbol": "PUFFER/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -67770,7 +67976,7 @@ "tier": 7.0, "symbol": "PUFFER/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -67778,9 +67984,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -67797,7 +68003,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -68185,13 +68391,13 @@ "symbol": "PUNDIX/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -68201,7 +68407,7 @@ "tier": 7.0, "symbol": "PUNDIX/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -68209,9 +68415,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -68228,7 +68434,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -68529,13 +68735,13 @@ "symbol": "Q/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -68545,7 +68751,7 @@ "tier": 8.0, "symbol": "Q/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -68553,9 +68759,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -68572,7 +68778,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -68701,13 +68907,13 @@ "symbol": "QNT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -68717,7 +68923,7 @@ "tier": 9.0, "symbol": "QNT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -68725,9 +68931,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -68744,7 +68950,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -68873,13 +69079,13 @@ "symbol": "QTUM/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -68889,7 +69095,7 @@ "tier": 9.0, "symbol": "QTUM/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -68897,9 +69103,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -68916,7 +69122,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -69270,13 +69476,13 @@ "symbol": "RARE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -69286,7 +69492,7 @@ "tier": 7.0, "symbol": "RARE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -69294,9 +69500,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -69313,7 +69519,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -69546,13 +69752,13 @@ "symbol": "RAYSOL/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -69562,7 +69768,7 @@ "tier": 9.0, "symbol": "RAYSOL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -69570,9 +69776,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -69589,7 +69795,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -69684,13 +69890,13 @@ "symbol": "RDNT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -69700,7 +69906,7 @@ "tier": 7.0, "symbol": "RDNT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -69708,9 +69914,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -69727,7 +69933,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -69839,13 +70045,13 @@ "symbol": "RECALL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -69855,7 +70061,7 @@ "tier": 8.0, "symbol": "RECALL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -69863,9 +70069,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -69882,7 +70088,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -70011,13 +70217,13 @@ "symbol": "RED/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -70027,7 +70233,7 @@ "tier": 9.0, "symbol": "RED/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -70035,9 +70241,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -70054,7 +70260,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -70856,13 +71062,13 @@ "symbol": "REZ/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -70872,7 +71078,7 @@ "tier": 7.0, "symbol": "REZ/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -70880,9 +71086,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -70899,7 +71105,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -70994,13 +71200,13 @@ "symbol": "RIF/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -71010,7 +71216,7 @@ "tier": 7.0, "symbol": "RIF/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -71018,9 +71224,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -71037,7 +71243,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -71149,13 +71355,13 @@ "symbol": "RIVER/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -71165,7 +71371,7 @@ "tier": 8.0, "symbol": "RIVER/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -71173,9 +71379,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -71192,7 +71398,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -71321,13 +71527,13 @@ "symbol": "RLC/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -71337,7 +71543,7 @@ "tier": 9.0, "symbol": "RLC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -71345,9 +71551,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -71364,7 +71570,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -71493,13 +71699,13 @@ "symbol": "RONIN/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -71509,7 +71715,7 @@ "tier": 9.0, "symbol": "RONIN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -71517,9 +71723,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -71536,7 +71742,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -71665,13 +71871,13 @@ "symbol": "ROSE/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -71681,7 +71887,7 @@ "tier": 9.0, "symbol": "ROSE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -71689,9 +71895,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -71708,7 +71914,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -71820,13 +72026,13 @@ "symbol": "RPL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -71836,7 +72042,7 @@ "tier": 8.0, "symbol": "RPL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -71844,9 +72050,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -71863,7 +72069,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -71992,13 +72198,13 @@ "symbol": "RSR/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -72008,7 +72214,7 @@ "tier": 9.0, "symbol": "RSR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -72016,9 +72222,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -72035,7 +72241,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -72164,13 +72370,13 @@ "symbol": "RUNE/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -72180,7 +72386,7 @@ "tier": 9.0, "symbol": "RUNE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -72188,9 +72394,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -72207,7 +72413,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -72336,13 +72542,13 @@ "symbol": "RVN/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -72352,7 +72558,7 @@ "tier": 9.0, "symbol": "RVN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -72360,9 +72566,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -72379,7 +72585,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -72818,13 +73024,13 @@ "symbol": "SAFE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -72834,7 +73040,7 @@ "tier": 8.0, "symbol": "SAFE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -72842,9 +73048,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -72861,7 +73067,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -72973,13 +73179,13 @@ "symbol": "SAGA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -72989,7 +73195,7 @@ "tier": 8.0, "symbol": "SAGA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -72997,9 +73203,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -73016,7 +73222,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -73455,13 +73661,13 @@ "symbol": "SANTOS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -73471,7 +73677,7 @@ "tier": 7.0, "symbol": "SANTOS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -73479,9 +73685,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -73498,7 +73704,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -73610,13 +73816,13 @@ "symbol": "SAPIEN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -73626,7 +73832,7 @@ "tier": 8.0, "symbol": "SAPIEN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -73634,9 +73840,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -73653,7 +73859,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -73869,13 +74075,13 @@ "symbol": "SCR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -73885,7 +74091,7 @@ "tier": 8.0, "symbol": "SCR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -73893,9 +74099,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -73912,7 +74118,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -74243,6 +74449,144 @@ } } ], + "SENT/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "SENT/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": "SENT/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": "SENT/USDT:USDT", + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "3", + "initialLeverage": "10", + "notionalCap": "25000", + "notionalFloor": "10000", + "maintMarginRatio": "0.05", + "cum": "275.0" + } + }, + { + "tier": 4.0, + "symbol": "SENT/USDT:USDT", + "currency": "USDT", + "minNotional": 25000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "4", + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "25000", + "maintMarginRatio": "0.1", + "cum": "1525.0" + } + }, + { + "tier": 5.0, + "symbol": "SENT/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": "SENT/USDT:USDT", + "currency": "USDT", + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.167, + "maxLeverage": 3.0, + "info": { + "bracket": "6", + "initialLeverage": "3", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.167", + "cum": "6975.0" + } + }, + { + "tier": 7.0, + "symbol": "SENT/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": "27725.0" + } + }, + { + "tier": 8.0, + "symbol": "SENT/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": "652725.0" + } + } + ], "SFP/USDT:USDT": [ { "tier": 1.0, @@ -74368,13 +74712,13 @@ "symbol": "SFP/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -74384,7 +74728,7 @@ "tier": 9.0, "symbol": "SFP/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -74392,9 +74736,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -74411,7 +74755,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -74506,13 +74850,13 @@ "symbol": "SHELL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -74522,7 +74866,7 @@ "tier": 7.0, "symbol": "SHELL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -74530,9 +74874,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -74549,7 +74893,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -74678,13 +75022,13 @@ "symbol": "SIGN/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -74694,7 +75038,7 @@ "tier": 9.0, "symbol": "SIGN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -74702,9 +75046,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -74721,7 +75065,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -74816,13 +75160,13 @@ "symbol": "SIREN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -74832,7 +75176,7 @@ "tier": 7.0, "symbol": "SIREN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -74840,9 +75184,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -74859,7 +75203,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -75109,13 +75453,13 @@ "symbol": "SKL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -75125,7 +75469,7 @@ "tier": 8.0, "symbol": "SKL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -75133,9 +75477,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -75152,7 +75496,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -75402,13 +75746,13 @@ "symbol": "SKYAI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -75418,7 +75762,7 @@ "tier": 7.0, "symbol": "SKYAI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -75426,9 +75770,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -75445,7 +75789,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -75627,13 +75971,13 @@ "symbol": "SLP/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -75643,7 +75987,7 @@ "tier": 7.0, "symbol": "SLP/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -75651,9 +75995,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -75670,7 +76014,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -76453,13 +76797,13 @@ "symbol": "SOLV/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 1500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -76469,7 +76813,7 @@ "tier": 8.0, "symbol": "SOLV/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -76477,9 +76821,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "142325.0" } }, { @@ -76496,7 +76840,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "2017325.0" } } ], @@ -76625,13 +76969,13 @@ "symbol": "SOMI/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -76641,7 +76985,7 @@ "tier": 9.0, "symbol": "SOMI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -76649,9 +76993,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -76668,7 +77012,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -76867,13 +77211,13 @@ "symbol": "SOON/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -76883,7 +77227,7 @@ "tier": 7.0, "symbol": "SOON/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -76891,9 +77235,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -76910,7 +77254,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -77039,13 +77383,13 @@ "symbol": "SOPH/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -77055,7 +77399,7 @@ "tier": 9.0, "symbol": "SOPH/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -77063,9 +77407,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -77082,7 +77426,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -77194,13 +77538,13 @@ "symbol": "SPELL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -77210,7 +77554,7 @@ "tier": 8.0, "symbol": "SPELL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -77218,9 +77562,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -77237,7 +77581,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -77710,13 +78054,13 @@ "symbol": "SQD/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -77726,7 +78070,7 @@ "tier": 7.0, "symbol": "SQD/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -77734,9 +78078,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -77753,7 +78097,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -77882,13 +78226,13 @@ "symbol": "SSV/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -77898,7 +78242,7 @@ "tier": 9.0, "symbol": "SSV/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -77906,9 +78250,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -77925,7 +78269,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -78313,13 +78657,13 @@ "symbol": "STEEM/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -78329,7 +78673,7 @@ "tier": 7.0, "symbol": "STEEM/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -78337,9 +78681,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -78356,7 +78700,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -78468,13 +78812,13 @@ "symbol": "STG/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -78484,7 +78828,7 @@ "tier": 8.0, "symbol": "STG/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -78492,9 +78836,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -78511,7 +78855,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -78693,13 +79037,13 @@ "symbol": "STO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -78709,7 +79053,7 @@ "tier": 7.0, "symbol": "STO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -78717,9 +79061,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "96275.0" } }, { @@ -78736,7 +79080,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1971275.0" } } ], @@ -78848,13 +79192,13 @@ "symbol": "STORJ/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -78864,7 +79208,7 @@ "tier": 8.0, "symbol": "STORJ/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -78872,9 +79216,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -78891,7 +79235,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -79160,13 +79504,13 @@ "symbol": "STRK/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.02, "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "notionalCap": "25000", + "notionalCap": "50000", "notionalFloor": "10000", "maintMarginRatio": "0.02", "cum": "75.0" @@ -79176,51 +79520,51 @@ "tier": 4.0, "symbol": "STRK/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 50000.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.025, "maxLeverage": 20.0, "info": { "bracket": "4", "initialLeverage": "20", - "notionalCap": "50000", - "notionalFloor": "25000", + "notionalCap": "100000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", - "cum": "200.0" + "cum": "325.0" } }, { "tier": 5.0, "symbol": "STRK/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 100000.0, + "maxNotional": 175000.0, + "maintenanceMarginRate": 0.0333, + "maxLeverage": 15.0, "info": { "bracket": "5", - "initialLeverage": "10", - "notionalCap": "125000", - "notionalFloor": "50000", - "maintMarginRatio": "0.05", - "cum": "1450.0" + "initialLeverage": "15", + "notionalCap": "175000", + "notionalFloor": "100000", + "maintMarginRatio": "0.0333", + "cum": "1155.0" } }, { "tier": 6.0, "symbol": "STRK/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 175000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "6", - "initialLeverage": "5", + "initialLeverage": "10", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.1", - "cum": "7700.0" + "notionalFloor": "175000", + "maintMarginRatio": "0.05", + "cum": "4077.5" } }, { @@ -79228,54 +79572,71 @@ "symbol": "STRK/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maxNotional": 750000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "7", - "initialLeverage": "4", - "notionalCap": "500000", + "initialLeverage": "5", + "notionalCap": "750000", "notionalFloor": "250000", - "maintMarginRatio": "0.125", - "cum": "13950.0" + "maintMarginRatio": "0.1", + "cum": "16577.5" } }, { "tier": 8.0, "symbol": "STRK/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 4500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "minNotional": 750000.0, + "maxNotional": 1500000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "8", - "initialLeverage": "3", - "notionalCap": "4500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.1667", - "cum": "34800.0" + "initialLeverage": "4", + "notionalCap": "1500000", + "notionalFloor": "750000", + "maintMarginRatio": "0.125", + "cum": "35327.5" } }, { "tier": 9.0, "symbol": "STRK/USDT:USDT", "currency": "USDT", + "minNotional": 1500000.0, + "maxNotional": 4500000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "9", + "initialLeverage": "3", + "notionalCap": "4500000", + "notionalFloor": "1500000", + "maintMarginRatio": "0.1667", + "cum": "97877.5" + } + }, + { + "tier": 10.0, + "symbol": "STRK/USDT:USDT", + "currency": "USDT", "minNotional": 4500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "9", + "bracket": "10", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "4500000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "472727.5" } }, { - "tier": 10.0, + "tier": 11.0, "symbol": "STRK/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -79283,12 +79644,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "10", + "bracket": "11", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "2347727.5" } } ], @@ -79882,13 +80243,13 @@ "symbol": "SUN/USDT:USDT", "currency": "USDT", "minNotional": 300000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "300000", "maintMarginRatio": "0.1667", "cum": "21110.0" @@ -79898,7 +80259,7 @@ "tier": 8.0, "symbol": "SUN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -79906,9 +80267,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "395960.0" + "cum": "62760.0" } }, { @@ -79925,7 +80286,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2270960.0" + "cum": "1937760.0" } } ], @@ -80054,13 +80415,13 @@ "symbol": "SUPER/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -80070,7 +80431,7 @@ "tier": 9.0, "symbol": "SUPER/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -80078,9 +80439,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -80097,7 +80458,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -80381,13 +80742,13 @@ "symbol": "SWARMS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -80397,7 +80758,7 @@ "tier": 7.0, "symbol": "SWARMS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -80405,9 +80766,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -80424,7 +80785,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -80640,13 +81001,13 @@ "symbol": "SXP/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -80656,7 +81017,7 @@ "tier": 8.0, "symbol": "SXP/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -80664,9 +81025,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -80683,7 +81044,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -80778,13 +81139,13 @@ "symbol": "SXT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, + "maxNotional": 400000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { "bracket": "6", "initialLeverage": "4", - "notionalCap": "500000", + "notionalCap": "400000", "notionalFloor": "250000", "maintMarginRatio": "0.125", "cum": "13825.0" @@ -80794,24 +81155,24 @@ "tier": 7.0, "symbol": "SXT/USDT:USDT", "currency": "USDT", - "minNotional": 500000.0, - "maxNotional": 4500000.0, + "minNotional": 400000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", - "notionalFloor": "500000", + "notionalCap": "500000", + "notionalFloor": "400000", "maintMarginRatio": "0.1667", - "cum": "34675.0" + "cum": "30505.0" } }, { "tier": 8.0, "symbol": "SXT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -80819,9 +81180,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "409525.0" + "cum": "72155.0" } }, { @@ -80838,7 +81199,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284525.0" + "cum": "1947155.0" } } ], @@ -80933,13 +81294,13 @@ "symbol": "SYN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -80949,7 +81310,7 @@ "tier": 7.0, "symbol": "SYN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -80957,9 +81318,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -80976,7 +81337,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -80986,15 +81347,15 @@ "symbol": "SYRUP/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 500.0, - "maintenanceMarginRate": 0.01, - "maxLeverage": 75.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.015, + "maxLeverage": 50.0, "info": { "bracket": "1", - "initialLeverage": "75", - "notionalCap": "500", + "initialLeverage": "50", + "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.01", + "maintMarginRatio": "0.015", "cum": "0.0" } }, @@ -81002,38 +81363,21 @@ "tier": 2.0, "symbol": "SYRUP/USDT:USDT", "currency": "USDT", - "minNotional": 500.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, - "info": { - "bracket": "2", - "initialLeverage": "50", - "notionalCap": "5000", - "notionalFloor": "500", - "maintMarginRatio": "0.015", - "cum": "2.5" - } - }, - { - "tier": 3.0, - "symbol": "SYRUP/USDT:USDT", - "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.02, "maxLeverage": 25.0, "info": { - "bracket": "3", + "bracket": "2", "initialLeverage": "25", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.02", - "cum": "27.5" + "cum": "25.0" } }, { - "tier": 4.0, + "tier": 3.0, "symbol": "SYRUP/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, @@ -81041,16 +81385,16 @@ "maintenanceMarginRate": 0.025, "maxLeverage": 20.0, "info": { - "bracket": "4", + "bracket": "3", "initialLeverage": "20", "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.025", - "cum": "77.5" + "cum": "75.0" } }, { - "tier": 5.0, + "tier": 4.0, "symbol": "SYRUP/USDT:USDT", "currency": "USDT", "minNotional": 25000.0, @@ -81058,16 +81402,16 @@ "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { - "bracket": "5", + "bracket": "4", "initialLeverage": "10", "notionalCap": "62500", "notionalFloor": "25000", "maintMarginRatio": "0.05", - "cum": "702.5" + "cum": "700.0" } }, { - "tier": 6.0, + "tier": 5.0, "symbol": "SYRUP/USDT:USDT", "currency": "USDT", "minNotional": 62500.0, @@ -81075,16 +81419,16 @@ "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "5", "notionalCap": "125000", "notionalFloor": "62500", "maintMarginRatio": "0.1", - "cum": "3827.5" + "cum": "3825.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "SYRUP/USDT:USDT", "currency": "USDT", "minNotional": 125000.0, @@ -81092,50 +81436,50 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "4", "notionalCap": "250000", "notionalFloor": "125000", "maintMarginRatio": "0.125", - "cum": "6952.5" + "cum": "6950.0" + } + }, + { + "tier": 7.0, + "symbol": "SYRUP/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": "SYRUP/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 4500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "8", - "initialLeverage": "3", - "notionalCap": "4500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17377.5" - } - }, - { - "tier": 9.0, - "symbol": "SYRUP/USDT:USDT", - "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392227.5" + "cum": "59025.0" } }, { - "tier": 10.0, + "tier": 9.0, "symbol": "SYRUP/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -81143,12 +81487,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "10", + "bracket": "9", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267227.5" + "cum": "1934025.0" } } ], @@ -81243,13 +81587,13 @@ "symbol": "SYS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -81259,7 +81603,7 @@ "tier": 7.0, "symbol": "SYS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -81267,9 +81611,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -81286,7 +81630,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -81398,13 +81742,13 @@ "symbol": "T/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -81414,7 +81758,7 @@ "tier": 8.0, "symbol": "T/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -81422,9 +81766,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -81441,7 +81785,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -81640,13 +81984,13 @@ "symbol": "TAC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -81656,7 +82000,7 @@ "tier": 7.0, "symbol": "TAC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -81664,9 +82008,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -81683,7 +82027,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -81778,13 +82122,13 @@ "symbol": "TAG/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -81794,7 +82138,7 @@ "tier": 7.0, "symbol": "TAG/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -81802,9 +82146,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -81821,7 +82165,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -81916,13 +82260,13 @@ "symbol": "TAIKO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -81932,7 +82276,7 @@ "tier": 7.0, "symbol": "TAIKO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -81940,9 +82284,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -81959,7 +82303,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -82485,13 +82829,13 @@ "symbol": "THE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -82501,7 +82845,7 @@ "tier": 7.0, "symbol": "THE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -82509,9 +82853,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -82528,7 +82872,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -83105,13 +83449,13 @@ "symbol": "TLM/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -83121,7 +83465,7 @@ "tier": 7.0, "symbol": "TLM/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -83129,9 +83473,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -83148,7 +83492,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -83243,13 +83587,13 @@ "symbol": "TNSR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -83259,7 +83603,7 @@ "tier": 7.0, "symbol": "TNSR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -83267,9 +83611,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -83286,7 +83630,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -83708,13 +84052,13 @@ "symbol": "TOSHI/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -83724,7 +84068,7 @@ "tier": 9.0, "symbol": "TOSHI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -83732,9 +84076,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -83751,7 +84095,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -83863,13 +84207,13 @@ "symbol": "TOWNS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -83879,7 +84223,7 @@ "tier": 8.0, "symbol": "TOWNS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -83887,9 +84231,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -83906,7 +84250,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -84018,13 +84362,13 @@ "symbol": "TRADOOR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -84034,7 +84378,7 @@ "tier": 8.0, "symbol": "TRADOOR/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -84042,9 +84386,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -84061,7 +84405,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -84362,13 +84706,13 @@ "symbol": "TREE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -84378,7 +84722,7 @@ "tier": 8.0, "symbol": "TREE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -84386,9 +84730,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -84405,7 +84749,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -84655,13 +84999,13 @@ "symbol": "TRU/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -84671,7 +85015,7 @@ "tier": 7.0, "symbol": "TRU/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -84679,9 +85023,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -84698,7 +85042,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -85120,13 +85464,13 @@ "symbol": "TRUST/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -85136,7 +85480,7 @@ "tier": 7.0, "symbol": "TRUST/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -85144,9 +85488,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -85163,7 +85507,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -85275,13 +85619,13 @@ "symbol": "TRUTH/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -85291,7 +85635,7 @@ "tier": 8.0, "symbol": "TRUTH/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -85299,9 +85643,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -85318,7 +85662,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -85585,13 +85929,13 @@ "symbol": "TST/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -85601,7 +85945,7 @@ "tier": 7.0, "symbol": "TST/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -85609,9 +85953,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -85628,7 +85972,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -85757,13 +86101,13 @@ "symbol": "TURBO/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -85773,7 +86117,7 @@ "tier": 9.0, "symbol": "TURBO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -85781,9 +86125,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -85800,7 +86144,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -85912,13 +86256,13 @@ "symbol": "TURTLE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -85928,7 +86272,7 @@ "tier": 8.0, "symbol": "TURTLE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -85936,9 +86280,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -85955,7 +86299,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -86050,13 +86394,13 @@ "symbol": "TUT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -86066,7 +86410,7 @@ "tier": 7.0, "symbol": "TUT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -86074,9 +86418,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -86093,7 +86437,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -86222,13 +86566,13 @@ "symbol": "TWT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -86238,7 +86582,7 @@ "tier": 9.0, "symbol": "TWT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -86246,9 +86590,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -86265,7 +86609,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -86360,13 +86704,13 @@ "symbol": "UAI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -86376,7 +86720,7 @@ "tier": 7.0, "symbol": "UAI/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -86384,9 +86728,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -86403,7 +86747,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -86515,13 +86859,13 @@ "symbol": "UB/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "2000000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -86531,7 +86875,7 @@ "tier": 8.0, "symbol": "UB/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 2000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -86539,9 +86883,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "183975.0" } }, { @@ -86558,7 +86902,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "2058975.0" } } ], @@ -86670,13 +87014,13 @@ "symbol": "UMA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -86686,7 +87030,7 @@ "tier": 8.0, "symbol": "UMA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -86694,9 +87038,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -86713,7 +87057,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -87411,13 +87755,13 @@ "symbol": "USELESS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -87427,7 +87771,7 @@ "tier": 8.0, "symbol": "USELESS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -87435,9 +87779,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -87454,7 +87798,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -87566,13 +87910,13 @@ "symbol": "USTC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -87582,7 +87926,7 @@ "tier": 8.0, "symbol": "USTC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -87590,9 +87934,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -87609,7 +87953,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -87721,13 +88065,13 @@ "symbol": "USUAL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -87737,7 +88081,7 @@ "tier": 8.0, "symbol": "USUAL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -87745,9 +88089,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -87764,7 +88108,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -87980,13 +88324,13 @@ "symbol": "VANA/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -87996,7 +88340,7 @@ "tier": 9.0, "symbol": "VANA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -88004,9 +88348,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -88023,7 +88367,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -88135,13 +88479,13 @@ "symbol": "VANRY/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -88151,7 +88495,7 @@ "tier": 8.0, "symbol": "VANRY/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -88159,9 +88503,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -88178,7 +88522,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -88273,13 +88617,13 @@ "symbol": "VELODROME/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -88289,7 +88633,7 @@ "tier": 7.0, "symbol": "VELODROME/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -88297,9 +88641,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -88316,7 +88660,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -88738,13 +89082,13 @@ "symbol": "VFY/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -88754,7 +89098,7 @@ "tier": 8.0, "symbol": "VFY/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -88762,9 +89106,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -88781,7 +89125,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -88876,13 +89220,13 @@ "symbol": "VIC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -88892,7 +89236,7 @@ "tier": 7.0, "symbol": "VIC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -88900,9 +89244,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -88919,7 +89263,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -89135,13 +89479,13 @@ "symbol": "VINE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -89151,7 +89495,7 @@ "tier": 8.0, "symbol": "VINE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -89159,9 +89503,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -89178,7 +89522,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -89617,13 +89961,13 @@ "symbol": "VTHO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -89633,7 +89977,7 @@ "tier": 8.0, "symbol": "VTHO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -89641,9 +89985,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -89660,7 +90004,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -89772,13 +90116,13 @@ "symbol": "VVV/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -89788,7 +90132,7 @@ "tier": 8.0, "symbol": "VVV/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -89796,9 +90140,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -89815,7 +90159,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -90133,13 +90477,13 @@ "symbol": "WAL/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -90149,7 +90493,7 @@ "tier": 9.0, "symbol": "WAL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -90157,9 +90501,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -90176,7 +90520,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -90392,13 +90736,13 @@ "symbol": "WAXP/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -90408,7 +90752,7 @@ "tier": 7.0, "symbol": "WAXP/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -90416,9 +90760,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -90435,7 +90779,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -90547,13 +90891,13 @@ "symbol": "WCT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -90563,7 +90907,7 @@ "tier": 8.0, "symbol": "WCT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -90571,9 +90915,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -90590,7 +90934,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -91649,13 +91993,13 @@ "symbol": "WOO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -91665,7 +92009,7 @@ "tier": 8.0, "symbol": "WOO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -91673,9 +92017,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -91692,7 +92036,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -91804,13 +92148,13 @@ "symbol": "XAI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -91820,7 +92164,7 @@ "tier": 8.0, "symbol": "XAI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -91828,9 +92172,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -91847,7 +92191,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -91959,13 +92303,13 @@ "symbol": "XAN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -91975,7 +92319,7 @@ "tier": 8.0, "symbol": "XAN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -91983,9 +92327,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "100675.0" } }, { @@ -92002,7 +92346,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1975675.0" } } ], @@ -92012,15 +92356,15 @@ "symbol": "XCN/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.01, - "maxLeverage": 75.0, + "maxNotional": 30000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "75", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "30000", "notionalFloor": "0", - "maintMarginRatio": "0.01", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -92028,153 +92372,85 @@ "tier": 2.0, "symbol": "XCN/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "minNotional": 30000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "50", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.015", - "cum": "25.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "30000", + "maintMarginRatio": "0.1", + "cum": "1500.0" } }, { "tier": 3.0, "symbol": "XCN/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "minNotional": 50000.0, + "maxNotional": 200000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "25", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.02", - "cum": "75.0" + "initialLeverage": "4", + "notionalCap": "200000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2750.0" } }, { "tier": 4.0, "symbol": "XCN/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 200000.0, + "maxNotional": 300000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "20", - "notionalCap": "50000", - "notionalFloor": "25000", - "maintMarginRatio": "0.025", - "cum": "200.0" + "initialLeverage": "3", + "notionalCap": "300000", + "notionalFloor": "200000", + "maintMarginRatio": "0.1667", + "cum": "11090.0" } }, { "tier": 5.0, "symbol": "XCN/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 300000.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "5", - "initialLeverage": "10", - "notionalCap": "125000", - "notionalFloor": "50000", - "maintMarginRatio": "0.05", - "cum": "1450.0" + "initialLeverage": "2", + "notionalCap": "500000", + "notionalFloor": "300000", + "maintMarginRatio": "0.25", + "cum": "36080.0" } }, { "tier": 6.0, "symbol": "XCN/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, - "info": { - "bracket": "6", - "initialLeverage": "5", - "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.1", - "cum": "7700.0" - } - }, - { - "tier": 7.0, - "symbol": "XCN/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": "XCN/USDT:USDT", - "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "8", - "initialLeverage": "3", - "notionalCap": "4500000", - "notionalFloor": "500000", - "maintMarginRatio": "0.1667", - "cum": "34800.0" - } - }, - { - "tier": 9.0, - "symbol": "XCN/USDT:USDT", - "currency": "USDT", - "minNotional": 4500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "9", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "4500000", - "maintMarginRatio": "0.25", - "cum": "409650.0" - } - }, - { - "tier": 10.0, - "symbol": "XCN/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "maxNotional": 800000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "10", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "800000", + "notionalFloor": "500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "161080.0" } } ], @@ -92734,13 +93010,13 @@ "symbol": "XNY/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -92750,7 +93026,7 @@ "tier": 7.0, "symbol": "XNY/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -92758,9 +93034,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -92777,7 +93053,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -93732,13 +94008,13 @@ "symbol": "XVG/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17250.0" @@ -93748,7 +94024,7 @@ "tier": 8.0, "symbol": "XVG/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -93756,9 +94032,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392100.0" + "cum": "58900.0" } }, { @@ -93775,7 +94051,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267100.0" + "cum": "1933900.0" } } ], @@ -93887,13 +94163,13 @@ "symbol": "XVS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -93903,7 +94179,7 @@ "tier": 8.0, "symbol": "XVS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -93911,9 +94187,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -93930,7 +94206,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -94025,13 +94301,13 @@ "symbol": "YALA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -94041,7 +94317,7 @@ "tier": 7.0, "symbol": "YALA/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -94049,9 +94325,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -94068,7 +94344,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -94197,13 +94473,13 @@ "symbol": "YB/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -94213,7 +94489,7 @@ "tier": 9.0, "symbol": "YB/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -94221,9 +94497,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -94240,7 +94516,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -94369,13 +94645,13 @@ "symbol": "YFI/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -94385,7 +94661,7 @@ "tier": 9.0, "symbol": "YFI/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -94393,9 +94669,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -94412,7 +94688,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -94524,13 +94800,13 @@ "symbol": "YGG/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -94540,7 +94816,7 @@ "tier": 8.0, "symbol": "YGG/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -94548,9 +94824,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -94567,7 +94843,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -94679,13 +94955,13 @@ "symbol": "ZBT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -94695,7 +94971,7 @@ "tier": 8.0, "symbol": "ZBT/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -94703,9 +94979,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -94722,7 +94998,179 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" + } + } + ], + "ZEC/USDC:USDC": [ + { + "tier": 1.0, + "symbol": "ZEC/USDC:USDC", + "currency": "USDC", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 75.0, + "info": { + "bracket": "1", + "initialLeverage": "75", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.01", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "symbol": "ZEC/USDC:USDC", + "currency": "USDC", + "minNotional": 5000.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.015, + "maxLeverage": 50.0, + "info": { + "bracket": "2", + "initialLeverage": "50", + "notionalCap": "10000", + "notionalFloor": "5000", + "maintMarginRatio": "0.015", + "cum": "25.0" + } + }, + { + "tier": 3.0, + "symbol": "ZEC/USDC:USDC", + "currency": "USDC", + "minNotional": 10000.0, + "maxNotional": 25000.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, + "info": { + "bracket": "3", + "initialLeverage": "25", + "notionalCap": "25000", + "notionalFloor": "10000", + "maintMarginRatio": "0.02", + "cum": "75.0" + } + }, + { + "tier": 4.0, + "symbol": "ZEC/USDC:USDC", + "currency": "USDC", + "minNotional": 25000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, + "info": { + "bracket": "4", + "initialLeverage": "20", + "notionalCap": "50000", + "notionalFloor": "25000", + "maintMarginRatio": "0.025", + "cum": "200.0" + } + }, + { + "tier": 5.0, + "symbol": "ZEC/USDC:USDC", + "currency": "USDC", + "minNotional": 50000.0, + "maxNotional": 125000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, + "info": { + "bracket": "5", + "initialLeverage": "10", + "notionalCap": "125000", + "notionalFloor": "50000", + "maintMarginRatio": "0.05", + "cum": "1450.0" + } + }, + { + "tier": 6.0, + "symbol": "ZEC/USDC:USDC", + "currency": "USDC", + "minNotional": 125000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, + "info": { + "bracket": "6", + "initialLeverage": "5", + "notionalCap": "250000", + "notionalFloor": "125000", + "maintMarginRatio": "0.1", + "cum": "7700.0" + } + }, + { + "tier": 7.0, + "symbol": "ZEC/USDC:USDC", + "currency": "USDC", + "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": "ZEC/USDC:USDC", + "currency": "USDC", + "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": "ZEC/USDC:USDC", + "currency": "USDC", + "minNotional": 1000000.0, + "maxNotional": 7500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "9", + "initialLeverage": "2", + "notionalCap": "7500000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.25", + "cum": "118100.0" + } + }, + { + "tier": 10.0, + "symbol": "ZEC/USDC:USDC", + "currency": "USDC", + "minNotional": 7500000.0, + "maxNotional": 12500000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "10", + "initialLeverage": "1", + "notionalCap": "12500000", + "notionalFloor": "7500000", + "maintMarginRatio": "0.5", + "cum": "1993100.0" } } ], @@ -95316,13 +95764,13 @@ "symbol": "ZETA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -95332,7 +95780,7 @@ "tier": 8.0, "symbol": "ZETA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -95340,9 +95788,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -95359,7 +95807,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -95488,13 +95936,13 @@ "symbol": "ZIL/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -95504,7 +95952,7 @@ "tier": 9.0, "symbol": "ZIL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -95512,9 +95960,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -95531,7 +95979,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -95660,13 +96108,13 @@ "symbol": "ZK/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1500000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -95676,7 +96124,7 @@ "tier": 9.0, "symbol": "ZK/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -95684,9 +96132,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1500000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "159750.0" } }, { @@ -95703,7 +96151,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "2034750.0" } } ], @@ -95815,13 +96263,13 @@ "symbol": "ZKC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -95831,7 +96279,7 @@ "tier": 8.0, "symbol": "ZKC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -95839,9 +96287,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -95858,7 +96306,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -95970,13 +96418,13 @@ "symbol": "ZKJ/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -95986,7 +96434,7 @@ "tier": 8.0, "symbol": "ZKJ/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -95994,9 +96442,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -96013,7 +96461,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -96142,13 +96590,13 @@ "symbol": "ZORA/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -96158,7 +96606,7 @@ "tier": 9.0, "symbol": "ZORA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -96166,9 +96614,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -96185,7 +96633,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -96280,13 +96728,13 @@ "symbol": "ZRC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -96296,7 +96744,7 @@ "tier": 7.0, "symbol": "ZRC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -96304,9 +96752,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -96323,7 +96771,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -96452,13 +96900,13 @@ "symbol": "ZRO/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -96468,7 +96916,7 @@ "tier": 9.0, "symbol": "ZRO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -96476,9 +96924,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -96495,7 +96943,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -96624,13 +97072,13 @@ "symbol": "ZRX/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -96640,7 +97088,7 @@ "tier": 9.0, "symbol": "ZRX/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -96648,9 +97096,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -96667,7 +97115,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], From 50402c5cdc3e4d025b1cc74848b0218bfc73149e Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 20 Nov 2025 06:54:22 +0100 Subject: [PATCH 040/243] test: add explicit tests for price_crossed --- tests/exchange/test_exchange.py | 58 +++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 634034a37..f418358ba 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -1110,6 +1110,64 @@ def test_create_dry_run_order_fees( assert order1["fee"]["rate"] == fee +@pytest.mark.parametrize( + "side,limit,offset,expected", + [ + ("buy", 46.0, 0.0, True), + ("buy", 26.0, 0.0, True), + ("buy", 25.55, 0.0, False), + ("buy", 1, 0.0, False), # Very far away + ("sell", 25.5, 0.0, True), + ("sell", 50, 0.0, False), # Very far away + ("sell", 25.58, 0.0, False), + ("sell", 25.563, 0.01, False), + ("sell", 5.563, 0.01, True), + ], +) +def test__dry_is_price_crossed_with_orderbook( + default_conf, mocker, order_book_l2_usd, side, limit, offset, expected +): + # Best bid 25.563 + # Best ask 25.566 + exchange = get_patched_exchange(mocker, default_conf) + mocker.patch(f"{EXMS}.exchange_has", return_value=True) + exchange.fetch_l2_order_book = order_book_l2_usd + orderbook = order_book_l2_usd.return_value + result = exchange._dry_is_price_crossed( + "LTC/USDT", side, limit, orderbook=orderbook, offset=offset + ) + assert result is expected + assert order_book_l2_usd.call_count == 0 + + # Test without passing orderbook + order_book_l2_usd.reset_mock() + result = exchange._dry_is_price_crossed("LTC/USDT", side, limit, offset=offset) + assert result is expected + + +def test__dry_is_price_crossed_empty_orderbook(default_conf, mocker): + exchange = get_patched_exchange(mocker, default_conf) + mocker.patch(f"{EXMS}.exchange_has", return_value=True) + empty_book = {"asks": [], "bids": []} + assert not exchange._dry_is_price_crossed("LTC/USDT", "buy", 100.0, orderbook=empty_book) + + +def test__dry_is_price_crossed_fetches_orderbook(default_conf, mocker, order_book_l2_usd): + exchange = get_patched_exchange(mocker, default_conf) + mocker.patch(f"{EXMS}.exchange_has", return_value=True) + exchange.fetch_l2_order_book = order_book_l2_usd + assert exchange._dry_is_price_crossed("LTC/USDT", "buy", 26.0) + assert order_book_l2_usd.call_count == 1 + + +def test__dry_is_price_crossed_without_orderbook_support(default_conf, mocker): + exchange = get_patched_exchange(mocker, default_conf) + exchange.fetch_l2_order_book = MagicMock() + mocker.patch(f"{EXMS}.exchange_has", return_value=False) + assert exchange._dry_is_price_crossed("LTC/USDT", "buy", 1.0) + assert exchange.fetch_l2_order_book.call_count == 0 + + @pytest.mark.parametrize( "side,price,filled,converted", [ From 060a1543e9705888b30f38fbd904141a63cdb6c7 Mon Sep 17 00:00:00 2001 From: Stefano Date: Thu, 20 Nov 2025 15:13:56 +0900 Subject: [PATCH 041/243] change to exclude optimize mode --- freqtrade/exchange/bitget.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/bitget.py b/freqtrade/exchange/bitget.py index d4087550e..1e4b3c13c 100644 --- a/freqtrade/exchange/bitget.py +++ b/freqtrade/exchange/bitget.py @@ -4,7 +4,7 @@ from datetime import datetime, timedelta import ccxt from freqtrade.constants import BuySell -from freqtrade.enums import TRADE_MODES, CandleType, MarginMode, TradingMode +from freqtrade.enums import OPTIMIZE_MODES, CandleType, MarginMode, TradingMode from freqtrade.exceptions import ( DDosProtection, OperationalException, @@ -245,7 +245,7 @@ class Bitget(Exchange): :param pair: Market symbol :return: Datetime if the pair gonna be delisted, None otherwise """ - if self._config["runmode"] not in TRADE_MODES: + if self._config["runmode"] in OPTIMIZE_MODES: return None if self.trading_mode == TradingMode.FUTURES: From 650cdf5eb34798329dfe55a04702efd3f12a6ffb Mon Sep 17 00:00:00 2001 From: Stefano Date: Thu, 20 Nov 2025 15:16:11 +0900 Subject: [PATCH 042/243] change to exclude optimize mode --- freqtrade/exchange/bybit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/bybit.py b/freqtrade/exchange/bybit.py index 76daaed47..75e33fdfa 100644 --- a/freqtrade/exchange/bybit.py +++ b/freqtrade/exchange/bybit.py @@ -4,7 +4,7 @@ from datetime import datetime, timedelta import ccxt from freqtrade.constants import BuySell -from freqtrade.enums import TRADE_MODES, MarginMode, PriceType, TradingMode +from freqtrade.enums import OPTIMIZE_MODES, MarginMode, PriceType, TradingMode from freqtrade.exceptions import DDosProtection, ExchangeError, OperationalException, TemporaryError from freqtrade.exchange import Exchange from freqtrade.exchange.common import retrier @@ -304,7 +304,7 @@ class Bybit(Exchange): :param pair: Market symbol :return: Datetime if the pair gonna be delisted, None otherwise """ - if self._config["runmode"] not in TRADE_MODES: + if self._config["runmode"] in OPTIMIZE_MODES: return None if self.trading_mode == TradingMode.FUTURES: From 92fd9411e51e26f013a8ba7144bf7aa499a5a891 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 20 Nov 2025 19:31:28 +0100 Subject: [PATCH 043/243] chore: simplify import --- freqtrade/exchange/bybit.py | 2 +- tests/exchange/test_bybit.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/bybit.py b/freqtrade/exchange/bybit.py index 75e33fdfa..300344e19 100644 --- a/freqtrade/exchange/bybit.py +++ b/freqtrade/exchange/bybit.py @@ -10,7 +10,7 @@ from freqtrade.exchange import Exchange from freqtrade.exchange.common import retrier from freqtrade.exchange.exchange_types import CcxtOrder, FtHas from freqtrade.misc import deep_merge_dicts -from freqtrade.util.datetime_helpers import dt_from_ts, dt_ts +from freqtrade.util import dt_from_ts, dt_ts logger = logging.getLogger(__name__) diff --git a/tests/exchange/test_bybit.py b/tests/exchange/test_bybit.py index d5d169b3d..fa5f29dfe 100644 --- a/tests/exchange/test_bybit.py +++ b/tests/exchange/test_bybit.py @@ -5,7 +5,7 @@ from unittest.mock import MagicMock, PropertyMock import pytest from freqtrade.enums import MarginMode, RunMode, TradingMode -from freqtrade.util.datetime_helpers import dt_utc +from freqtrade.util import dt_utc from tests.conftest import EXMS, get_mock_coro, get_patched_exchange, log_has from tests.exchange.test_exchange import ccxt_exceptionhandlers From d02e5f2b90b9f5d654c4ba90b5a733ede53863c8 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 20 Nov 2025 19:34:51 +0100 Subject: [PATCH 044/243] chore: simplify imports --- freqtrade/exchange/bitget.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/exchange/bitget.py b/freqtrade/exchange/bitget.py index 1e4b3c13c..3351cda88 100644 --- a/freqtrade/exchange/bitget.py +++ b/freqtrade/exchange/bitget.py @@ -14,7 +14,7 @@ from freqtrade.exceptions import ( from freqtrade.exchange import Exchange from freqtrade.exchange.common import API_RETRY_COUNT, retrier from freqtrade.exchange.exchange_types import CcxtOrder, FtHas -from freqtrade.util.datetime_helpers import dt_from_ts, dt_now, dt_ts +from freqtrade.util import dt_from_ts, dt_now, dt_ts logger = logging.getLogger(__name__) From 2c6ff3f018023f693f5c5fb3baf5dd46da1adef3 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 20 Nov 2025 20:30:43 +0100 Subject: [PATCH 045/243] docs: update supported exchanges for Delist Filter --- docs/includes/pairlists.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/includes/pairlists.md b/docs/includes/pairlists.md index c19e779e3..2ee7533f2 100644 --- a/docs/includes/pairlists.md +++ b/docs/includes/pairlists.md @@ -417,7 +417,7 @@ This filter allows freqtrade to ignore pairs until they have been listed for at Removes pairs that will be delisted on the exchange maximum `max_days_from_now` days from now (defaults to `0` which remove all future delisted pairs no matter how far from now). Currently this filter only supports following exchanges: !!! Note "Available exchanges" - Delist filter is only available on Binance, where Binance Futures will work for both dry and live modes, while Binance Spot is limited to live mode (for technical reasons). + Delist filter is available on Bybit Futures, Bitget Futures and Binance, where Binance Futures will work for both dry and live modes, while Binance Spot is limited to live mode (for technical reasons). !!! Warning "Backtesting" `DelistFilter` does not support backtesting mode. From 220480327c76c37ec6c7ca2789fb2da2db6063d0 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 21 Nov 2025 07:11:05 +0100 Subject: [PATCH 046/243] test: add explicit test for dry_order_filled --- tests/exchange/test_exchange.py | 52 +++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index f418358ba..63dd0be94 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -1168,6 +1168,58 @@ def test__dry_is_price_crossed_without_orderbook_support(default_conf, mocker): assert exchange.fetch_l2_order_book.call_count == 0 +@pytest.mark.parametrize( + "crossed,immediate,side,amount,expected_status,expected_fee_rate,expected_calls,taker_or_maker", + [ + (True, True, "buy", 2.0, "closed", 0.005, 1, "taker"), + (True, False, "sell", 1.5, "closed", 0.005, 1, "maker"), + (False, False, "sell", 1.0, "open", None, 0, None), + ], +) +def test_check_dry_limit_order_filled_parametrized( + default_conf, + mocker, + crossed, + immediate, + side, + amount, + expected_status, + expected_fee_rate, + expected_calls, + taker_or_maker, +): + exchange = get_patched_exchange(mocker, default_conf) + mocker.patch(f"{EXMS}._dry_is_price_crossed", return_value=crossed) + fee_mock = mocker.patch(f"{EXMS}.get_fee", return_value=0.005) + + order = { + "symbol": "LTC/USDT", + "status": "open", + "type": "limit", + "side": side, + "price": 25.0, + "amount": amount, + "filled": 0.0, + "remaining": amount, + "cost": 25.0 * amount, + "fee": None, + } + + result = exchange.check_dry_limit_order_filled(order, immediate=immediate) + + assert result["status"] == expected_status + if crossed: + assert result["filled"] == amount + assert result["remaining"] == 0.0 + assert result["fee"]["rate"] == expected_fee_rate + fee_mock.assert_called_once_with("LTC/USDT", taker_or_maker=taker_or_maker) + else: + assert result["filled"] == 0.0 + assert result["remaining"] == amount + assert result["fee"] is None + assert fee_mock.call_count == expected_calls + + @pytest.mark.parametrize( "side,price,filled,converted", [ From 2f392b483c5216daab306f2e9bbd1580bf192f17 Mon Sep 17 00:00:00 2001 From: Stefano Date: Sat, 22 Nov 2025 16:39:35 +0900 Subject: [PATCH 047/243] add liq line --- freqtrade/rpc/telegram.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 7b3006b40..5c896fec0 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -834,7 +834,12 @@ class Telegram(RPCHandler): "*Initial Stoploss:* `{initial_stop_loss_abs:.8f}` " "`({initial_stop_loss_ratio:.2%})`" ) - + # Adding liquidation only if it is not None + lines.append( + f"*Liquidation:* `{round_value(r['liquidation_price'], 8)}`" + if r["liquidation_price"] + else "" + ) # Adding stoploss and stoploss percentage only if it is not None lines.append( f"*Stoploss:* `{round_value(r['stop_loss_abs'], 8)}` " From 18f73af6e6a699827a98f74d9dfac0b2ab0372b2 Mon Sep 17 00:00:00 2001 From: Stefano Date: Sat, 22 Nov 2025 16:52:43 +0900 Subject: [PATCH 048/243] use get to return None on trade with no liq price --- freqtrade/rpc/telegram.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 5c896fec0..0ffb70ceb 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -837,7 +837,7 @@ class Telegram(RPCHandler): # Adding liquidation only if it is not None lines.append( f"*Liquidation:* `{round_value(r['liquidation_price'], 8)}`" - if r["liquidation_price"] + if r.get("liquidation_price") else "" ) # Adding stoploss and stoploss percentage only if it is not None From 1513ba9af96d64e027aa8cc2c94198cb34a08283 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 22 Nov 2025 12:48:51 +0100 Subject: [PATCH 049/243] chore: Move liquidation up a line --- freqtrade/rpc/telegram.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 0ffb70ceb..da2efdf9e 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -825,6 +825,10 @@ class Telegram(RPCHandler): # Append empty line to improve readability lines.append(" ") + # Adding liquidation only if it is not None + if liquidation := r.get("liquidation_price"): + lines.append(f"*Liquidation:* `{round_value(liquidation, 8)}`") + if ( r["stop_loss_abs"] != r["initial_stop_loss_abs"] and r["initial_stop_loss_ratio"] is not None @@ -834,12 +838,7 @@ class Telegram(RPCHandler): "*Initial Stoploss:* `{initial_stop_loss_abs:.8f}` " "`({initial_stop_loss_ratio:.2%})`" ) - # Adding liquidation only if it is not None - lines.append( - f"*Liquidation:* `{round_value(r['liquidation_price'], 8)}`" - if r.get("liquidation_price") - else "" - ) + # Adding stoploss and stoploss percentage only if it is not None lines.append( f"*Stoploss:* `{round_value(r['stop_loss_abs'], 8)}` " From ce78039ea8ef2b0bd325caf18efe8875291d5585 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 22 Nov 2025 13:26:50 +0100 Subject: [PATCH 050/243] refactor: don't do delayed formatting on status message --- freqtrade/rpc/telegram.py | 53 +++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index da2efdf9e..5dd7d728f 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -774,26 +774,25 @@ class Telegram(RPCHandler): r["realized_profit_r"] = fmt_coin(r["realized_profit"], r["quote_currency"]) r["total_profit_abs_r"] = fmt_coin(r["total_profit_abs"], r["quote_currency"]) lines = [ - "*Trade ID:* `{trade_id}`" + (" `(since {open_date_hum})`" if r["is_open"] else ""), - "*Current Pair:* {pair}", + f"*Trade ID:* `{r['trade_id']}`" + + (f" `(since {r['open_date_hum']})`" if r["is_open"] else ""), + f"*Current Pair:* {r['pair']}", ( f"*Direction:* {'`Short`' if r.get('is_short') else '`Long`'}" - + " ` ({leverage}x)`" - if r.get("leverage") - else "" + + (f" ` ({r['leverage']}x)`" if r.get("leverage") else "") ), - "*Amount:* `{amount} ({stake_amount_r})`", - "*Total invested:* `{max_stake_amount_r}`" if position_adjust else "", - "*Enter Tag:* `{enter_tag}`" if r["enter_tag"] else "", - "*Exit Reason:* `{exit_reason}`" if r["exit_reason"] else "", + f"*Amount:* `{r['amount']} ({r['stake_amount_r']})`", + f"*Total invested:* `{r['max_stake_amount_r']}`" if position_adjust else "", + f"*Enter Tag:* `{r['enter_tag']}`" if r["enter_tag"] else "", + f"*Exit Reason:* `{r['exit_reason']}`" if r["exit_reason"] else "", ] if position_adjust: max_buy_str = f"/{max_entries + 1}" if (max_entries > 0) else "" lines.extend( [ - "*Number of Entries:* `{num_entries}" + max_buy_str + "`", - "*Number of Exits:* `{num_exits}`", + f"*Number of Entries:* `{r['num_entries']}{max_buy_str}`", + f"*Number of Exits:* `{r['num_exits']}`", ] ) @@ -801,15 +800,15 @@ class Telegram(RPCHandler): [ f"*Open Rate:* `{round_value(r['open_rate'], 8)}`", f"*Close Rate:* `{round_value(r['close_rate'], 8)}`" if r["close_rate"] else "", - "*Open Date:* `{open_date}`", - "*Close Date:* `{close_date}`" if r["close_date"] else "", + f"*Open Date:* `{r['open_date']}`", + f"*Close Date:* `{r['close_date']}`" if r["close_date"] else "", ( f" \n*Current Rate:* `{round_value(r['current_rate'], 8)}`" if r["is_open"] else "" ), ("*Unrealized Profit:* " if r["is_open"] else "*Close Profit: *") - + "`{profit_ratio:.2%}` `({profit_abs_r})`", + + f"`{r['profit_ratio']:.2%}` `({r['profit_abs_r']})`", ] ) @@ -817,9 +816,9 @@ class Telegram(RPCHandler): if r.get("realized_profit"): lines.extend( [ - "*Realized Profit:* `{realized_profit_ratio:.2%} " - "({realized_profit_r})`", - "*Total Profit:* `{total_profit_ratio:.2%} ({total_profit_abs_r})`", + f"*Realized Profit:* `{r['realized_profit_ratio']:.2%} " + f"({r['realized_profit_r']})`", + f"*Total Profit:* `{r['total_profit_ratio']:.2%} ({r['total_profit_abs_r']})`", ] ) @@ -835,23 +834,23 @@ class Telegram(RPCHandler): ): # Adding initial stoploss only if it is different from stoploss lines.append( - "*Initial Stoploss:* `{initial_stop_loss_abs:.8f}` " - "`({initial_stop_loss_ratio:.2%})`" + f"*Initial Stoploss:* `{r['initial_stop_loss_abs']:.8f}` " + f"`({r['initial_stop_loss_ratio']:.2%})`" ) # Adding stoploss and stoploss percentage only if it is not None lines.append( f"*Stoploss:* `{round_value(r['stop_loss_abs'], 8)}` " - + ("`({stop_loss_ratio:.2%})`" if r["stop_loss_ratio"] else "") + + (f"`({r['stop_loss_ratio']:.2%})`" if r["stop_loss_ratio"] else "") ) lines.append( f"*Stoploss distance:* `{round_value(r['stoploss_current_dist'], 8)}` " - "`({stoploss_current_dist_ratio:.2%})`" + f"`({r['stoploss_current_dist_ratio']:.2%})`" ) - if r.get("open_orders"): + if open_orders := r.get("open_orders"): lines.append( - "*Open Order:* `{open_orders}`" - + ("- `{exit_order_status}`" if r["exit_order_status"] else "") + f"*Open Order:* `{open_orders}`" + + (f"- `{r['exit_order_status']}`" if r["exit_order_status"] else "") ) await self.__send_status_msg(lines, r) @@ -867,10 +866,10 @@ class Telegram(RPCHandler): if (len(msg) + len(line) + 1) < MAX_MESSAGE_LENGTH: msg += line + "\n" else: - await self._send_msg(msg.format(**r)) - msg = "*Trade ID:* `{trade_id}` - continued\n" + line + "\n" + await self._send_msg(msg) + msg = f"*Trade ID:* `{r['trade_id']}` - continued\n" + line + "\n" - await self._send_msg(msg.format(**r)) + await self._send_msg(msg) @authorized_only async def _status_table(self, update: Update, context: CallbackContext) -> None: From 93936c9946a21d9811f5f4031ea970707ee9db13 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 22 Nov 2025 13:29:27 +0100 Subject: [PATCH 051/243] refactor: use fstrings for /order telegram message --- freqtrade/rpc/telegram.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 5dd7d728f..fc13b919d 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -701,7 +701,7 @@ class Telegram(RPCHandler): results = self._rpc._rpc_trade_status(trade_ids=trade_ids) for r in results: - lines = ["*Order List for Trade #*`{trade_id}`"] + lines = [f"*Order List for Trade #*`{r['trade_id']}`"] lines_detail = self._prepare_order_details( r["orders"], r["quote_currency"], r["is_open"] @@ -720,10 +720,10 @@ class Telegram(RPCHandler): if (len(msg) + len(line) + 1) < MAX_MESSAGE_LENGTH: msg += line + "\n" else: - await self._send_msg(msg.format(**r)) - msg = "*Order List for Trade #*`{trade_id}` - continued\n" + line + "\n" + await self._send_msg(msg) + msg = f"*Order List for Trade #*`{r['trade_id']}` - continued\n" + line + "\n" - await self._send_msg(msg.format(**r)) + await self._send_msg(msg) @authorized_only async def _status(self, update: Update, context: CallbackContext) -> None: From 1feb11bac0326a6e43f2c17b39dceddf848890eb Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 22 Nov 2025 13:30:52 +0100 Subject: [PATCH 052/243] refactor: use fstring for telegram sending --- freqtrade/rpc/telegram.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index fc13b919d..f67c3b53b 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -670,7 +670,7 @@ class Telegram(RPCHandler): # TODO: This calculation ignores fees. price_to_1st_entry = (cur_entry_average - first_avg) / first_avg if is_open: - lines.append("({})".format(dt_humanize_delta(order["order_filled_date"]))) + lines.append(f"({dt_humanize_delta(order['order_filled_date'])})") lines.append( f"*Amount:* {round_value(cur_entry_amount, 8)} " f"({fmt_coin(order['cost'], quote_currency)})" @@ -818,7 +818,10 @@ class Telegram(RPCHandler): [ f"*Realized Profit:* `{r['realized_profit_ratio']:.2%} " f"({r['realized_profit_r']})`", - f"*Total Profit:* `{r['total_profit_ratio']:.2%} ({r['total_profit_abs_r']})`", + ( + f"*Total Profit:* `{r['total_profit_ratio']:.2%} " + f"({r['total_profit_abs_r']})`", + ), ] ) From a05d142af63dc0c0f198d03cb387b333072bd066 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 22 Nov 2025 13:33:51 +0100 Subject: [PATCH 053/243] chore: remove unneeded formatting --- freqtrade/rpc/telegram.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index f67c3b53b..baa448017 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -765,7 +765,6 @@ class Telegram(RPCHandler): if not o["ft_is_entry"] and not o["ft_order_side"] == "stoploss" ] ) - r["exit_reason"] = r.get("exit_reason", "") r["stake_amount_r"] = fmt_coin(r["stake_amount"], r["quote_currency"]) r["max_stake_amount_r"] = fmt_coin( r["max_stake_amount"] or r["stake_amount"], r["quote_currency"] @@ -784,7 +783,7 @@ class Telegram(RPCHandler): f"*Amount:* `{r['amount']} ({r['stake_amount_r']})`", f"*Total invested:* `{r['max_stake_amount_r']}`" if position_adjust else "", f"*Enter Tag:* `{r['enter_tag']}`" if r["enter_tag"] else "", - f"*Exit Reason:* `{r['exit_reason']}`" if r["exit_reason"] else "", + f"*Exit Reason:* `{r['exit_reason']}`" if r.get("exit_reason") else "", ] if position_adjust: @@ -820,7 +819,7 @@ class Telegram(RPCHandler): f"({r['realized_profit_r']})`", ( f"*Total Profit:* `{r['total_profit_ratio']:.2%} " - f"({r['total_profit_abs_r']})`", + f"({r['total_profit_abs_r']})`" ), ] ) From 60309b9e575fe48f0c3354b2756ed6114af7a69e Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 22 Nov 2025 13:40:57 +0100 Subject: [PATCH 054/243] chore: move num_entries/exits to trade model --- freqtrade/persistence/trade_model.py | 2 ++ freqtrade/rpc/telegram.py | 13 +++---------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/freqtrade/persistence/trade_model.py b/freqtrade/persistence/trade_model.py index d898ea55e..bc4d1c47e 100644 --- a/freqtrade/persistence/trade_model.py +++ b/freqtrade/persistence/trade_model.py @@ -755,6 +755,8 @@ class LocalTrade: "precision_mode": self.precision_mode, "precision_mode_price": self.precision_mode_price, "contract_size": self.contract_size, + "nr_of_successful_entries": self.nr_of_successful_entries, + "nr_of_successful_exits": self.nr_of_successful_exits, "has_open_orders": self.has_open_orders, "orders": orders_json, } diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index baa448017..69c76b776 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -757,14 +757,7 @@ class Telegram(RPCHandler): max_entries = self._config.get("max_entry_position_adjustment", -1) for r in results: r["open_date_hum"] = dt_humanize_delta(r["open_date"]) - r["num_entries"] = len([o for o in r["orders"] if o["ft_is_entry"]]) - r["num_exits"] = len( - [ - o - for o in r["orders"] - if not o["ft_is_entry"] and not o["ft_order_side"] == "stoploss" - ] - ) + r["stake_amount_r"] = fmt_coin(r["stake_amount"], r["quote_currency"]) r["max_stake_amount_r"] = fmt_coin( r["max_stake_amount"] or r["stake_amount"], r["quote_currency"] @@ -790,8 +783,8 @@ class Telegram(RPCHandler): max_buy_str = f"/{max_entries + 1}" if (max_entries > 0) else "" lines.extend( [ - f"*Number of Entries:* `{r['num_entries']}{max_buy_str}`", - f"*Number of Exits:* `{r['num_exits']}`", + f"*Number of Entries:* `{r['nr_of_successful_entries']}{max_buy_str}`", + f"*Number of Exits:* `{r['nr_of_successful_exits']}`", ] ) From 916d8324cb3c7d40b2178214b7a11601638698be Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 22 Nov 2025 13:48:57 +0100 Subject: [PATCH 055/243] test: update tests with new fields --- tests/persistence/test_persistence.py | 4 ++++ tests/rpc/test_rpc.py | 1 + tests/rpc/test_rpc_telegram.py | 3 ++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/persistence/test_persistence.py b/tests/persistence/test_persistence.py index 5ec1a05d2..8fcc59691 100644 --- a/tests/persistence/test_persistence.py +++ b/tests/persistence/test_persistence.py @@ -1479,6 +1479,8 @@ def test_to_json(fee): "contract_size": 1, "orders": [], "has_open_orders": False, + "nr_of_successful_entries": 0, + "nr_of_successful_exits": 0, } # Simulate dry_run entries @@ -1570,6 +1572,8 @@ def test_to_json(fee): "contract_size": 1, "orders": [], "has_open_orders": False, + "nr_of_successful_entries": 0, + "nr_of_successful_exits": 0, } diff --git a/tests/rpc/test_rpc.py b/tests/rpc/test_rpc.py index 5dae36f10..d2d666cbc 100644 --- a/tests/rpc/test_rpc.py +++ b/tests/rpc/test_rpc.py @@ -99,6 +99,7 @@ def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None: "contract_size": 1, "has_open_orders": False, "nr_of_successful_entries": ANY, + "nr_of_successful_exits": ANY, "orders": [ { "amount": 91.07468123, diff --git a/tests/rpc/test_rpc_telegram.py b/tests/rpc/test_rpc_telegram.py index e9e2ee65a..49245230b 100644 --- a/tests/rpc/test_rpc_telegram.py +++ b/tests/rpc/test_rpc_telegram.py @@ -421,7 +421,8 @@ async def test_telegram_status_multi_entry(default_conf, update, mocker, fee) -> assert msg_mock.call_count == 4 msg = msg_mock.call_args_list[3][0][0] assert re.search(r"Number of Entries.*2", msg) - assert re.search(r"Number of Exits.*1", msg) + # Exit order is still open, hence not a successful exit + assert re.search(r"Number of Exits.*0", msg) assert re.search(r"Close Date:", msg) is None assert re.search(r"Close Profit:", msg) is None From b364153d022902c669ca2daa345e2c0a13d63b10 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 22 Nov 2025 15:46:34 +0100 Subject: [PATCH 056/243] feat: add nr_of_successful_* to api --- freqtrade/rpc/api_server/api_schemas.py | 2 ++ tests/rpc/test_rpc_apiserver.py | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/freqtrade/rpc/api_server/api_schemas.py b/freqtrade/rpc/api_server/api_schemas.py index 601c52392..21a93807c 100644 --- a/freqtrade/rpc/api_server/api_schemas.py +++ b/freqtrade/rpc/api_server/api_schemas.py @@ -340,6 +340,8 @@ class TradeSchema(BaseModel): min_rate: float | None = None max_rate: float | None = None + nr_of_successful_entries: int + nr_of_successful_exits: int has_open_orders: bool orders: list[OrderSchema] diff --git a/tests/rpc/test_rpc_apiserver.py b/tests/rpc/test_rpc_apiserver.py index b4a7af26b..f7f99f288 100644 --- a/tests/rpc/test_rpc_apiserver.py +++ b/tests/rpc/test_rpc_apiserver.py @@ -1605,6 +1605,8 @@ def test_api_status( "precision_mode": None, "orders": [ANY], "has_open_orders": True, + "nr_of_successful_entries": ANY, + "nr_of_successful_exits": ANY, } mocker.patch( @@ -1817,6 +1819,8 @@ def test_api_force_entry(botclient, mocker, fee, endpoint): "price_precision": None, "precision_mode": None, "has_open_orders": False, + "nr_of_successful_entries": ANY, + "nr_of_successful_exits": ANY, "orders": [], } From 8269384077e32b4a6003474d4ee4f0fa7f259693 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 22 Nov 2025 19:51:16 +0100 Subject: [PATCH 057/243] fix: missing space in template closes #12539 --- freqtrade/templates/base_config.json.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/templates/base_config.json.j2 b/freqtrade/templates/base_config.json.j2 index 86a717a40..6fa74e949 100644 --- a/freqtrade/templates/base_config.json.j2 +++ b/freqtrade/templates/base_config.json.j2 @@ -34,7 +34,7 @@ "bids_to_ask_delta": 1 } }, - "exit_pricing":{ + "exit_pricing": { "price_side": "same", "use_order_book": true, "order_book_top": 1 From d901f4b10be0cd1648ed92a8345eb129e883baf0 Mon Sep 17 00:00:00 2001 From: Stefano Date: Sun, 23 Nov 2025 14:01:36 +0900 Subject: [PATCH 058/243] make sure the strat's starupt count don't get replaced --- freqtrade/optimize/analysis/recursive.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/freqtrade/optimize/analysis/recursive.py b/freqtrade/optimize/analysis/recursive.py index 9de0ad3ad..eaa8c9508 100644 --- a/freqtrade/optimize/analysis/recursive.py +++ b/freqtrade/optimize/analysis/recursive.py @@ -39,6 +39,7 @@ class RecursiveAnalysis(BaseAnalysis): self.dict_recursive: dict[str, Any] = dict() self.pair_to_used: str | None = None + self._strat_scc: int | None = None # For recursive bias check # analyzes two data frames with processed indicators and shows differences between them. @@ -151,7 +152,8 @@ class RecursiveAnalysis(BaseAnalysis): backtesting._set_strategy(backtesting.strategylist[0]) strat = backtesting.strategy - self._strat_scc = strat.startup_candle_count + if self._strat_scc is None: + self._strat_scc = strat.startup_candle_count if self._strat_scc < 1: raise ConfigurationError( From 2fa0503993138c1d17aaa453f2b7bdf78665798f Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 22 Nov 2025 20:33:20 +0100 Subject: [PATCH 059/243] fix: telegram crash during exchange downtime --- freqtrade/rpc/telegram.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 69c76b776..3db8724de 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -806,15 +806,14 @@ class Telegram(RPCHandler): if r["is_open"]: if r.get("realized_profit"): - lines.extend( - [ - f"*Realized Profit:* `{r['realized_profit_ratio']:.2%} " - f"({r['realized_profit_r']})`", - ( - f"*Total Profit:* `{r['total_profit_ratio']:.2%} " - f"({r['total_profit_abs_r']})`" - ), - ] + lines.append( + f"*Realized Profit:* `{r['realized_profit_ratio']:.2%} " + f"({r['realized_profit_r']})`" + ) + if r.get("total_profit_ratio"): + lines.append( + f"*Total Profit:* `{r['total_profit_ratio']:.2%} " + f"({r['total_profit_abs_r']})`" ) # Append empty line to improve readability From b92535deea5f11133047f9be99bede9e94bd3ad5 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 08:13:48 +0100 Subject: [PATCH 060/243] feat: Add format_pct helper method --- freqtrade/util/__init__.py | 2 ++ freqtrade/util/formatters.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/freqtrade/util/__init__.py b/freqtrade/util/__init__.py index 98fda93cd..de8923389 100644 --- a/freqtrade/util/__init__.py +++ b/freqtrade/util/__init__.py @@ -18,6 +18,7 @@ from freqtrade.util.formatters import ( fmt_coin, fmt_coin2, format_duration, + format_pct, round_value, ) from freqtrade.util.ft_precise import FtPrecise @@ -44,6 +45,7 @@ __all__ = [ "format_date", "format_ms_time", "format_ms_time_det", + "format_pct", "get_dry_run_wallet", "FtPrecise", "PeriodicCache", diff --git a/freqtrade/util/formatters.py b/freqtrade/util/formatters.py index caac5a68b..58623de66 100644 --- a/freqtrade/util/formatters.py +++ b/freqtrade/util/formatters.py @@ -1,5 +1,7 @@ from datetime import timedelta +from numpy import isnan + from freqtrade.constants import DECIMAL_PER_COIN_FALLBACK, DECIMALS_PER_COIN @@ -80,3 +82,15 @@ def format_duration(td: timedelta) -> str: h, r = divmod(td.seconds, 3600) m, _ = divmod(r, 60) return f"{d}d {h:02d}:{m:02d}" + + +def format_pct(value: float | None) -> str: + """ + Format a float value as percentage string with 2 decimals + None and NaN values are formatted as "N/A" + :param value: Float value to format + :return: Formatted percentage string + """ + if value is None or isnan(value): + return "N/A" + return f"{value:.2%}" From 2750643e07a781aa98b4de090dc6fdfb2ba3fedd Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 08:14:39 +0100 Subject: [PATCH 061/243] test: add tests for format_pct --- tests/util/test_formatters.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/util/test_formatters.py b/tests/util/test_formatters.py index 8872137a0..4a760961d 100644 --- a/tests/util/test_formatters.py +++ b/tests/util/test_formatters.py @@ -1,6 +1,13 @@ from datetime import timedelta -from freqtrade.util import decimals_per_coin, fmt_coin, fmt_coin2, format_duration, round_value +from freqtrade.util import ( + decimals_per_coin, + fmt_coin, + fmt_coin2, + format_duration, + format_pct, + round_value, +) def test_decimals_per_coin(): @@ -55,3 +62,13 @@ def test_format_duration(): assert format_duration(timedelta(minutes=1445)) == "1d 00:05" assert format_duration(timedelta(minutes=11445)) == "7d 22:45" assert format_duration(timedelta(minutes=101445)) == "70d 10:45" + + +def test_format_pct(): + assert format_pct(0.1234) == "12.34%" + assert format_pct(0.1) == "10.00%" + assert format_pct(0.0) == "0.00%" + assert format_pct(-0.0567) == "-5.67%" + assert format_pct(-1.5567) == "-155.67%" + assert format_pct(None) == "N/A" + assert format_pct(float("nan")) == "N/A" From 0ce9149ddde6f1ba9a64154f8377ee0dd705d87a Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 08:18:17 +0100 Subject: [PATCH 062/243] feat: use helper method to format for pct --- freqtrade/rpc/rpc.py | 3 ++- freqtrade/rpc/telegram.py | 13 +++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index 075e6eb0e..22e457eef 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -47,6 +47,7 @@ from freqtrade.util import ( dt_ts, dt_ts_def, format_date, + format_pct, shorten_date, ) from freqtrade.wallets import PositionWallet, Wallet @@ -302,7 +303,7 @@ class RPC: fiat_total_profit_sum = nan for trade in self._rpc_trade_status(): # Format profit as a string with the right sign - profit = f"{trade['profit_ratio']:.2%}" + profit = f"{format_pct(trade['profit_ratio'])}" fiat_profit = trade.get("profit_fiat", None) if fiat_profit is None or isnan(fiat_profit): fiat_profit = trade.get("profit_abs", 0.0) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 3db8724de..875fba5fe 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -48,6 +48,7 @@ from freqtrade.util import ( fmt_coin, fmt_coin2, format_date, + format_pct, round_value, ) @@ -800,19 +801,19 @@ class Telegram(RPCHandler): else "" ), ("*Unrealized Profit:* " if r["is_open"] else "*Close Profit: *") - + f"`{r['profit_ratio']:.2%}` `({r['profit_abs_r']})`", + + f"`{format_pct(r['profit_ratio'])}` `({r['profit_abs_r']})`", ] ) if r["is_open"]: if r.get("realized_profit"): lines.append( - f"*Realized Profit:* `{r['realized_profit_ratio']:.2%} " + f"*Realized Profit:* `{format_pct(r['realized_profit_ratio'])} " f"({r['realized_profit_r']})`" ) if r.get("total_profit_ratio"): lines.append( - f"*Total Profit:* `{r['total_profit_ratio']:.2%} " + f"*Total Profit:* `{format_pct(r['total_profit_ratio'])} " f"({r['total_profit_abs_r']})`" ) @@ -829,17 +830,17 @@ class Telegram(RPCHandler): # Adding initial stoploss only if it is different from stoploss lines.append( f"*Initial Stoploss:* `{r['initial_stop_loss_abs']:.8f}` " - f"`({r['initial_stop_loss_ratio']:.2%})`" + f"`({format_pct(r['initial_stop_loss_ratio'])})`" ) # Adding stoploss and stoploss percentage only if it is not None lines.append( f"*Stoploss:* `{round_value(r['stop_loss_abs'], 8)}` " - + (f"`({r['stop_loss_ratio']:.2%})`" if r["stop_loss_ratio"] else "") + + (f"`({format_pct(r['stop_loss_ratio'])})`" if r["stop_loss_ratio"] else "") ) lines.append( f"*Stoploss distance:* `{round_value(r['stoploss_current_dist'], 8)}` " - f"`({r['stoploss_current_dist_ratio']:.2%})`" + f"`({format_pct(r['stoploss_current_dist_ratio'])})`" ) if open_orders := r.get("open_orders"): lines.append( From a4e6ac0c7f6f8e66e01104334d769905626173e4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 08:18:51 +0100 Subject: [PATCH 063/243] test: update test for new status table behavior --- tests/rpc/test_rpc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/rpc/test_rpc.py b/tests/rpc/test_rpc.py index d2d666cbc..40e2b8266 100644 --- a/tests/rpc/test_rpc.py +++ b/tests/rpc/test_rpc.py @@ -310,7 +310,7 @@ def test_rpc_status_table(default_conf, ticker, fee, mocker, time_machine) -> No ) assert "now" == result[0][2] assert "ETH/BTC" in result[0][1] - assert "nan%" == result[0][3] + assert "N/A" == result[0][3] assert isnan(fiat_profit_sum) From efabcef330a96dcb19ee8e9ff4cbde62d0b3939f Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 08:23:05 +0100 Subject: [PATCH 064/243] feat: use pct formatting helper throughout telegram module --- freqtrade/rpc/telegram.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 875fba5fe..35668fc0a 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -482,7 +482,7 @@ class Telegram(RPCHandler): if is_final_exit: profit_prefix = "Sub " cp_extra = ( - f"*Final Profit:* `{msg['final_profit_ratio']:.2%} " + f"*Final Profit:* `{format_pct(msg['final_profit_ratio'])} " f"({msg['cumulative_profit']:.8f} {msg['quote_currency']}{cp_fiat})`\n" ) else: @@ -498,7 +498,7 @@ class Telegram(RPCHandler): f"{exit_wording} {msg['pair']} (#{msg['trade_id']})\n" f"{self._add_analyzed_candle(msg['pair'])}" f"*{f'{profit_prefix}Profit' if is_fill else f'Unrealized {profit_prefix}Profit'}:* " - f"`{msg['profit_ratio']:.2%}{profit_extra}`\n" + f"`{format_pct(msg['profit_ratio'])}{profit_extra}`\n" f"{cp_extra}" f"{enter_tag}" f"*Exit Reason:* `{msg['exit_reason']}`\n" @@ -678,7 +678,7 @@ class Telegram(RPCHandler): ) lines.append( f"*Average {wording} Price:* {round_value(cur_entry_average, 8)} " - f"({price_to_1st_entry:.2%} from 1st entry rate)" + f"({format_pct(price_to_1st_entry)} from 1st entry rate)" ) lines.append(f"*Order Filled:* {order['order_filled_date']}") @@ -951,7 +951,7 @@ class Telegram(RPCHandler): f"{period['date']:{val.dateformat}} ({period['trade_count']})", f"{fmt_coin(period['abs_profit'], stats['stake_currency'])}", f"{period['fiat_value']:.2f} {stats['fiat_display_currency']}", - f"{period['rel_profit']:.2%}", + f"{format_pct(period['rel_profit'])}", ] for period in stats["data"] ], @@ -1067,7 +1067,7 @@ class Telegram(RPCHandler): markdown_msg = ( f"{closed_roi_label}\n" f"∙ `{fmt_coin(profit_closed_coin, stake_cur)} " - f"({profit_closed_ratio_mean:.2%}) " + f"({format_pct(profit_closed_ratio_mean)}) " f"({profit_closed_percent} \N{GREEK CAPITAL LETTER SIGMA}%)`\n" f"{fiat_closed_trades}" ) @@ -1080,7 +1080,7 @@ class Telegram(RPCHandler): markdown_msg += ( f"{all_roi_label}\n" f"∙ `{fmt_coin(profit_all_coin, stake_cur)} " - f"({profit_all_ratio_mean:.2%}) " + f"({format_pct(profit_all_ratio_mean)}) " f"({profit_all_percent} \N{GREEK CAPITAL LETTER SIGMA}%)`\n" f"{fiat_all_trades}" f"*Total Trade Count:* `{trade_count}`\n" @@ -1089,7 +1089,7 @@ class Telegram(RPCHandler): f"`{first_trade_date}`\n" f"*Latest Trade opened:* `{latest_trade_date}`\n" f"*Win / Loss:* `{stats['winning_trades']} / {stats['losing_trades']}`\n" - f"*Winrate:* `{winrate:.2%}`\n" + f"*Winrate:* `{format_pct(winrate)}`\n" f"*Expectancy (Ratio):* `{expectancy:.2f} ({expectancy_ratio:.2f})`" ) @@ -1097,16 +1097,16 @@ class Telegram(RPCHandler): markdown_msg += ( f"\n*Avg. Duration:* `{avg_duration}`\n" f"*Best Performing:* `{best_pair}: {best_pair_profit_abs} " - f"({best_pair_profit_ratio:.2%})`\n" + f"({format_pct(best_pair_profit_ratio)})`\n" f"*Trading volume:* `{fmt_coin(stats['trading_volume'], stake_cur)}`\n" f"*Profit factor:* `{stats['profit_factor']:.2f}`\n" - f"*Max Drawdown:* `{stats['max_drawdown']:.2%} " + f"*Max Drawdown:* `{format_pct(stats['max_drawdown'])} " f"({fmt_coin(stats['max_drawdown_abs'], stake_cur)})`\n" f" from `{stats['max_drawdown_start']} " f"({fmt_coin(stats['drawdown_high'], stake_cur)})`\n" f" to `{stats['max_drawdown_end']} " f"({fmt_coin(stats['drawdown_low'], stake_cur)})`\n" - f"*Current Drawdown:* `{stats['current_drawdown']:.2%} " + f"*Current Drawdown:* `{format_pct(stats['current_drawdown'])} " f"({fmt_coin(stats['current_drawdown_abs'], stake_cur)})`\n" f" from `{stats['current_drawdown_start']} " f"({fmt_coin(stats['current_drawdown_high'], stake_cur)})`\n" @@ -1559,7 +1559,7 @@ class Telegram(RPCHandler): dt_humanize_delta(dt_from_ts(trade["close_timestamp"])), f"{trade['pair']} (#{trade['trade_id']}" f"{(' ' + ('S' if trade['is_short'] else 'L')) if nonspot else ''})", - f"{(trade['close_profit']):.2%} ({trade['close_profit_abs']})", + f"{format_pct(trade['close_profit'])} ({trade['close_profit_abs']})", ] for trade in trades["trades"] ], @@ -1623,7 +1623,7 @@ class Telegram(RPCHandler): stat_line = ( f"{i + 1}.\t {trade['pair']}\t" f"{fmt_coin(trade['profit_abs'], self._config['stake_currency'])} " - f"({trade['profit_ratio']:.2%}) " + f"({format_pct(trade['profit_ratio'])}) " f"({trade['count']})\n" ) @@ -1660,7 +1660,7 @@ class Telegram(RPCHandler): stat_line = ( f"{i + 1}.\t `{trade['enter_tag']}\t" f"{fmt_coin(trade['profit_abs'], self._config['stake_currency'])} " - f"({trade['profit_ratio']:.2%}) " + f"({format_pct(trade['profit_ratio'])}) " f"({trade['count']})`\n" ) @@ -1697,7 +1697,7 @@ class Telegram(RPCHandler): stat_line = ( f"{i + 1}.\t `{trade['exit_reason']}\t" f"{fmt_coin(trade['profit_abs'], self._config['stake_currency'])} " - f"({trade['profit_ratio']:.2%}) " + f"({format_pct(trade['profit_ratio'])}) " f"({trade['count']})`\n" ) @@ -1734,7 +1734,7 @@ class Telegram(RPCHandler): stat_line = ( f"{i + 1}.\t `{trade['mix_tag']}\t" f"{fmt_coin(trade['profit_abs'], self._config['stake_currency'])} " - f"({trade['profit_ratio']:.2%}) " + f"({format_pct(trade['profit_ratio'])}) " f"({trade['count']})`\n" ) From d0fb4cdc37948ae9e52e308043e9197dacdcc847 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 08:30:10 +0100 Subject: [PATCH 065/243] feat: use N/A for round value --- freqtrade/util/formatters.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/freqtrade/util/formatters.py b/freqtrade/util/formatters.py index 58623de66..3d7493a2a 100644 --- a/freqtrade/util/formatters.py +++ b/freqtrade/util/formatters.py @@ -31,6 +31,8 @@ def round_value(value: float, decimals: int, keep_trailing_zeros=False) -> str: :param keep_trailing_zeros: Keep trailing zeros "222.200" vs. "222.2" :return: Rounded value as string """ + if isnan(value): + return "N/A" val = f"{value:.{decimals}f}" if not keep_trailing_zeros: val = strip_trailing_zeros(val) From 649db69314486e3983f901d9f47222a008ce3b85 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 08:30:24 +0100 Subject: [PATCH 066/243] test: add tests for N/A when formatting prices --- tests/util/test_formatters.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/util/test_formatters.py b/tests/util/test_formatters.py index 4a760961d..a884c0750 100644 --- a/tests/util/test_formatters.py +++ b/tests/util/test_formatters.py @@ -32,6 +32,7 @@ def test_fmt_coin(): assert fmt_coin(0.1274512123, "BTC", False) == "0.12745121" assert fmt_coin(0.1274512123, "ETH", False) == "0.12745" assert fmt_coin(222.2, "USDT", False, True) == "222.200" + assert fmt_coin(float("nan"), "USDT", False, True) == "N/A" def test_fmt_coin2(): @@ -42,6 +43,7 @@ def test_fmt_coin2(): assert fmt_coin2(0.1274512123, "BTC") == "0.12745121 BTC" assert fmt_coin2(0.1274512123, "ETH") == "0.12745121 ETH" assert fmt_coin2(0.00001245, "PEPE") == "0.00001245 PEPE" + assert fmt_coin2(float("nan"), "PEPE") == "N/A PEPE" def test_round_value(): @@ -53,6 +55,8 @@ def test_round_value(): assert round_value(0.1274512123, 5) == "0.12745" assert round_value(222.2, 3, True) == "222.200" assert round_value(222.2, 0, True) == "222" + assert round_value(float("nan"), 0, True) == "N/A" + assert round_value(float("nan"), 10, True) == "N/A" def test_format_duration(): From 972e25a6a768a9e391e3c051c353e5a84dd0d383 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 08:33:11 +0100 Subject: [PATCH 067/243] feat: Improve conditions to not exclude `0.0` profits --- freqtrade/rpc/telegram.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 35668fc0a..8aacb236f 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -806,12 +806,12 @@ class Telegram(RPCHandler): ) if r["is_open"]: - if r.get("realized_profit"): + if r.get("realized_profit") is not None: lines.append( f"*Realized Profit:* `{format_pct(r['realized_profit_ratio'])} " f"({r['realized_profit_r']})`" ) - if r.get("total_profit_ratio"): + if r.get("total_profit_ratio") is not None: lines.append( f"*Total Profit:* `{format_pct(r['total_profit_ratio'])} " f"({r['total_profit_abs_r']})`" From 7edc2e8c940c793b3770e56ce6ad5059b3af2e76 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 13:23:18 +0100 Subject: [PATCH 068/243] fix: improved realized profit telegram condition --- freqtrade/rpc/telegram.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 8aacb236f..151d6daec 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -806,7 +806,10 @@ class Telegram(RPCHandler): ) if r["is_open"]: - if r.get("realized_profit") is not None: + if ( + r.get("realized_profit") is not None + and r.get("realized_profit_ratio") is not None + ): lines.append( f"*Realized Profit:* `{format_pct(r['realized_profit_ratio'])} " f"({r['realized_profit_r']})`" From 47301830b6b2f1b4329bbcb1453a78a05adfa10b Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 13:35:10 +0100 Subject: [PATCH 069/243] fix: be more selective before activating parallel download --- freqtrade/data/history/history_utils.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/freqtrade/data/history/history_utils.py b/freqtrade/data/history/history_utils.py index 40c989733..862e22699 100644 --- a/freqtrade/data/history/history_utils.py +++ b/freqtrade/data/history/history_utils.py @@ -474,7 +474,7 @@ def _download_all_pairs_history_parallel( :return: Candle pairs with timeframes """ candles: dict[PairWithTimeframe, DataFrame] = {} - since = 0 + since: int | None = None if timerange: if timerange.starttype == "date": since = timerange.startts * 1000 @@ -482,10 +482,12 @@ def _download_all_pairs_history_parallel( candle_limit = exchange.ohlcv_candle_limit(timeframe, candle_type) one_call_min_time_dt = dt_ts(date_minus_candles(timeframe, candle_limit)) # check if we can get all candles in one go, if so then we can download them in parallel - if since > one_call_min_time_dt: + if since is None or since > one_call_min_time_dt: logger.info( - f"Downloading parallel candles for {timeframe} for all pairs " - f"since {format_ms_time(since)}" + f"Downloading parallel candles for {timeframe} for all pairs" + f" since {format_ms_time(since)}" + if since + else "." ) needed_pairs: ListPairsWithTimeframes = [ (p, timeframe, candle_type) for p in [p for p in pairs] From 2015ccc727d239ea5b8be82024eb973a01b89be2 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 13:41:08 +0100 Subject: [PATCH 070/243] test: update parallel-history test --- tests/data/test_history.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/data/test_history.py b/tests/data/test_history.py index de216eec9..c421fb688 100644 --- a/tests/data/test_history.py +++ b/tests/data/test_history.py @@ -780,6 +780,7 @@ def test_download_all_pairs_history_parallel(mocker, default_conf_usdt): exchange.refresh_latest_ohlcv.reset_mock() # Test without timerange + # expected to call refresh_latest_ohlcv - as we can't know how much will be required. result3 = _download_all_pairs_history_parallel( exchange=exchange, pairs=pairs, @@ -787,8 +788,8 @@ def test_download_all_pairs_history_parallel(mocker, default_conf_usdt): candle_type=candle_type, timerange=None, ) - assert result3 == {} - assert exchange.refresh_latest_ohlcv.call_count == 0 + assert result3 == expected + assert exchange.refresh_latest_ohlcv.call_count == 1 def test_download_pair_history_with_pair_candles(mocker, default_conf, tmp_path, caplog) -> None: From aa7aac3a144429c344132d9b62789baceb89c9f7 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 13:45:51 +0100 Subject: [PATCH 071/243] feat: don't jump into parallel mode for single pair/timeframe downloads --- freqtrade/data/history/history_utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/freqtrade/data/history/history_utils.py b/freqtrade/data/history/history_utils.py index 862e22699..8f4a8d6c5 100644 --- a/freqtrade/data/history/history_utils.py +++ b/freqtrade/data/history/history_utils.py @@ -388,8 +388,10 @@ def refresh_backtest_ohlcv_data( for timeframe in timeframes: # Get fast candles via parallel method on first loop through per timeframe # and candle type. Downloads all the pairs in the list and stores them. + # Also skips if only 1 pair/timeframe combination is scheduled for download. if ( not no_parallel_download + and (len(pairs) + len(timeframes)) > 2 and exchange.get_option("download_data_parallel_quick", True) and ( ((pair, timeframe, candle_type) not in fast_candles) From 73dccb0780642d266ed772c8e76ff86f2bc9ee38 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 13:47:26 +0100 Subject: [PATCH 072/243] test: Add test case for no parallel on 1 combo --- tests/data/test_history.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/data/test_history.py b/tests/data/test_history.py index c421fb688..2dc3204db 100644 --- a/tests/data/test_history.py +++ b/tests/data/test_history.py @@ -582,6 +582,23 @@ def test_refresh_backtest_ohlcv_data( assert log_has_re(r"Downloading pair ETH/BTC, funding_rate, interval 8h\.", caplog) assert log_has_re(r"Downloading pair ETH/BTC, mark, interval 4h\.", caplog) + # Test with only one pair - no parallel download should happen 1 pair/timeframe combination + # doesn't justify parallelization + parallel_mock.reset_mock() + dl_mock.reset_mock() + refresh_backtest_ohlcv_data( + exchange=ex, + pairs=[ + "ETH/BTC", + ], + timeframes=["5m"], + datadir=testdatadir, + timerange=timerange, + erase=False, + trading_mode=trademode, + ) + assert parallel_mock.call_count == 0 + def test_download_data_no_markets(mocker, default_conf, caplog, testdatadir): dl_mock = mocker.patch( From 757439a594d3d4ca25dbd454ca4264dd37dcc695 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 03:01:12 +0000 Subject: [PATCH 073/243] chore(deps-dev): bump types-python-dateutil in the types group Bumps the types group with 1 update: [types-python-dateutil](https://github.com/typeshed-internal/stub_uploader). Updates `types-python-dateutil` from 2.9.0.20251108 to 2.9.0.20251115 - [Commits](https://github.com/typeshed-internal/stub_uploader/commits) --- updated-dependencies: - dependency-name: types-python-dateutil dependency-version: 2.9.0.20251115 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: types ... 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 557f42c02..42cc39573 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -29,4 +29,4 @@ types-cachetools==6.2.0.20251022 types-filelock==3.2.7 types-requests==2.32.4.20250913 types-tabulate==0.9.0.20241207 -types-python-dateutil==2.9.0.20251108 +types-python-dateutil==2.9.0.20251115 From 2b1ef1bf590c2e4bb7d8151e5d1fec764eeccc6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 03:01:45 +0000 Subject: [PATCH 074/243] chore(deps): bump cachetools from 6.2.1 to 6.2.2 Bumps [cachetools](https://github.com/tkem/cachetools) from 6.2.1 to 6.2.2. - [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst) - [Commits](https://github.com/tkem/cachetools/compare/v6.2.1...v6.2.2) --- updated-dependencies: - dependency-name: cachetools dependency-version: 6.2.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 a7a0f941c..710cdf947 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.1 +cachetools==6.2.2 requests==2.32.5 urllib3==2.5.0 certifi==2025.11.12 From 54840a3f7eef0b22d40250d9e6afcf2917b9893e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 03:01:50 +0000 Subject: [PATCH 075/243] chore(deps-dev): bump time-machine from 2.19.0 to 3.0.0 Bumps [time-machine](https://github.com/adamchainz/time-machine) from 2.19.0 to 3.0.0. - [Changelog](https://github.com/adamchainz/time-machine/blob/main/docs/changelog.rst) - [Commits](https://github.com/adamchainz/time-machine/compare/2.19.0...3.0.0) --- updated-dependencies: - dependency-name: time-machine dependency-version: 3.0.0 dependency-type: direct:development update-type: version-update:semver-major ... 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 557f42c02..b91a996d4 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -18,7 +18,7 @@ pytest-timeout==2.4.0 pytest-xdist==3.8.0 isort==7.0.0 # For datetime mocking -time-machine==2.19.0 +time-machine==3.0.0 # Convert jupyter notebooks to markdown documents nbconvert==7.16.6 From a647ceb75318b4fabca675864c51a1eb2e2e70f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 03:01:54 +0000 Subject: [PATCH 076/243] chore(deps): bump fastapi from 0.121.1 to 0.121.3 Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.121.1 to 0.121.3. - [Release notes](https://github.com/fastapi/fastapi/releases) - [Commits](https://github.com/fastapi/fastapi/compare/0.121.1...0.121.3) --- updated-dependencies: - dependency-name: fastapi dependency-version: 0.121.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 a7a0f941c..288079b12 100644 --- a/requirements.txt +++ b/requirements.txt @@ -37,7 +37,7 @@ orjson==3.11.4 sdnotify==0.3.2 # API Server -fastapi==0.121.1 +fastapi==0.121.3 pydantic==2.12.4 uvicorn==0.38.0 pyjwt==2.10.1 From 15b0cc28f8ec0f0f5f558d6ff104d8de97d62700 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 03:02:14 +0000 Subject: [PATCH 077/243] chore(deps-dev): bump ruff from 0.14.4 to 0.14.5 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.4 to 0.14.5. - [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.4...0.14.5) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.14.5 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 557f42c02..173723852 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.4 +ruff==0.14.5 mypy==1.18.2 pre-commit==4.4.0 pytest==9.0.1 From 64cf284c0769ba6088f3bcf2942755a9d7a5e291 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 03:02:23 +0000 Subject: [PATCH 078/243] chore(deps): bump numpy from 2.3.4 to 2.3.5 Bumps [numpy](https://github.com/numpy/numpy) from 2.3.4 to 2.3.5. - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v2.3.4...v2.3.5) --- updated-dependencies: - dependency-name: numpy dependency-version: 2.3.5 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 a7a0f941c..01d706d57 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -numpy==2.3.4 +numpy==2.3.5 pandas==2.3.3 bottleneck==1.6.0 numexpr==2.14.1 From bc3342b4d2c3332fa92d2550c6157402f2e6341f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 03:02:27 +0000 Subject: [PATCH 079/243] chore(deps): bump plotly from 6.4.0 to 6.5.0 Bumps [plotly](https://github.com/plotly/plotly.py) from 6.4.0 to 6.5.0. - [Release notes](https://github.com/plotly/plotly.py/releases) - [Changelog](https://github.com/plotly/plotly.py/blob/main/CHANGELOG.md) - [Commits](https://github.com/plotly/plotly.py/compare/v6.4.0...v6.5.0) --- updated-dependencies: - dependency-name: plotly dependency-version: 6.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-plot.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-plot.txt b/requirements-plot.txt index 858077929..5c3da9386 100644 --- a/requirements-plot.txt +++ b/requirements-plot.txt @@ -1,4 +1,4 @@ # Include all requirements to run the bot. -r requirements.txt -plotly==6.4.0 +plotly==6.5.0 From 024d2db2e27db2cc2dfc58d3dd84ce9b6dee95cf Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 24 Nov 2025 06:37:39 +0100 Subject: [PATCH 080/243] chore: bump pre-commit config dateutil types --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e7b802233..c457c88ce 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -30,7 +30,7 @@ repos: - types-filelock==3.2.7 - types-requests==2.32.4.20250913 - types-tabulate==0.9.0.20241207 - - types-python-dateutil==2.9.0.20251108 + - types-python-dateutil==2.9.0.20251115 - scipy-stubs==1.16.3.0 - SQLAlchemy==2.0.44 # stages: [push] From f0a5b95ec032d933f15b2589a53c741aa8bd834b Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 24 Nov 2025 07:05:49 +0100 Subject: [PATCH 081/243] feat: add FtTTLCache to avoid mocking issues overrides timer in a central location. --- freqtrade/util/__init__.py | 2 ++ freqtrade/util/ft_ttlcache.py | 12 ++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 freqtrade/util/ft_ttlcache.py diff --git a/freqtrade/util/__init__.py b/freqtrade/util/__init__.py index de8923389..06deb3ce0 100644 --- a/freqtrade/util/__init__.py +++ b/freqtrade/util/__init__.py @@ -22,6 +22,7 @@ from freqtrade.util.formatters import ( round_value, ) from freqtrade.util.ft_precise import FtPrecise +from freqtrade.util.ft_ttlcache import FtTTLCache from freqtrade.util.measure_time import MeasureTime from freqtrade.util.periodic_cache import PeriodicCache from freqtrade.util.progress_tracker import ( # noqa F401 @@ -59,4 +60,5 @@ __all__ = [ "print_rich_table", "print_df_rich_table", "CustomProgress", + "FtTTLCache", ] diff --git a/freqtrade/util/ft_ttlcache.py b/freqtrade/util/ft_ttlcache.py new file mode 100644 index 000000000..410184477 --- /dev/null +++ b/freqtrade/util/ft_ttlcache.py @@ -0,0 +1,12 @@ +import time + +from cachetools import TTLCache + + +class FtTTLCache(TTLCache): + """ + A TTLCache with a different default timer to allow for easier mocking in tests. + """ + + def __init__(self, maxsize, ttl, timer=time.time, getsizeof=None): + super().__init__(maxsize=maxsize, ttl=ttl, timer=timer, getsizeof=getsizeof) From 8274a6c3a9a8ce38cf56a7e42c86af10d78cc564 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 24 Nov 2025 07:07:13 +0100 Subject: [PATCH 082/243] chore: update usage of TTLCache to FtTTLCache --- freqtrade/exchange/binance.py | 4 ++-- freqtrade/exchange/exchange.py | 14 +++++++------- freqtrade/mixins/logging_mixin.py | 6 ++++-- freqtrade/plugins/pairlist/MarketCapPairList.py | 5 ++--- .../plugins/pairlist/PercentChangePairList.py | 5 ++--- freqtrade/plugins/pairlist/RemotePairList.py | 6 +++--- freqtrade/plugins/pairlist/VolatilityFilter.py | 5 ++--- freqtrade/plugins/pairlist/VolumePairList.py | 6 ++---- freqtrade/plugins/pairlist/rangestabilityfilter.py | 5 ++--- freqtrade/plugins/pairlistmanager.py | 5 +++-- freqtrade/rpc/api_server/webserver_bgwork.py | 2 +- freqtrade/rpc/fiat_convert.py | 4 ++-- freqtrade/util/measure_time.py | 4 ++-- 13 files changed, 34 insertions(+), 37 deletions(-) diff --git a/freqtrade/exchange/binance.py b/freqtrade/exchange/binance.py index 807aa27cf..b5c6c5d52 100644 --- a/freqtrade/exchange/binance.py +++ b/freqtrade/exchange/binance.py @@ -5,7 +5,6 @@ from datetime import UTC, datetime from pathlib import Path import ccxt -from cachetools import TTLCache from pandas import DataFrame from freqtrade.constants import DEFAULT_DATAFRAME_COLUMNS @@ -21,6 +20,7 @@ from freqtrade.exchange.common import retrier 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 from freqtrade.util.datetime_helpers import dt_from_ts, dt_ts @@ -76,7 +76,7 @@ class Binance(Exchange): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) - self._spot_delist_schedule_cache: TTLCache = TTLCache(maxsize=100, ttl=300) + self._spot_delist_schedule_cache: FtTTLCache = FtTTLCache(maxsize=100, ttl=300) def get_proxy_coin(self) -> str: """ diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index e86a37b73..b3ff6890a 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -16,7 +16,6 @@ from typing import Any, Literal, TypeGuard, TypeVar import ccxt import ccxt.pro as ccxt_pro -from cachetools import TTLCache from ccxt import TICK_SIZE from dateutil import parser from pandas import DataFrame, concat @@ -107,9 +106,8 @@ from freqtrade.misc import ( file_load_json, safe_value_fallback2, ) -from freqtrade.util import dt_from_ts, dt_now +from freqtrade.util import FtTTLCache, PeriodicCache, dt_from_ts, dt_now from freqtrade.util.datetime_helpers import dt_humanize_delta, dt_ts, format_ms_time -from freqtrade.util.periodic_cache import PeriodicCache logger = logging.getLogger(__name__) @@ -230,13 +228,13 @@ class Exchange: self._cache_lock = Lock() # Cache for 10 minutes ... - self._fetch_tickers_cache: TTLCache = TTLCache(maxsize=4, ttl=60 * 10) + self._fetch_tickers_cache: FtTTLCache = FtTTLCache(maxsize=4, ttl=60 * 10) # Cache values for 300 to avoid frequent polling of the exchange for prices # Caching only applies to RPC methods, so prices for open trades are still # refreshed once every iteration. # Shouldn't be too high either, as it'll freeze UI updates in case of open orders. - self._exit_rate_cache: TTLCache = TTLCache(maxsize=100, ttl=300) - self._entry_rate_cache: TTLCache = TTLCache(maxsize=100, ttl=300) + self._exit_rate_cache: FtTTLCache = FtTTLCache(maxsize=100, ttl=300) + self._entry_rate_cache: FtTTLCache = FtTTLCache(maxsize=100, ttl=300) # Holds candles self._klines: dict[PairWithTimeframe, DataFrame] = {} @@ -2164,7 +2162,9 @@ class Exchange: name = side.capitalize() strat_name = "entry_pricing" if side == "entry" else "exit_pricing" - cache_rate: TTLCache = self._entry_rate_cache if side == "entry" else self._exit_rate_cache + cache_rate: FtTTLCache = ( + self._entry_rate_cache if side == "entry" else self._exit_rate_cache + ) if not refresh: with self._cache_lock: rate = cache_rate.get(pair) diff --git a/freqtrade/mixins/logging_mixin.py b/freqtrade/mixins/logging_mixin.py index 91ad2c25e..2849a186d 100644 --- a/freqtrade/mixins/logging_mixin.py +++ b/freqtrade/mixins/logging_mixin.py @@ -1,6 +1,8 @@ from collections.abc import Callable -from cachetools import TTLCache, cached +from cachetools import cached + +from freqtrade.util import FtTTLCache class LoggingMixin: @@ -18,7 +20,7 @@ class LoggingMixin: """ self.logger = logger self.refresh_period = refresh_period - self._log_cache: TTLCache = TTLCache(maxsize=1024, ttl=self.refresh_period) + self._log_cache: FtTTLCache = FtTTLCache(maxsize=1024, ttl=self.refresh_period) def log_once(self, message: str, logmethod: Callable, force_show: bool = False) -> None: """ diff --git a/freqtrade/plugins/pairlist/MarketCapPairList.py b/freqtrade/plugins/pairlist/MarketCapPairList.py index f39bc3255..ecb287090 100644 --- a/freqtrade/plugins/pairlist/MarketCapPairList.py +++ b/freqtrade/plugins/pairlist/MarketCapPairList.py @@ -7,11 +7,10 @@ Provides dynamic pair list based on Market Cap import logging import math -from cachetools import TTLCache - from freqtrade.exceptions import OperationalException from freqtrade.exchange.exchange_types import Tickers from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting +from freqtrade.util import FtTTLCache from freqtrade.util.coin_gecko import FtCoinGeckoApi @@ -38,7 +37,7 @@ class MarketCapPairList(IPairList): self._max_rank = self._pairlistconfig.get("max_rank", 30) self._refresh_period = self._pairlistconfig.get("refresh_period", 86400) self._categories = self._pairlistconfig.get("categories", []) - self._marketcap_cache: TTLCache = TTLCache(maxsize=1, ttl=self._refresh_period) + self._marketcap_cache: FtTTLCache = FtTTLCache(maxsize=1, ttl=self._refresh_period) _coingecko_config = self._config.get("coingecko", {}) diff --git a/freqtrade/plugins/pairlist/PercentChangePairList.py b/freqtrade/plugins/pairlist/PercentChangePairList.py index 7f09cf77d..3138856c8 100644 --- a/freqtrade/plugins/pairlist/PercentChangePairList.py +++ b/freqtrade/plugins/pairlist/PercentChangePairList.py @@ -10,7 +10,6 @@ import logging from datetime import timedelta from typing import TypedDict -from cachetools import TTLCache from pandas import DataFrame from freqtrade.constants import ListPairsWithTimeframes, PairWithTimeframe @@ -18,7 +17,7 @@ from freqtrade.exceptions import OperationalException from freqtrade.exchange import timeframe_to_minutes, timeframe_to_prev_date from freqtrade.exchange.exchange_types import Ticker, Tickers from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting -from freqtrade.util import dt_now, format_ms_time +from freqtrade.util import FtTTLCache, dt_now, format_ms_time logger = logging.getLogger(__name__) @@ -47,7 +46,7 @@ class PercentChangePairList(IPairList): self._min_value = self._pairlistconfig.get("min_value", None) self._max_value = self._pairlistconfig.get("max_value", None) self._refresh_period = self._pairlistconfig.get("refresh_period", 1800) - self._pair_cache: TTLCache = TTLCache(maxsize=1, ttl=self._refresh_period) + self._pair_cache: FtTTLCache = FtTTLCache(maxsize=1, ttl=self._refresh_period) self._lookback_days = self._pairlistconfig.get("lookback_days", 0) self._lookback_timeframe = self._pairlistconfig.get("lookback_timeframe", "1d") self._lookback_period = self._pairlistconfig.get("lookback_period", 0) diff --git a/freqtrade/plugins/pairlist/RemotePairList.py b/freqtrade/plugins/pairlist/RemotePairList.py index db32d5a77..7967c2d1c 100644 --- a/freqtrade/plugins/pairlist/RemotePairList.py +++ b/freqtrade/plugins/pairlist/RemotePairList.py @@ -10,7 +10,6 @@ from typing import Any import rapidjson import requests -from cachetools import TTLCache from freqtrade import __version__ from freqtrade.configuration.load_config import CONFIG_PARSE_MODE @@ -18,6 +17,7 @@ from freqtrade.exceptions import OperationalException from freqtrade.exchange.exchange_types import Tickers from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting from freqtrade.plugins.pairlist.pairlist_helpers import expand_pairlist +from freqtrade.util import FtTTLCache logger = logging.getLogger(__name__) @@ -48,7 +48,7 @@ class RemotePairList(IPairList): self._number_pairs = self._pairlistconfig["number_assets"] self._refresh_period: int = self._pairlistconfig.get("refresh_period", 1800) self._keep_pairlist_on_failure = self._pairlistconfig.get("keep_pairlist_on_failure", True) - self._pair_cache: TTLCache = TTLCache(maxsize=1, ttl=self._refresh_period) + self._pair_cache: FtTTLCache = FtTTLCache(maxsize=1, ttl=self._refresh_period) self._pairlist_url = self._pairlistconfig.get("pairlist_url", "") self._read_timeout = self._pairlistconfig.get("read_timeout", 60) self._bearer_token = self._pairlistconfig.get("bearer_token", "") @@ -159,7 +159,7 @@ class RemotePairList(IPairList): ) self._refresh_period = remote_refresh_period - self._pair_cache = TTLCache(maxsize=1, ttl=remote_refresh_period) + self._pair_cache = FtTTLCache(maxsize=1, ttl=remote_refresh_period) self._init_done = True diff --git a/freqtrade/plugins/pairlist/VolatilityFilter.py b/freqtrade/plugins/pairlist/VolatilityFilter.py index 84056564a..8cd33f2c4 100644 --- a/freqtrade/plugins/pairlist/VolatilityFilter.py +++ b/freqtrade/plugins/pairlist/VolatilityFilter.py @@ -7,7 +7,6 @@ import sys from datetime import timedelta import numpy as np -from cachetools import TTLCache from pandas import DataFrame from freqtrade.constants import ListPairsWithTimeframes @@ -15,7 +14,7 @@ from freqtrade.exceptions import OperationalException from freqtrade.exchange.exchange_types import Tickers from freqtrade.misc import plural from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting -from freqtrade.util import dt_floor_day, dt_now, dt_ts +from freqtrade.util import FtTTLCache, dt_floor_day, dt_now, dt_ts logger = logging.getLogger(__name__) @@ -38,7 +37,7 @@ class VolatilityFilter(IPairList): self._def_candletype = self._config["candle_type_def"] self._sort_direction: str | None = self._pairlistconfig.get("sort_direction", None) - self._pair_cache: TTLCache = TTLCache(maxsize=1000, ttl=self._refresh_period) + self._pair_cache: FtTTLCache = FtTTLCache(maxsize=1000, ttl=self._refresh_period) candle_limit = self._exchange.ohlcv_candle_limit("1d", self._def_candletype) if self._days < 1: diff --git a/freqtrade/plugins/pairlist/VolumePairList.py b/freqtrade/plugins/pairlist/VolumePairList.py index 7e7fa7601..7d5ce3468 100644 --- a/freqtrade/plugins/pairlist/VolumePairList.py +++ b/freqtrade/plugins/pairlist/VolumePairList.py @@ -8,14 +8,12 @@ import logging from datetime import timedelta from typing import Any, Literal -from cachetools import TTLCache - from freqtrade.constants import ListPairsWithTimeframes from freqtrade.exceptions import OperationalException from freqtrade.exchange import timeframe_to_minutes, timeframe_to_prev_date from freqtrade.exchange.exchange_types import Tickers from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting -from freqtrade.util import dt_now, format_ms_time +from freqtrade.util import FtTTLCache, dt_now, format_ms_time logger = logging.getLogger(__name__) @@ -43,7 +41,7 @@ class VolumePairList(IPairList): self._min_value = self._pairlistconfig.get("min_value", 0) self._max_value = self._pairlistconfig.get("max_value", None) self._refresh_period = self._pairlistconfig.get("refresh_period", 1800) - self._pair_cache: TTLCache = TTLCache(maxsize=1, ttl=self._refresh_period) + self._pair_cache: FtTTLCache = FtTTLCache(maxsize=1, ttl=self._refresh_period) self._lookback_days = self._pairlistconfig.get("lookback_days", 0) self._lookback_timeframe = self._pairlistconfig.get("lookback_timeframe", "1d") self._lookback_period = self._pairlistconfig.get("lookback_period", 0) diff --git a/freqtrade/plugins/pairlist/rangestabilityfilter.py b/freqtrade/plugins/pairlist/rangestabilityfilter.py index 8ea082658..6a0e730e3 100644 --- a/freqtrade/plugins/pairlist/rangestabilityfilter.py +++ b/freqtrade/plugins/pairlist/rangestabilityfilter.py @@ -5,7 +5,6 @@ Rate of change pairlist filter import logging from datetime import timedelta -from cachetools import TTLCache from pandas import DataFrame from freqtrade.constants import ListPairsWithTimeframes @@ -13,7 +12,7 @@ from freqtrade.exceptions import OperationalException from freqtrade.exchange.exchange_types import Tickers from freqtrade.misc import plural from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting -from freqtrade.util import dt_floor_day, dt_now, dt_ts +from freqtrade.util import FtTTLCache, dt_floor_day, dt_now, dt_ts logger = logging.getLogger(__name__) @@ -32,7 +31,7 @@ class RangeStabilityFilter(IPairList): self._def_candletype = self._config["candle_type_def"] self._sort_direction: str | None = self._pairlistconfig.get("sort_direction", None) - self._pair_cache: TTLCache = TTLCache(maxsize=1000, ttl=self._refresh_period) + self._pair_cache: FtTTLCache = FtTTLCache(maxsize=1000, ttl=self._refresh_period) candle_limit = self._exchange.ohlcv_candle_limit("1d", self._def_candletype) if self._days < 1: diff --git a/freqtrade/plugins/pairlistmanager.py b/freqtrade/plugins/pairlistmanager.py index 9056d842e..aad5dc865 100644 --- a/freqtrade/plugins/pairlistmanager.py +++ b/freqtrade/plugins/pairlistmanager.py @@ -5,7 +5,7 @@ PairList manager class import logging from functools import partial -from cachetools import LRUCache, TTLCache, cached +from cachetools import LRUCache, cached from freqtrade.constants import Config, ListPairsWithTimeframes from freqtrade.data.dataprovider import DataProvider @@ -17,6 +17,7 @@ from freqtrade.mixins import LoggingMixin from freqtrade.plugins.pairlist.IPairList import IPairList, SupportsBacktesting from freqtrade.plugins.pairlist.pairlist_helpers import expand_pairlist from freqtrade.resolvers import PairListResolver +from freqtrade.util import FtTTLCache logger = logging.getLogger(__name__) @@ -129,7 +130,7 @@ class PairListManager(LoggingMixin): """List of short_desc for each Pairlist Handler""" return [{p.name: p.short_desc()} for p in self._pairlist_handlers] - @cached(TTLCache(maxsize=1, ttl=1800)) + @cached(FtTTLCache(maxsize=1, ttl=1800)) def _get_cached_tickers(self) -> Tickers: return self._exchange.get_tickers() diff --git a/freqtrade/rpc/api_server/webserver_bgwork.py b/freqtrade/rpc/api_server/webserver_bgwork.py index 75aadb78e..be17f7a94 100644 --- a/freqtrade/rpc/api_server/webserver_bgwork.py +++ b/freqtrade/rpc/api_server/webserver_bgwork.py @@ -37,7 +37,7 @@ class ApiBG: # Generic background jobs - # TODO: Change this to TTLCache + # TODO: Change this to FtTTLCache jobs: dict[str, JobsContainer] = {} # Pairlist evaluate things pairlist_running: bool = False diff --git a/freqtrade/rpc/fiat_convert.py b/freqtrade/rpc/fiat_convert.py index f4589a7da..16d64dd50 100644 --- a/freqtrade/rpc/fiat_convert.py +++ b/freqtrade/rpc/fiat_convert.py @@ -7,11 +7,11 @@ import logging from datetime import datetime from typing import Any -from cachetools import TTLCache from requests.exceptions import RequestException from freqtrade.constants import SUPPORTED_FIAT, Config from freqtrade.mixins.logging_mixin import LoggingMixin +from freqtrade.util import FtTTLCache from freqtrade.util.coin_gecko import FtCoinGeckoApi @@ -54,7 +54,7 @@ class CryptoToFiatConverter(LoggingMixin): def __init__(self, config: Config) -> None: # Timeout: 6h - self._pair_price: TTLCache = TTLCache(maxsize=500, ttl=6 * 60 * 60) + self._pair_price: FtTTLCache = FtTTLCache(maxsize=500, ttl=6 * 60 * 60) _coingecko_config = config.get("coingecko", {}) self._coingecko = FtCoinGeckoApi( diff --git a/freqtrade/util/measure_time.py b/freqtrade/util/measure_time.py index baa94f062..85fadf1e8 100644 --- a/freqtrade/util/measure_time.py +++ b/freqtrade/util/measure_time.py @@ -2,7 +2,7 @@ import logging import time from collections.abc import Callable -from cachetools import TTLCache +from freqtrade.util import FtTTLCache logger = logging.getLogger(__name__) @@ -27,7 +27,7 @@ class MeasureTime: """ self._callback = callback self._time_limit = time_limit - self.__cache: TTLCache = TTLCache(maxsize=1, ttl=ttl) + self.__cache: FtTTLCache = FtTTLCache(maxsize=1, ttl=ttl) def __enter__(self): self._start = time.time() From 77e8a5357268054b7f2454c9018a104c1c252d2f Mon Sep 17 00:00:00 2001 From: mrpabloyeah Date: Mon, 24 Nov 2025 10:43:00 +0100 Subject: [PATCH 083/243] Fix backtesting exception when no data is available for a pair (new approach) --- freqtrade/optimize/backtesting.py | 11 +++++++---- freqtrade/plugins/pairlistmanager.py | 16 +++++++++++----- tests/optimize/test_backtesting.py | 2 +- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 8a260cd76..fd78162db 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -126,6 +126,7 @@ class Backtesting: self.config["dry_run"] = True self.price_pair_prec: dict[str, Series] = {} + self.available_pairs: list[str] = [] self.run_ids: dict[str, str] = {} self.strategylist: list[IStrategy] = [] self.all_bt_content: dict[str, BacktestContentType] = {} @@ -176,7 +177,8 @@ class Backtesting: self._validate_pairlists_for_backtesting() self.dataprovider.add_pairlisthandler(self.pairlists) - self.pairlists.refresh_pairlist() + self.dynamic_pairlist: bool = self.config.get("enable_dynamic_pairlist", False) + self.pairlists.refresh_pairlist(only_first=self.dynamic_pairlist) if len(self.pairlists.whitelist) == 0: raise OperationalException("No pair in whitelist.") @@ -211,7 +213,6 @@ class Backtesting: self._can_short = self.trading_mode != TradingMode.SPOT self._position_stacking: bool = self.config.get("position_stacking", False) self.enable_protections: bool = self.config.get("enable_protections", False) - self.dynamic_pairlist: bool = self.config.get("enable_dynamic_pairlist", False) migrate_data(config, self.exchange) self.init_backtest() @@ -335,10 +336,12 @@ class Backtesting: self.progress.set_new_value(1) self._load_bt_data_detail() self.price_pair_prec = {} + for pair in self.pairlists.whitelist: if pair in data: # Load price precision logic self.price_pair_prec[pair] = get_tick_size_over_time(data[pair]) + self.available_pairs.append(pair) return data, self.timerange def _load_bt_data_detail(self) -> None: @@ -1425,7 +1428,7 @@ class Backtesting: # Row is treated as "current incomplete candle". # entry / exit signals are shifted by 1 to compensate for this. row = data[pair][row_index] - except (IndexError, KeyError): + except IndexError: # missing Data for one pair at the end. # Warnings for this are shown during data loading return None @@ -1587,7 +1590,7 @@ class Backtesting: self.check_abort() if self.dynamic_pairlist and self.pairlists: - self.pairlists.refresh_pairlist() + self.pairlists.refresh_pairlist(pairs=self.available_pairs) pairs = self.pairlists.whitelist # Reset open trade count for this candle diff --git a/freqtrade/plugins/pairlistmanager.py b/freqtrade/plugins/pairlistmanager.py index 9056d842e..f12ea795f 100644 --- a/freqtrade/plugins/pairlistmanager.py +++ b/freqtrade/plugins/pairlistmanager.py @@ -133,7 +133,7 @@ class PairListManager(LoggingMixin): def _get_cached_tickers(self) -> Tickers: return self._exchange.get_tickers() - def refresh_pairlist(self) -> None: + def refresh_pairlist(self, only_first: bool = False, pairs: list[str] | None = None) -> None: """Run pairlist through all configured Pairlist Handlers.""" # Tickers should be cached to avoid calling the exchange on each call. tickers: dict = {} @@ -143,10 +143,16 @@ class PairListManager(LoggingMixin): # Generate the pairlist with first Pairlist Handler in the chain pairlist = self._pairlist_handlers[0].gen_pairlist(tickers) - # Process all Pairlist Handlers in the chain - # except for the first one, which is the generator. - for pairlist_handler in self._pairlist_handlers[1:]: - pairlist = pairlist_handler.filter_pairlist(pairlist, tickers) + if pairs: + for pair in pairlist: + if pair not in pairs: + pairlist.remove(pair) + + if not only_first: + # Process all Pairlist Handlers in the chain + # except for the first one, which is the generator. + for pairlist_handler in self._pairlist_handlers[1:]: + pairlist = pairlist_handler.filter_pairlist(pairlist, tickers) # Validation against blacklist happens after the chain of Pairlist Handlers # to ensure blacklist is respected. diff --git a/tests/optimize/test_backtesting.py b/tests/optimize/test_backtesting.py index 1c9373fb7..11b6cea24 100644 --- a/tests/optimize/test_backtesting.py +++ b/tests/optimize/test_backtesting.py @@ -2772,7 +2772,7 @@ def test_time_pair_generator_open_trades_first(mocker, default_conf, dynamic_pai dummy_row = (end_date, 1.0, 1.1, 0.9, 1.0, 0, 0, 0, 0, None, None) data = {pair: [dummy_row] for pair in pairs} - def mock_refresh(self): + def mock_refresh(self, **kwargs): # Simulate shuffle self._whitelist = pairs[::-1] # ['ETH/BTC', 'NEO/BTC', 'LTC/BTC', 'XRP/BTC'] From 3152e97b2f26e3fd767890d4059f0435f91217d1 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 24 Nov 2025 19:49:44 +0100 Subject: [PATCH 084/243] chore: switch from coveralls to codecov --- .github/workflows/ci.yml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dddce1734..5487bcdf5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,6 +26,8 @@ jobs: matrix: os: [ "ubuntu-22.04", "ubuntu-24.04", "macos-14", "macos-15" , "windows-2022", "windows-2025" ] python-version: ["3.11", "3.12", "3.13"] + permissions: + id-token: write steps: - uses: actions/checkout@v5 @@ -74,15 +76,9 @@ jobs: run: | pytest --random-order --cov=freqtrade --cov=freqtrade_client --cov-config=.coveragerc - - name: Coveralls - if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-24.04') - env: - # Coveralls token. Not used as secret due to github not providing secrets to forked repositories - COVERALLS_REPO_TOKEN: 6D1m0xupS3FgutfuGao8keFf9Hc0FpIXu - run: | - # Allow failure for coveralls - uv pip install coveralls - coveralls || true + - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 + with: + use_oidc: true - name: Run json schema extract # This should be kept before the repository check to ensure that the schema is up-to-date From b337b075ab6ff58e0dd2af84547ed924a1fe3eea Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 24 Nov 2025 19:53:55 +0100 Subject: [PATCH 085/243] chore: limit to appropriate runner --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5487bcdf5..30f57f1e3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -77,6 +77,7 @@ jobs: pytest --random-order --cov=freqtrade --cov=freqtrade_client --cov-config=.coveragerc - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 + if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-24.04') with: use_oidc: true From a7ac957399b97377dfb6182df00f6058d6b43d82 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 24 Nov 2025 20:19:20 +0100 Subject: [PATCH 086/243] chore: implement cleanup for codecov action bug --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 30f57f1e3..c1f54dde6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -81,6 +81,12 @@ jobs: with: use_oidc: true + - name: Cleanup codecov dirty state files + if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-24.04') + run: | + # See https://github.com/codecov/codecov-action/issues/1851 + rm -rf codecov codecov.SHA256SUM codecov.SHA256SUM.sig + - name: Run json schema extract # This should be kept before the repository check to ensure that the schema is up-to-date run: | From f94acc917355c959ad9084795e2fd8d017f9e6d1 Mon Sep 17 00:00:00 2001 From: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com> Date: Tue, 25 Nov 2025 03:23:56 +0000 Subject: [PATCH 087/243] chore: update pre-commit hooks --- .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 c457c88ce..6a578c707 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.5' + rev: 'v0.14.6' hooks: - id: ruff - id: ruff-format From b5e17735a65144e428815c379e176ff9d958e801 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 25 Nov 2025 19:03:48 +0100 Subject: [PATCH 088/243] chore: use codecov with token --- .github/workflows/ci.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c1f54dde6..0156758eb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,8 +26,6 @@ jobs: matrix: os: [ "ubuntu-22.04", "ubuntu-24.04", "macos-14", "macos-15" , "windows-2022", "windows-2025" ] python-version: ["3.11", "3.12", "3.13"] - permissions: - id-token: write steps: - uses: actions/checkout@v5 @@ -79,7 +77,8 @@ jobs: - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-24.04') with: - use_oidc: true + fail_ci_if_error: true + token: ${{ secrets.CODECOV_TOKEN }} - name: Cleanup codecov dirty state files if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-24.04') From 6b8968ed0f3f867fe3f0847e8bab251cd73a178d Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 25 Nov 2025 19:18:22 +0100 Subject: [PATCH 089/243] chore(ci): restructure CI to reliably fail the build step if other checks failed --- .github/workflows/ci.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0156758eb..ea55c675d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -306,11 +306,18 @@ jobs: webhookUrl: ${{ secrets.DISCORD_WEBHOOK }} build: + if: always() name: "Build" needs: [ tests, docs-check, mypy-version-check, pre-commit ] runs-on: ubuntu-22.04 steps: + + - name: Decide whether the needed jobs succeeded or failed + uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2 + with: + jobs: ${{ toJSON(needs) }} + - uses: actions/checkout@v5 with: persist-credentials: false @@ -405,10 +412,7 @@ jobs: docker-build: name: "Docker Build and Deploy" needs: [ - tests, - docs-check, - mypy-version-check, - pre-commit + build, ] if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'release') && github.repository == 'freqtrade/freqtrade' uses: ./.github/workflows/docker-build.yml From f4920f199cc7c84187e60bbd959aef676361d7db Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 25 Nov 2025 19:44:10 +0100 Subject: [PATCH 090/243] chore(ci): only notify after build. --- .github/workflows/ci.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ea55c675d..14a55ff7a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -275,10 +275,7 @@ jobs: # Notify only once - when CI completes (and after deploy) in case it's successful notify-complete: needs: [ - tests, - docs-check, - mypy-version-check, - pre-commit, + build, build-linux-online ] runs-on: ubuntu-22.04 @@ -308,7 +305,12 @@ jobs: build: if: always() name: "Build" - needs: [ tests, docs-check, mypy-version-check, pre-commit ] + needs: [ + tests, + docs-check, + mypy-version-check, + pre-commit, + ] runs-on: ubuntu-22.04 steps: From c0a1911f229e8c8c643c974b51dc1e8f39362cad Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 25 Nov 2025 19:09:46 +0100 Subject: [PATCH 091/243] chore(ci): improve zizmor action formatting --- .github/workflows/zizmor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index 6b9308bf9..0bceed8b0 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -14,6 +14,7 @@ permissions: {} jobs: zizmor: + name: Run zizmor 🌈 runs-on: ubuntu-latest permissions: security-events: write From 72724037afe5afe98300e2f9b2fe5f616d15f08e Mon Sep 17 00:00:00 2001 From: mrpabloyeah Date: Wed, 26 Nov 2025 11:03:18 +0100 Subject: [PATCH 092/243] Replaced unsafe loop with a list comprehension & added docstring in refresh_pairlist() --- freqtrade/plugins/pairlistmanager.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/freqtrade/plugins/pairlistmanager.py b/freqtrade/plugins/pairlistmanager.py index f12ea795f..7856ae15d 100644 --- a/freqtrade/plugins/pairlistmanager.py +++ b/freqtrade/plugins/pairlistmanager.py @@ -134,7 +134,19 @@ class PairListManager(LoggingMixin): return self._exchange.get_tickers() def refresh_pairlist(self, only_first: bool = False, pairs: list[str] | None = None) -> None: - """Run pairlist through all configured Pairlist Handlers.""" + """ + Run pairlist through all configured Pairlist Handlers. + + :param only_first: If True, only run the first PairList handler (the generator) + and skip all subsequent filters. Used during backtesting startup to ensure + historic data is loaded for the complete universe of pairs that the + generator can produce (even if later filters would reduce the list size). + Prevents missing data when a filter returns a variable number of pairs + across refresh cycles. + :param pairs: Optional list of pairs to intersect with the generated pairlist. + Only pairs present both in the generated list and this parameter are kept. + Used in backtesting to filter out pairs with no available data. + """ # Tickers should be cached to avoid calling the exchange on each call. tickers: dict = {} if self._tickers_needed: @@ -143,10 +155,9 @@ class PairListManager(LoggingMixin): # Generate the pairlist with first Pairlist Handler in the chain pairlist = self._pairlist_handlers[0].gen_pairlist(tickers) - if pairs: - for pair in pairlist: - if pair not in pairs: - pairlist.remove(pair) + # Optional intersection with an explicit list of pairs (used in backtesting) + if pairs is not None: + pairlist = [p for p in pairlist if p in pairs] if not only_first: # Process all Pairlist Handlers in the chain From 001baa07b1088a168149964f4afe0d8ec0aef7b9 Mon Sep 17 00:00:00 2001 From: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com> Date: Thu, 27 Nov 2025 03:21:53 +0000 Subject: [PATCH 093/243] chore: update pre-commit hooks --- .../exchange/binance_leverage_tiers.json | 1217 +++++++++++------ 1 file changed, 773 insertions(+), 444 deletions(-) diff --git a/freqtrade/exchange/binance_leverage_tiers.json b/freqtrade/exchange/binance_leverage_tiers.json index 5daeaa071..3d374cacd 100644 --- a/freqtrade/exchange/binance_leverage_tiers.json +++ b/freqtrade/exchange/binance_leverage_tiers.json @@ -6549,13 +6549,13 @@ "symbol": "AIN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -6565,7 +6565,7 @@ "tier": 7.0, "symbol": "AIN/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -6573,9 +6573,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -6592,7 +6592,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -10288,13 +10288,13 @@ "symbol": "ARC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "2000000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -10304,7 +10304,7 @@ "tier": 7.0, "symbol": "ARC/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 2000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -10312,9 +10312,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "179575.0" } }, { @@ -10331,7 +10331,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "2054575.0" } } ], @@ -13577,13 +13577,13 @@ "symbol": "B/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -13593,7 +13593,7 @@ "tier": 9.0, "symbol": "B/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -13601,9 +13601,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -13620,7 +13620,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -14492,13 +14492,13 @@ "symbol": "BAN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -14508,7 +14508,7 @@ "tier": 7.0, "symbol": "BAN/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -14516,9 +14516,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -14535,7 +14535,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -16369,13 +16369,13 @@ "symbol": "BEAMX/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -16385,7 +16385,7 @@ "tier": 9.0, "symbol": "BEAMX/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -16393,9 +16393,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "76450.0" } }, { @@ -16412,7 +16412,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1951450.0" } } ], @@ -18966,6 +18966,127 @@ } } ], + "BOB/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "BOB/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": "BOB/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": "BOB/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": "BOB/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": "BOB/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": "BOB/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": "BOB/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" + } + } + ], "BOME/USDC:USDC": [ { "tier": 1.0, @@ -32563,13 +32684,13 @@ "symbol": "ESPORTS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -32579,7 +32700,7 @@ "tier": 7.0, "symbol": "ESPORTS/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -32587,9 +32708,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -32606,7 +32727,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -37880,6 +38001,144 @@ } } ], + "GAIB/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "GAIB/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": "GAIB/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": "GAIB/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": "GAIB/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": "GAIB/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": "GAIB/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": "GAIB/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": "GAIB/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" + } + } + ], "GALA/USDT:USDT": [ { "tier": 1.0, @@ -45804,6 +46063,127 @@ } } ], + "IRYS/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "IRYS/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": "IRYS/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": "IRYS/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": "IRYS/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": "IRYS/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": "IRYS/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": "IRYS/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" + } + } + ], "JASMY/USDT:USDT": [ { "tier": 1.0, @@ -50855,13 +51235,13 @@ "symbol": "LISTA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -50871,7 +51251,7 @@ "tier": 8.0, "symbol": "LISTA/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -50879,9 +51259,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "100675.0" + "cum": "59025.0" } }, { @@ -50898,7 +51278,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1975675.0" + "cum": "1934025.0" } } ], @@ -52802,13 +53182,13 @@ "symbol": "M/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 2000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "2000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -52818,7 +53198,7 @@ "tier": 8.0, "symbol": "M/USDT:USDT", "currency": "USDT", - "minNotional": 2000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -52826,9 +53206,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "2000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "183975.0" + "cum": "59025.0" } }, { @@ -52845,7 +53225,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2058975.0" + "cum": "1934025.0" } } ], @@ -54800,13 +55180,13 @@ "symbol": "MERL/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -54816,7 +55196,7 @@ "tier": 9.0, "symbol": "MERL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -54824,9 +55204,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -54843,7 +55223,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -54972,13 +55352,13 @@ "symbol": "MET/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -54988,7 +55368,7 @@ "tier": 9.0, "symbol": "MET/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -54996,9 +55376,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -55015,7 +55395,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -56556,13 +56936,13 @@ "symbol": "MOCA/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -56572,7 +56952,7 @@ "tier": 9.0, "symbol": "MOCA/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -56580,9 +56960,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -56599,7 +56979,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -56609,15 +56989,15 @@ "symbol": "MON/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 75.0, "info": { "bracket": "1", - "initialLeverage": "40", - "notionalCap": "5000", + "initialLeverage": "75", + "notionalCap": "20000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.01", "cum": "0.0" } }, @@ -56625,119 +57005,136 @@ "tier": 2.0, "symbol": "MON/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 20000.0, + "maxNotional": 200000.0, + "maintenanceMarginRate": 0.015, + "maxLeverage": 50.0, "info": { "bracket": "2", - "initialLeverage": "20", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" + "initialLeverage": "50", + "notionalCap": "200000", + "notionalFloor": "20000", + "maintMarginRatio": "0.015", + "cum": "100.0" } }, { "tier": 3.0, "symbol": "MON/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 200000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" + "initialLeverage": "25", + "notionalCap": "1000000", + "notionalFloor": "200000", + "maintMarginRatio": "0.02", + "cum": "1100.0" } }, { "tier": 4.0, "symbol": "MON/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 1000000.0, + "maxNotional": 2000000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "4", - "initialLeverage": "5", - "notionalCap": "50000", - "notionalFloor": "25000", - "maintMarginRatio": "0.1", - "cum": "1525.0" + "initialLeverage": "20", + "notionalCap": "2000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.025", + "cum": "6100.0" } }, { "tier": 5.0, "symbol": "MON/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 100000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 2000000.0, + "maxNotional": 5000000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "100000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2775.0" + "initialLeverage": "10", + "notionalCap": "5000000", + "notionalFloor": "2000000", + "maintMarginRatio": "0.05", + "cum": "56100.0" } }, { "tier": 6.0, "symbol": "MON/USDT:USDT", "currency": "USDT", - "minNotional": 100000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.167, - "maxLeverage": 3.0, + "minNotional": 5000000.0, + "maxNotional": 7500000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "6", - "initialLeverage": "3", - "notionalCap": "250000", - "notionalFloor": "100000", - "maintMarginRatio": "0.167", - "cum": "6975.0" + "initialLeverage": "5", + "notionalCap": "7500000", + "notionalFloor": "5000000", + "maintMarginRatio": "0.1", + "cum": "306100.0" } }, { "tier": 7.0, "symbol": "MON/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 2500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, + "minNotional": 7500000.0, + "maxNotional": 10000000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "7", - "initialLeverage": "2", - "notionalCap": "2500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.25", - "cum": "27725.0" + "initialLeverage": "4", + "notionalCap": "10000000", + "notionalFloor": "7500000", + "maintMarginRatio": "0.125", + "cum": "493600.0" } }, { "tier": 8.0, "symbol": "MON/USDT:USDT", "currency": "USDT", - "minNotional": 2500000.0, - "maxNotional": 5000000.0, + "minNotional": 10000000.0, + "maxNotional": 12500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "8", + "initialLeverage": "2", + "notionalCap": "12500000", + "notionalFloor": "10000000", + "maintMarginRatio": "0.25", + "cum": "1743600.0" + } + }, + { + "tier": 9.0, + "symbol": "MON/USDT:USDT", + "currency": "USDT", + "minNotional": 12500000.0, + "maxNotional": 15000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "9", "initialLeverage": "1", - "notionalCap": "5000000", - "notionalFloor": "2500000", + "notionalCap": "15000000", + "notionalFloor": "12500000", "maintMarginRatio": "0.5", - "cum": "652725.0" + "cum": "4868600.0" } } ], @@ -57227,13 +57624,13 @@ "symbol": "MOVE/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -57243,7 +57640,7 @@ "tier": 9.0, "symbol": "MOVE/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -57251,9 +57648,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "409650.0" + "cum": "118100.0" } }, { @@ -57270,7 +57667,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2284650.0" + "cum": "1993100.0" } } ], @@ -65342,13 +65739,13 @@ "symbol": "PIPPIN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 2000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "2000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -65358,7 +65755,7 @@ "tier": 7.0, "symbol": "PIPPIN/USDT:USDT", "currency": "USDT", - "minNotional": 2000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -65366,9 +65763,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "2000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "179575.0" + "cum": "54625.0" } }, { @@ -65385,7 +65782,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2054575.0" + "cum": "1929625.0" } } ], @@ -65807,13 +66204,13 @@ "symbol": "PLUME/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 2000000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "2000000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -65823,7 +66220,7 @@ "tier": 9.0, "symbol": "PLUME/USDT:USDT", "currency": "USDT", - "minNotional": 2000000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -65831,9 +66228,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "2000000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "201400.0" + "cum": "118100.0" } }, { @@ -65850,7 +66247,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2076400.0" + "cum": "1993100.0" } } ], @@ -66565,13 +66962,13 @@ "symbol": "PONKE/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 60000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { "bracket": "2", "initialLeverage": "5", - "notionalCap": "60000", + "notionalCap": "50000", "notionalFloor": "10000", "maintMarginRatio": "0.1", "cum": "500.0" @@ -66581,7 +66978,7 @@ "tier": 3.0, "symbol": "PONKE/USDT:USDT", "currency": "USDT", - "minNotional": 60000.0, + "minNotional": 50000.0, "maxNotional": 70000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, @@ -66589,9 +66986,9 @@ "bracket": "3", "initialLeverage": "4", "notionalCap": "70000", - "notionalFloor": "60000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2000.0" + "cum": "1750.0" } }, { @@ -66599,50 +66996,50 @@ "symbol": "PONKE/USDT:USDT", "currency": "USDT", "minNotional": 70000.0, - "maxNotional": 700000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "4", "initialLeverage": "3", - "notionalCap": "700000", + "notionalCap": "250000", "notionalFloor": "70000", "maintMarginRatio": "0.1667", - "cum": "4919.0" + "cum": "4669.0" } }, { "tier": 5.0, "symbol": "PONKE/USDT:USDT", "currency": "USDT", - "minNotional": 700000.0, - "maxNotional": 2500000.0, + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "notionalCap": "2500000", - "notionalFloor": "700000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "63229.0" + "cum": "25494.0" } }, { "tier": 6.0, "symbol": "PONKE/USDT:USDT", "currency": "USDT", - "minNotional": 2500000.0, - "maxNotional": 5000000.0, + "minNotional": 500000.0, + "maxNotional": 800000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "notionalCap": "5000000", - "notionalFloor": "2500000", + "notionalCap": "800000", + "notionalFloor": "500000", "maintMarginRatio": "0.5", - "cum": "688229.0" + "cum": "150494.0" } } ], @@ -66807,15 +67204,15 @@ "symbol": "PORT3/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxNotional": 1000.0, + "maintenanceMarginRate": 0.03, + "maxLeverage": 20.0, "info": { "bracket": "1", - "initialLeverage": "50", - "notionalCap": "5000", + "initialLeverage": "20", + "notionalCap": "1000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.03", "cum": "0.0" } }, @@ -66823,17 +67220,17 @@ "tier": 2.0, "symbol": "PORT3/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, + "minNotional": 1000.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" + "notionalFloor": "1000", + "maintMarginRatio": "0.05", + "cum": "20.0" } }, { @@ -66841,37 +67238,20 @@ "symbol": "PORT3/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": "300.0" - } - }, - { - "tier": 4.0, - "symbol": "PORT3/USDT:USDT", - "currency": "USDT", - "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "3", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "520.0" } }, { - "tier": 5.0, + "tier": 4.0, "symbol": "PORT3/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -66879,63 +67259,63 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "4", "initialLeverage": "4", "notionalCap": "250000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "1770.0" + } + }, + { + "tier": 5.0, + "symbol": "PORT3/USDT:USDT", + "currency": "USDT", + "minNotional": 250000.0, + "maxNotional": 1000000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "5", + "initialLeverage": "3", + "notionalCap": "1000000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1667", + "cum": "12195.0" } }, { "tier": 6.0, "symbol": "PORT3/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 1500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "minNotional": 1000000.0, + "maxNotional": 2000000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "6", - "initialLeverage": "3", - "notionalCap": "1500000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" + "initialLeverage": "2", + "notionalCap": "2000000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.25", + "cum": "95495.0" } }, { "tier": 7.0, "symbol": "PORT3/USDT:USDT", "currency": "USDT", - "minNotional": 1500000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, - "info": { - "bracket": "7", - "initialLeverage": "2", - "notionalCap": "7500000", - "notionalFloor": "1500000", - "maintMarginRatio": "0.25", - "cum": "137925.0" - } - }, - { - "tier": 8.0, - "symbol": "PORT3/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2000000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2000000", "maintMarginRatio": "0.5", - "cum": "2012925.0" + "cum": "595495.0" } } ], @@ -67323,13 +67703,13 @@ "symbol": "PROM/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 2000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "2000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -67339,7 +67719,7 @@ "tier": 8.0, "symbol": "PROM/USDT:USDT", "currency": "USDT", - "minNotional": 2000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -67347,9 +67727,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "2000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "183975.0" + "cum": "59025.0" } }, { @@ -67366,7 +67746,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2058975.0" + "cum": "1934025.0" } } ], @@ -69132,15 +69512,15 @@ "symbol": "QUICK/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "25", - "notionalCap": "5000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -69148,55 +69528,21 @@ "tier": 2.0, "symbol": "QUICK/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": "QUICK/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": "QUICK/USDT:USDT", - "currency": "USDT", "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", "notionalFloor": "20000", "maintMarginRatio": "0.1", - "cum": "1275.0" + "cum": "1000.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "QUICK/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -69204,16 +69550,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2525.0" + "cum": "2250.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "QUICK/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -69221,16 +69567,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6695.0" + "cum": "6420.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "QUICK/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -69238,16 +69584,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27520.0" + "cum": "27245.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "QUICK/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -69255,12 +69601,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", "notionalCap": "800000", "notionalFloor": "500000", "maintMarginRatio": "0.5", - "cum": "152520.0" + "cum": "152245.0" } } ], @@ -70924,13 +71270,13 @@ "symbol": "RESOLV/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -70940,7 +71286,7 @@ "tier": 7.0, "symbol": "RESOLV/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -70948,9 +71294,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -70967,7 +71313,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -76797,13 +77143,13 @@ "symbol": "SOLV/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "1500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -76813,7 +77159,7 @@ "tier": 8.0, "symbol": "SOLV/USDT:USDT", "currency": "USDT", - "minNotional": 1500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -76821,9 +77167,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "142325.0" + "cum": "59025.0" } }, { @@ -76840,7 +77186,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2017325.0" + "cum": "1934025.0" } } ], @@ -78519,13 +78865,13 @@ "symbol": "STBL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -78535,7 +78881,7 @@ "tier": 8.0, "symbol": "STBL/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -78543,9 +78889,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "59025.0" } }, { @@ -78562,7 +78908,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1934025.0" } } ], @@ -80812,13 +81158,13 @@ "symbol": "SWELL/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 60000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { "bracket": "2", "initialLeverage": "5", - "notionalCap": "60000", + "notionalCap": "50000", "notionalFloor": "10000", "maintMarginRatio": "0.1", "cum": "500.0" @@ -80828,7 +81174,7 @@ "tier": 3.0, "symbol": "SWELL/USDT:USDT", "currency": "USDT", - "minNotional": 60000.0, + "minNotional": 50000.0, "maxNotional": 70000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, @@ -80836,9 +81182,9 @@ "bracket": "3", "initialLeverage": "4", "notionalCap": "70000", - "notionalFloor": "60000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2000.0" + "cum": "1750.0" } }, { @@ -80846,50 +81192,50 @@ "symbol": "SWELL/USDT:USDT", "currency": "USDT", "minNotional": 70000.0, - "maxNotional": 700000.0, + "maxNotional": 250000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "4", "initialLeverage": "3", - "notionalCap": "700000", + "notionalCap": "250000", "notionalFloor": "70000", "maintMarginRatio": "0.1667", - "cum": "4919.0" + "cum": "4669.0" } }, { "tier": 5.0, "symbol": "SWELL/USDT:USDT", "currency": "USDT", - "minNotional": 700000.0, - "maxNotional": 2500000.0, + "minNotional": 250000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "5", "initialLeverage": "2", - "notionalCap": "2500000", - "notionalFloor": "700000", + "notionalCap": "500000", + "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "63229.0" + "cum": "25494.0" } }, { "tier": 6.0, "symbol": "SWELL/USDT:USDT", "currency": "USDT", - "minNotional": 2500000.0, - "maxNotional": 5000000.0, + "minNotional": 500000.0, + "maxNotional": 800000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "6", "initialLeverage": "1", - "notionalCap": "5000000", - "notionalFloor": "2500000", + "notionalCap": "800000", + "notionalFloor": "500000", "maintMarginRatio": "0.5", - "cum": "688229.0" + "cum": "150494.0" } } ], @@ -84261,14 +84607,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -84278,14 +84624,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "25.0" } }, @@ -84294,67 +84640,67 @@ "symbol": "TRADOOR/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "TRADOOR/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" } }, { "tier": 5.0, "symbol": "TRADOOR/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "TRADOOR/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 100000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" } }, { @@ -84362,50 +84708,33 @@ "symbol": "TRADOOR/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "2500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.25", + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "TRADOOR/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": "TRADOOR/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "652520.0" } } ], @@ -86859,13 +87188,13 @@ "symbol": "UB/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 2000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "2000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -86875,7 +87204,7 @@ "tier": 8.0, "symbol": "UB/USDT:USDT", "currency": "USDT", - "minNotional": 2000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -86883,9 +87212,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "2000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "183975.0" + "cum": "59025.0" } }, { @@ -86902,7 +87231,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2058975.0" + "cum": "1934025.0" } } ], @@ -88755,13 +89084,13 @@ "symbol": "VELVET/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -88771,7 +89100,7 @@ "tier": 7.0, "symbol": "VELVET/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -88779,9 +89108,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "54625.0" } }, { @@ -88798,7 +89127,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "1929625.0" } } ], @@ -92303,13 +92632,13 @@ "symbol": "XAN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -92319,7 +92648,7 @@ "tier": 8.0, "symbol": "XAN/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -92327,9 +92656,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "100675.0" + "cum": "59025.0" } }, { @@ -92346,7 +92675,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1975675.0" + "cum": "1934025.0" } } ], @@ -93148,13 +93477,13 @@ "symbol": "XPIN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 1000000.0, + "maxNotional": 500000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "1000000", + "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -93164,7 +93493,7 @@ "tier": 7.0, "symbol": "XPIN/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -93172,9 +93501,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "96275.0" + "cum": "54625.0" } }, { @@ -93191,7 +93520,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1971275.0" + "cum": "1929625.0" } } ], @@ -95609,13 +95938,13 @@ "symbol": "ZEREBRO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 2000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "6", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "2000000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "12975.0" @@ -95625,7 +95954,7 @@ "tier": 7.0, "symbol": "ZEREBRO/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 2000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -95633,9 +95962,9 @@ "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "2000000", "maintMarginRatio": "0.25", - "cum": "387825.0" + "cum": "179575.0" } }, { @@ -95652,7 +95981,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2262825.0" + "cum": "2054575.0" } } ], @@ -96108,13 +96437,13 @@ "symbol": "ZK/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 1500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "8", "initialLeverage": "3", - "notionalCap": "1500000", + "notionalCap": "1000000", "notionalFloor": "500000", "maintMarginRatio": "0.1667", "cum": "34800.0" @@ -96124,7 +96453,7 @@ "tier": 9.0, "symbol": "ZK/USDT:USDT", "currency": "USDT", - "minNotional": 1500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -96132,9 +96461,9 @@ "bracket": "9", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "159750.0" + "cum": "118100.0" } }, { @@ -96151,7 +96480,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2034750.0" + "cum": "1993100.0" } } ], @@ -97227,13 +97556,13 @@ "symbol": "\u5e01\u5b89\u4eba\u751f/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 4500000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { "bracket": "7", "initialLeverage": "3", - "notionalCap": "4500000", + "notionalCap": "1000000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", "cum": "17375.0" @@ -97243,7 +97572,7 @@ "tier": 8.0, "symbol": "\u5e01\u5b89\u4eba\u751f/USDT:USDT", "currency": "USDT", - "minNotional": 4500000.0, + "minNotional": 1000000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, @@ -97251,9 +97580,9 @@ "bracket": "8", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "4500000", + "notionalFloor": "1000000", "maintMarginRatio": "0.25", - "cum": "392225.0" + "cum": "100675.0" } }, { @@ -97270,7 +97599,7 @@ "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "2267225.0" + "cum": "1975675.0" } } ] From 759c18df3d7034261326e77add2723e3384d8450 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 27 Nov 2025 07:04:00 +0100 Subject: [PATCH 094/243] docs: improve pre-commit docs wording --- docs/developer.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/developer.md b/docs/developer.md index bb3542b92..d470bf8b2 100644 --- a/docs/developer.md +++ b/docs/developer.md @@ -26,10 +26,19 @@ Alternatively (e.g. if your system is not supported by the setup.sh script), fol This will install all required tools for development, including `pytest`, `ruff`, `mypy`, and `coveralls`. -Then install the git hook scripts by running `pre-commit install`, so your changes will be verified locally before committing. -This avoids a lot of waiting for CI already, as some basic formatting checks are done locally on your machine. +Run the following command to install the git hook scripts: -Before opening a pull request, please familiarize yourself with our [Contributing Guidelines](https://github.com/freqtrade/freqtrade/blob/develop/CONTRIBUTING.md). +``` bash +pre-commit install +``` + +These pre-commit scripts check your changes automatically before each commit. +If any formatting issues are found, the commit will fail and will prompt for fixes. +This reduces unnecessary CI failures, reduces maintenance burden, and improves code quality. + +You can run the checks manually when necessary with `pre-commit run -a`. + +Before opening a pull request, please also familiarize yourself with our [Contributing Guidelines](https://github.com/freqtrade/freqtrade/blob/develop/CONTRIBUTING.md). ### Devcontainer setup From 682c4137b4837c5cd324df0c9ea996468abbcbf7 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 27 Nov 2025 20:16:38 +0100 Subject: [PATCH 095/243] docs: improved wording --- docs/configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration.md b/docs/configuration.md index e046f52d6..48211619b 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -675,7 +675,7 @@ Should you experience problems you suspect are caused by websockets, you can dis Should you be required to use a proxy, please refer to the [proxy section](#using-a-proxy-with-freqtrade) for more information. !!! Info "Rollout" - We're implementing this out slowly, ensuring stability of your bots. + We're rolling this out slowly, ensuring stability of your bots. Currently, usage is limited to ohlcv data streams. It's also limited to a few exchanges, with new exchanges being added on an ongoing basis. From 61ecaa4c41bd918fcdc6fa560ea971b37ca52e26 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 28 Nov 2025 13:13:57 +0100 Subject: [PATCH 096/243] fix: ensure automatic exportfilename detection works closes #12557 --- freqtrade/plot/plotting.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/plot/plotting.py b/freqtrade/plot/plotting.py index 5c43ee404..978e0b44b 100644 --- a/freqtrade/plot/plotting.py +++ b/freqtrade/plot/plotting.py @@ -75,11 +75,11 @@ def init_plotscript(config, markets: list, startup_candles: int = 0): ) no_trades = False - filename = config.get("exportfilename") + filename = config.get("exportfilename") or config.get("exportdirectory") if config.get("no_trades", False): no_trades = True elif config["trade_source"] == "file": - if not filename.is_dir() and not filename.is_file(): + if not filename and not filename.is_dir() and not filename.is_file(): logger.warning("Backtest file is missing skipping trades.") no_trades = True try: From 57fd455adfc3ad8073f4dfc9a03ed5abd64d94e4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 28 Nov 2025 13:29:50 +0100 Subject: [PATCH 097/243] fix: Proper fix for plotscript this time also saving the file ... closes #12557 --- freqtrade/plot/plotting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/plot/plotting.py b/freqtrade/plot/plotting.py index 978e0b44b..a27069194 100644 --- a/freqtrade/plot/plotting.py +++ b/freqtrade/plot/plotting.py @@ -79,7 +79,7 @@ def init_plotscript(config, markets: list, startup_candles: int = 0): if config.get("no_trades", False): no_trades = True elif config["trade_source"] == "file": - if not filename and not filename.is_dir() and not filename.is_file(): + if not filename or (not filename.is_dir() and not filename.is_file()): logger.warning("Backtest file is missing skipping trades.") no_trades = True try: From 1770a68457eb017bce350cb3c234d71478d25ac4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 28 Nov 2025 13:37:31 +0100 Subject: [PATCH 098/243] chore: fix wrongly worded exchange_response endpoint naming --- freqtrade/exchange/exchange.py | 2 +- freqtrade/exchange/kraken.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index b3ff6890a..a2d1eb859 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1769,7 +1769,7 @@ class Exchange: balances.pop("total", None) balances.pop("used", None) - self._log_exchange_response("fetch_balances", balances) + self._log_exchange_response("fetch_balance", balances) return balances except ccxt.DDoSProtection as e: raise DDosProtection(e) from e diff --git a/freqtrade/exchange/kraken.py b/freqtrade/exchange/kraken.py index d361b1337..1f8b3cc26 100644 --- a/freqtrade/exchange/kraken.py +++ b/freqtrade/exchange/kraken.py @@ -82,7 +82,7 @@ class Kraken(Exchange): balances.pop("free", None) balances.pop("total", None) balances.pop("used", None) - self._log_exchange_response("fetch_balances", balances) + self._log_exchange_response("fetch_balance", balances) # Consolidate balances balances = self.consolidate_balances(balances) @@ -104,7 +104,7 @@ class Kraken(Exchange): balances[bal]["used"] = sum(order[1] for order in order_list if order[0] == bal) balances[bal]["free"] = balances[bal]["total"] - balances[bal]["used"] - self._log_exchange_response("fetch_balances2", balances) + self._log_exchange_response("fetch_balance2", balances) return balances except ccxt.DDoSProtection as e: raise DDosProtection(e) from e From cd7b26717174fc7ab47e201f0fb5e5fa68f6a4ec Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 18 Nov 2025 20:29:39 +0100 Subject: [PATCH 099/243] feat: record dry-run stop_price price separately --- freqtrade/exchange/exchange.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index a2d1eb859..5a7cc7fc8 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1119,6 +1119,7 @@ class Exchange: leverage: float, params: dict | None = None, stop_loss: bool = False, + stop_price: float | None = None, ) -> CcxtOrder: now = dt_now() order_id = f"dry_run_{side}_{pair}_{now.timestamp()}" @@ -1145,7 +1146,7 @@ class Exchange: } if stop_loss: dry_order["info"] = {"stopPrice": dry_order["price"]} - dry_order[self._ft_has["stop_price_prop"]] = dry_order["price"] + dry_order[self._ft_has["stop_price_prop"]] = stop_price or dry_order["price"] # Workaround to avoid filling stoploss orders immediately dry_order["ft_order_type"] = "stoploss" orderbook: OrderBook | None = None @@ -1517,8 +1518,9 @@ class Exchange: ordertype, side, amount, - stop_price_norm, + limit_rate or stop_price_norm, stop_loss=True, + stop_price=stop_price_norm, leverage=leverage, ) return dry_order From ca7234e33f787a8805e2549ee3395dfcc14f502c Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 18 Nov 2025 20:33:04 +0100 Subject: [PATCH 100/243] test: fix dry-stop tests --- tests/exchange/test_binance.py | 3 ++- tests/exchange/test_htx.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/exchange/test_binance.py b/tests/exchange/test_binance.py index 2c11fc2f3..59a6c41ae 100644 --- a/tests/exchange/test_binance.py +++ b/tests/exchange/test_binance.py @@ -157,7 +157,8 @@ def test_create_stoploss_order_dry_run_binance(default_conf, mocker): assert "type" in order assert order["type"] == order_type - assert order["price"] == 220 + assert order["price"] == 217.8 + assert order["stopPrice"] == 220 assert order["amount"] == 1 diff --git a/tests/exchange/test_htx.py b/tests/exchange/test_htx.py index e32d7e85e..bffbde8c0 100644 --- a/tests/exchange/test_htx.py +++ b/tests/exchange/test_htx.py @@ -123,7 +123,8 @@ def test_create_stoploss_order_dry_run_htx(default_conf, mocker): assert "type" in order assert order["type"] == order_type - assert order["price"] == 220 + assert order["price"] == 217.8 + assert order["stopPrice"] == 220 assert order["amount"] == 1 From 73b427370b879521ae2e38705e595e769d08ea04 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 19 Nov 2025 19:51:39 +0100 Subject: [PATCH 101/243] test: add tests for dry crossed stoploss --- tests/exchange/test_exchange.py | 34 ++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 63dd0be94..4edecad57 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -1111,21 +1111,29 @@ def test_create_dry_run_order_fees( @pytest.mark.parametrize( - "side,limit,offset,expected", + "side,limit,offset,is_stop,expected", [ - ("buy", 46.0, 0.0, True), - ("buy", 26.0, 0.0, True), - ("buy", 25.55, 0.0, False), - ("buy", 1, 0.0, False), # Very far away - ("sell", 25.5, 0.0, True), - ("sell", 50, 0.0, False), # Very far away - ("sell", 25.58, 0.0, False), - ("sell", 25.563, 0.01, False), - ("sell", 5.563, 0.01, True), + ("buy", 46.0, 0.0, False, True), + ("buy", 46.0, 0.0, True, False), + ("buy", 26.0, 0.0, False, True), + ("buy", 26.0, 0.0, True, False), # Stop - didn't trigger + ("buy", 25.55, 0.0, False, False), + ("buy", 25.55, 0.0, True, True), # Stop - triggered + ("buy", 1, 0.0, False, False), # Very far away + ("buy", 1, 0.0, True, True), # Current price is above stop - triggered + ("sell", 25.5, 0.0, False, True), + ("sell", 50, 0.0, False, False), # Very far away + ("sell", 25.58, 0.0, False, False), + ("sell", 25.563, 0.01, False, False), + ("sell", 25.563, 0.0, True, False), # stop order - Not triggered, best bid + ("sell", 25.566, 0.0, True, True), # stop order - triggered + ("sell", 26, 0.01, True, True), # stop order - triggered + ("sell", 5.563, 0.01, False, True), + ("sell", 5.563, 0.0, True, False), # stop order - not triggered ], ) def test__dry_is_price_crossed_with_orderbook( - default_conf, mocker, order_book_l2_usd, side, limit, offset, expected + default_conf, mocker, order_book_l2_usd, side, limit, offset, is_stop, expected ): # Best bid 25.563 # Best ask 25.566 @@ -1134,14 +1142,14 @@ def test__dry_is_price_crossed_with_orderbook( exchange.fetch_l2_order_book = order_book_l2_usd orderbook = order_book_l2_usd.return_value result = exchange._dry_is_price_crossed( - "LTC/USDT", side, limit, orderbook=orderbook, offset=offset + "LTC/USDT", side, limit, orderbook=orderbook, offset=offset, is_stop=is_stop ) assert result is expected assert order_book_l2_usd.call_count == 0 # Test without passing orderbook order_book_l2_usd.reset_mock() - result = exchange._dry_is_price_crossed("LTC/USDT", side, limit, offset=offset) + result = exchange._dry_is_price_crossed("LTC/USDT", side, limit, offset=offset, is_stop=is_stop) assert result is expected From ad256367beba9e3350b4d2718794b989ef4c9276 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 19 Nov 2025 19:52:16 +0100 Subject: [PATCH 102/243] feat: dry-is-crossed should support stoploss --- freqtrade/exchange/exchange.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 5a7cc7fc8..1b2e39b0b 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1254,13 +1254,14 @@ class Exchange: limit: float, orderbook: OrderBook | None = None, offset: float = 0.0, + is_stop: bool = False, ) -> bool: if not self.exchange_has("fetchL2OrderBook"): return True if not orderbook: orderbook = self.fetch_l2_order_book(pair, 1) try: - if side == "buy": + if (side == "buy" and not is_stop) or (side == "sell" and is_stop): price = orderbook["asks"][0][0] if limit * (1 - offset) >= price: return True From c83ea0db4fe174b95de0ad605ff3918300739823 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 19 Nov 2025 19:55:39 +0100 Subject: [PATCH 103/243] chore: fix default behavior for crossed mode --- freqtrade/exchange/exchange.py | 3 ++- tests/exchange/test_exchange.py | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 1b2e39b0b..11e46ca53 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1257,7 +1257,8 @@ class Exchange: is_stop: bool = False, ) -> bool: if not self.exchange_has("fetchL2OrderBook"): - return True + # True unless checking a stoploss order + return not is_stop if not orderbook: orderbook = self.fetch_l2_order_book(pair, 1) try: diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 4edecad57..743f798dd 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -1173,7 +1173,10 @@ def test__dry_is_price_crossed_without_orderbook_support(default_conf, mocker): exchange.fetch_l2_order_book = MagicMock() mocker.patch(f"{EXMS}.exchange_has", return_value=False) assert exchange._dry_is_price_crossed("LTC/USDT", "buy", 1.0) + assert exchange._dry_is_price_crossed("LTC/USDT", "sell", 1.0) assert exchange.fetch_l2_order_book.call_count == 0 + assert not exchange._dry_is_price_crossed("LTC/USDT", "buy", 1.0, is_stop=True) + assert not exchange._dry_is_price_crossed("LTC/USDT", "sell", 1.0, is_stop=True) @pytest.mark.parametrize( From 3543e96ec5807dfe85ed5438152319d7f2ee7c40 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 19 Nov 2025 20:04:37 +0100 Subject: [PATCH 104/243] refactor: extract dry-market order slippage from function --- freqtrade/exchange/exchange.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 11e46ca53..b34cad18a 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1164,7 +1164,11 @@ class Exchange: if dry_order["type"] == "market" and not dry_order.get("ft_order_type"): # Update market order pricing - average = self.get_dry_market_fill_price(pair, side, amount, rate, orderbook) + slippage = 0.05 + worst_rate = rate * ((1 + slippage) if side == "buy" else (1 - slippage)) + average = self.get_dry_market_fill_price( + pair, side, amount, rate, worst_rate, orderbook + ) dry_order.update( { "average": average, @@ -1204,7 +1208,13 @@ class Exchange: return dry_order def get_dry_market_fill_price( - self, pair: str, side: str, amount: float, rate: float, orderbook: OrderBook | None + self, + pair: str, + side: str, + amount: float, + rate: float, + worst_rate: float, + orderbook: OrderBook | None, ) -> float: """ Get the market order fill price based on orderbook interpolation @@ -1213,8 +1223,6 @@ class Exchange: if not orderbook: orderbook = self.fetch_l2_order_book(pair, 20) ob_type: OBLiteral = "asks" if side == "buy" else "bids" - slippage = 0.05 - max_slippage_val = rate * ((1 + slippage) if side == "buy" else (1 - slippage)) remaining_amount = amount filled_value = 0.0 @@ -1238,11 +1246,10 @@ class Exchange: forecast_avg_filled_price = max(filled_value, 0) / amount # Limit max. slippage to specified value if side == "buy": - forecast_avg_filled_price = min(forecast_avg_filled_price, max_slippage_val) + forecast_avg_filled_price = min(forecast_avg_filled_price, worst_rate) else: - forecast_avg_filled_price = max(forecast_avg_filled_price, max_slippage_val) - + forecast_avg_filled_price = max(forecast_avg_filled_price, worst_rate) return self.price_to_precision(pair, forecast_avg_filled_price) return rate From f63484d0b027e4743bfb191e93f8006fadb6d60a Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 20 Nov 2025 06:37:49 +0100 Subject: [PATCH 105/243] feat: add dry-limit check for stoploss orders --- freqtrade/exchange/exchange.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index b34cad18a..1b0946987 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1288,6 +1288,38 @@ class Exchange: """ Check dry-run limit order fill and update fee (if it filled). """ + if order["status"] != "closed" and order.get("ft_order_type") == "stoploss": + pair = order["symbol"] + if not orderbook and self.exchange_has("fetchL2OrderBook"): + orderbook = self.fetch_l2_order_book(pair, 20) + price = order[self._ft_has["stop_price_prop"]] + crossed = self._dry_is_price_crossed( + pair, order["side"], price, orderbook, is_stop=True + ) + if crossed: + average = self.get_dry_market_fill_price( + pair, + order["side"], + order["amount"], + price, + worst_rate=order["price"], + orderbook=orderbook, + ) + order.update( + { + "status": "closed", + "filled": order["amount"], + "remaining": 0, + "average": average, + "cost": order["amount"] * average, + } + ) + self.add_dry_order_fee( + pair, + order, + "taker" if immediate else "maker", + ) + return order if ( order["status"] != "closed" and order["type"] in ["limit"] From fade66afd969db4ce254c525d2db454dc26a0ec3 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 21 Nov 2025 06:47:04 +0100 Subject: [PATCH 106/243] fix: ensure we always have a price when checking stops --- freqtrade/exchange/exchange.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 1b0946987..60f4d5fdd 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -104,6 +104,7 @@ from freqtrade.misc import ( deep_merge_dicts, file_dump_json, file_load_json, + safe_value_fallback, safe_value_fallback2, ) from freqtrade.util import FtTTLCache, PeriodicCache, dt_from_ts, dt_now @@ -1292,7 +1293,7 @@ class Exchange: pair = order["symbol"] if not orderbook and self.exchange_has("fetchL2OrderBook"): orderbook = self.fetch_l2_order_book(pair, 20) - price = order[self._ft_has["stop_price_prop"]] + price = safe_value_fallback(order, self._ft_has["stop_price_prop"], "price") crossed = self._dry_is_price_crossed( pair, order["side"], price, orderbook, is_stop=True ) From bfe9aac16b4690f86fb4630a3172371f20db5130 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 28 Nov 2025 18:16:26 +0100 Subject: [PATCH 107/243] fix(hyperliquid): exclude HIP3 pairs for now part of #12558 --- freqtrade/exchange/hyperliquid.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/freqtrade/exchange/hyperliquid.py b/freqtrade/exchange/hyperliquid.py index 9dcc0e6a4..212505b72 100644 --- a/freqtrade/exchange/hyperliquid.py +++ b/freqtrade/exchange/hyperliquid.py @@ -3,6 +3,7 @@ import logging from copy import deepcopy from datetime import datetime +from typing import Any from freqtrade.constants import BuySell from freqtrade.enums import MarginMode, TradingMode @@ -56,6 +57,13 @@ class Hyperliquid(Exchange): config.update(super()._ccxt_config) return config + def market_is_tradable(self, market: dict[str, Any]) -> bool: + parent_check = super().market_is_tradable(market) + + # Exclude hip3 markets for now - which have the format XYZ:GOOGL/USDT:USDT - + # and XYZ:GOOGL as base + return parent_check and ":" not in market["base"] + def get_max_leverage(self, pair: str, stake_amount: float | None) -> float: # There are no leverage tiers if self.trading_mode == TradingMode.FUTURES: From 1536c09df38aa0b87e5de2f00b039a5c096c4cc6 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 29 Nov 2025 12:07:13 +0100 Subject: [PATCH 108/243] test: improved test naming --- tests/exchange/test_exchange.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 743f798dd..8f878377f 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -1187,7 +1187,7 @@ def test__dry_is_price_crossed_without_orderbook_support(default_conf, mocker): (False, False, "sell", 1.0, "open", None, 0, None), ], ) -def test_check_dry_limit_order_filled_parametrized( +def test_check_dry_limit_order_filled( default_conf, mocker, crossed, From ac2723c3a0ae0a89d5b1535bca39b2aff232ad48 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 29 Nov 2025 12:23:15 +0100 Subject: [PATCH 109/243] test: add explicit test for dry stoploss order filling --- tests/exchange/test_exchange.py | 64 +++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 8f878377f..f280ec9d9 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -1231,6 +1231,70 @@ def test_check_dry_limit_order_filled( assert fee_mock.call_count == expected_calls +@pytest.mark.parametrize( + "immediate,crossed,expected_status,expected_fee_type", + [ + (True, True, "closed", "taker"), + (False, True, "closed", "maker"), + (True, False, "open", None), + ], +) +def test_check_dry_limit_order_filled_stoploss( + default_conf, mocker, immediate, crossed, expected_status, expected_fee_type, order_book_l2_usd +): + exchange = get_patched_exchange(mocker, default_conf) + mocker.patch.multiple( + EXMS, + exchange_has=MagicMock(return_value=True), + _dry_is_price_crossed=MagicMock(return_value=crossed), + fetch_l2_order_book=order_book_l2_usd, + ) + average_mock = mocker.patch(f"{EXMS}.get_dry_market_fill_price", return_value=24.25) + fee_mock = mocker.patch( + f"{EXMS}.add_dry_order_fee", + autospec=True, + side_effect=lambda self, pair, dry_order, taker_or_maker: dry_order, + ) + + amount = 1.75 + order = { + "symbol": "LTC/USDT", + "status": "open", + "type": "limit", + "side": "sell", + "amount": amount, + "filled": 0.0, + "remaining": amount, + "price": 25.0, + "average": 0.0, + "cost": 0.0, + "fee": None, + "ft_order_type": "stoploss", + "stopLossPrice": 24.5, + } + + result = exchange.check_dry_limit_order_filled(order, immediate=immediate) + + assert result["status"] == expected_status + assert order_book_l2_usd.call_count == 1 + if crossed: + assert result["filled"] == amount + assert result["remaining"] == 0 + assert result["average"] == 24.25 + assert result["cost"] == pytest.approx(amount * 24.25) + assert average_mock.call_count == 1 + assert fee_mock.call_count == 1 + assert fee_mock.call_args[0][1] == "LTC/USDT" + assert fee_mock.call_args[0][3] == expected_fee_type + else: + assert result["filled"] == 0.0 + assert result["remaining"] == amount + assert result["average"] == 0.0 + + assert average_mock.call_count == 0 + assert fee_mock.call_count == 0 + + @pytest.mark.parametrize( "side,price,filled,converted", [ From 3453bdf6072651f3499e3d3b211122b16aecde8c Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 29 Nov 2025 13:10:16 +0100 Subject: [PATCH 110/243] chore: bump version to 2025.12-dev --- freqtrade/__init__.py | 2 +- ft_client/freqtrade_client/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/__init__.py b/freqtrade/__init__.py index 641600a4d..a7acc6638 100644 --- a/freqtrade/__init__.py +++ b/freqtrade/__init__.py @@ -1,6 +1,6 @@ """Freqtrade bot""" -__version__ = "2025.11-dev" +__version__ = "2025.12-dev" if "dev" in __version__: from pathlib import Path diff --git a/ft_client/freqtrade_client/__init__.py b/ft_client/freqtrade_client/__init__.py index 9182ce800..d9479dba0 100644 --- a/ft_client/freqtrade_client/__init__.py +++ b/ft_client/freqtrade_client/__init__.py @@ -1,7 +1,7 @@ from freqtrade_client.ft_rest_client import FtRestClient -__version__ = "2025.11-dev" +__version__ = "2025.12-dev" if "dev" in __version__: from pathlib import Path From 52c73eabeb36e0e44e7abb56e9a66626f07fff69 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 30 Nov 2025 13:25:03 +0100 Subject: [PATCH 111/243] docs: add missing space in docs --- docs/strategy-callbacks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/strategy-callbacks.md b/docs/strategy-callbacks.md index 5853d23e1..727075215 100644 --- a/docs/strategy-callbacks.md +++ b/docs/strategy-callbacks.md @@ -634,7 +634,7 @@ class AwesomeStrategy(IStrategy): ## Custom order price rules -By default, freqtrade use the orderbook to automatically set an order price([Relevant documentation](configuration.md#prices-used-for-orders)), you also have the option to create custom order prices based on your strategy. +By default, freqtrade use the orderbook to automatically set an order price ([Relevant documentation](configuration.md#prices-used-for-orders)), you also have the option to create custom order prices based on your strategy. You can use this feature by creating a `custom_entry_price()` function in your strategy file to customize entry prices and `custom_exit_price()` for exits. From 7a5342cc93b947008a746a51941e76ddd044f6a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 03:04:40 +0000 Subject: [PATCH 112/243] 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.0 to 1.16.3.1 - [Release notes](https://github.com/scipy/scipy-stubs/releases) - [Commits](https://github.com/scipy/scipy-stubs/compare/v1.16.3.0...v1.16.3.1) --- updated-dependencies: - dependency-name: scipy-stubs dependency-version: 1.16.3.1 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 f9386777e..55764746f 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -24,7 +24,7 @@ time-machine==3.0.0 nbconvert==7.16.6 # mypy types -scipy-stubs==1.16.3.0 # keep in sync with `scipy` in `requirements-hyperopt.txt` +scipy-stubs==1.16.3.1 # 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 1de9f5a2fbacfc51be0b5bd7d6bd50dc239a6576 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 03:04:45 +0000 Subject: [PATCH 113/243] chore(deps): bump pydantic from 2.12.4 to 2.12.5 Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.12.4 to 2.12.5. - [Release notes](https://github.com/pydantic/pydantic/releases) - [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md) - [Commits](https://github.com/pydantic/pydantic/compare/v2.12.4...v2.12.5) --- updated-dependencies: - dependency-name: pydantic dependency-version: 2.12.5 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 43f79ab25..4a34268d4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -38,7 +38,7 @@ sdnotify==0.3.2 # API Server fastapi==0.121.3 -pydantic==2.12.4 +pydantic==2.12.5 uvicorn==0.38.0 pyjwt==2.10.1 aiofiles==25.1.0 From 1d0a9022510c8a079b768937887fe59c6fa43752 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 03:04:53 +0000 Subject: [PATCH 114/243] chore(deps-dev): bump time-machine from 3.0.0 to 3.1.0 Bumps [time-machine](https://github.com/adamchainz/time-machine) from 3.0.0 to 3.1.0. - [Changelog](https://github.com/adamchainz/time-machine/blob/main/docs/changelog.rst) - [Commits](https://github.com/adamchainz/time-machine/compare/3.0.0...3.1.0) --- updated-dependencies: - dependency-name: time-machine dependency-version: 3.1.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index f9386777e..6b676e536 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -18,7 +18,7 @@ pytest-timeout==2.4.0 pytest-xdist==3.8.0 isort==7.0.0 # For datetime mocking -time-machine==3.0.0 +time-machine==3.1.0 # Convert jupyter notebooks to markdown documents nbconvert==7.16.6 From 691a6b0a729e95a8bebe200e834ffbad03c6037b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 03:05:16 +0000 Subject: [PATCH 115/243] chore(deps-dev): bump ruff from 0.14.5 to 0.14.6 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.5 to 0.14.6. - [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.5...0.14.6) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.14.6 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 f9386777e..e71a639c0 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.5 +ruff==0.14.6 mypy==1.18.2 pre-commit==4.4.0 pytest==9.0.1 From 1a95b04d796c587fc72543645daba4ff6e66bfaa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 03:05:23 +0000 Subject: [PATCH 116/243] chore(deps): bump xgboost from 3.1.1 to 3.1.2 Bumps [xgboost](https://github.com/dmlc/xgboost) from 3.1.1 to 3.1.2. - [Release notes](https://github.com/dmlc/xgboost/releases) - [Changelog](https://github.com/dmlc/xgboost/blob/master/NEWS.md) - [Commits](https://github.com/dmlc/xgboost/compare/v3.1.1...v3.1.2) --- updated-dependencies: - dependency-name: xgboost dependency-version: 3.1.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-freqai.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-freqai.txt b/requirements-freqai.txt index d50e2de78..24bf58986 100644 --- a/requirements-freqai.txt +++ b/requirements-freqai.txt @@ -7,6 +7,6 @@ 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.1 +xgboost==3.1.2 tensorboard==2.20.0 datasieve==0.1.9 From 61ab49a1244461df032e71f948e3bc313b9bdc8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 03:05:36 +0000 Subject: [PATCH 117/243] chore(deps): bump pymdown-extensions from 10.17.1 to 10.17.2 Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.17.1 to 10.17.2. - [Release notes](https://github.com/facelessuser/pymdown-extensions/releases) - [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.17.1...10.17.2) --- updated-dependencies: - dependency-name: pymdown-extensions dependency-version: 10.17.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- docs/requirements-docs.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt index 40f8e4b45..b98977366 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.17.1 +pymdown-extensions==10.17.2 jinja2==3.1.6 mike==2.1.3 From 09b15827049f27db6d1c6fc5e894e3342575c67d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 03:06:04 +0000 Subject: [PATCH 118/243] chore(deps): bump ccxt from 4.5.20 to 4.5.22 Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.5.20 to 4.5.22. - [Release notes](https://github.com/ccxt/ccxt/releases) - [Commits](https://github.com/ccxt/ccxt/compare/v4.5.20...v4.5.22) --- updated-dependencies: - dependency-name: ccxt dependency-version: 4.5.22 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 43f79ab25..eb7aeb528 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.20 +ccxt==4.5.22 cryptography==46.0.3 aiohttp==3.13.2 SQLAlchemy==2.0.44 From a13f488b8449ceba2cbfa054b32833f3df29e434 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 03:29:53 +0000 Subject: [PATCH 119/243] chore(deps): bump peter-evans/create-pull-request from 7.0.8 to 7.0.9 Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7.0.8 to 7.0.9. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/271a8d0340265f705b14b6d32b9829c1cb33d45e...84ae59a2cdc2258d6fa0732dd66352dddae2a412) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-version: 7.0.9 dependency-type: direct:production update-type: version-update:semver-patch ... 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 9ec4c3ec0..98e61aa75 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@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 + - uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9 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 666207901..2cefe4db6 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@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 + - uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9 with: token: ${{ secrets.REPO_SCOPED_TOKEN }} add-paths: .pre-commit-config.yaml From 760a2b9ff713d0006a8e3a124af4caf37e9fec12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 03:30:05 +0000 Subject: [PATCH 120/243] chore(deps): bump zizmorcore/zizmor-action from 0.2.0 to 0.3.0 Bumps [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action) from 0.2.0 to 0.3.0. - [Release notes](https://github.com/zizmorcore/zizmor-action/releases) - [Commits](https://github.com/zizmorcore/zizmor-action/compare/e673c3917a1aef3c65c972347ed84ccd013ecda4...e639db99335bc9038abc0e066dfcd72e23d26fb4) --- updated-dependencies: - dependency-name: zizmorcore/zizmor-action dependency-version: 0.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/zizmor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index 0bceed8b0..1b4ac6a78 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -27,4 +27,4 @@ jobs: persist-credentials: false - name: Run zizmor 🌈 - uses: zizmorcore/zizmor-action@e673c3917a1aef3c65c972347ed84ccd013ecda4 # v0.2.0 + uses: zizmorcore/zizmor-action@e639db99335bc9038abc0e066dfcd72e23d26fb4 # v0.3.0 From 8950423418ebb80dc0d8d9652838aeb44fbbb6b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 03:30:21 +0000 Subject: [PATCH 121/243] chore(deps): bump actions/checkout from 5.0.0 to 6.0.0 Bumps [actions/checkout](https://github.com/actions/checkout) from 5.0.0 to 6.0.0. - [Release notes](https://github.com/actions/checkout/releases) - [Commits](https://github.com/actions/checkout/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.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/ci.yml | 16 ++++++++-------- .github/workflows/deploy-docs.yml | 2 +- .github/workflows/devcontainer-build.yml | 2 +- .github/workflows/docker-build.yml | 4 ++-- .github/workflows/docker-update-readme.yml | 2 +- .github/workflows/pre-commit-update.yml | 2 +- .github/workflows/zizmor.yml | 2 +- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/binance-lev-tier-update.yml b/.github/workflows/binance-lev-tier-update.yml index 9ec4c3ec0..170509df0 100644 --- a/.github/workflows/binance-lev-tier-update.yml +++ b/.github/workflows/binance-lev-tier-update.yml @@ -15,7 +15,7 @@ jobs: environment: name: develop steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 14a55ff7a..645328355 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: python-version: ["3.11", "3.12", "3.13"] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false @@ -177,7 +177,7 @@ jobs: name: "Mypy Version Check" runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false @@ -195,7 +195,7 @@ jobs: name: "Pre-commit checks" runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false @@ -208,7 +208,7 @@ jobs: name: "Documentation build" runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false @@ -240,7 +240,7 @@ jobs: name: "Tests and Linting - Online tests" runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false @@ -320,7 +320,7 @@ jobs: with: jobs: ${{ toJSON(needs) }} - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false @@ -367,7 +367,7 @@ jobs: id-token: write steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false @@ -396,7 +396,7 @@ jobs: id-token: write steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index da033cfb8..f109ddf7a 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -19,7 +19,7 @@ jobs: name: Deploy Docs through mike runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: true diff --git a/.github/workflows/devcontainer-build.yml b/.github/workflows/devcontainer-build.yml index 9946af5e9..429a2bbae 100644 --- a/.github/workflows/devcontainer-build.yml +++ b/.github/workflows/devcontainer-build.yml @@ -24,7 +24,7 @@ jobs: packages: write runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false - name: Login to GitHub Container Registry diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index b9faa7b75..6790b3497 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -33,7 +33,7 @@ jobs: if: github.repository == 'freqtrade/freqtrade' steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false @@ -152,7 +152,7 @@ jobs: if: github.repository == 'freqtrade/freqtrade' steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false diff --git a/.github/workflows/docker-update-readme.yml b/.github/workflows/docker-update-readme.yml index a510aadf6..de2e5faee 100644 --- a/.github/workflows/docker-update-readme.yml +++ b/.github/workflows/docker-update-readme.yml @@ -11,7 +11,7 @@ jobs: dockerHubDescription: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false diff --git a/.github/workflows/pre-commit-update.yml b/.github/workflows/pre-commit-update.yml index 666207901..529fbef73 100644 --- a/.github/workflows/pre-commit-update.yml +++ b/.github/workflows/pre-commit-update.yml @@ -13,7 +13,7 @@ jobs: auto-update: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.0 with: persist-credentials: false diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index 0bceed8b0..b479fbe4f 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -22,7 +22,7 @@ jobs: # actions: read # only needed for private repos steps: - name: Checkout repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 with: persist-credentials: false From 39233ff240d150c801dea8df83600c4853bbb660 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 03:30:36 +0000 Subject: [PATCH 122/243] chore(deps): bump astral-sh/setup-uv from 7.1.2 to 7.1.4 Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 7.1.2 to 7.1.4. - [Release notes](https://github.com/astral-sh/setup-uv/releases) - [Commits](https://github.com/astral-sh/setup-uv/compare/85856786d1ce8acfbcc2f13a5f3fbd6b938f9f41...1e862dfacbd1d6d858c55d9b792c756523627244) --- updated-dependencies: - dependency-name: astral-sh/setup-uv dependency-version: 7.1.4 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 14a55ff7a..8ed594d1c 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@85856786d1ce8acfbcc2f13a5f3fbd6b938f9f41 # v7.1.2 + uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 with: activate-environment: true enable-cache: true @@ -250,7 +250,7 @@ jobs: python-version: "3.12" - name: Install uv - uses: astral-sh/setup-uv@85856786d1ce8acfbcc2f13a5f3fbd6b938f9f41 # v7.1.2 + uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 with: activate-environment: true enable-cache: true From 45b1dabe0a6f57ccdef94366a703d96ceca0853c Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 1 Dec 2025 06:44:00 +0100 Subject: [PATCH 123/243] 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 6a578c707..d6179bbaf 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.0 + - scipy-stubs==1.16.3.1 - SQLAlchemy==2.0.44 # stages: [push] From dc88ea0ed92fe45dbbfbcf3fae0ac6bc0424afd0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 05:57:42 +0000 Subject: [PATCH 124/243] chore(deps-dev): bump pre-commit from 4.4.0 to 4.5.0 Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 4.4.0 to 4.5.0. - [Release notes](https://github.com/pre-commit/pre-commit/releases) - [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) - [Commits](https://github.com/pre-commit/pre-commit/compare/v4.4.0...v4.5.0) --- updated-dependencies: - dependency-name: pre-commit dependency-version: 4.5.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index e71a639c0..639373f08 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -8,7 +8,7 @@ ruff==0.14.6 mypy==1.18.2 -pre-commit==4.4.0 +pre-commit==4.5.0 pytest==9.0.1 pytest-asyncio==1.3.0 pytest-cov==7.0.0 From dbde8332f7ed2003f9e4328cdcfb0bcdca8b16ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 06:00:27 +0000 Subject: [PATCH 125/243] chore(deps): bump fastapi from 0.121.3 to 0.122.0 Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.121.3 to 0.122.0. - [Release notes](https://github.com/fastapi/fastapi/releases) - [Commits](https://github.com/fastapi/fastapi/compare/0.121.3...0.122.0) --- updated-dependencies: - dependency-name: fastapi dependency-version: 0.122.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4a34268d4..0f7dcaa1c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -37,7 +37,7 @@ orjson==3.11.4 sdnotify==0.3.2 # API Server -fastapi==0.121.3 +fastapi==0.122.0 pydantic==2.12.5 uvicorn==0.38.0 pyjwt==2.10.1 From 2f990b773d00c8f402428e2e321e014f8341df1a Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 1 Dec 2025 19:08:50 +0100 Subject: [PATCH 126/243] chore: increase dependabot cooldown to 7 days --- .github/dependabot.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 906666552..a33f75428 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -2,7 +2,7 @@ version: 2 updates: - package-ecosystem: docker cooldown: - default-days: 4 + default-days: 7 directories: - "/" - "/docker" @@ -16,7 +16,7 @@ updates: - package-ecosystem: devcontainers directory: "/" cooldown: - default-days: 4 + default-days: 7 schedule: interval: daily open-pull-requests-limit: 10 @@ -24,7 +24,7 @@ updates: - package-ecosystem: pip directory: "/" cooldown: - default-days: 4 + default-days: 7 exclude: - ccxt schedule: @@ -51,7 +51,7 @@ updates: - package-ecosystem: "github-actions" directory: "/" cooldown: - default-days: 4 + default-days: 7 schedule: interval: "weekly" open-pull-requests-limit: 10 From 38151423b8da9fa8d36f99b995ee141458b9647a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 18:48:43 +0000 Subject: [PATCH 127/243] chore(deps): bump actions/checkout from 5.0.1 to 6.0.0 Bumps [actions/checkout](https://github.com/actions/checkout) from 5.0.1 to 6.0.0. - [Release notes](https://github.com/actions/checkout/releases) - [Commits](https://github.com/actions/checkout/compare/v5.0.1...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/zizmor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index 5c8ef875b..2835046f4 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -22,7 +22,7 @@ jobs: # actions: read # only needed for private repos steps: - name: Checkout repository - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + uses: actions/checkout@c2d88d3ecc89a9ef08eebf45d9637801dcee7eb5 # v5.0.1 with: persist-credentials: false From 2b729c25277722c3a13541d5120460c84741be80 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 1 Dec 2025 20:01:43 +0100 Subject: [PATCH 128/243] test: improve integration test to have proper return value --- tests/freqtradebot/test_integration.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/freqtradebot/test_integration.py b/tests/freqtradebot/test_integration.py index 2cb4b6aa8..a1090104a 100644 --- a/tests/freqtradebot/test_integration.py +++ b/tests/freqtradebot/test_integration.py @@ -50,7 +50,14 @@ def test_may_execute_exit_stoploss_on_exchange_multi(default_conf, ticker, fee, stoploss_order_mock = MagicMock(side_effect=stop_orders) # Sell 3rd trade (not called for the first trade) should_sell_mock = MagicMock(side_effect=[[], [ExitCheckTuple(exit_type=ExitType.EXIT_SIGNAL)]]) - cancel_order_mock = MagicMock() + + def patch_stoploss(order_id, *args, **kwargs): + slo = stoploss_order_open.copy() + slo["id"] = order_id + slo["status"] = "canceled" + return slo + + cancel_order_mock = MagicMock(side_effect=patch_stoploss) mocker.patch.multiple( EXMS, create_stoploss=stoploss, From 659509e085be606f49b735bbb9257ca175fae4fb Mon Sep 17 00:00:00 2001 From: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com> Date: Tue, 2 Dec 2025 03:26:42 +0000 Subject: [PATCH 129/243] chore: update pre-commit hooks --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d6179bbaf..7375708e6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: # stages: [push] - repo: https://github.com/pre-commit/mirrors-mypy - rev: "v1.18.2" + rev: "v1.19.0" hooks: - id: mypy exclude: build_helpers @@ -44,7 +44,7 @@ repos: - repo: https://github.com/charliermarsh/ruff-pre-commit # Ruff version. - rev: 'v0.14.6' + rev: 'v0.14.7' 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.16.3 + rev: v1.18.0 hooks: - id: zizmor From d7eb49d5d03b589ffc63a2d590db050d94529d2f Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 2 Dec 2025 06:31:32 +0100 Subject: [PATCH 130/243] chore: align usage of actions/checkout version pin --- .github/workflows/zizmor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index 2835046f4..594b6507d 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -22,7 +22,7 @@ jobs: # actions: read # only needed for private repos steps: - name: Checkout repository - uses: actions/checkout@c2d88d3ecc89a9ef08eebf45d9637801dcee7eb5 # v5.0.1 + uses: actions/checkout@v6.0.0 with: persist-credentials: false From 4e6ea1d2ba52d637eb38199ff47aa493f52af3ed Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 30 Nov 2025 14:21:14 +0100 Subject: [PATCH 131/243] feat: don't cancel stoploss early if it's not necessary --- freqtrade/freqtradebot.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 6485b5d11..89abb0915 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -1063,7 +1063,16 @@ class FreqtradeBot(LoggingMixin): return True - def cancel_stoploss_on_exchange(self, trade: Trade) -> Trade: + def cancel_stoploss_on_exchange(self, trade: Trade, allow_nonblocking: bool = False) -> Trade: + """ + Cancels on exchange stoploss orders for the given trade. + :param trade: Trade for which to cancel stoploss order + :param allow_nonblocking: If True, will skip cancelling stoploss on exchange + if the exchange supports blocking stoploss orders. + """ + if allow_nonblocking and not self.exchange.get_option("stoploss_blocks_assets", True): + logger.info(f"Skipping cancelling stoploss on exchange for {trade}.") + return trade # First cancelling stoploss on exchange ... for oslo in trade.open_sl_orders: try: @@ -2088,7 +2097,7 @@ class FreqtradeBot(LoggingMixin): limit = self.get_valid_price(custom_exit_price, proposed_limit_rate) # First cancelling stoploss on exchange ... - trade = self.cancel_stoploss_on_exchange(trade) + trade = self.cancel_stoploss_on_exchange(trade, allow_nonblocking=True) order_type = ordertype or self.strategy.order_types[exit_type] if exit_check.exit_type == ExitType.EMERGENCY_EXIT: From 4b2d09925879be11c17137ebfdd230967bdddc22 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 2 Dec 2025 06:14:48 +0100 Subject: [PATCH 132/243] fix: ensure stoploss on exchange is canceled once the trade closes. --- freqtrade/freqtradebot.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 89abb0915..09afd8528 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -2387,6 +2387,8 @@ class FreqtradeBot(LoggingMixin): self.strategy.ft_stoploss_adjust( current_rate, trade, datetime.now(UTC), profit, 0, after_fill=True ) + if not trade.is_open: + self.cancel_stoploss_on_exchange(trade) # Updating wallets when order is closed self.wallets.update() return trade From faf552837aeee78d3ae4fba187141c2cf19069fa Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 2 Dec 2025 06:24:57 +0100 Subject: [PATCH 133/243] test: add test for stoploss cancel skips --- tests/freqtradebot/test_integration.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/freqtradebot/test_integration.py b/tests/freqtradebot/test_integration.py index a1090104a..5d3df4c3b 100644 --- a/tests/freqtradebot/test_integration.py +++ b/tests/freqtradebot/test_integration.py @@ -800,9 +800,13 @@ def test_dca_handle_similar_open_order( # Should Create a new exit order freqtrade.exchange.amount_to_contract_precision = MagicMock(return_value=2) freqtrade.strategy.adjust_trade_position = MagicMock(return_value=-2) + msg = r"Skipping cancelling stoploss on exchange for.*" mocker.patch(f"{EXMS}._dry_is_price_crossed", return_value=False) + assert not log_has_re(msg, caplog) freqtrade.process() + assert log_has_re(msg, caplog) + trade = Trade.get_trades().first() assert trade.orders[-2].status == "closed" From a013793b2f9e091391821ce9dd82d5ca2c5bd116 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 2 Dec 2025 07:08:15 +0100 Subject: [PATCH 134/243] feat: improved trade repr format (used for logs) --- freqtrade/persistence/trade_model.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/freqtrade/persistence/trade_model.py b/freqtrade/persistence/trade_model.py index bc4d1c47e..85f072747 100644 --- a/freqtrade/persistence/trade_model.py +++ b/freqtrade/persistence/trade_model.py @@ -48,7 +48,7 @@ from freqtrade.leverage import interest from freqtrade.misc import safe_value_fallback from freqtrade.persistence.base import ModelBase, SessionType from freqtrade.persistence.custom_data import CustomDataWrapper, _CustomData -from freqtrade.util import FtPrecise, dt_from_ts, dt_now, dt_ts, dt_ts_none +from freqtrade.util import FtPrecise, dt_from_ts, dt_now, dt_ts, dt_ts_none, round_value logger = logging.getLogger(__name__) @@ -654,9 +654,10 @@ class LocalTrade: ) return ( - f"Trade(id={self.id}, pair={self.pair}, amount={self.amount:.8f}, " - f"is_short={self.is_short or False}, leverage={self.leverage or 1.0}, " - f"open_rate={self.open_rate:.8f}, open_since={open_since})" + f"Trade(id={self.id}, pair={self.pair}, amount={round_value(self.amount, 8)}, " + f"is_short={self.is_short or False}, " + f"leverage={round_value(self.leverage or 1.0, 1)}, " + f"open_rate={round_value(self.open_rate, 8)}, open_since={open_since})" ) def to_json(self, minified: bool = False) -> dict[str, Any]: From 0f5427f4a0a8e43094dbf5fb633224e1e23acf72 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 2 Dec 2025 07:10:33 +0100 Subject: [PATCH 135/243] feat: round_value should support None --- freqtrade/util/formatters.py | 4 ++-- tests/util/test_formatters.py | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/freqtrade/util/formatters.py b/freqtrade/util/formatters.py index 3d7493a2a..7ca028984 100644 --- a/freqtrade/util/formatters.py +++ b/freqtrade/util/formatters.py @@ -23,7 +23,7 @@ def strip_trailing_zeros(value: str) -> str: return value.rstrip("0").rstrip(".") -def round_value(value: float, decimals: int, keep_trailing_zeros=False) -> str: +def round_value(value: float | None, decimals: int, keep_trailing_zeros=False) -> str: """ Round value to given decimals :param value: Value to be rounded @@ -31,7 +31,7 @@ def round_value(value: float, decimals: int, keep_trailing_zeros=False) -> str: :param keep_trailing_zeros: Keep trailing zeros "222.200" vs. "222.2" :return: Rounded value as string """ - if isnan(value): + if value is None or isnan(value): return "N/A" val = f"{value:.{decimals}f}" if not keep_trailing_zeros: diff --git a/tests/util/test_formatters.py b/tests/util/test_formatters.py index a884c0750..a7463fdfa 100644 --- a/tests/util/test_formatters.py +++ b/tests/util/test_formatters.py @@ -57,6 +57,8 @@ def test_round_value(): assert round_value(222.2, 0, True) == "222" assert round_value(float("nan"), 0, True) == "N/A" assert round_value(float("nan"), 10, True) == "N/A" + assert round_value(None, 10, True) == "N/A" + assert round_value(None, 1, True) == "N/A" def test_format_duration(): From 9c73c8671e51bcea8d39568bc00a53f70b29af95 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 2 Dec 2025 07:12:32 +0100 Subject: [PATCH 136/243] feat: improve format_date with fallback value --- freqtrade/util/datetime_helpers.py | 5 +++-- tests/util/test_datetime_helpers.py | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/freqtrade/util/datetime_helpers.py b/freqtrade/util/datetime_helpers.py index e2390105d..b6535db5d 100644 --- a/freqtrade/util/datetime_helpers.py +++ b/freqtrade/util/datetime_helpers.py @@ -90,15 +90,16 @@ def dt_humanize_delta(dt: datetime): return humanize.naturaltime(dt) -def format_date(date: datetime | None) -> str: +def format_date(date: datetime | None, fallback: str = "") -> str: """ Return a formatted date string. Returns an empty string if date is None. :param date: datetime to format + :param fallback: value to return if date is None """ if date: return date.strftime(DATETIME_PRINT_FORMAT) - return "" + return fallback def format_ms_time(date: int | float) -> str: diff --git a/tests/util/test_datetime_helpers.py b/tests/util/test_datetime_helpers.py index 82dd6dbf6..8ccb8ba20 100644 --- a/tests/util/test_datetime_helpers.py +++ b/tests/util/test_datetime_helpers.py @@ -108,6 +108,7 @@ def test_format_date() -> None: date = datetime(2021, 9, 30, 22, 59, 3, 455555, tzinfo=UTC) assert format_date(date) == "2021-09-30 22:59:03" assert format_date(None) == "" + assert format_date(None, "closed") == "closed" def test_format_ms_time_detailed() -> None: From 19526f1df2b613f8eac1b8d4ebaba576c9311d77 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 2 Dec 2025 19:10:45 +0100 Subject: [PATCH 137/243] test: update tests to align to improved formatting --- tests/freqtradebot/test_freqtradebot.py | 26 ++++++++++++------------- tests/persistence/test_persistence.py | 20 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/tests/freqtradebot/test_freqtradebot.py b/tests/freqtradebot/test_freqtradebot.py index e36d70c12..f8b790c44 100644 --- a/tests/freqtradebot/test_freqtradebot.py +++ b/tests/freqtradebot/test_freqtradebot.py @@ -2548,9 +2548,9 @@ def test_manage_open_orders_exception( caplog.clear() freqtrade.manage_open_orders() assert log_has_re( - r"Cannot query order for Trade\(id=1, pair=ADA/USDT, amount=30.00000000, " - r"is_short=False, leverage=1.0, " - r"open_rate=2.00000000, open_since=" + r"Cannot query order for Trade\(id=1, pair=ADA/USDT, amount=30, " + r"is_short=False, leverage=1, " + r"open_rate=2, open_since=" f"{open_trade_usdt.open_date.strftime('%Y-%m-%d %H:%M:%S')}" r"\) due to Traceback \(most recent call last\):\n*", caplog, @@ -3751,8 +3751,8 @@ def test_get_real_amount_quote( # Amount is reduced by "fee" assert freqtrade.get_real_amount(trade, buy_order_fee, order_obj) == (amount * 0.001) assert log_has( - "Applying fee on amount for Trade(id=None, pair=LTC/ETH, amount=8.00000000, is_short=False," - " leverage=1.0, open_rate=0.24544100, open_since=closed), fee=0.008.", + "Applying fee on amount for Trade(id=None, pair=LTC/ETH, amount=8, is_short=False," + " leverage=1, open_rate=0.245441, open_since=closed), fee=0.008.", caplog, ) @@ -3805,8 +3805,8 @@ def test_get_real_amount_no_trade(default_conf_usdt, buy_order_fee, caplog, mock # Amount is reduced by "fee" assert freqtrade.get_real_amount(trade, buy_order_fee, order_obj) is None assert log_has( - "Applying fee on amount for Trade(id=None, pair=LTC/ETH, amount=8.00000000, " - "is_short=False, leverage=1.0, open_rate=0.24544100, open_since=closed) failed: " + "Applying fee on amount for Trade(id=None, pair=LTC/ETH, amount=8, " + "is_short=False, leverage=1, open_rate=0.245441, open_since=closed) failed: " "myTrade-dict empty found", caplog, ) @@ -3825,8 +3825,8 @@ def test_get_real_amount_no_trade(default_conf_usdt, buy_order_fee, caplog, mock 0, True, ( - "Fee for Trade Trade(id=None, pair=LTC/ETH, amount=8.00000000, is_short=False, " - "leverage=1.0, open_rate=0.24544100, open_since=closed) [buy]: 0.00094518 BNB -" + "Fee for Trade Trade(id=None, pair=LTC/ETH, amount=8, is_short=False, " + "leverage=1, open_rate=0.245441, open_since=closed) [buy]: 0.00094518 BNB -" " rate: None" ), ), @@ -3836,8 +3836,8 @@ def test_get_real_amount_no_trade(default_conf_usdt, buy_order_fee, caplog, mock 0.004, False, ( - "Applying fee on amount for Trade(id=None, pair=LTC/ETH, amount=8.00000000, " - "is_short=False, leverage=1.0, open_rate=0.24544100, open_since=closed), fee=0.004." + "Applying fee on amount for Trade(id=None, pair=LTC/ETH, amount=8, " + "is_short=False, leverage=1, open_rate=0.245441, open_since=closed), fee=0.004." ), ), # invalid, no currency in from fee dict @@ -3941,8 +3941,8 @@ def test_get_real_amount_multi( assert freqtrade.get_real_amount(trade, buy_order_fee, order_obj) == expected_amount assert log_has( ( - "Applying fee on amount for Trade(id=None, pair=LTC/ETH, amount=8.00000000, " - "is_short=False, leverage=1.0, open_rate=0.24544100, open_since=closed), " + "Applying fee on amount for Trade(id=None, pair=LTC/ETH, amount=8, " + "is_short=False, leverage=1, open_rate=0.245441, open_since=closed), " f"fee={expected_amount}." ), caplog, diff --git a/tests/persistence/test_persistence.py b/tests/persistence/test_persistence.py index 8fcc59691..6e779137d 100644 --- a/tests/persistence/test_persistence.py +++ b/tests/persistence/test_persistence.py @@ -372,8 +372,8 @@ def test_borrowed(fee, is_short, lev, borrowed, trading_mode): @pytest.mark.parametrize( "is_short,open_rate,close_rate,lev,profit,trading_mode", [ - (False, 2.0, 2.2, 1.0, 0.09451372, spot), - (True, 2.2, 2.0, 3.0, 0.25894253, margin), + (False, 2, 2.2, 1, 0.09451372, spot), + (True, 2.2, 2.0, 3, 0.25894253, margin), ], ) @pytest.mark.usefixtures("init_persistence") @@ -493,8 +493,8 @@ def test_update_limit_order( assert trade.close_date is None assert log_has_re( f"LIMIT_{entry_side.upper()} has been fulfilled for " - r"Trade\(id=2, pair=ADA/USDT, amount=30.00000000, " - f"is_short={is_short}, leverage={lev}, open_rate={open_rate}0000000, " + r"Trade\(id=2, pair=ADA/USDT, amount=30, " + f"is_short={is_short}, leverage={lev}, open_rate={open_rate}, " r"open_since=.*\).", caplog, ) @@ -511,8 +511,8 @@ def test_update_limit_order( assert trade.close_date is not None assert log_has_re( f"LIMIT_{exit_side.upper()} has been fulfilled for " - r"Trade\(id=2, pair=ADA/USDT, amount=30.00000000, " - f"is_short={is_short}, leverage={lev}, open_rate={open_rate}0000000, " + r"Trade\(id=2, pair=ADA/USDT, amount=30, " + f"is_short={is_short}, leverage={lev}, open_rate={open_rate}, " r"open_since=.*\).", caplog, ) @@ -545,8 +545,8 @@ def test_update_market_order(market_buy_order_usdt, market_sell_order_usdt, fee, assert trade.close_date is None assert log_has_re( r"MARKET_BUY has been fulfilled for Trade\(id=1, " - r"pair=ADA/USDT, amount=30.00000000, is_short=False, leverage=1.0, " - r"open_rate=2.00000000, open_since=.*\).", + r"pair=ADA/USDT, amount=30, is_short=False, leverage=1, " + r"open_rate=2, open_since=.*\).", caplog, ) @@ -561,8 +561,8 @@ def test_update_market_order(market_buy_order_usdt, market_sell_order_usdt, fee, assert trade.close_date is not None assert log_has_re( r"MARKET_SELL has been fulfilled for Trade\(id=1, " - r"pair=ADA/USDT, amount=30.00000000, is_short=False, leverage=1.0, " - r"open_rate=2.00000000, open_since=.*\).", + r"pair=ADA/USDT, amount=30, is_short=False, leverage=1, " + r"open_rate=2, open_since=.*\).", caplog, ) From 971cb94ce47f85a451168545079f6855810f0770 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 2 Dec 2025 20:24:43 +0100 Subject: [PATCH 138/243] feat: limit returned columns for merged mark/funding calc to used columns --- freqtrade/exchange/exchange.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 60f4d5fdd..717844db7 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -3784,10 +3784,11 @@ class Exchange: :param mark_rates: Dataframe containing Mark rates (Type mark_ohlcv_price) :param futures_funding_rate: Fake funding rate to use if funding_rates are not available """ + relevant_cols = ["date", "open_mark", "open_fund"] if futures_funding_rate is None: return mark_rates.merge( funding_rates, on="date", how="inner", suffixes=["_mark", "_fund"] - ) + )[relevant_cols] else: if len(funding_rates) == 0: # No funding rate candles - full fillup with fallback variable @@ -3800,7 +3801,7 @@ class Exchange: "low": "low_mark", "volume": "volume_mark", } - ) + )[relevant_cols] else: # Fill up missing funding_rate candles with fallback value @@ -3808,7 +3809,7 @@ class Exchange: funding_rates, on="date", how="left", suffixes=["_mark", "_fund"] ) combined["open_fund"] = combined["open_fund"].fillna(futures_funding_rate) - return combined + return combined[relevant_cols] def calculate_funding_fees( self, From 10e7d279f0c0339517d0409e733abfaa970033a8 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 2 Dec 2025 20:39:10 +0100 Subject: [PATCH 139/243] test: improve funding rate combine test --- tests/exchange/test_exchange.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index f280ec9d9..8d7e0b0d8 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -5304,6 +5304,7 @@ def test_combine_funding_and_mark( {"date": trade_date, "open": mark_price}, ] ) + # Test fallback to futures funding rate for missing funding rates df = exchange.combine_funding_and_mark(funding_rates, mark_rates, futures_funding_rate) if futures_funding_rate is not None: @@ -5331,6 +5332,33 @@ def test_combine_funding_and_mark( assert len(df) == 0 + # Test fallback to futures funding rate for middle missing funding rate + funding_rates = DataFrame( + [ + {"date": prior2_date, "open": funding_rate}, + # missing 1 hour + {"date": trade_date, "open": funding_rate}, + ], + ) + mark_rates = DataFrame( + [ + {"date": prior2_date, "open": mark_price}, + {"date": prior_date, "open": mark_price}, + {"date": trade_date, "open": mark_price}, + ] + ) + df = exchange.combine_funding_and_mark(funding_rates, mark_rates, futures_funding_rate) + + if futures_funding_rate is not None: + assert len(df) == 3 + assert df.iloc[0]["open_fund"] == funding_rate + assert df.iloc[1]["open_fund"] == futures_funding_rate + assert df.iloc[2]["open_fund"] == funding_rate + assert df["date"].to_list() == [prior2_date, prior_date, trade_date] + else: + assert len(df) == 2 + assert df["date"].to_list() == [prior2_date, trade_date] + @pytest.mark.parametrize( "exchange,rate_start,rate_end,d1,d2,amount,expected_fees", From 713746189178b7c27be8c7ef50f521b224f485d8 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 2 Dec 2025 21:10:51 +0100 Subject: [PATCH 140/243] feat: improved download-data logging --- freqtrade/data/history/history_utils.py | 8 ++++++-- tests/data/test_history.py | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/freqtrade/data/history/history_utils.py b/freqtrade/data/history/history_utils.py index 8f4a8d6c5..1467497d6 100644 --- a/freqtrade/data/history/history_utils.py +++ b/freqtrade/data/history/history_utils.py @@ -308,11 +308,15 @@ def _download_pair_history( candle_type=candle_type, until_ms=until_ms if until_ms else None, ) - logger.info(f"Downloaded data for {pair} with length {len(new_dataframe)}.") + logger.info( + f"Downloaded data for {pair}, {timeframe}, {candle_type} with length " + f"{len(new_dataframe)}." + ) else: new_dataframe = pair_candles logger.info( - f"Downloaded data for {pair} with length {len(new_dataframe)}. Parallel Method." + f"Downloaded data for {pair}, {timeframe}, {candle_type} with length " + f"{len(new_dataframe)}. Parallel Method." ) if data.empty: diff --git a/tests/data/test_history.py b/tests/data/test_history.py index 2dc3204db..115e73192 100644 --- a/tests/data/test_history.py +++ b/tests/data/test_history.py @@ -896,7 +896,7 @@ def test_download_pair_history_with_pair_candles(mocker, default_conf, tmp_path, assert get_historic_ohlcv_mock.call_count == 0 # Verify the log message indicating parallel method was used (line 315-316) - assert log_has("Downloaded data for TEST/BTC with length 3. Parallel Method.", caplog) + assert log_has("Downloaded data for TEST/BTC, 5m, spot with length 3. Parallel Method.", caplog) # Verify data was stored assert data_handler_mock.ohlcv_store.call_count == 1 From a3e97527d1626f2804f86c15ef94c33e91a56fe6 Mon Sep 17 00:00:00 2001 From: LMessi2000 Date: Wed, 3 Dec 2025 20:41:01 +0800 Subject: [PATCH 141/243] fix(okx): correct PriceType.MARK and PriceType.INDEX mapping --- freqtrade/exchange/okx.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/okx.py b/freqtrade/exchange/okx.py index bd401d198..c8c1130e5 100644 --- a/freqtrade/exchange/okx.py +++ b/freqtrade/exchange/okx.py @@ -41,8 +41,8 @@ class Okx(Exchange): "stop_price_type_field": "slTriggerPxType", "stop_price_type_value_mapping": { PriceType.LAST: "last", - PriceType.MARK: "index", - PriceType.INDEX: "mark", + PriceType.MARK: "mark", + PriceType.INDEX: "index", }, "stoploss_blocks_assets": False, "ws_enabled": True, From 81e4e0d301aabe9557522a65d74a235a36494d96 Mon Sep 17 00:00:00 2001 From: LMessi2000 Date: Wed, 3 Dec 2025 20:58:12 +0800 Subject: [PATCH 142/243] test(okx): add unit test for stop_price_type_value_mapping --- tests/exchange/test_okx.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/tests/exchange/test_okx.py b/tests/exchange/test_okx.py index 750afbd40..e11b83146 100644 --- a/tests/exchange/test_okx.py +++ b/tests/exchange/test_okx.py @@ -4,7 +4,7 @@ from unittest.mock import AsyncMock, MagicMock, PropertyMock import ccxt import pytest -from freqtrade.enums import CandleType, MarginMode, TradingMode +from freqtrade.enums import CandleType, MarginMode, PriceType, TradingMode from freqtrade.exceptions import RetryableOrderError, TemporaryError from freqtrade.exchange.common import API_RETRY_COUNT from freqtrade.exchange.exchange import timeframe_to_minutes @@ -681,6 +681,26 @@ def test__get_stop_params_okx(mocker, default_conf): assert params["posSide"] == "net" +def test_okx_stop_price_type_mapping(mocker, default_conf): + """ + Test that OKX stop_price_type_value_mapping correctly maps PriceType values. + PriceType.MARK should map to "mark", PriceType.INDEX should map to "index". + """ + default_conf["trading_mode"] = "futures" + default_conf["margin_mode"] = "isolated" + exchange = get_patched_exchange(mocker, default_conf, exchange="okx") + + # Verify the mapping is correct + mapping = exchange._ft_has.get("stop_price_type_value_mapping", {}) + + assert mapping.get(PriceType.LAST) == "last" + assert mapping.get(PriceType.MARK) == "mark" + assert mapping.get(PriceType.INDEX) == "index" + + # Verify stop_price_type_field is set correctly + assert exchange._ft_has.get("stop_price_type_field") == "slTriggerPxType" + + def test_fetch_orders_okx(default_conf, mocker, limit_order): api_mock = MagicMock() api_mock.fetch_orders = MagicMock( From 606dbe5db121709f4fd4f615709330b1ff679820 Mon Sep 17 00:00:00 2001 From: LMessi2000 Date: Wed, 3 Dec 2025 22:17:59 +0800 Subject: [PATCH 143/243] Revert "test(okx): add unit test for stop_price_type_value_mapping" This reverts commit 81e4e0d301aabe9557522a65d74a235a36494d96. --- tests/exchange/test_okx.py | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/tests/exchange/test_okx.py b/tests/exchange/test_okx.py index e11b83146..750afbd40 100644 --- a/tests/exchange/test_okx.py +++ b/tests/exchange/test_okx.py @@ -4,7 +4,7 @@ from unittest.mock import AsyncMock, MagicMock, PropertyMock import ccxt import pytest -from freqtrade.enums import CandleType, MarginMode, PriceType, TradingMode +from freqtrade.enums import CandleType, MarginMode, TradingMode from freqtrade.exceptions import RetryableOrderError, TemporaryError from freqtrade.exchange.common import API_RETRY_COUNT from freqtrade.exchange.exchange import timeframe_to_minutes @@ -681,26 +681,6 @@ def test__get_stop_params_okx(mocker, default_conf): assert params["posSide"] == "net" -def test_okx_stop_price_type_mapping(mocker, default_conf): - """ - Test that OKX stop_price_type_value_mapping correctly maps PriceType values. - PriceType.MARK should map to "mark", PriceType.INDEX should map to "index". - """ - default_conf["trading_mode"] = "futures" - default_conf["margin_mode"] = "isolated" - exchange = get_patched_exchange(mocker, default_conf, exchange="okx") - - # Verify the mapping is correct - mapping = exchange._ft_has.get("stop_price_type_value_mapping", {}) - - assert mapping.get(PriceType.LAST) == "last" - assert mapping.get(PriceType.MARK) == "mark" - assert mapping.get(PriceType.INDEX) == "index" - - # Verify stop_price_type_field is set correctly - assert exchange._ft_has.get("stop_price_type_field") == "slTriggerPxType" - - def test_fetch_orders_okx(default_conf, mocker, limit_order): api_mock = MagicMock() api_mock.fetch_orders = MagicMock( From e76b9bb64a328c6a26d9c8780b665e987f476e3d Mon Sep 17 00:00:00 2001 From: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com> Date: Thu, 4 Dec 2025 03:27:18 +0000 Subject: [PATCH 144/243] chore: update pre-commit hooks --- .../exchange/binance_leverage_tiers.json | 3933 ++++++++--------- 1 file changed, 1738 insertions(+), 2195 deletions(-) diff --git a/freqtrade/exchange/binance_leverage_tiers.json b/freqtrade/exchange/binance_leverage_tiers.json index 3d374cacd..e0e983fc8 100644 --- a/freqtrade/exchange/binance_leverage_tiers.json +++ b/freqtrade/exchange/binance_leverage_tiers.json @@ -2417,10 +2417,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "25", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -2434,10 +2434,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -2451,10 +2451,10 @@ "minNotional": 10000.0, "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -3346,161 +3346,6 @@ "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": "4/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": "4/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": "4/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": "4/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": "4/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": "4/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": "4/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" - } - } - ], - "42/USDT:USDT": [ - { - "tier": 1.0, - "symbol": "42/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": "42/USDT:USDT", - "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, "maxLeverage": 20.0, "info": { @@ -3514,7 +3359,7 @@ }, { "tier": 3.0, - "symbol": "42/USDT:USDT", + "symbol": "4/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, "maxNotional": 20000.0, @@ -3529,6 +3374,144 @@ "cum": "300.0" } }, + { + "tier": 4.0, + "symbol": "4/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": "1300.0" + } + }, + { + "tier": 5.0, + "symbol": "4/USDT:USDT", + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "5", + "initialLeverage": "4", + "notionalCap": "250000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2550.0" + } + }, + { + "tier": 6.0, + "symbol": "4/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": "4/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": "4/USDT:USDT", + "currency": "USDT", + "minNotional": 7500000.0, + "maxNotional": 12500000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "8", + "initialLeverage": "1", + "notionalCap": "12500000", + "notionalFloor": "7500000", + "maintMarginRatio": "0.5", + "cum": "1929625.0" + } + } + ], + "42/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "42/USDT:USDT", + "currency": "USDT", + "minNotional": 0.0, + "maxNotional": 5000.0, + "maintenanceMarginRate": 0.015, + "maxLeverage": 10.0, + "info": { + "bracket": "1", + "initialLeverage": "10", + "notionalCap": "5000", + "notionalFloor": "0", + "maintMarginRatio": "0.015", + "cum": "0.0" + } + }, + { + "tier": 2.0, + "symbol": "42/USDT:USDT", + "currency": "USDT", + "minNotional": 5000.0, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 8.0, + "info": { + "bracket": "2", + "initialLeverage": "8", + "notionalCap": "10000", + "notionalFloor": "5000", + "maintMarginRatio": "0.025", + "cum": "50.0" + } + }, + { + "tier": 3.0, + "symbol": "42/USDT:USDT", + "currency": "USDT", + "minNotional": 10000.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 6.0, + "info": { + "bracket": "3", + "initialLeverage": "6", + "notionalCap": "20000", + "notionalFloor": "10000", + "maintMarginRatio": "0.05", + "cum": "300.0" + } + }, { "tier": 4.0, "symbol": "42/USDT:USDT", @@ -5931,10 +5914,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.015", @@ -5948,10 +5931,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -5965,10 +5948,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -6741,14 +6724,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -6766,7 +6749,7 @@ "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", - "cum": "50.0" + "cum": "25.0" } }, { @@ -6774,23 +6757,23 @@ "symbol": "AIOT/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, + "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "3", "initialLeverage": "10", - "notionalCap": "25000", + "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", - "cum": "300.0" + "cum": "275.0" } }, { "tier": 4.0, "symbol": "AIOT/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, + "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, @@ -6798,9 +6781,9 @@ "bracket": "4", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", + "notionalFloor": "20000", "maintMarginRatio": "0.1", - "cum": "1550.0" + "cum": "1275.0" } }, { @@ -6808,67 +6791,67 @@ "symbol": "AIOT/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": "2800.0" + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "AIOT/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": "13225.0" + "cum": "6695.0" } }, { "tier": 7.0, "symbol": "AIOT/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": "54875.0" + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "AIOT/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": "1929875.0" + "cum": "652520.0" } } ], @@ -7052,10 +7035,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.015", @@ -7069,10 +7052,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -7086,10 +7069,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -15304,14 +15287,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -15321,14 +15304,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "25.0" } }, @@ -15337,67 +15320,67 @@ "symbol": "BAS/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "BAS/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" } }, { "tier": 5.0, "symbol": "BAS/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "BAS/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 100000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" } }, { @@ -15405,50 +15388,33 @@ "symbol": "BAS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "2500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.25", + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "BAS/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": "BAS/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "652520.0" } } ], @@ -16114,10 +16080,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -16131,10 +16097,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -16148,10 +16114,10 @@ "minNotional": 10000.0, "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -17044,10 +17010,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -17061,10 +17027,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -17078,10 +17044,10 @@ "minNotional": 10000.0, "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -20025,10 +19991,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -20042,10 +20008,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -20059,10 +20025,10 @@ "minNotional": 10000.0, "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -21335,10 +21301,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.015", @@ -21352,10 +21318,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -21369,10 +21335,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -21473,10 +21439,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.015", @@ -21490,10 +21456,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -21507,10 +21473,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -22109,15 +22075,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -22125,71 +22091,54 @@ "symbol": "CARV/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "CARV/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { "tier": 5.0, "symbol": "CARV/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": "CARV/USDT:USDT", - "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 50000.0, "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "250000", - "notionalFloor": "125000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "6950.0" + "cum": "2550.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "CARV/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -22197,16 +22146,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "17375.0" + "cum": "12975.0" } }, { - "tier": 8.0, + "tier": 7.0, "symbol": "CARV/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -22214,16 +22163,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "59025.0" + "cum": "54625.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "CARV/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -22231,12 +22180,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "1929625.0" } } ], @@ -23384,10 +23333,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -23401,10 +23350,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -23418,10 +23367,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -25091,10 +25040,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -25108,10 +25057,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -25125,10 +25074,10 @@ "minNotional": 10000.0, "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -25555,14 +25504,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -25572,14 +25521,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "25.0" } }, @@ -25588,67 +25537,67 @@ "symbol": "CROSS/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "CROSS/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" } }, { "tier": 5.0, "symbol": "CROSS/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "CROSS/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 100000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" } }, { @@ -25656,50 +25605,33 @@ "symbol": "CROSS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "2500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.25", + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "CROSS/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": "CROSS/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "652520.0" } } ], @@ -26297,10 +26229,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.015", @@ -26314,10 +26246,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -26331,10 +26263,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -27038,10 +26970,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.015", @@ -27055,10 +26987,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -27072,10 +27004,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -28762,10 +28694,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -28779,10 +28711,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -28796,10 +28728,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -30018,15 +29950,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -30034,71 +29966,54 @@ "symbol": "DRIFT/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "DRIFT/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { "tier": 5.0, "symbol": "DRIFT/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": "DRIFT/USDT:USDT", - "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 50000.0, "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "250000", - "notionalFloor": "125000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "6950.0" + "cum": "2550.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "DRIFT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -30106,16 +30021,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "17375.0" + "cum": "12975.0" } }, { - "tier": 8.0, + "tier": 7.0, "symbol": "DRIFT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -30123,16 +30038,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "59025.0" + "cum": "54625.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "DRIFT/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -30140,12 +30055,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "1929625.0" } } ], @@ -32274,10 +32189,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -32291,10 +32206,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -32308,10 +32223,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -34442,10 +34357,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.015", @@ -34459,10 +34374,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -34476,10 +34391,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -34716,13 +34631,13 @@ "symbol": "FARTCOIN/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 20000.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "notionalCap": "20000", + "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" @@ -34732,136 +34647,170 @@ "tier": 2.0, "symbol": "FARTCOIN/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 200000.0, + "minNotional": 5000.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.015, "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "notionalCap": "200000", - "notionalFloor": "20000", + "notionalCap": "10000", + "notionalFloor": "5000", "maintMarginRatio": "0.015", - "cum": "100.0" + "cum": "25.0" } }, { "tier": 3.0, "symbol": "FARTCOIN/USDT:USDT", "currency": "USDT", - "minNotional": 200000.0, - "maxNotional": 1000000.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.02, "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "notionalCap": "1000000", - "notionalFloor": "200000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.02", - "cum": "1100.0" + "cum": "75.0" } }, { "tier": 4.0, "symbol": "FARTCOIN/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, - "maxNotional": 2000000.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.025, "maxLeverage": 20.0, "info": { "bracket": "4", "initialLeverage": "20", - "notionalCap": "2000000", - "notionalFloor": "1000000", + "notionalCap": "100000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", - "cum": "6100.0" + "cum": "325.0" } }, { "tier": 5.0, "symbol": "FARTCOIN/USDT:USDT", "currency": "USDT", - "minNotional": 2000000.0, - "maxNotional": 5000000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 100000.0, + "maxNotional": 175000.0, + "maintenanceMarginRate": 0.0333, + "maxLeverage": 15.0, "info": { "bracket": "5", - "initialLeverage": "10", - "notionalCap": "5000000", - "notionalFloor": "2000000", - "maintMarginRatio": "0.05", - "cum": "56100.0" + "initialLeverage": "15", + "notionalCap": "175000", + "notionalFloor": "100000", + "maintMarginRatio": "0.0333", + "cum": "1155.0" } }, { "tier": 6.0, "symbol": "FARTCOIN/USDT:USDT", "currency": "USDT", - "minNotional": 5000000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 175000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "6", - "initialLeverage": "5", - "notionalCap": "7500000", - "notionalFloor": "5000000", - "maintMarginRatio": "0.1", - "cum": "306100.0" + "initialLeverage": "10", + "notionalCap": "250000", + "notionalFloor": "175000", + "maintMarginRatio": "0.05", + "cum": "4077.5" } }, { "tier": 7.0, "symbol": "FARTCOIN/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 10000000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 250000.0, + "maxNotional": 750000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "7", - "initialLeverage": "4", - "notionalCap": "10000000", - "notionalFloor": "7500000", - "maintMarginRatio": "0.125", - "cum": "493600.0" + "initialLeverage": "5", + "notionalCap": "750000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1", + "cum": "16577.5" } }, { "tier": 8.0, "symbol": "FARTCOIN/USDT:USDT", "currency": "USDT", - "minNotional": 10000000.0, - "maxNotional": 12500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, + "minNotional": 750000.0, + "maxNotional": 1500000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "8", - "initialLeverage": "2", - "notionalCap": "12500000", - "notionalFloor": "10000000", - "maintMarginRatio": "0.25", - "cum": "1743600.0" + "initialLeverage": "4", + "notionalCap": "1500000", + "notionalFloor": "750000", + "maintMarginRatio": "0.125", + "cum": "35327.5" } }, { "tier": 9.0, "symbol": "FARTCOIN/USDT:USDT", "currency": "USDT", - "minNotional": 12500000.0, - "maxNotional": 15000000.0, + "minNotional": 1500000.0, + "maxNotional": 4500000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "9", + "initialLeverage": "3", + "notionalCap": "4500000", + "notionalFloor": "1500000", + "maintMarginRatio": "0.1667", + "cum": "97877.5" + } + }, + { + "tier": 10.0, + "symbol": "FARTCOIN/USDT:USDT", + "currency": "USDT", + "minNotional": 4500000.0, + "maxNotional": 7500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "10", + "initialLeverage": "2", + "notionalCap": "7500000", + "notionalFloor": "4500000", + "maintMarginRatio": "0.25", + "cum": "472727.5" + } + }, + { + "tier": 11.0, + "symbol": "FARTCOIN/USDT:USDT", + "currency": "USDT", + "minNotional": 7500000.0, + "maxNotional": 12500000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "11", "initialLeverage": "1", - "notionalCap": "15000000", - "notionalFloor": "12500000", + "notionalCap": "12500000", + "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "4868600.0" + "cum": "2347727.5" } } ], @@ -35217,10 +35166,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -35234,10 +35183,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -35251,10 +35200,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -35837,10 +35786,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "25", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -35854,10 +35803,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -35871,10 +35820,10 @@ "minNotional": 10000.0, "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -35975,10 +35924,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "25", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -35992,10 +35941,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -36009,10 +35958,10 @@ "minNotional": 10000.0, "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -36233,15 +36182,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -36249,71 +36198,54 @@ "symbol": "FLOCK/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "FLOCK/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { "tier": 5.0, "symbol": "FLOCK/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": "FLOCK/USDT:USDT", - "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 50000.0, "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "250000", - "notionalFloor": "125000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "6950.0" + "cum": "2550.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "FLOCK/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -36321,16 +36253,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "17375.0" + "cum": "12975.0" } }, { - "tier": 8.0, + "tier": 7.0, "symbol": "FLOCK/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -36338,16 +36270,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "59025.0" + "cum": "54625.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "FLOCK/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -36355,12 +36287,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "1929625.0" } } ], @@ -40765,10 +40697,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.015", @@ -40782,10 +40714,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -40799,10 +40731,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -49258,10 +49190,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -49275,10 +49207,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -49292,10 +49224,10 @@ "minNotional": 10000.0, "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -49722,14 +49654,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -49739,14 +49671,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "25.0" } }, @@ -49755,67 +49687,67 @@ "symbol": "LAB/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "LAB/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" } }, { "tier": 5.0, "symbol": "LAB/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "LAB/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 100000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" } }, { @@ -49823,50 +49755,33 @@ "symbol": "LAB/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "2500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.25", + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "LAB/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": "LAB/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "652520.0" } } ], @@ -52926,14 +52841,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -52943,14 +52858,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "25.0" } }, @@ -52959,67 +52874,67 @@ "symbol": "LYN/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "LYN/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" } }, { "tier": 5.0, "symbol": "LYN/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "LYN/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 100000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" } }, { @@ -53027,50 +52942,33 @@ "symbol": "LYN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "2500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.25", + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "LYN/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": "LYN/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "652520.0" } } ], @@ -55715,15 +55613,15 @@ "symbol": "MILK/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" } }, @@ -55731,55 +55629,21 @@ "tier": 2.0, "symbol": "MILK/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": "50.0" - } - }, - { - "tier": 3.0, - "symbol": "MILK/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": "300.0" - } - }, - { - "tier": 4.0, - "symbol": "MILK/USDT:USDT", - "currency": "USDT", - "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "MILK/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -55787,16 +55651,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "250000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "MILK/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -55804,46 +55668,46 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "12175.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "MILK/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 7500000.0, + "maxNotional": 800000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", - "notionalCap": "7500000", + "notionalCap": "800000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "53825.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "MILK/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 800000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "1000000", + "notionalFloor": "800000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "253825.0" } } ], @@ -60917,15 +60781,15 @@ "symbol": "OBOL/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" } }, @@ -60933,55 +60797,21 @@ "tier": 2.0, "symbol": "OBOL/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": "50.0" - } - }, - { - "tier": 3.0, - "symbol": "OBOL/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": "300.0" - } - }, - { - "tier": 4.0, - "symbol": "OBOL/USDT:USDT", - "currency": "USDT", - "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1300.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "OBOL/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -60989,16 +60819,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "250000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2550.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "OBOL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -61006,46 +60836,46 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "12975.0" + "cum": "12175.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "OBOL/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, - "maxNotional": 7500000.0, + "maxNotional": 800000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", - "notionalCap": "7500000", + "notionalCap": "800000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "54625.0" + "cum": "53825.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "OBOL/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 800000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "1000000", + "notionalFloor": "800000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "253825.0" } } ], @@ -63519,15 +63349,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -63535,71 +63365,54 @@ "symbol": "ORDER/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "ORDER/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { "tier": 5.0, "symbol": "ORDER/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": "ORDER/USDT:USDT", - "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 50000.0, "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "250000", - "notionalFloor": "125000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "6950.0" + "cum": "2550.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "ORDER/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -63607,16 +63420,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "17375.0" + "cum": "12975.0" } }, { - "tier": 8.0, + "tier": 7.0, "symbol": "ORDER/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -63624,16 +63437,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "59025.0" + "cum": "54625.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "ORDER/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -63641,12 +63454,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "1929625.0" } } ], @@ -67067,15 +66880,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -67083,71 +66896,54 @@ "symbol": "POPCAT/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "POPCAT/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { "tier": 5.0, "symbol": "POPCAT/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": "POPCAT/USDT:USDT", - "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 50000.0, "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "250000", - "notionalFloor": "125000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "6950.0" + "cum": "2550.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "POPCAT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -67155,16 +66951,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "17375.0" + "cum": "12975.0" } }, { - "tier": 8.0, + "tier": 7.0, "symbol": "POPCAT/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -67172,16 +66968,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "59025.0" + "cum": "54625.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "POPCAT/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -67189,12 +66985,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "1929625.0" } } ], @@ -67757,14 +67553,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -67774,14 +67570,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "25.0" } }, @@ -67790,67 +67586,67 @@ "symbol": "PROMPT/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "PROMPT/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" } }, { "tier": 5.0, "symbol": "PROMPT/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "PROMPT/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 100000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" } }, { @@ -67858,50 +67654,33 @@ "symbol": "PROMPT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "2500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.25", + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "PROMPT/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": "PROMPT/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "652520.0" } } ], @@ -68101,14 +67880,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -68118,14 +67897,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "25.0" } }, @@ -68134,67 +67913,67 @@ "symbol": "PTB/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "PTB/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" } }, { "tier": 5.0, "symbol": "PTB/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "PTB/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 100000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" } }, { @@ -68202,50 +67981,33 @@ "symbol": "PTB/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "2500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.25", + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "PTB/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": "PTB/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "652520.0" } } ], @@ -68550,10 +68312,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -68567,10 +68329,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -68584,10 +68346,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -69014,14 +68776,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -69031,14 +68793,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "25.0" } }, @@ -69047,67 +68809,67 @@ "symbol": "Q/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "Q/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" } }, { "tier": 5.0, "symbol": "Q/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "Q/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 100000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" } }, { @@ -69115,50 +68877,33 @@ "symbol": "Q/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "2500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.25", + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "Q/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": "Q/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "652520.0" } } ], @@ -70290,14 +70035,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -70307,14 +70052,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "25.0" } }, @@ -70323,67 +70068,67 @@ "symbol": "RECALL/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "RECALL/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" } }, { "tier": 5.0, "symbol": "RECALL/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "RECALL/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 100000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" } }, { @@ -70391,50 +70136,33 @@ "symbol": "RECALL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "2500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.25", + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "RECALL/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": "RECALL/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "652520.0" } } ], @@ -70739,10 +70467,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "25", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -70756,10 +70484,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -70773,10 +70501,10 @@ "minNotional": 10000.0, "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -71617,15 +71345,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -71633,71 +71361,54 @@ "symbol": "RIVER/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "RIVER/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { "tier": 5.0, "symbol": "RIVER/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": "RIVER/USDT:USDT", - "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 50000.0, "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "250000", - "notionalFloor": "125000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "6950.0" + "cum": "2550.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "RIVER/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -71705,16 +71416,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "17375.0" + "cum": "12975.0" } }, { - "tier": 8.0, + "tier": 7.0, "symbol": "RIVER/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -71722,16 +71433,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "59025.0" + "cum": "54625.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "RIVER/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -71739,12 +71450,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "1929625.0" } } ], @@ -71920,6 +71631,127 @@ } } ], + "RLS/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "RLS/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": "RLS/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": "RLS/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": "RLS/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": "RLS/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": "RLS/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": "RLS/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" + } + } + ], "RONIN/USDT:USDT": [ { "tier": 1.0, @@ -72943,10 +72775,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -72960,10 +72792,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -72977,10 +72809,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -73286,15 +73118,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -73302,71 +73134,54 @@ "symbol": "SAFE/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "SAFE/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { "tier": 5.0, "symbol": "SAFE/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": "SAFE/USDT:USDT", - "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 50000.0, "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "250000", - "notionalFloor": "125000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "6950.0" + "cum": "2550.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "SAFE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -73374,16 +73189,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "17375.0" + "cum": "12975.0" } }, { - "tier": 8.0, + "tier": 7.0, "symbol": "SAFE/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -73391,16 +73206,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "59025.0" + "cum": "54625.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "SAFE/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -73408,12 +73223,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "1929625.0" } } ], @@ -75559,15 +75374,15 @@ "symbol": "SKATE/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" } }, @@ -75575,55 +75390,21 @@ "tier": 2.0, "symbol": "SKATE/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": "SKATE/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, - "info": { - "bracket": "3", - "initialLeverage": "10", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "SKATE/USDT:USDT", - "currency": "USDT", - "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1525.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "SKATE/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -75631,16 +75412,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2775.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "SKATE/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -75648,46 +75429,46 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6945.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "SKATE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 2500000.0, + "maxNotional": 800000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", - "notionalCap": "2500000", + "notionalCap": "800000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "SKATE/USDT:USDT", "currency": "USDT", - "minNotional": 2500000.0, - "maxNotional": 5000000.0, + "minNotional": 800000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "5000000", - "notionalFloor": "2500000", + "notionalCap": "1000000", + "notionalFloor": "800000", "maintMarginRatio": "0.5", - "cum": "652770.0" + "cum": "226745.0" } } ], @@ -78781,15 +78562,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -78797,71 +78578,54 @@ "symbol": "STBL/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "STBL/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { "tier": 5.0, "symbol": "STBL/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": "STBL/USDT:USDT", - "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 50000.0, "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "250000", - "notionalFloor": "125000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "6950.0" + "cum": "2550.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "STBL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -78869,16 +78633,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "17375.0" + "cum": "12975.0" } }, { - "tier": 8.0, + "tier": 7.0, "symbol": "STBL/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -78886,16 +78650,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "59025.0" + "cum": "54625.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "STBL/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -78903,12 +78667,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "1929625.0" } } ], @@ -81245,15 +81009,15 @@ "symbol": "SXP/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" } }, @@ -81261,136 +81025,85 @@ "tier": 2.0, "symbol": "SXP/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "25", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "SXP/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "minNotional": 50000.0, + "maxNotional": 200000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "initialLeverage": "4", + "notionalCap": "200000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1750.0" } }, { "tier": 4.0, "symbol": "SXP/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 200000.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "3", + "notionalCap": "500000", + "notionalFloor": "200000", + "maintMarginRatio": "0.1667", + "cum": "10090.0" } }, { "tier": 5.0, "symbol": "SXP/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 500000.0, + "maxNotional": 800000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "2", + "notionalCap": "800000", + "notionalFloor": "500000", + "maintMarginRatio": "0.25", + "cum": "51740.0" } }, { "tier": 6.0, "symbol": "SXP/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": "SXP/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": "SXP/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": "SXP/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 800000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "1000000", + "notionalFloor": "800000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "251740.0" } } ], @@ -82799,10 +82512,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -82816,10 +82529,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -82833,10 +82546,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -83986,15 +83699,15 @@ "symbol": "TOKEN/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" } }, @@ -84002,55 +83715,21 @@ "tier": 2.0, "symbol": "TOKEN/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": "TOKEN/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": "TOKEN/USDT:USDT", - "currency": "USDT", - "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1275.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "TOKEN/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -84058,16 +83737,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2525.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "TOKEN/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -84075,46 +83754,46 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6695.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "TOKEN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 2500000.0, + "maxNotional": 800000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", - "notionalCap": "2500000", + "notionalCap": "800000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27520.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "TOKEN/USDT:USDT", "currency": "USDT", - "minNotional": 2500000.0, - "maxNotional": 5000000.0, + "minNotional": 800000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", - "notionalCap": "5000000", - "notionalFloor": "2500000", + "notionalCap": "1000000", + "notionalFloor": "800000", "maintMarginRatio": "0.5", - "cum": "652520.0" + "cum": "226745.0" } } ], @@ -85864,15 +85543,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -85880,71 +85559,54 @@ "symbol": "TRUTH/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "TRUTH/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { "tier": 5.0, "symbol": "TRUTH/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": "TRUTH/USDT:USDT", - "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 50000.0, "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "250000", - "notionalFloor": "125000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "6950.0" + "cum": "2550.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "TRUTH/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -85952,16 +85614,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "17375.0" + "cum": "12975.0" } }, { - "tier": 8.0, + "tier": 7.0, "symbol": "TRUTH/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -85969,16 +85631,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "59025.0" + "cum": "54625.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "TRUTH/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -85986,12 +85648,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "1929625.0" } } ], @@ -89310,14 +88972,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -89327,14 +88989,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "25.0" } }, @@ -89343,67 +89005,67 @@ "symbol": "VFY/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "VFY/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" } }, { "tier": 5.0, "symbol": "VFY/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "VFY/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 100000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" } }, { @@ -89411,50 +89073,33 @@ "symbol": "VFY/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "2500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.25", + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "VFY/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": "VFY/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "652520.0" } } ], @@ -89707,14 +89352,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -89724,14 +89369,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "25.0" } }, @@ -89740,67 +89385,67 @@ "symbol": "VINE/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "VINE/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" } }, { "tier": 5.0, "symbol": "VINE/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "VINE/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 100000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" } }, { @@ -89808,50 +89453,33 @@ "symbol": "VINE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "2500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.25", + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "VINE/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": "VINE/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "652520.0" } } ], @@ -90052,10 +89680,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "25", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -90069,10 +89697,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -90086,10 +89714,10 @@ "minNotional": 10000.0, "maxNotional": 25000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "25000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -90361,15 +89989,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -90377,71 +90005,54 @@ "symbol": "VVV/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "VVV/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { "tier": 5.0, "symbol": "VVV/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": "VVV/USDT:USDT", - "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 50000.0, "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "250000", - "notionalFloor": "125000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "6950.0" + "cum": "2550.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "VVV/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -90449,16 +90060,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "17375.0" + "cum": "12975.0" } }, { - "tier": 8.0, + "tier": 7.0, "symbol": "VVV/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -90466,16 +90077,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "59025.0" + "cum": "54625.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "VVV/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -90483,12 +90094,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "1929625.0" } } ], @@ -92548,15 +92159,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -92564,71 +92175,54 @@ "symbol": "XAN/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "XAN/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { "tier": 5.0, "symbol": "XAN/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": "XAN/USDT:USDT", - "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 50000.0, "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "250000", - "notionalFloor": "125000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "6950.0" + "cum": "2550.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "XAN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -92636,16 +92230,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "17375.0" + "cum": "12975.0" } }, { - "tier": 8.0, + "tier": 7.0, "symbol": "XAN/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -92653,16 +92247,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "59025.0" + "cum": "54625.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "XAN/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -92670,12 +92264,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "1929625.0" } } ], @@ -94547,10 +94141,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maxLeverage": 10.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "10", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.015", @@ -94564,10 +94158,10 @@ "minNotional": 5000.0, "maxNotional": 10000.0, "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxLeverage": 8.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "8", "notionalCap": "10000", "notionalFloor": "5000", "maintMarginRatio": "0.025", @@ -94581,10 +94175,10 @@ "minNotional": 10000.0, "maxNotional": 20000.0, "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxLeverage": 6.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "6", "notionalCap": "20000", "notionalFloor": "10000", "maintMarginRatio": "0.05", @@ -95628,13 +95222,13 @@ "symbol": "ZEC/USDT:USDT", "currency": "USDT", "minNotional": 10000000.0, - "maxNotional": 12500000.0, + "maxNotional": 20000000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { "bracket": "8", "initialLeverage": "2", - "notionalCap": "12500000", + "notionalCap": "20000000", "notionalFloor": "10000000", "maintMarginRatio": "0.25", "cum": "1743600.0" @@ -95644,17 +95238,17 @@ "tier": 9.0, "symbol": "ZEC/USDT:USDT", "currency": "USDT", - "minNotional": 12500000.0, - "maxNotional": 15000000.0, + "minNotional": 20000000.0, + "maxNotional": 40000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { "bracket": "9", "initialLeverage": "1", - "notionalCap": "15000000", - "notionalFloor": "12500000", + "notionalCap": "40000000", + "notionalFloor": "20000000", "maintMarginRatio": "0.5", - "cum": "4868600.0" + "cum": "6743600.0" } } ], @@ -96009,15 +95603,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -96025,71 +95619,54 @@ "symbol": "ZETA/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "ZETA/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1300.0" } }, { "tier": 5.0, "symbol": "ZETA/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": "ZETA/USDT:USDT", - "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 50000.0, "maxNotional": 250000.0, "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "6", + "bracket": "5", "initialLeverage": "4", "notionalCap": "250000", - "notionalFloor": "125000", + "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "6950.0" + "cum": "2550.0" } }, { - "tier": 7.0, + "tier": 6.0, "symbol": "ZETA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -96097,16 +95674,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "7", + "bracket": "6", "initialLeverage": "3", "notionalCap": "500000", "notionalFloor": "250000", "maintMarginRatio": "0.1667", - "cum": "17375.0" + "cum": "12975.0" } }, { - "tier": 8.0, + "tier": 7.0, "symbol": "ZETA/USDT:USDT", "currency": "USDT", "minNotional": 500000.0, @@ -96114,16 +95691,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "59025.0" + "cum": "54625.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "ZETA/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -96131,12 +95708,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "1929625.0" } } ], @@ -96646,14 +96223,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 40.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "40", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.02", "cum": "0.0" } }, @@ -96663,14 +96240,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.025", "cum": "25.0" } }, @@ -96679,67 +96256,67 @@ "symbol": "ZKJ/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 20000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "20000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "275.0" } }, { "tier": 4.0, "symbol": "ZKJ/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 20000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "20000", + "maintMarginRatio": "0.1", + "cum": "1275.0" } }, { "tier": 5.0, "symbol": "ZKJ/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2525.0" } }, { "tier": 6.0, "symbol": "ZKJ/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, + "minNotional": 100000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "6695.0" } }, { @@ -96747,50 +96324,33 @@ "symbol": "ZKJ/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 2500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "7", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "2500000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" + "maintMarginRatio": "0.25", + "cum": "27520.0" } }, { "tier": 8.0, "symbol": "ZKJ/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": "ZKJ/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 2500000.0, + "maxNotional": 5000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "5000000", + "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "1934025.0" + "cum": "652520.0" } } ], @@ -97472,15 +97032,15 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 25.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "2", - "initialLeverage": "25", + "initialLeverage": "20", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.02", - "cum": "25.0" + "maintMarginRatio": "0.025", + "cum": "50.0" } }, { @@ -97488,105 +97048,88 @@ "symbol": "\u5e01\u5b89\u4eba\u751f/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "3", - "initialLeverage": "20", - "notionalCap": "25000", + "initialLeverage": "10", + "notionalCap": "50000", "notionalFloor": "10000", - "maintMarginRatio": "0.025", - "cum": "75.0" + "maintMarginRatio": "0.05", + "cum": "300.0" } }, { "tier": 4.0, "symbol": "\u5e01\u5b89\u4eba\u751f/USDT:USDT", "currency": "USDT", - "minNotional": 25000.0, - "maxNotional": 62500.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "4", - "initialLeverage": "10", - "notionalCap": "62500", - "notionalFloor": "25000", - "maintMarginRatio": "0.05", - "cum": "700.0" + "initialLeverage": "5", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.1", + "cum": "2800.0" } }, { "tier": 5.0, "symbol": "\u5e01\u5b89\u4eba\u751f/USDT:USDT", "currency": "USDT", - "minNotional": 62500.0, - "maxNotional": 125000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 100000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "5", - "initialLeverage": "5", - "notionalCap": "125000", - "notionalFloor": "62500", - "maintMarginRatio": "0.1", - "cum": "3825.0" + "initialLeverage": "4", + "notionalCap": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.125", + "cum": "5300.0" } }, { "tier": 6.0, "symbol": "\u5e01\u5b89\u4eba\u751f/USDT:USDT", "currency": "USDT", - "minNotional": 125000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 250000.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "6", - "initialLeverage": "4", - "notionalCap": "250000", - "notionalFloor": "125000", - "maintMarginRatio": "0.125", - "cum": "6950.0" + "initialLeverage": "3", + "notionalCap": "500000", + "notionalFloor": "250000", + "maintMarginRatio": "0.1667", + "cum": "15725.0" } }, { "tier": 7.0, "symbol": "\u5e01\u5b89\u4eba\u751f/USDT:USDT", "currency": "USDT", - "minNotional": 250000.0, - "maxNotional": 1000000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, - "info": { - "bracket": "7", - "initialLeverage": "3", - "notionalCap": "1000000", - "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "17375.0" - } - }, - { - "tier": 8.0, - "symbol": "\u5e01\u5b89\u4eba\u751f/USDT:USDT", - "currency": "USDT", - "minNotional": 1000000.0, + "minNotional": 500000.0, "maxNotional": 7500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "2", "notionalCap": "7500000", - "notionalFloor": "1000000", + "notionalFloor": "500000", "maintMarginRatio": "0.25", - "cum": "100675.0" + "cum": "57375.0" } }, { - "tier": 9.0, + "tier": 8.0, "symbol": "\u5e01\u5b89\u4eba\u751f/USDT:USDT", "currency": "USDT", "minNotional": 7500000.0, @@ -97594,12 +97137,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "8", "initialLeverage": "1", "notionalCap": "12500000", "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "1975675.0" + "cum": "1932375.0" } } ] From 06a8f3d09794dad422878691db83b83af487ab53 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 4 Dec 2025 06:36:13 +0100 Subject: [PATCH 145/243] chore: bump ccxt to 4.5.24 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4efa1fa87..e75918c88 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.22 +ccxt==4.5.24 cryptography==46.0.3 aiohttp==3.13.2 SQLAlchemy==2.0.44 From a63ea6adb811030b86e6d8828b7bd8c38d479974 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 4 Dec 2025 06:56:14 +0100 Subject: [PATCH 146/243] test: switch to BTC/USDC in tests for now --- tests/exchange_online/conftest.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/exchange_online/conftest.py b/tests/exchange_online/conftest.py index 94ff4ac47..755e6716c 100644 --- a/tests/exchange_online/conftest.py +++ b/tests/exchange_online/conftest.py @@ -515,7 +515,8 @@ EXCHANGES = { ], }, "hyperliquid": { - "pair": "UBTC/USDC", + # TODO: Should be UBTC/USDC - probably needs a fix in ccxt + "pair": "BTC/USDC", "stake_currency": "USDC", "hasQuoteVolume": False, "timeframe": "30m", From 3fb7382cc4ee9a97e5216931e537ce3f899e0ce2 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 4 Dec 2025 19:56:46 +0100 Subject: [PATCH 147/243] test: update test data to include USDT pairs --- tests/testdata/BTC_USDT-5m.feather | Bin 0 -> 102362 bytes tests/testdata/XRP_USDT-5m.feather | Bin 0 -> 90018 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/testdata/BTC_USDT-5m.feather create mode 100644 tests/testdata/XRP_USDT-5m.feather diff --git a/tests/testdata/BTC_USDT-5m.feather b/tests/testdata/BTC_USDT-5m.feather new file mode 100644 index 0000000000000000000000000000000000000000..ee6ec03b4aeeccf07075002f1db987874e794195 GIT binary patch literal 102362 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 eb8jiLW$NtK&Q3GC&2)_e!`!pTT|m4N9!2 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 z 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 literal 0 HcmV?d00001 From 7f831f8a9c8f3cd32ca1a3999c585ef260a68c7a Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 4 Dec 2025 19:58:47 +0100 Subject: [PATCH 148/243] test: update tests for new test pairs --- tests/commands/test_commands.py | 2 +- tests/data/test_datahandler.py | 4 ++++ tests/rpc/test_rpc_apiserver.py | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/commands/test_commands.py b/tests/commands/test_commands.py index bae3d7fd1..a1e541bd1 100644 --- a/tests/commands/test_commands.py +++ b/tests/commands/test_commands.py @@ -1767,7 +1767,7 @@ def test_start_list_data(testdatadir, capsys): pargs["config"] = None start_list_data(pargs) captured = capsys.readouterr() - assert "Found 16 pair / timeframe combinations." in captured.out + assert "Found 18 pair / timeframe combinations." in captured.out assert re.search(r".*Pair.*Timeframe.*Type.*\n", captured.out) assert re.search(r"\n.* UNITTEST/BTC .* 1m, 5m, 8m, 30m .* spot |\n", captured.out) diff --git a/tests/data/test_datahandler.py b/tests/data/test_datahandler.py index bc665535f..6110d17b8 100644 --- a/tests/data/test_datahandler.py +++ b/tests/data/test_datahandler.py @@ -40,6 +40,8 @@ def test_datahandler_ohlcv_get_pairs(testdatadir): "NXT/BTC", "DASH/BTC", "XRP/ETH", + "BTC/USDT", + "XRP/USDT", } pairs = JsonGzDataHandler.ohlcv_get_pairs(testdatadir, "8m", candle_type=CandleType.SPOT) @@ -111,6 +113,8 @@ def test_datahandler_ohlcv_get_available_data(testdatadir): ("DASH/BTC", "5m", CandleType.SPOT), ("XRP/ETH", "1m", CandleType.SPOT), ("XRP/ETH", "5m", CandleType.SPOT), + ("BTC/USDT", "5m", CandleType.SPOT), + ("XRP/USDT", "5m", CandleType.SPOT), ("UNITTEST/BTC", "30m", CandleType.SPOT), ("UNITTEST/BTC", "8m", CandleType.SPOT), } diff --git a/tests/rpc/test_rpc_apiserver.py b/tests/rpc/test_rpc_apiserver.py index f7f99f288..aa5483e88 100644 --- a/tests/rpc/test_rpc_apiserver.py +++ b/tests/rpc/test_rpc_apiserver.py @@ -2758,12 +2758,12 @@ def test_list_available_pairs(botclient): rc = client_get(client, f"{BASE_URI}/available_pairs") assert_response(rc) - assert rc.json()["length"] == 12 + assert rc.json()["length"] == 14 assert isinstance(rc.json()["pairs"], list) rc = client_get(client, f"{BASE_URI}/available_pairs?timeframe=5m") assert_response(rc) - assert rc.json()["length"] == 12 + assert rc.json()["length"] == 14 rc = client_get(client, f"{BASE_URI}/available_pairs?stake_currency=ETH") assert_response(rc) From fe95581acd24f59e074d34b86c209c0acac6d82b Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 4 Dec 2025 20:04:44 +0100 Subject: [PATCH 149/243] test: update rel_mean test to use USDT Pairs This will allow highlighting a problem pointed out in #12588 --- tests/data/test_btanalysis.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/data/test_btanalysis.py b/tests/data/test_btanalysis.py index a09db5898..3b9ff40b7 100644 --- a/tests/data/test_btanalysis.py +++ b/tests/data/test_btanalysis.py @@ -290,20 +290,22 @@ def test_combine_dataframes_with_mean(testdatadir): def test_combined_dataframes_with_rel_mean(testdatadir): - pairs = ["ETH/BTC", "ADA/BTC"] + pairs = ["BTC/USDT", "XRP/USDT"] data = load_data(datadir=testdatadir, pairs=pairs, timeframe="5m") df = combined_dataframes_with_rel_mean( - data, datetime(2018, 1, 12, tzinfo=UTC), datetime(2018, 1, 28, tzinfo=UTC) + data, + fromdt=data["BTC/USDT"].at[0, "date"], + todt=data["BTC/USDT"].at[data["BTC/USDT"].index[-1], "date"], ) assert isinstance(df, DataFrame) - assert "ETH/BTC" not in df.columns - assert "ADA/BTC" not in df.columns + assert "BTC/USDT" not in df.columns + assert "XRP/USDT" not in df.columns assert "mean" in df.columns assert "rel_mean" in df.columns assert "count" in df.columns assert df.iloc[0]["count"] == 2 assert df.iloc[-1]["count"] == 2 - assert len(df) < len(data["ETH/BTC"]) + assert len(df) < len(data["BTC/USDT"]) def test_combine_dataframes_with_mean_no_data(testdatadir): From e792bafe21a02e8bb865ba14eec06b5318d5d74b Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 4 Dec 2025 21:14:27 +0100 Subject: [PATCH 150/243] test: update test to ensure rel_mean is reasonable --- tests/data/test_btanalysis.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/data/test_btanalysis.py b/tests/data/test_btanalysis.py index 3b9ff40b7..e5020fea0 100644 --- a/tests/data/test_btanalysis.py +++ b/tests/data/test_btanalysis.py @@ -306,6 +306,7 @@ def test_combined_dataframes_with_rel_mean(testdatadir): assert df.iloc[0]["count"] == 2 assert df.iloc[-1]["count"] == 2 assert len(df) < len(data["BTC/USDT"]) + assert df["rel_mean"].between(-0.5, 0.5).all() def test_combine_dataframes_with_mean_no_data(testdatadir): From 68e54248fd3cc1ccb3cf1842f735f677b3367602 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 4 Dec 2025 21:23:53 +0100 Subject: [PATCH 151/243] fix: calculate meaningful price change properly weighting each pair closes #12588 --- freqtrade/data/metrics.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/freqtrade/data/metrics.py b/freqtrade/data/metrics.py index a4b6898e2..cf59c330a 100644 --- a/freqtrade/data/metrics.py +++ b/freqtrade/data/metrics.py @@ -74,9 +74,10 @@ def combined_dataframes_with_rel_mean( df_comb = combine_dataframes_by_column(data, column) # Trim dataframes to the given timeframe df_comb = df_comb.iloc[(df_comb.index >= fromdt) & (df_comb.index < todt)] + rel_mean = df_comb.pct_change().mean(axis=1).fillna(0).cumsum() df_comb["count"] = df_comb.count(axis=1) df_comb["mean"] = df_comb.mean(axis=1) - df_comb["rel_mean"] = df_comb["mean"].pct_change().fillna(0).cumsum() + df_comb["rel_mean"] = rel_mean return df_comb[["mean", "rel_mean", "count"]] From 8ca25b17576a278a88f0af48067bd639fae2c6a0 Mon Sep 17 00:00:00 2001 From: 0xward Date: Fri, 5 Dec 2025 09:50:16 +0700 Subject: [PATCH 152/243] Update README.md docs: fix minor typo and inconsistency in README disclaimer (Dry-run to dry-run) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8c8adc9d3..cc02d41ae 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ This software is for educational purposes only. Do not risk money which you are afraid to lose. USE THE SOFTWARE AT YOUR OWN RISK. THE AUTHORS AND ALL AFFILIATES ASSUME NO RESPONSIBILITY FOR YOUR TRADING RESULTS. -Always start by running a trading bot in Dry-run and do not engage money +Always start by running a trading bot in Dry-Run and do not engage money before you understand how it works and what profit/loss you should expect. @@ -24,7 +24,7 @@ hesitate to read the source code and understand the mechanism of this bot. ## Supported Exchange marketplaces -Please read the [exchange specific notes](docs/exchanges.md) to learn about eventual, special configurations needed for each exchange. +Please read the [exchange-specific notes](docs/exchanges.md) to learn about special configurations that maybe needed for each exchange. - [X] [Binance](https://www.binance.com/) - [X] [BingX](https://bingx.com/invite/0EM9RX) From 338c1c54248e09767c5dc0550fa74b97fb5637f4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 5 Dec 2025 07:10:04 +0100 Subject: [PATCH 153/243] fix: compare timeout with <= instead of < closes #12590 Backtesting assumes round dates, so a timeout at "candle length" needs to timeout at the hour - not after the hour. otherwise the timeout becomes either double (60 instead of 30) - or longer by one "timeframe detail" (31 instead of 30). --- freqtrade/strategy/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index 7ac196dba..34857c71e 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -1718,7 +1718,7 @@ class IStrategy(ABC, HyperStrategyMixin): timeout_unit = self.config.get("unfilledtimeout", {}).get("unit", "minutes") timeout_kwargs = {timeout_unit: -timeout} timeout_threshold = current_time + timedelta(**timeout_kwargs) - timedout = order.status == "open" and order.order_date_utc < timeout_threshold + timedout = order.status == "open" and order.order_date_utc <= timeout_threshold if timedout: return True time_method = ( From 262f4ffa4cef785c06805d260cb0aa6fecc93610 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 5 Dec 2025 07:10:17 +0100 Subject: [PATCH 154/243] test: update bt tests for new timeout behavior --- tests/optimize/test_backtesting.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/optimize/test_backtesting.py b/tests/optimize/test_backtesting.py index 11b6cea24..b1d13756f 100644 --- a/tests/optimize/test_backtesting.py +++ b/tests/optimize/test_backtesting.py @@ -879,6 +879,10 @@ def test_backtest_one_detail(default_conf_usdt, mocker, testdatadir, use_detail) patch_exchange(mocker) mocker.patch(f"{EXMS}.get_min_pair_stake_amount", return_value=0.00001) mocker.patch(f"{EXMS}.get_max_pair_stake_amount", return_value=float("inf")) + default_conf_usdt["unfilledtimeout"] = { + "entry": 11, + "exit": 30, + } if use_detail: default_conf_usdt["timeframe_detail"] = "1m" @@ -916,7 +920,7 @@ def test_backtest_one_detail(default_conf_usdt, mocker, testdatadir, use_detail) ) results = result["results"] assert not results.empty - # Timeout settings from default_conf = entry: 10, exit: 30 + # Timeout settings from = entry: 11, exit: 30 assert len(results) == (2 if use_detail else 3) assert "orders" in results.columns @@ -1800,7 +1804,7 @@ def test_backtest_multi_pair_detail_simplified( if use_detail: # Backtest loop is called once per candle per pair # Exact numbers depend on trade state - but should be around 2_600 - assert bl_spy.call_count > 2_170 + assert bl_spy.call_count > 2_159 assert bl_spy.call_count < 2_800 assert len(evaluate_result_multi(results["results"], "1h", 3)) > 0 else: From 271fc6b58558f70099f87472b166d2167b5e866d Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 2 Dec 2025 21:11:28 +0100 Subject: [PATCH 155/243] feat: don't fill up missing funding-fees after merge --- freqtrade/exchange/exchange.py | 12 ++++++++++-- tests/exchange/test_exchange.py | 9 +++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 717844db7..e71e374a1 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -3808,8 +3808,16 @@ class Exchange: combined = mark_rates.merge( funding_rates, on="date", how="left", suffixes=["_mark", "_fund"] ) - combined["open_fund"] = combined["open_fund"].fillna(futures_funding_rate) - return combined[relevant_cols] + # Fill only leading missing funding rates so gaps stay untouched + first_valid_idx = combined["open_fund"].first_valid_index() + if first_valid_idx is None: + combined["open_fund"] = futures_funding_rate + else: + is_leading_na = (combined.index <= first_valid_idx) & combined[ + "open_fund" + ].isna() + combined.loc[is_leading_na, "open_fund"] = futures_funding_rate + return combined[relevant_cols].dropna() def calculate_funding_fees( self, diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 8d7e0b0d8..4daeb1855 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -5350,11 +5350,12 @@ def test_combine_funding_and_mark( df = exchange.combine_funding_and_mark(funding_rates, mark_rates, futures_funding_rate) if futures_funding_rate is not None: - assert len(df) == 3 + assert len(df) == 2 assert df.iloc[0]["open_fund"] == funding_rate - assert df.iloc[1]["open_fund"] == futures_funding_rate - assert df.iloc[2]["open_fund"] == funding_rate - assert df["date"].to_list() == [prior2_date, prior_date, trade_date] + # assert df.iloc[1]["open_fund"] == futures_funding_rate + assert df.iloc[-1]["open_fund"] == funding_rate + # Mid-candle is dropped ... + assert df["date"].to_list() == [prior2_date, trade_date] else: assert len(df) == 2 assert df["date"].to_list() == [prior2_date, trade_date] From d41acc77f7c4ec9df01b83e8e86423a42a7f678d Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 3 Dec 2025 06:55:56 +0100 Subject: [PATCH 156/243] fix: floor funding-rate to seconds to account for slight time offset --- freqtrade/data/history/datahandlers/idatahandler.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/freqtrade/data/history/datahandlers/idatahandler.py b/freqtrade/data/history/datahandlers/idatahandler.py index 67ae386c6..2727d1a64 100644 --- a/freqtrade/data/history/datahandlers/idatahandler.py +++ b/freqtrade/data/history/datahandlers/idatahandler.py @@ -397,6 +397,9 @@ class IDataHandler(ABC): pairdf = self._ohlcv_load( pair, timeframe, timerange=timerange_startup, candle_type=candle_type ) + if not pairdf.empty and candle_type == CandleType.FUNDING_RATE: + # Funding rate data is sometimes off by a couple of ms - floor to seconds + pairdf["date"] = pairdf["date"].dt.floor("s") if self._check_empty_df(pairdf, pair, timeframe, candle_type, warn_no_data): return pairdf else: From 41a82eff21b72e21b2f715a5eab3d0541040df66 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 3 Dec 2025 18:10:16 +0100 Subject: [PATCH 157/243] fix: don't fill up funding fee data Data Timeframes are arbitrary and may vary between pairs or time ranges --- freqtrade/optimize/backtesting.py | 1 + 1 file changed, 1 insertion(+) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index fd78162db..e3e340a1b 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -374,6 +374,7 @@ class Backtesting: timerange=self.timerange, startup_candles=0, fail_without_data=True, + fill_up_missing=False, data_format=self.config["dataformat_ohlcv"], candle_type=CandleType.FUNDING_RATE, ) From 417a0817a7774a6ee48929c11bd71c69edc21aa1 Mon Sep 17 00:00:00 2001 From: stremblayiOS Date: Fri, 5 Dec 2025 18:25:53 +0100 Subject: [PATCH 158/243] Fix IndexError in fetch_positions for Hyperliquid when no pair specified ## Summary Fix IndexError crash in fetch_positions() when initializing wallets on Hyperliquid exchange. ## Quick changelog - Changed fetch_positions to pass None instead of empty list when no specific pair is requested - Fixes compatibility with Hyperliquid CCXT implementation that expects None for all positions ## What's new? When fetch_positions() is called without a specific pair parameter, the code was passing an empty list [] to the CCXT API. For Hyperliquid exchange, this causes an IndexError because the exchange's implementation attempts to access symbols[0] without checking if the list is empty. The CCXT standard is to pass None (not an empty list) when requesting all positions. This change aligns the code with the CCXT API convention and prevents the crash on Hyperliquid during wallet initialization. Error that was occurring: ``` IndexError: list index out of range at /root/freqtrade/.venv/lib/python3.11/site-packages/ccxt/hyperliquid.py:3051 market = self.market(symbols[0]) ``` This change does not use AI-generated code. --- freqtrade/exchange/exchange.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 717844db7..9c88a32bb 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1834,9 +1834,9 @@ class Exchange: if self._config["dry_run"] or self.trading_mode != TradingMode.FUTURES: return [] try: - symbols = [] + symbols = None if pair: - symbols.append(pair) + symbols = [pair] positions: list[CcxtPosition] = self._api.fetch_positions(symbols) self._log_exchange_response("fetch_positions", positions) return positions From 1ae5310d2fb40630ec673748207f78d1437ecbcb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Dec 2025 18:27:27 +0000 Subject: [PATCH 159/243] chore(deps): bump urllib3 from 2.5.0 to 2.6.0 Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.5.0 to 2.6.0. - [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.5.0...2.6.0) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.6.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e75918c88..f4099ca05 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.5.0 +urllib3==2.6.0 certifi==2025.11.12 jsonschema==4.25.1 tabulate==0.9.0 From 2845568f61459fb9378c3299f988085611d9bea1 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 5 Dec 2025 20:32:56 +0100 Subject: [PATCH 160/243] feat: limit funding_fee renaming to rename from low to high. --- freqtrade/data/history/datahandlers/idatahandler.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/freqtrade/data/history/datahandlers/idatahandler.py b/freqtrade/data/history/datahandlers/idatahandler.py index 2727d1a64..9e7d9de3a 100644 --- a/freqtrade/data/history/datahandlers/idatahandler.py +++ b/freqtrade/data/history/datahandlers/idatahandler.py @@ -511,8 +511,15 @@ class IDataHandler(ABC): Applies to bybit and okx, where funding-fee and mark candles have different timeframes. """ paircombs = self.ohlcv_get_available_data(self._datadir, TradingMode.FUTURES) + ff_timeframe_s = timeframe_to_seconds(ff_timeframe) + funding_rate_combs = [ - f for f in paircombs if f[2] == CandleType.FUNDING_RATE and f[1] != ff_timeframe + f + for f in paircombs + if f[2] == CandleType.FUNDING_RATE + and f[1] != ff_timeframe + # Only allow smaller timeframes to move from smaller to larger timeframes + and timeframe_to_seconds(f[1]) < ff_timeframe_s ] if funding_rate_combs: From 3f0be5e41fc9b76148c2adb06d8994a4f29eae5b Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Dec 2025 13:42:16 +0100 Subject: [PATCH 161/243] fix: floor timestamp to seconds no candle has more than second precision. --- freqtrade/data/converter/converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/data/converter/converter.py b/freqtrade/data/converter/converter.py index 4331519c2..290461d39 100644 --- a/freqtrade/data/converter/converter.py +++ b/freqtrade/data/converter/converter.py @@ -38,7 +38,7 @@ def ohlcv_to_dataframe( cols = DEFAULT_DATAFRAME_COLUMNS df = DataFrame(ohlcv, columns=cols) - df["date"] = to_datetime(df["date"], unit="ms", utc=True) + df["date"] = to_datetime(df["date"], unit="ms", utc=True).dt.floor("s") # Some exchanges return int values for Volume and even for OHLC. # Convert them since TA-LIB indicators used in the strategy assume floats From 07fbf2b4672949c43f01c47b113d59cd61749cf6 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Dec 2025 13:46:27 +0100 Subject: [PATCH 162/243] feat: support dynamic funding fees in dry/live mode --- freqtrade/exchange/exchange.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index e71e374a1..b41d1a9fb 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -2744,7 +2744,11 @@ class Exchange: has_cache = cache and (pair, timeframe, c_type) in self._klines # in case of existing cache, fill_missing happens after concatenation ohlcv_df = ohlcv_to_dataframe( - ticks, timeframe, pair=pair, fill_missing=not has_cache, drop_incomplete=drop_incomplete + ticks, + timeframe, + pair=pair, + fill_missing=not has_cache and c_type != CandleType.FUNDING_RATE, + drop_incomplete=drop_incomplete, ) # keeping parsed dataframe in cache if cache: @@ -2755,7 +2759,7 @@ class Exchange: concat([old, ohlcv_df], axis=0), timeframe, pair, - fill_missing=True, + fill_missing=c_type != CandleType.FUNDING_RATE, drop_incomplete=False, ) candle_limit = self.ohlcv_candle_limit(timeframe, self._config["candle_type_def"]) From 17009ac59f539869b687bd2103c8c33d4e4d9bea Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Dec 2025 13:53:18 +0100 Subject: [PATCH 163/243] chore: allow non-matching funding timeframe - as timeframe doesn't actually matter any longer. --- freqtrade/exchange/exchange.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index b41d1a9fb..381a05044 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -2698,7 +2698,7 @@ class Exchange: CandleType.SPOT, CandleType.FUTURES, ) - if invalid_timeframe or invalid_funding: + if invalid_timeframe: timeframes_ = ( ", ".join(self.timeframes) if candle_type != CandleType.FUNDING_RATE @@ -2710,6 +2710,13 @@ class Exchange: f"{timeframes_}." ) continue + if invalid_funding: + # TODO: does this message make sense? would docs be better? + # if any, this should be cached to avoid log spam! + logger.warning( + f"Wrong funding rate timeframe {timeframe} for pair {pair}, " + f"downloading {self.get_option('funding_fee_timeframe')} instead." + ) if ( (pair, timeframe, candle_type) not in self._klines From b70f10dca61f701ab1bae112abbde05d6a55d7a9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Dec 2025 14:06:17 +0100 Subject: [PATCH 164/243] chore: simplify warning formatting --- freqtrade/exchange/exchange.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 381a05044..79956e4a0 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -2699,15 +2699,10 @@ class Exchange: CandleType.FUTURES, ) if invalid_timeframe: - timeframes_ = ( - ", ".join(self.timeframes) - if candle_type != CandleType.FUNDING_RATE - else self.get_option("funding_fee_timeframe") - ) logger.warning( f"Cannot download ({pair}, {timeframe}, {candle_type}) combination as this " f"timeframe is not available on {self.name}. Available timeframes are " - f"{timeframes_}." + f"{', '.join(self.timeframes)}." ) continue if invalid_funding: From 730383ab180b7c6d442e63b846ac56894f14d11f Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Dec 2025 14:13:41 +0100 Subject: [PATCH 165/243] feat: auto-download correct funding rate timeframe --- freqtrade/exchange/exchange.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 79956e4a0..dd335b784 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -2690,10 +2690,16 @@ class Exchange: input_coroutines: list[Coroutine[Any, Any, OHLCVResponse]] = [] cached_pairs = [] for pair, timeframe, candle_type in set(pair_list): - invalid_funding = ( - candle_type == CandleType.FUNDING_RATE - and timeframe != self.get_option("funding_fee_timeframe") - ) + if candle_type == CandleType.FUNDING_RATE and timeframe != ( + ff_tf := self.get_option("funding_fee_timeframe") + ): + # TODO: does this message make sense? would docs be better? + # if any, this should be cached to avoid log spam! + logger.warning( + f"Wrong funding rate timeframe {timeframe} for pair {pair}, " + f"downloading {ff_tf} instead." + ) + timeframe = ff_tf invalid_timeframe = timeframe not in self.timeframes and candle_type in ( CandleType.SPOT, CandleType.FUTURES, @@ -2705,13 +2711,6 @@ class Exchange: f"{', '.join(self.timeframes)}." ) continue - if invalid_funding: - # TODO: does this message make sense? would docs be better? - # if any, this should be cached to avoid log spam! - logger.warning( - f"Wrong funding rate timeframe {timeframe} for pair {pair}, " - f"downloading {self.get_option('funding_fee_timeframe')} instead." - ) if ( (pair, timeframe, candle_type) not in self._klines From 3bd911982fe850fcbd49e7a5c3c4d3a3992fabb9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Dec 2025 14:13:53 +0100 Subject: [PATCH 166/243] feat: add get_funding_rate_timeframe to dataprovider --- freqtrade/data/dataprovider.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/freqtrade/data/dataprovider.py b/freqtrade/data/dataprovider.py index dfab29c08..311086f3b 100644 --- a/freqtrade/data/dataprovider.py +++ b/freqtrade/data/dataprovider.py @@ -620,3 +620,12 @@ class DataProvider: except ExchangeError: logger.warning(f"Could not fetch market data for {pair}. Assuming no delisting.") return None + + def get_funding_rate_timeframe(self) -> str: + """ + Get the funding rate timeframe from exchange options + :return: Timeframe string + """ + if self._exchange is None: + raise OperationalException(NO_EXCHANGE_EXCEPTION) + return self._exchange.get_option("funding_fee_timeframe") From 40f4ff04c267ecc296de228eea84fa41e27aaa94 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Dec 2025 14:16:27 +0100 Subject: [PATCH 167/243] feat: auto-fix invalid funding rate timeframe in informative decorator --- freqtrade/strategy/informative_decorator.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/freqtrade/strategy/informative_decorator.py b/freqtrade/strategy/informative_decorator.py index ac9a2a1ad..7c7edb973 100644 --- a/freqtrade/strategy/informative_decorator.py +++ b/freqtrade/strategy/informative_decorator.py @@ -104,8 +104,11 @@ def _create_and_merge_informative_pair( ): asset = inf_data.asset or "" timeframe = inf_data.timeframe + timeframe1 = inf_data.timeframe fmt = inf_data.fmt candle_type = inf_data.candle_type + if candle_type == CandleType.FUNDING_RATE: + timeframe1 = strategy.dp.get_funding_rate_timeframe() config = strategy.config @@ -132,10 +135,10 @@ def _create_and_merge_informative_pair( fmt = "{base}_{quote}_" + fmt # Informatives of other pairs inf_metadata = {"pair": asset, "timeframe": timeframe} - inf_dataframe = strategy.dp.get_pair_dataframe(asset, timeframe, candle_type) + inf_dataframe = strategy.dp.get_pair_dataframe(asset, timeframe1, candle_type) if inf_dataframe.empty: raise ValueError( - f"Informative dataframe for ({asset}, {timeframe}, {candle_type}) is empty. " + f"Informative dataframe for ({asset}, {timeframe1}, {candle_type}) is empty. " "Can't populate informative indicators." ) inf_dataframe = populate_indicators_fn(strategy, inf_dataframe, inf_metadata) @@ -163,7 +166,7 @@ def _create_and_merge_informative_pair( dataframe, inf_dataframe, strategy.timeframe, - timeframe, + timeframe1, ffill=inf_data.ffill, append_timeframe=False, date_column=date_column, From 3ca8e0fb5c9f47a3f2cadcf90d4d0cdf70734821 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Dec 2025 15:42:40 +0100 Subject: [PATCH 168/243] feat: auto-adjust funding rate timeframe in dataprovider --- freqtrade/data/dataprovider.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/freqtrade/data/dataprovider.py b/freqtrade/data/dataprovider.py index 311086f3b..bd5a7a5ba 100644 --- a/freqtrade/data/dataprovider.py +++ b/freqtrade/data/dataprovider.py @@ -348,6 +348,22 @@ class DataProvider: ) return total_candles + def __fix_funding_rate_timeframe( + self, pair: str, timeframe: str | None, candle_type: str + ) -> str: + if ( + candle_type == CandleType.FUNDING_RATE + and (ff_tf := self.get_funding_rate_timeframe()) != timeframe + ): + # TODO: does this message make sense? might be pointless as funding fees don't + # have a timeframe + logger.warning( + f"{pair}, {timeframe} requested - funding rate timeframe not matching {ff_tf}. " + ) + return ff_tf + + return timeframe + def get_pair_dataframe( self, pair: str, timeframe: str | None = None, candle_type: str = "" ) -> DataFrame: @@ -361,6 +377,7 @@ class DataProvider: :return: Dataframe for this pair :param candle_type: '', mark, index, premiumIndex, or funding_rate """ + timeframe = self.__fix_funding_rate_timeframe(pair, timeframe, candle_type) if self.runmode in (RunMode.DRY_RUN, RunMode.LIVE): # Get live OHLCV data. data = self.ohlcv(pair=pair, timeframe=timeframe, candle_type=candle_type) From 4897080827da16cd50f9199f3a3841f69252408e Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Dec 2025 15:53:27 +0100 Subject: [PATCH 169/243] fix: bybit's minimal funding fee interval to 1h --- freqtrade/exchange/bybit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/bybit.py b/freqtrade/exchange/bybit.py index 300344e19..3ca44edbe 100644 --- a/freqtrade/exchange/bybit.py +++ b/freqtrade/exchange/bybit.py @@ -38,8 +38,8 @@ class Bybit(Exchange): } _ft_has_futures: FtHas = { "ohlcv_has_history": True, - "mark_ohlcv_timeframe": "4h", - "funding_fee_timeframe": "8h", + "mark_ohlcv_timeframe": "1h", + "funding_fee_timeframe": "1h", "funding_fee_candle_limit": 200, "stoploss_on_exchange": True, "stoploss_order_types": {"limit": "limit", "market": "market"}, From cf6b7a847b7c826ec795c1ba06224384b6c0ba26 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Dec 2025 16:01:05 +0100 Subject: [PATCH 170/243] fix: bitget's minimal funding fee interval is 1h --- freqtrade/exchange/bitget.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/freqtrade/exchange/bitget.py b/freqtrade/exchange/bitget.py index 3351cda88..aba2aa9b9 100644 --- a/freqtrade/exchange/bitget.py +++ b/freqtrade/exchange/bitget.py @@ -35,7 +35,8 @@ class Bitget(Exchange): "order_time_in_force": ["GTC", "FOK", "IOC", "PO"], } _ft_has_futures: FtHas = { - "mark_ohlcv_timeframe": "4h", + "mark_ohlcv_timeframe": "1h", + "funding_fee_timeframe": "1h", "funding_fee_candle_limit": 100, "has_delisting": True, } From 01b0a8fa42c42e48a7f3c1992190ddd2030f5642 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Dec 2025 16:15:32 +0100 Subject: [PATCH 171/243] fix: 1h should be the default for funding/mark candles --- freqtrade/exchange/bitget.py | 2 -- freqtrade/exchange/bybit.py | 2 -- freqtrade/exchange/exchange.py | 4 ++-- freqtrade/exchange/hyperliquid.py | 1 - freqtrade/exchange/kraken.py | 1 - freqtrade/exchange/okx.py | 2 -- 6 files changed, 2 insertions(+), 10 deletions(-) diff --git a/freqtrade/exchange/bitget.py b/freqtrade/exchange/bitget.py index aba2aa9b9..f0da55cb0 100644 --- a/freqtrade/exchange/bitget.py +++ b/freqtrade/exchange/bitget.py @@ -35,8 +35,6 @@ class Bitget(Exchange): "order_time_in_force": ["GTC", "FOK", "IOC", "PO"], } _ft_has_futures: FtHas = { - "mark_ohlcv_timeframe": "1h", - "funding_fee_timeframe": "1h", "funding_fee_candle_limit": 100, "has_delisting": True, } diff --git a/freqtrade/exchange/bybit.py b/freqtrade/exchange/bybit.py index 3ca44edbe..0184c6c42 100644 --- a/freqtrade/exchange/bybit.py +++ b/freqtrade/exchange/bybit.py @@ -38,8 +38,6 @@ class Bybit(Exchange): } _ft_has_futures: FtHas = { "ohlcv_has_history": True, - "mark_ohlcv_timeframe": "1h", - "funding_fee_timeframe": "1h", "funding_fee_candle_limit": 200, "stoploss_on_exchange": True, "stoploss_order_types": {"limit": "limit", "market": "market"}, diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index dd335b784..b5b2bff89 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -153,8 +153,8 @@ class Exchange: "l2_limit_range_required": True, # Allow Empty L2 limit (kucoin) "l2_limit_upper": None, # Upper limit for L2 limit "mark_ohlcv_price": "mark", - "mark_ohlcv_timeframe": "8h", - "funding_fee_timeframe": "8h", + "mark_ohlcv_timeframe": "1h", + "funding_fee_timeframe": "1h", "ccxt_futures_name": "swap", "needs_trading_fees": False, # use fetch_trading_fees to cache fees "order_props_in_contracts": ["amount", "filled", "remaining"], diff --git a/freqtrade/exchange/hyperliquid.py b/freqtrade/exchange/hyperliquid.py index 212505b72..c72b79755 100644 --- a/freqtrade/exchange/hyperliquid.py +++ b/freqtrade/exchange/hyperliquid.py @@ -37,7 +37,6 @@ class Hyperliquid(Exchange): "stoploss_order_types": {"limit": "limit"}, "stoploss_blocks_assets": False, "stop_price_prop": "stopPrice", - "funding_fee_timeframe": "1h", "funding_fee_candle_limit": 500, "uses_leverage_tiers": False, } diff --git a/freqtrade/exchange/kraken.py b/freqtrade/exchange/kraken.py index 1f8b3cc26..60efdf954 100644 --- a/freqtrade/exchange/kraken.py +++ b/freqtrade/exchange/kraken.py @@ -35,7 +35,6 @@ class Kraken(Exchange): "trades_pagination_arg": "since", "trades_pagination_overlap": False, "trades_has_history": True, - "mark_ohlcv_timeframe": "4h", } _supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [ diff --git a/freqtrade/exchange/okx.py b/freqtrade/exchange/okx.py index c8c1130e5..07760bd32 100644 --- a/freqtrade/exchange/okx.py +++ b/freqtrade/exchange/okx.py @@ -29,8 +29,6 @@ class Okx(Exchange): _ft_has: FtHas = { "ohlcv_candle_limit": 100, # Warning, special case with data prior to X months - "mark_ohlcv_timeframe": "4h", - "funding_fee_timeframe": "8h", "stoploss_order_types": {"limit": "limit"}, "stoploss_on_exchange": True, "trades_has_history": False, # Endpoint doesn't have a "since" parameter From 597cc0592b1f1ff545bab6a24b04a492554f4740 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Dec 2025 20:08:35 +0100 Subject: [PATCH 172/243] test: update funding_rate_migration test --- ...her => XRP_USDT_USDT-1h-funding_rate.feather} | Bin tests/util/test_funding_rate_migration.py | 15 ++++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) rename tests/testdata/futures/{XRP_USDT_USDT-8h-funding_rate.feather => XRP_USDT_USDT-1h-funding_rate.feather} (100%) diff --git a/tests/testdata/futures/XRP_USDT_USDT-8h-funding_rate.feather b/tests/testdata/futures/XRP_USDT_USDT-1h-funding_rate.feather similarity index 100% rename from tests/testdata/futures/XRP_USDT_USDT-8h-funding_rate.feather rename to tests/testdata/futures/XRP_USDT_USDT-1h-funding_rate.feather diff --git a/tests/util/test_funding_rate_migration.py b/tests/util/test_funding_rate_migration.py index 094ee1562..e81462ba4 100644 --- a/tests/util/test_funding_rate_migration.py +++ b/tests/util/test_funding_rate_migration.py @@ -5,13 +5,14 @@ from freqtrade.util.migrations import migrate_funding_fee_timeframe def test_migrate_funding_rate_timeframe(default_conf_usdt, tmp_path, testdatadir): copytree(testdatadir / "futures", tmp_path / "futures") - file_4h = tmp_path / "futures" / "XRP_USDT_USDT-4h-funding_rate.feather" - file_8h = tmp_path / "futures" / "XRP_USDT_USDT-8h-funding_rate.feather" + file_30m = tmp_path / "futures" / "XRP_USDT_USDT-30m-funding_rate.feather" + file_1h_fr = tmp_path / "futures" / "XRP_USDT_USDT-1h-funding_rate.feather" + file_1h_fr = tmp_path / "futures" / "XRP_USDT_USDT-1h-funding_rate.feather" file_1h = tmp_path / "futures" / "XRP_USDT_USDT-1h-futures.feather" - file_8h.rename(file_4h) + file_1h_fr.rename(file_30m) assert file_1h.exists() - assert file_4h.exists() - assert not file_8h.exists() + assert file_30m.exists() + assert not file_1h_fr.exists() default_conf_usdt["datadir"] = tmp_path @@ -22,7 +23,7 @@ def test_migrate_funding_rate_timeframe(default_conf_usdt, tmp_path, testdatadir migrate_funding_fee_timeframe(default_conf_usdt, None) - assert not file_4h.exists() - assert file_8h.exists() + assert not file_30m.exists() + assert file_1h_fr.exists() # futures files is untouched. assert file_1h.exists() From 5110d0bddedcfca5da8b0adab54e44bed0d9ccb8 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 7 Dec 2025 15:12:42 +0100 Subject: [PATCH 173/243] test: update a couple of tests for new behavior --- tests/data/test_datahandler.py | 2 +- tests/data/test_history.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/data/test_datahandler.py b/tests/data/test_datahandler.py index 6110d17b8..e9fa95610 100644 --- a/tests/data/test_datahandler.py +++ b/tests/data/test_datahandler.py @@ -127,7 +127,7 @@ def test_datahandler_ohlcv_get_available_data(testdatadir): ("XRP/USDT:USDT", "1h", "futures"), ("XRP/USDT:USDT", "1h", "mark"), ("XRP/USDT:USDT", "8h", "mark"), - ("XRP/USDT:USDT", "8h", "funding_rate"), + ("XRP/USDT:USDT", "1h", "funding_rate"), } paircombs = JsonGzDataHandler.ohlcv_get_available_data(testdatadir, TradingMode.SPOT) diff --git a/tests/data/test_history.py b/tests/data/test_history.py index 115e73192..32dc33f07 100644 --- a/tests/data/test_history.py +++ b/tests/data/test_history.py @@ -579,8 +579,8 @@ def test_refresh_backtest_ohlcv_data( assert log_has_re(r"Downloading pair ETH/BTC, .* interval 1m\.", caplog) if trademode == "futures": - assert log_has_re(r"Downloading pair ETH/BTC, funding_rate, interval 8h\.", caplog) - assert log_has_re(r"Downloading pair ETH/BTC, mark, interval 4h\.", caplog) + assert log_has_re(r"Downloading pair ETH/BTC, funding_rate, interval 1h\.", caplog) + assert log_has_re(r"Downloading pair ETH/BTC, mark, interval 1h\.", caplog) # Test with only one pair - no parallel download should happen 1 pair/timeframe combination # doesn't justify parallelization From acc69e0d2e9cde65d1e16ff3001414ad70cfc5b4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 7 Dec 2025 15:59:45 +0100 Subject: [PATCH 174/243] test: fix a couple more tests --- tests/data/test_datahandler.py | 1 - tests/optimize/test_backtesting.py | 13 ++++++------- .../futures/XRP_USDT_USDT-8h-mark.feather | Bin 7594 -> 0 bytes 3 files changed, 6 insertions(+), 8 deletions(-) delete mode 100644 tests/testdata/futures/XRP_USDT_USDT-8h-mark.feather diff --git a/tests/data/test_datahandler.py b/tests/data/test_datahandler.py index e9fa95610..9d40bf5cb 100644 --- a/tests/data/test_datahandler.py +++ b/tests/data/test_datahandler.py @@ -126,7 +126,6 @@ def test_datahandler_ohlcv_get_available_data(testdatadir): ("XRP/USDT:USDT", "5m", "futures"), ("XRP/USDT:USDT", "1h", "futures"), ("XRP/USDT:USDT", "1h", "mark"), - ("XRP/USDT:USDT", "8h", "mark"), ("XRP/USDT:USDT", "1h", "funding_rate"), } diff --git a/tests/optimize/test_backtesting.py b/tests/optimize/test_backtesting.py index b1d13756f..bbf55d2bc 100644 --- a/tests/optimize/test_backtesting.py +++ b/tests/optimize/test_backtesting.py @@ -970,8 +970,8 @@ def test_backtest_one_detail(default_conf_usdt, mocker, testdatadir, use_detail) @pytest.mark.parametrize( "use_detail,exp_funding_fee, exp_ff_updates", [ - (True, -0.018054162, 10), - (False, -0.01780296, 6), + (True, -0.0180457882, 15), + (False, -0.0178000543, 12), ], ) def test_backtest_one_detail_futures( @@ -1081,8 +1081,8 @@ def test_backtest_one_detail_futures( @pytest.mark.parametrize( "use_detail,entries,max_stake,ff_updates,expected_ff", [ - (True, 50, 3000, 55, -1.18038144), - (False, 6, 360, 11, -0.14679994), + (True, 50, 3000, 78, -1.17988972), + (False, 6, 360, 34, -0.14673681), ], ) def test_backtest_one_detail_futures_funding_fees( @@ -2382,13 +2382,12 @@ def test_backtest_start_nomock_futures(default_conf_usdt, mocker, caplog, testda f"Using data directory: {testdatadir} ...", "Loading data from 2021-11-17 01:00:00 up to 2021-11-21 04:00:00 (4 days).", "Backtesting with data from 2021-11-17 21:00:00 up to 2021-11-21 04:00:00 (3 days).", - "XRP/USDT:USDT, funding_rate, 8h, data starts at 2021-11-18 00:00:00", - "XRP/USDT:USDT, mark, 8h, data starts at 2021-11-18 00:00:00", + "XRP/USDT:USDT, funding_rate, 1h, data starts at 2021-11-18 00:00:00", f"Running backtesting for Strategy {CURRENT_TEST_STRATEGY}", ] for line in exists: - assert log_has(line, caplog) + assert log_has(line, caplog), line captured = capsys.readouterr() assert "BACKTESTING REPORT" in captured.out diff --git a/tests/testdata/futures/XRP_USDT_USDT-8h-mark.feather b/tests/testdata/futures/XRP_USDT_USDT-8h-mark.feather deleted file mode 100644 index f41502690473eada1348441973210c9d7fc0350f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7594 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 Date: Sun, 7 Dec 2025 16:11:47 +0100 Subject: [PATCH 175/243] test: update further tests --- tests/commands/test_commands.py | 4 ++-- tests/util/test_binance_mig.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/commands/test_commands.py b/tests/commands/test_commands.py index a1e541bd1..40127275b 100644 --- a/tests/commands/test_commands.py +++ b/tests/commands/test_commands.py @@ -1801,10 +1801,10 @@ def test_start_list_data(testdatadir, capsys): start_list_data(pargs) captured = capsys.readouterr() - assert "Found 6 pair / timeframe combinations." in captured.out + assert "Found 5 pair / timeframe combinations." in captured.out assert re.search(r".*Pair.*Timeframe.*Type.*\n", captured.out) assert re.search(r"\n.* XRP/USDT:USDT .* 5m, 1h .* futures |\n", captured.out) - assert re.search(r"\n.* XRP/USDT:USDT .* 1h, 8h .* mark |\n", captured.out) + assert re.search(r"\n.* XRP/USDT:USDT .* 1h.* mark |\n", captured.out) args = [ "list-data", diff --git a/tests/util/test_binance_mig.py b/tests/util/test_binance_mig.py index f700ff73a..db3d8b282 100644 --- a/tests/util/test_binance_mig.py +++ b/tests/util/test_binance_mig.py @@ -20,8 +20,8 @@ def test_binance_mig_data_conversion(default_conf_usdt, tmp_path, testdatadir): files = [ "-1h-mark.feather", "-1h-futures.feather", - "-8h-funding_rate.feather", - "-8h-mark.feather", + "-1h-funding_rate.feather", + "-1h-mark.feather", ] # Copy files to tmpdir and rename to old naming From c1c968666e373e0deb233388dd5ef457a6557a63 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 7 Dec 2025 18:19:22 +0100 Subject: [PATCH 176/243] chore: some minor cleanups --- freqtrade/data/dataprovider.py | 2 +- tests/util/test_funding_rate_migration.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/freqtrade/data/dataprovider.py b/freqtrade/data/dataprovider.py index bd5a7a5ba..9c740709c 100644 --- a/freqtrade/data/dataprovider.py +++ b/freqtrade/data/dataprovider.py @@ -358,7 +358,7 @@ class DataProvider: # TODO: does this message make sense? might be pointless as funding fees don't # have a timeframe logger.warning( - f"{pair}, {timeframe} requested - funding rate timeframe not matching {ff_tf}. " + f"{pair}, {timeframe} requested - funding rate timeframe not matching {ff_tf}." ) return ff_tf diff --git a/tests/util/test_funding_rate_migration.py b/tests/util/test_funding_rate_migration.py index e81462ba4..69d603ed0 100644 --- a/tests/util/test_funding_rate_migration.py +++ b/tests/util/test_funding_rate_migration.py @@ -7,7 +7,6 @@ def test_migrate_funding_rate_timeframe(default_conf_usdt, tmp_path, testdatadir copytree(testdatadir / "futures", tmp_path / "futures") file_30m = tmp_path / "futures" / "XRP_USDT_USDT-30m-funding_rate.feather" file_1h_fr = tmp_path / "futures" / "XRP_USDT_USDT-1h-funding_rate.feather" - file_1h_fr = tmp_path / "futures" / "XRP_USDT_USDT-1h-funding_rate.feather" file_1h = tmp_path / "futures" / "XRP_USDT_USDT-1h-futures.feather" file_1h_fr.rename(file_30m) assert file_1h.exists() From e6030b7f59d71348c2107124e39059e3197e0f38 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 7 Dec 2025 20:01:08 +0100 Subject: [PATCH 177/243] chore: minor adjustments for clarity --- freqtrade/data/converter/converter.py | 1 + freqtrade/data/dataprovider.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/freqtrade/data/converter/converter.py b/freqtrade/data/converter/converter.py index 290461d39..99301d291 100644 --- a/freqtrade/data/converter/converter.py +++ b/freqtrade/data/converter/converter.py @@ -38,6 +38,7 @@ def ohlcv_to_dataframe( cols = DEFAULT_DATAFRAME_COLUMNS df = DataFrame(ohlcv, columns=cols) + # Floor date to seconds to account for exchange imprecisions df["date"] = to_datetime(df["date"], unit="ms", utc=True).dt.floor("s") # Some exchanges return int values for Volume and even for OHLC. diff --git a/freqtrade/data/dataprovider.py b/freqtrade/data/dataprovider.py index 9c740709c..ed396ba8e 100644 --- a/freqtrade/data/dataprovider.py +++ b/freqtrade/data/dataprovider.py @@ -350,7 +350,7 @@ class DataProvider: def __fix_funding_rate_timeframe( self, pair: str, timeframe: str | None, candle_type: str - ) -> str: + ) -> str | None: if ( candle_type == CandleType.FUNDING_RATE and (ff_tf := self.get_funding_rate_timeframe()) != timeframe From 412392aea9ff7b2693f5edadde5326c57601a865 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Dec 2025 03:01:42 +0000 Subject: [PATCH 178/243] 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.1 to 1.16.3.2 - [Release notes](https://github.com/scipy/scipy-stubs/releases) - [Commits](https://github.com/scipy/scipy-stubs/compare/v1.16.3.1...v1.16.3.2) --- updated-dependencies: - dependency-name: scipy-stubs dependency-version: 1.16.3.2 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 a9add54c4..869b17cc0 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.1 # keep in sync with `scipy` in `requirements-hyperopt.txt` +scipy-stubs==1.16.3.2 # 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 6540fbb8e784ad352ff16c09ca63cdb2708a023e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Dec 2025 03:02:07 +0000 Subject: [PATCH 179/243] chore(deps): bump fastapi from 0.122.0 to 0.123.0 Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.122.0 to 0.123.0. - [Release notes](https://github.com/fastapi/fastapi/releases) - [Commits](https://github.com/fastapi/fastapi/compare/0.122.0...0.123.0) --- updated-dependencies: - dependency-name: fastapi dependency-version: 0.123.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index f4099ca05..e04f9fec6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -37,7 +37,7 @@ orjson==3.11.4 sdnotify==0.3.2 # API Server -fastapi==0.122.0 +fastapi==0.123.0 pydantic==2.12.5 uvicorn==0.38.0 pyjwt==2.10.1 From cb55ef5c591fd63b818239988af6cdbfe7714bc4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Dec 2025 03:02:14 +0000 Subject: [PATCH 180/243] chore(deps-dev): bump mypy from 1.18.2 to 1.19.0 Bumps [mypy](https://github.com/python/mypy) from 1.18.2 to 1.19.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.18.2...v1.19.0) --- updated-dependencies: - dependency-name: mypy dependency-version: 1.19.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index a9add54c4..a5dca590c 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -7,7 +7,7 @@ -r docs/requirements-docs.txt ruff==0.14.6 -mypy==1.18.2 +mypy==1.19.0 pre-commit==4.5.0 pytest==9.0.1 pytest-asyncio==1.3.0 From f23fad420eac01c89ef186b346d843033ffb8db2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Dec 2025 07:11:06 +0000 Subject: [PATCH 181/243] chore(deps-dev): bump ruff from 0.14.6 to 0.14.7 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.6 to 0.14.7. - [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.6...0.14.7) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.14.7 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 a5dca590c..625b645d7 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.6 +ruff==0.14.7 mypy==1.19.0 pre-commit==4.5.0 pytest==9.0.1 From ebb362d9fa22ecb94e14971b276d8f2e71a43a7a Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 08:16:30 +0100 Subject: [PATCH 182/243] 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 7375708e6..6ee0b73b2 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.1 + - scipy-stubs==1.16.3.2 - SQLAlchemy==2.0.44 # stages: [push] From 62d4da3b94ea7d66d3b3ab0c16e6f04187721b39 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 08:43:50 +0100 Subject: [PATCH 183/243] test: add test for get_funding_rate_timeframe --- tests/data/test_dataprovider.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/data/test_dataprovider.py b/tests/data/test_dataprovider.py index afbba3d5d..aacc41554 100644 --- a/tests/data/test_dataprovider.py +++ b/tests/data/test_dataprovider.py @@ -636,3 +636,21 @@ def test_check_delisting(mocker, default_conf_usdt): assert res == dt_utc(2025, 10, 2) assert delist_mock2.call_count == 1 + + +def test_get_funding_rate_timeframe(mocker, default_conf_usdt): + default_conf_usdt["trading_mode"] = "futures" + default_conf_usdt["margin_mode"] = "isolated" + exchange = get_patched_exchange(mocker, default_conf_usdt) + mock_get_option = mocker.spy(exchange, "get_option") + dp = DataProvider(default_conf_usdt, exchange) + + assert dp.get_funding_rate_timeframe() == "1h" + mock_get_option.assert_called_once_with("funding_fee_timeframe") + + +def test_get_funding_rate_timeframe_no_exchange(default_conf_usdt): + dp = DataProvider(default_conf_usdt, None) + + with pytest.raises(OperationalException, match=r"Exchange is not available to DataProvider."): + dp.get_funding_rate_timeframe() From 0ec1066b347256da8fbc668fcdecb729476f09ea Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 08:48:37 +0100 Subject: [PATCH 184/243] test: add test for funding_rate fix --- tests/data/test_dataprovider.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/tests/data/test_dataprovider.py b/tests/data/test_dataprovider.py index aacc41554..d3bd5fb98 100644 --- a/tests/data/test_dataprovider.py +++ b/tests/data/test_dataprovider.py @@ -9,7 +9,7 @@ from freqtrade.enums import CandleType, RunMode from freqtrade.exceptions import ExchangeError, OperationalException from freqtrade.plugins.pairlistmanager import PairListManager from freqtrade.util import dt_utc -from tests.conftest import EXMS, generate_test_data, get_patched_exchange +from tests.conftest import EXMS, generate_test_data, get_patched_exchange, log_has_re @pytest.mark.parametrize( @@ -185,6 +185,28 @@ def test_get_pair_dataframe(mocker, default_conf, ohlcv_history, candle_type): assert len(df) == 2 # ohlcv_history is limited to 2 rows now +def test_get_pair_dataframe_funding_rate(mocker, default_conf, ohlcv_history, caplog): + default_conf["runmode"] = RunMode.DRY_RUN + timeframe = "1h" + exchange = get_patched_exchange(mocker, default_conf) + candletype = CandleType.FUNDING_RATE + exchange._klines[("XRP/BTC", timeframe, candletype)] = ohlcv_history + exchange._klines[("UNITTEST/BTC", timeframe, candletype)] = ohlcv_history + + dp = DataProvider(default_conf, exchange) + assert dp.runmode == RunMode.DRY_RUN + assert ohlcv_history.equals( + dp.get_pair_dataframe("UNITTEST/BTC", timeframe, candle_type="funding_rate") + ) + msg = r".*funding rate timeframe not matching" + assert not log_has_re(msg, caplog) + + assert ohlcv_history.equals( + dp.get_pair_dataframe("UNITTEST/BTC", "5h", candle_type="funding_rate") + ) + assert log_has_re(msg, caplog) + + def test_available_pairs(mocker, default_conf, ohlcv_history): exchange = get_patched_exchange(mocker, default_conf) timeframe = default_conf["timeframe"] From f5e6504e22a36c9f2002a859c5960300eb111e34 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 09:11:49 +0100 Subject: [PATCH 185/243] test: add test for funding rate exchange fix --- tests/exchange/test_exchange.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 4daeb1855..030f04452 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -2837,6 +2837,29 @@ def test_refresh_ohlcv_with_cache(mocker, default_conf, time_machine) -> None: assert ohlcv_mock.call_args_list[0][0][0] == pairs +def test_refresh_latest_ohlcv_funding_rate(mocker, default_conf_usdt, caplog) -> None: + ohlcv = generate_test_data_raw("1h", 24, "2025-01-02 12:00:00+00:00") + funding_data = [{"timestamp": x[0], "fundingRate": x[1]} for x in ohlcv] + + caplog.set_level(logging.DEBUG) + exchange = get_patched_exchange(mocker, default_conf_usdt) + exchange._api_async.fetch_ohlcv = get_mock_coro(ohlcv) + exchange._api_async.fetch_funding_rate_history = get_mock_coro(funding_data) + + pairs = [ + ("IOTA/USDT:USDT", "8h", CandleType.FUNDING_RATE), + ("XRP/USDT:USDT", "1h", CandleType.FUNDING_RATE), + ] + # empty dicts + assert not exchange._klines + res = exchange.refresh_latest_ohlcv(pairs, cache=False) + + assert len(res) == len(pairs) + assert log_has_re(r"Wrong funding rate timeframe 8h for pair IOTA/USDT:USDT", caplog) + assert not log_has_re(r"Wrong funding rate timeframe 8h for pair XRP/USDT:USDT", caplog) + assert exchange._api_async.fetch_ohlcv.call_count == 0 + + @pytest.mark.parametrize("exchange_name", EXCHANGES) async def test__async_get_candle_history(default_conf, mocker, caplog, exchange_name): ohlcv = [ From 9f4e167455b533202f10874c19929b442963fadc Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 09:27:48 +0100 Subject: [PATCH 186/243] chore: force keyword usage on refresh_backtest_ohlcv --- freqtrade/data/history/history_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/freqtrade/data/history/history_utils.py b/freqtrade/data/history/history_utils.py index 1467497d6..3e076351b 100644 --- a/freqtrade/data/history/history_utils.py +++ b/freqtrade/data/history/history_utils.py @@ -353,6 +353,7 @@ def _download_pair_history( def refresh_backtest_ohlcv_data( exchange: Exchange, + *, pairs: list[str], timeframes: list[str], datadir: Path, From cde886b8844ed8cd073106172d4ed730f2b859fb Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 10:20:00 +0100 Subject: [PATCH 187/243] chore: use str for safe usage of candle_type --- freqtrade/exchange/exchange.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index b5b2bff89..dfa50a6be 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -2896,7 +2896,7 @@ class Exchange: ) if candle_type and candle_type not in (CandleType.SPOT, CandleType.FUTURES): - params.update({"price": candle_type.value}) + params.update({"price": str(candle_type)}) if candle_type != CandleType.FUNDING_RATE: data = await self._api_async.fetch_ohlcv( pair, timeframe=timeframe, since=since_ms, limit=candle_limit, params=params From e4fc5df1cf0383838e3aac9b0752efcc70845cea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Dec 2025 09:25:30 +0000 Subject: [PATCH 188/243] chore(deps): bump ccxt from 4.5.24 to 4.5.25 Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.5.24 to 4.5.25. - [Release notes](https://github.com/ccxt/ccxt/releases) - [Commits](https://github.com/ccxt/ccxt/compare/v4.5.24...v4.5.25) --- updated-dependencies: - dependency-name: ccxt dependency-version: 4.5.25 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 e04f9fec6..6cd25e43b 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.24 +ccxt==4.5.26 cryptography==46.0.3 aiohttp==3.13.2 SQLAlchemy==2.0.44 From 38e48c0c5ee875f100056b7e48a4eb40403d2aab Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 11:55:26 +0100 Subject: [PATCH 189/243] test: update refresh ohlcv data test --- tests/data/test_history.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/data/test_history.py b/tests/data/test_history.py index 32dc33f07..e09572ad8 100644 --- a/tests/data/test_history.py +++ b/tests/data/test_history.py @@ -534,15 +534,15 @@ def test_validate_backtest_data(default_conf, mocker, caplog, testdatadir) -> No @pytest.mark.parametrize( - "trademode,callcount", + "trademode,callcount, callcount_parallel", [ - ("spot", 4), - ("margin", 4), - ("futures", 8), # Called 8 times - 4 normal, 2 funding and 2 mark/index calls + ("spot", 4, 2), + ("margin", 4, 2), + ("futures", 8, 2), # Called 8 times - 4 normal, 2 funding and 2 mark/index calls ], ) def test_refresh_backtest_ohlcv_data( - mocker, default_conf, markets, caplog, testdatadir, trademode, callcount + mocker, default_conf, markets, caplog, testdatadir, trademode, callcount, callcount_parallel ): caplog.set_level(logging.DEBUG) dl_mock = mocker.patch("freqtrade.data.history.history_utils._download_pair_history") @@ -573,7 +573,8 @@ def test_refresh_backtest_ohlcv_data( ) # Called once per timeframe (as we return an empty dataframe) - assert parallel_mock.call_count == 2 + # called twice for spot/margin and 4 times for futures + assert parallel_mock.call_count == callcount_parallel assert dl_mock.call_count == callcount assert dl_mock.call_args[1]["timerange"].starttype == "date" From 359eba462b23c59136852e14dca1409ba6b6d64d Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 12:45:41 +0100 Subject: [PATCH 190/243] feat: add candle_types argument to download-data --- freqtrade/commands/arguments.py | 1 + freqtrade/data/history/history_utils.py | 70 ++++++++++++++----------- tests/data/test_history.py | 2 +- 3 files changed, 40 insertions(+), 33 deletions(-) diff --git a/freqtrade/commands/arguments.py b/freqtrade/commands/arguments.py index ca3b2b422..d6b326050 100755 --- a/freqtrade/commands/arguments.py +++ b/freqtrade/commands/arguments.py @@ -174,6 +174,7 @@ ARGS_DOWNLOAD_DATA = [ "dataformat_ohlcv", "dataformat_trades", "trading_mode", + "candle_types", "prepend_data", ] diff --git a/freqtrade/data/history/history_utils.py b/freqtrade/data/history/history_utils.py index 3e076351b..5c4bde06d 100644 --- a/freqtrade/data/history/history_utils.py +++ b/freqtrade/data/history/history_utils.py @@ -364,6 +364,7 @@ def refresh_backtest_ohlcv_data( data_format: str | None = None, prepend: bool = False, progress_tracker: CustomProgress | None = None, + candle_types: list[CandleType] | None = None, no_parallel_download: bool = False, ) -> list[str]: """ @@ -376,10 +377,41 @@ def refresh_backtest_ohlcv_data( pairs_not_available = [] fast_candles: dict[PairWithTimeframe, DataFrame] = {} data_handler = get_datahandler(datadir, data_format) - candle_type = CandleType.get_default(trading_mode) + def_candletype = CandleType.SPOT if trading_mode != "futures" else CandleType.FUTURES + if trading_mode != "futures": + # Ignore user passed candle types for non-futures trading + timeframes_with_candletype = [(tf, def_candletype) for tf in timeframes] + else: + # Filter out SPOT candle type for futures trading + candle_types = ( + [ct for ct in candle_types if ct != CandleType.SPOT] if candle_types else None + ) + fr_candle_type = CandleType.from_string(exchange.get_option("mark_ohlcv_price")) + tf_funding_rate = exchange.get_option("funding_fee_timeframe") + tf_mark = exchange.get_option("mark_ohlcv_timeframe") + + if candle_types: + timeframes_with_candletype = [ + (tf, ct) + for ct in candle_types + for tf in timeframes + if ct != CandleType.FUNDING_RATE + ] + else: + # Default behavior + timeframes_with_candletype = [(tf, def_candletype) for tf in timeframes] + timeframes_with_candletype.append((tf_mark, fr_candle_type)) + if not candle_types or CandleType.FUNDING_RATE in candle_types: + # All exchanges need FundingRate for futures trading. + # The timeframe is aligned to the mark-price timeframe. + timeframes_with_candletype.append((tf_funding_rate, CandleType.FUNDING_RATE)) + + logger.debug( + "Downloading %s.", ", ".join(f'"{tf} {ct}"' for tf, ct in timeframes_with_candletype) + ) + with progress_tracker as progress: - tf_length = len(timeframes) if trading_mode != "futures" else len(timeframes) + 2 - timeframe_task = progress.add_task("Timeframe", total=tf_length) + timeframe_task = progress.add_task("Timeframe", total=len(timeframes_with_candletype)) pair_task = progress.add_task("Downloading data...", total=len(pairs)) for pair in pairs: @@ -390,7 +422,7 @@ def refresh_backtest_ohlcv_data( pairs_not_available.append(f"{pair}: Pair not available on exchange.") logger.info(f"Skipping pair {pair}...") continue - for timeframe in timeframes: + for timeframe, candle_type in timeframes_with_candletype: # Get fast candles via parallel method on first loop through per timeframe # and candle type. Downloads all the pairs in the list and stores them. # Also skips if only 1 pair/timeframe combination is scheduled for download. @@ -417,7 +449,7 @@ def refresh_backtest_ohlcv_data( # get the already downloaded pair candles if they exist pair_candles = fast_candles.pop((pair, timeframe, candle_type), None) - progress.update(timeframe_task, description=f"Timeframe {timeframe}") + progress.update(timeframe_task, description=f"Timeframe {timeframe} {candle_type}") logger.debug(f"Downloading pair {pair}, {candle_type}, interval {timeframe}.") _download_pair_history( pair=pair, @@ -433,33 +465,6 @@ def refresh_backtest_ohlcv_data( pair_candles=pair_candles, # optional pass of dataframe of parallel candles ) progress.update(timeframe_task, advance=1) - if trading_mode == "futures": - # Predefined candletype (and timeframe) depending on exchange - # Downloads what is necessary to backtest based on futures data. - tf_mark = exchange.get_option("mark_ohlcv_timeframe") - tf_funding_rate = exchange.get_option("funding_fee_timeframe") - - fr_candle_type = CandleType.from_string(exchange.get_option("mark_ohlcv_price")) - # All exchanges need FundingRate for futures trading. - # The timeframe is aligned to the mark-price timeframe. - combs = ((CandleType.FUNDING_RATE, tf_funding_rate), (fr_candle_type, tf_mark)) - for candle_type_f, tf in combs: - logger.debug(f"Downloading pair {pair}, {candle_type_f}, interval {tf}.") - _download_pair_history( - pair=pair, - datadir=datadir, - exchange=exchange, - timerange=timerange, - data_handler=data_handler, - timeframe=str(tf), - new_pairs_days=new_pairs_days, - candle_type=candle_type_f, - erase=erase, - prepend=prepend, - ) - progress.update( - timeframe_task, advance=1, description=f"Timeframe {candle_type_f}, {tf}" - ) progress.update(pair_task, advance=1) progress.update(timeframe_task, description="Timeframe") @@ -805,6 +810,7 @@ def download_data( trading_mode=config.get("trading_mode", "spot"), prepend=config.get("prepend_data", False), progress_tracker=progress_tracker, + candle_types=config.get("candle_types"), no_parallel_download=config.get("no_parallel_download", False), ) finally: diff --git a/tests/data/test_history.py b/tests/data/test_history.py index e09572ad8..3051a4140 100644 --- a/tests/data/test_history.py +++ b/tests/data/test_history.py @@ -538,7 +538,7 @@ def test_validate_backtest_data(default_conf, mocker, caplog, testdatadir) -> No [ ("spot", 4, 2), ("margin", 4, 2), - ("futures", 8, 2), # Called 8 times - 4 normal, 2 funding and 2 mark/index calls + ("futures", 8, 4), # Called 8 times - 4 normal, 2 funding and 2 mark/index calls ], ) def test_refresh_backtest_ohlcv_data( From 994e61fe4219077e59c6b3e756e189a2736db700 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 13:47:26 +0100 Subject: [PATCH 191/243] feat: add (commented) validation for fetch_*_ohlcv methods --- freqtrade/exchange/common.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/freqtrade/exchange/common.py b/freqtrade/exchange/common.py index 650db19b7..9dc64eb7e 100644 --- a/freqtrade/exchange/common.py +++ b/freqtrade/exchange/common.py @@ -97,6 +97,9 @@ EXCHANGE_HAS_OPTIONAL = [ # 'fetchLeverageTiers', # Futures initialization # 'fetchMarketLeverageTiers', # Futures initialization # 'fetchOpenOrders', 'fetchClosedOrders', # 'fetchOrders', # Refinding balance... + # "fetchPremiumIndexOHLCV", # Futures additional data + # "fetchMarkOHLCV", # Futures additional data + # "fetchIndexOHLCV", # Futures additional data # ccxt.pro "watchOHLCV", ] From c7636734def052466cf666a770cc70be10422568 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 14:29:16 +0100 Subject: [PATCH 192/243] feat: validate supported candle types when downloading data --- freqtrade/data/history/history_utils.py | 2 ++ freqtrade/exchange/exchange.py | 29 +++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/freqtrade/data/history/history_utils.py b/freqtrade/data/history/history_utils.py index 5c4bde06d..d370a80aa 100644 --- a/freqtrade/data/history/history_utils.py +++ b/freqtrade/data/history/history_utils.py @@ -391,6 +391,8 @@ def refresh_backtest_ohlcv_data( tf_mark = exchange.get_option("mark_ohlcv_timeframe") if candle_types: + for ct in candle_types: + exchange.verify_candle_type_support(ct) timeframes_with_candletype = [ (tf, ct) for ct in candle_types diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index dfa50a6be..6dd26c1a3 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -2895,9 +2895,10 @@ class Exchange: timeframe, candle_type=candle_type, since_ms=since_ms ) - if candle_type and candle_type not in (CandleType.SPOT, CandleType.FUTURES): - params.update({"price": str(candle_type)}) if candle_type != CandleType.FUNDING_RATE: + if candle_type and candle_type not in (CandleType.SPOT, CandleType.FUTURES): + self.verify_candle_type_support(candle_type) + params.update({"price": str(candle_type)}) data = await self._api_async.fetch_ohlcv( pair, timeframe=timeframe, since=since_ms, limit=candle_limit, params=params ) @@ -2962,6 +2963,30 @@ class Exchange: data = [[x["timestamp"], x["fundingRate"], 0, 0, 0, 0] for x in data] return data + def verify_candle_type_support(self, candle_type: CandleType) -> None: + """ + Verify that the exchange supports the given candle type. + :param candle_type: CandleType to verify + :raises OperationalException: if the candle type is not supported + """ + if candle_type == CandleType.FUNDING_RATE: + if not self.exchange_has("fetchFundingRateHistory"): + raise OperationalException( + f"Exchange {self._api.name} does not support fetching funding rate history." + ) + elif candle_type not in (CandleType.SPOT, CandleType.FUTURES): + mapping = { + CandleType.MARK: "fetchMarkOHLCV", + CandleType.INDEX: "fetchIndexOHLCV", + CandleType.PREMIUMINDEX: "fetchPremiumIndexOHLCV", + CandleType.FUNDING_RATE: "fetchFundingRateHistory", + } + _method = mapping.get(candle_type, "fetchOHLCV") + if not self.exchange_has(_method): + raise OperationalException( + f"Exchange {self._api.name} does not support fetching {candle_type} candles." + ) + # fetch Trade data stuff def needed_candle_for_trades_ms(self, timeframe: str, candle_type: CandleType) -> int: From f33fd98c8363b35b2d3132f0ad927766387ea2c9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 14:43:12 +0100 Subject: [PATCH 193/243] test: Add test for candle type verification --- tests/exchange/test_exchange.py | 49 ++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 030f04452..422b8033f 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -2388,6 +2388,7 @@ async def test__async_get_historic_ohlcv(default_conf, mocker, caplog, exchange_ 5, # volume (in quote currency) ] ] + mocker.patch(f"{EXMS}.verify_candle_type_support", MagicMock()) exchange = get_patched_exchange(mocker, default_conf, exchange=exchange_name) # Monkey-patch async function exchange._api_async.fetch_ohlcv = get_mock_coro(ohlcv) @@ -2438,6 +2439,7 @@ def test_refresh_latest_ohlcv(mocker, default_conf_usdt, caplog, candle_type) -> ] caplog.set_level(logging.DEBUG) + mocker.patch(f"{EXMS}.verify_candle_type_support", MagicMock()) exchange = get_patched_exchange(mocker, default_conf_usdt) exchange._api_async.fetch_ohlcv = get_mock_coro(ohlcv) @@ -2688,6 +2690,7 @@ def test_refresh_latest_ohlcv_cache(mocker, default_conf, candle_type, time_mach ohlcv = generate_test_data_raw("1h", 100, start.strftime("%Y-%m-%d")) time_machine.move_to(start + timedelta(hours=99, minutes=30)) + mocker.patch(f"{EXMS}.verify_candle_type_support", MagicMock()) exchange = get_patched_exchange(mocker, default_conf) exchange._set_startup_candle_count(default_conf) @@ -5472,8 +5475,13 @@ def test__fetch_and_calculate_funding_fees( api_mock = MagicMock() api_mock.fetch_funding_rate_history = get_mock_coro(return_value=funding_rate_history) api_mock.fetch_ohlcv = get_mock_coro(return_value=mark_ohlcv) - type(api_mock).has = PropertyMock(return_value={"fetchOHLCV": True}) - type(api_mock).has = PropertyMock(return_value={"fetchFundingRateHistory": True}) + type(api_mock).has = PropertyMock( + return_value={ + "fetchFundingRateHistory": True, + "fetchMarkOHLCV": True, + "fetchOHLCV": True, + } + ) ex = get_patched_exchange(mocker, default_conf, api_mock, exchange=exchange) mocker.patch(f"{EXMS}.timeframes", PropertyMock(return_value=["1h", "4h", "8h"])) @@ -5517,8 +5525,13 @@ def test__fetch_and_calculate_funding_fees_datetime_called( api_mock.fetch_funding_rate_history = get_mock_coro( return_value=funding_rate_history_octohourly ) - type(api_mock).has = PropertyMock(return_value={"fetchOHLCV": True}) - type(api_mock).has = PropertyMock(return_value={"fetchFundingRateHistory": True}) + type(api_mock).has = PropertyMock( + return_value={ + "fetchFundingRateHistory": True, + "fetchMarkOHLCV": True, + "fetchOHLCV": True, + } + ) mocker.patch(f"{EXMS}.timeframes", PropertyMock(return_value=["4h", "8h"])) exchange = get_patched_exchange(mocker, default_conf, api_mock, exchange=exchange) d1 = datetime.strptime("2021-08-31 23:00:01 +0000", "%Y-%m-%d %H:%M:%S %z") @@ -6605,3 +6618,31 @@ def test_fetch_funding_rate(default_conf, mocker, exchange_name): with pytest.raises(DependencyException, match=r"Pair XRP/ETH not available"): exchange.fetch_funding_rate(pair="XRP/ETH") + + +def test_verify_candle_type_support(default_conf, mocker): + api_mock = MagicMock() + type(api_mock).has = PropertyMock( + return_value={ + "fetchFundingRateHistory": True, + "fetchIndexOHLCV": True, + "fetchMarkOHLCV": True, + "fetchPremiumIndexOHLCV": False, + } + ) + exchange = get_patched_exchange(mocker, default_conf, api_mock) + + # Should pass + exchange.verify_candle_type_support("futures") + exchange.verify_candle_type_support(CandleType.FUTURES) + exchange.verify_candle_type_support(CandleType.FUNDING_RATE) + exchange.verify_candle_type_support(CandleType.SPOT) + exchange.verify_candle_type_support(CandleType.MARK) + + # Should fail: + + with pytest.raises( + OperationalException, + match=r"Exchange .* does not support fetching premiumindex candles\.", + ): + exchange.verify_candle_type_support(CandleType.PREMIUMINDEX) From 80d5b6e24c8aac5169205289b849c0bc31081535 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 16:22:20 +0100 Subject: [PATCH 194/243] test: minor refactor in online tests --- tests/exchange_online/test_ccxt_compat.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/exchange_online/test_ccxt_compat.py b/tests/exchange_online/test_ccxt_compat.py index 073ce0a38..cc7f37f4a 100644 --- a/tests/exchange_online/test_ccxt_compat.py +++ b/tests/exchange_online/test_ccxt_compat.py @@ -270,11 +270,13 @@ class TestCCXTExchange: assert exch.klines(pair_tf).iloc[-1]["date"] >= timeframe_to_prev_date(timeframe, now) assert exch.klines(pair_tf)["date"].astype(int).iloc[0] // 1e6 == since_ms - def _ccxt__async_get_candle_history(self, exchange, pair, timeframe, candle_type, factor=0.9): + def _ccxt__async_get_candle_history( + self, exchange, pair: str, timeframe: str, candle_type: CandleType, factor: float = 0.9 + ): timeframe_ms = timeframe_to_msecs(timeframe) now = timeframe_to_prev_date(timeframe, datetime.now(UTC)) - for offset in (360, 120, 30, 10, 5, 2): - since = now - timedelta(days=offset) + for offset_days in (360, 120, 30, 10, 5, 2): + since = now - timedelta(days=offset_days) since_ms = int(since.timestamp() * 1000) res = exchange.loop.run_until_complete( @@ -290,7 +292,7 @@ class TestCCXTExchange: candle_count = exchange.ohlcv_candle_limit(timeframe, candle_type, since_ms) * factor candle_count1 = (now.timestamp() * 1000 - since_ms) // timeframe_ms * factor assert len(candles) >= min(candle_count, candle_count1), ( - f"{len(candles)} < {candle_count} in {timeframe}, Offset: {offset} {factor}" + f"{len(candles)} < {candle_count} in {timeframe} {offset_days=} {factor=}" ) # Check if first-timeframe is either the start, or start + 1 assert candles[0][0] == since_ms or (since_ms + timeframe_ms) From 96849fcafe46417452a3dce17230312fefcbdc8f Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 17:01:36 +0100 Subject: [PATCH 195/243] refactor: provide a non-failing check_candle_support method --- freqtrade/exchange/exchange.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 6dd26c1a3..49addd7fe 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -2963,17 +2963,15 @@ class Exchange: data = [[x["timestamp"], x["fundingRate"], 0, 0, 0, 0] for x in data] return data - def verify_candle_type_support(self, candle_type: CandleType) -> None: + def check_candle_type_support(self, candle_type: CandleType) -> bool: """ - Verify that the exchange supports the given candle type. + Check that the exchange supports the given candle type. :param candle_type: CandleType to verify - :raises OperationalException: if the candle type is not supported + :return: True if supported, False otherwise """ if candle_type == CandleType.FUNDING_RATE: if not self.exchange_has("fetchFundingRateHistory"): - raise OperationalException( - f"Exchange {self._api.name} does not support fetching funding rate history." - ) + return False elif candle_type not in (CandleType.SPOT, CandleType.FUTURES): mapping = { CandleType.MARK: "fetchMarkOHLCV", @@ -2983,9 +2981,19 @@ class Exchange: } _method = mapping.get(candle_type, "fetchOHLCV") if not self.exchange_has(_method): - raise OperationalException( - f"Exchange {self._api.name} does not support fetching {candle_type} candles." - ) + return False + return True + + def verify_candle_type_support(self, candle_type: CandleType) -> None: + """ + Verify that the exchange supports the given candle type. + :param candle_type: CandleType to verify + :raises OperationalException: if the candle type is not supported + """ + if not self.check_candle_type_support(candle_type): + raise OperationalException( + f"Exchange {self._api.name} does not support fetching {candle_type} candles." + ) # fetch Trade data stuff From 00f687f3f54681eb21f067349d2032ba6a7c2f99 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 17:07:26 +0100 Subject: [PATCH 196/243] test: test futures data with online exchanges --- tests/exchange_online/test_ccxt_compat.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/exchange_online/test_ccxt_compat.py b/tests/exchange_online/test_ccxt_compat.py index cc7f37f4a..3e9ce3ee5 100644 --- a/tests/exchange_online/test_ccxt_compat.py +++ b/tests/exchange_online/test_ccxt_compat.py @@ -311,6 +311,8 @@ class TestCCXTExchange: [ CandleType.FUTURES, CandleType.FUNDING_RATE, + CandleType.INDEX, + CandleType.PREMIUMINDEX, CandleType.MARK, ], ) @@ -324,6 +326,10 @@ class TestCCXTExchange: timeframe = exchange._ft_has.get( "funding_fee_timeframe", exchange._ft_has["mark_ohlcv_timeframe"] ) + else: + # never skip funding rate! + if not exchange.check_candle_type_support(candle_type): + pytest.skip(f"Exchange does not support candle type {candle_type}") self._ccxt__async_get_candle_history( exchange, pair=pair, From 01fbf314057fefdb019e6fab11d506a6902ec994 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 17:15:41 +0100 Subject: [PATCH 197/243] chore: don't suggest binance.us supports futures it doesn't. --- freqtrade/exchange/__init__.py | 2 +- freqtrade/exchange/binance.py | 23 +++++++++++++++++++++++ freqtrade/exchange/common.py | 4 ++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/freqtrade/exchange/__init__.py b/freqtrade/exchange/__init__.py index 667bbfe42..075906e11 100644 --- a/freqtrade/exchange/__init__.py +++ b/freqtrade/exchange/__init__.py @@ -4,7 +4,7 @@ from freqtrade.exchange.common import MAP_EXCHANGE_CHILDCLASS from freqtrade.exchange.exchange import Exchange # isort: on -from freqtrade.exchange.binance import Binance +from freqtrade.exchange.binance import Binance, Binanceus, Binanceusdm from freqtrade.exchange.bingx import Bingx from freqtrade.exchange.bitget import Bitget from freqtrade.exchange.bitmart import Bitmart diff --git a/freqtrade/exchange/binance.py b/freqtrade/exchange/binance.py index b5c6c5d52..7d9c616bb 100644 --- a/freqtrade/exchange/binance.py +++ b/freqtrade/exchange/binance.py @@ -544,3 +544,26 @@ class Binance(Exchange): cache[ft_symbol] = delist_dt return cache.get(pair, None) + + +class Binanceusdm(Binance): + """Binacne USDM Exchange + Same as Binance - only futures trading is supported (via ccxt). + + Not actually necessary, binance should be preferred. + """ + + _supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [ + (TradingMode.FUTURES, MarginMode.CROSS), + (TradingMode.FUTURES, MarginMode.ISOLATED), + ] + + +class Binanceus(Binance): + """Binance US exchange class. + Minimal adjustment to disable futures trading for the US subsidiary of Binance + """ + + _supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [ + (TradingMode.SPOT, MarginMode.NONE), + ] diff --git a/freqtrade/exchange/common.py b/freqtrade/exchange/common.py index 650db19b7..628838db2 100644 --- a/freqtrade/exchange/common.py +++ b/freqtrade/exchange/common.py @@ -45,8 +45,6 @@ BAD_EXCHANGES = { } MAP_EXCHANGE_CHILDCLASS = { - "binanceus": "binance", - "binanceusdm": "binance", "okex": "okx", "gateio": "gate", "huboi": "htx", @@ -54,6 +52,8 @@ MAP_EXCHANGE_CHILDCLASS = { SUPPORTED_EXCHANGES = [ "binance", + "binanceus", + "binanceusdm", "bingx", "bitmart", "bitget", From 3689b52309c5cecea0ed0ebacfde12d3e1973d54 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 17:21:51 +0100 Subject: [PATCH 198/243] docs: add Section about very loose stoploss on exchange closes #12598 --- docs/stoploss.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/stoploss.md b/docs/stoploss.md index 9eb3f9c90..f12c86abd 100644 --- a/docs/stoploss.md +++ b/docs/stoploss.md @@ -31,9 +31,14 @@ The Order-type will be ignored if only one mode is available. --8<-- "includes/exchange-features.md" !!! Note "Tight stoploss" - Do not set too low/tight stoploss value when using stop loss on exchange! + Do not set too low/tight stoploss value when using stop loss on exchange! If set to low/tight you will have greater risk of missing fill on the order and stoploss will not work. +!!! Warning "Loose stoploss" + Using stoploss on exchange with a very wide stoploss (e.g. -1) may fail to place the stoploss order on exchange due to exchange limitations. + In that case, the bot will fallback to using the `emergency_exit` order type to place a market order as placing the stoploss order failed. + Freqtrade currently does not implement a limitation to avoid this situation, so please ensure your stoploss values are within reasonable limits for your exchange or disable stoploss on exchange. + ### stoploss_on_exchange and stoploss_on_exchange_limit_ratio Enable or Disable stop loss on exchange. From 072ed705fcfc8ccee8f82e5398025173c2a4dc67 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 19:21:48 +0100 Subject: [PATCH 199/243] test: fix funding_fee online tests --- tests/exchange_online/test_ccxt_compat.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/exchange_online/test_ccxt_compat.py b/tests/exchange_online/test_ccxt_compat.py index 3e9ce3ee5..944674da7 100644 --- a/tests/exchange_online/test_ccxt_compat.py +++ b/tests/exchange_online/test_ccxt_compat.py @@ -274,6 +274,7 @@ class TestCCXTExchange: self, exchange, pair: str, timeframe: str, candle_type: CandleType, factor: float = 0.9 ): timeframe_ms = timeframe_to_msecs(timeframe) + timeframe_ms_8h = timeframe_to_msecs("8h") now = timeframe_to_prev_date(timeframe, datetime.now(UTC)) for offset_days in (360, 120, 30, 10, 5, 2): since = now - timedelta(days=offset_days) @@ -291,7 +292,14 @@ class TestCCXTExchange: candles = res[3] candle_count = exchange.ohlcv_candle_limit(timeframe, candle_type, since_ms) * factor candle_count1 = (now.timestamp() * 1000 - since_ms) // timeframe_ms * factor - assert len(candles) >= min(candle_count, candle_count1), ( + # funding fees can be 1h or 8h - depending on pair and time. + candle_count2 = (now.timestamp() * 1000 - since_ms) // timeframe_ms_8h * factor + min_value = min( + candle_count, + candle_count1, + candle_count2 if candle_type == CandleType.FUNDING_RATE else candle_count1, + ) + assert len(candles) >= min_value, ( f"{len(candles)} < {candle_count} in {timeframe} {offset_days=} {factor=}" ) # Check if first-timeframe is either the start, or start + 1 From 309985503daafd336f4b2d8aa52da151efcc79b5 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 20:17:10 +0100 Subject: [PATCH 200/243] test: fix funding_rate_history online test --- tests/exchange_online/test_ccxt_compat.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/tests/exchange_online/test_ccxt_compat.py b/tests/exchange_online/test_ccxt_compat.py index 944674da7..9789bfea9 100644 --- a/tests/exchange_online/test_ccxt_compat.py +++ b/tests/exchange_online/test_ccxt_compat.py @@ -353,6 +353,7 @@ class TestCCXTExchange: timeframe_ff = exchange._ft_has.get( "funding_fee_timeframe", exchange._ft_has["mark_ohlcv_timeframe"] ) + timeframe_ff_8h = "8h" pair_tf = (pair, timeframe_ff, CandleType.FUNDING_RATE) funding_ohlcv = exchange.refresh_latest_ohlcv( @@ -366,14 +367,26 @@ class TestCCXTExchange: hour1 = timeframe_to_prev_date(timeframe_ff, this_hour - timedelta(minutes=1)) hour2 = timeframe_to_prev_date(timeframe_ff, hour1 - timedelta(minutes=1)) hour3 = timeframe_to_prev_date(timeframe_ff, hour2 - timedelta(minutes=1)) - val0 = rate[rate["date"] == this_hour].iloc[0]["open"] - val1 = rate[rate["date"] == hour1].iloc[0]["open"] - val2 = rate[rate["date"] == hour2].iloc[0]["open"] - val3 = rate[rate["date"] == hour3].iloc[0]["open"] + # Alternative 8h timeframe - funding fee timeframe is not stable. + h8_this_hour = timeframe_to_prev_date(timeframe_ff_8h) + h8_hour1 = timeframe_to_prev_date(timeframe_ff_8h, h8_this_hour - timedelta(minutes=1)) + h8_hour2 = timeframe_to_prev_date(timeframe_ff_8h, h8_hour1 - timedelta(minutes=1)) + h8_hour3 = timeframe_to_prev_date(timeframe_ff_8h, h8_hour2 - timedelta(minutes=1)) + row0 = rate.iloc[-1] + row1 = rate.iloc[-2] + row2 = rate.iloc[-3] + row3 = rate.iloc[-4] + + assert row0["date"] == this_hour or row0["date"] == h8_this_hour + assert row1["date"] == hour1 or row1["date"] == h8_hour1 + assert row2["date"] == hour2 or row2["date"] == h8_hour2 + assert row3["date"] == hour3 or row3["date"] == h8_hour3 # Test For last 4 hours # Avoids random test-failure when funding-fees are 0 for a few hours. - assert val0 != 0.0 or val1 != 0.0 or val2 != 0.0 or val3 != 0.0 + assert ( + row0["open"] != 0.0 or row1["open"] != 0.0 or row2["open"] != 0.0 or row3["open"] != 0.0 + ) # We expect funding rates to be different from 0.0 - or moving around. assert ( rate["open"].max() != 0.0 From 732610e200db47f8c77f5333f4488c8d70aa1a06 Mon Sep 17 00:00:00 2001 From: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com> Date: Tue, 9 Dec 2025 03:27:07 +0000 Subject: [PATCH 201/243] chore: update pre-commit hooks --- .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 6ee0b73b2..6e92eaaff 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.7' + rev: 'v0.14.8' hooks: - id: ruff - id: ruff-format From 2d3ff2f8ca5919bdd173bf55ead4aa34a56c7e36 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 9 Dec 2025 13:42:59 +0100 Subject: [PATCH 202/243] test: mark-test should use the candle's defined mark price attribute --- tests/exchange_online/test_ccxt_compat.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/exchange_online/test_ccxt_compat.py b/tests/exchange_online/test_ccxt_compat.py index 9789bfea9..d0dc715b9 100644 --- a/tests/exchange_online/test_ccxt_compat.py +++ b/tests/exchange_online/test_ccxt_compat.py @@ -398,7 +398,10 @@ class TestCCXTExchange: exchange, exchangename = exchange_futures pair = EXCHANGES[exchangename].get("futures_pair", EXCHANGES[exchangename]["pair"]) since = int((datetime.now(UTC) - timedelta(days=5)).timestamp() * 1000) - pair_tf = (pair, "1h", CandleType.MARK) + candle_type = CandleType.from_string( + exchange.get_option("mark_ohlcv_price", default=CandleType.MARK) + ) + pair_tf = (pair, "1h", candle_type) mark_ohlcv = exchange.refresh_latest_ohlcv([pair_tf], since_ms=since, drop_incomplete=False) From 645a9159e4085ba87884eccaa011627b4401fdc2 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 9 Dec 2025 13:43:49 +0100 Subject: [PATCH 203/243] chore: hyperliquid doesn't have mark candles it uses regular futures candles as multiplicator for funding fees. --- freqtrade/exchange/hyperliquid.py | 1 + 1 file changed, 1 insertion(+) diff --git a/freqtrade/exchange/hyperliquid.py b/freqtrade/exchange/hyperliquid.py index c72b79755..f5e6fb7ee 100644 --- a/freqtrade/exchange/hyperliquid.py +++ b/freqtrade/exchange/hyperliquid.py @@ -39,6 +39,7 @@ class Hyperliquid(Exchange): "stop_price_prop": "stopPrice", "funding_fee_candle_limit": 500, "uses_leverage_tiers": False, + "mark_ohlcv_price": "futures", } _supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [ From bbafb1dabd8fce8ba018f851a4d93f288a4e794f Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 9 Dec 2025 13:54:05 +0100 Subject: [PATCH 204/243] fix: deduplicate list before downloading This avoids duplicate downloads, for example on hyperliquid, which uses "futures" as mark candle type. --- freqtrade/data/history/history_utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/freqtrade/data/history/history_utils.py b/freqtrade/data/history/history_utils.py index d370a80aa..13b7101cd 100644 --- a/freqtrade/data/history/history_utils.py +++ b/freqtrade/data/history/history_utils.py @@ -407,7 +407,8 @@ def refresh_backtest_ohlcv_data( # All exchanges need FundingRate for futures trading. # The timeframe is aligned to the mark-price timeframe. timeframes_with_candletype.append((tf_funding_rate, CandleType.FUNDING_RATE)) - + # Deduplicate list ... + timeframes_with_candletype = list(dict.fromkeys(timeframes_with_candletype)) logger.debug( "Downloading %s.", ", ".join(f'"{tf} {ct}"' for tf, ct in timeframes_with_candletype) ) From b3a1442a69d13ae0496a4dcf4ca21ec8fd450785 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 9 Dec 2025 18:25:11 +0100 Subject: [PATCH 205/243] feat: allow varying help texts for different subcommands --- freqtrade/commands/arguments.py | 7 ++++++- freqtrade/commands/cli_options.py | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/freqtrade/commands/arguments.py b/freqtrade/commands/arguments.py index d6b326050..3ccb854b3 100755 --- a/freqtrade/commands/arguments.py +++ b/freqtrade/commands/arguments.py @@ -3,6 +3,7 @@ This module contains the argument manager class """ from argparse import ArgumentParser, Namespace, _ArgumentGroup +from copy import deepcopy from functools import partial from pathlib import Path from typing import Any @@ -349,7 +350,11 @@ class Arguments: def _build_args(self, optionlist: list[str], parser: ArgumentParser | _ArgumentGroup) -> None: for val in optionlist: opt = AVAILABLE_CLI_OPTIONS[val] - parser.add_argument(*opt.cli, dest=val, **opt.kwargs) + options = deepcopy(opt.kwargs) + help_text = options.pop("help", None) + if opt.fthelp and isinstance(opt.fthelp, dict): + help_text = opt.fthelp.get(parser.prog, help_text) + parser.add_argument(*opt.cli, dest=val, help=help_text, **options) def _build_subcommands(self) -> None: """ diff --git a/freqtrade/commands/cli_options.py b/freqtrade/commands/cli_options.py index c256c46f3..ebc221523 100755 --- a/freqtrade/commands/cli_options.py +++ b/freqtrade/commands/cli_options.py @@ -38,8 +38,14 @@ def check_int_nonzero(value: str) -> int: class Arg: # Optional CLI arguments - def __init__(self, *args, **kwargs): + def __init__(self, *args, fthelp: dict[str, str] | None = None, **kwargs): + """ + CLI Arguments - used to build subcommand parsers consistently. + :param fthelp: dict - fthelp per command - should be "freqtrade ": help_text + If not provided or not found, 'help' from kwargs is used instead. + """ self.cli = args + self.fthelp = fthelp self.kwargs = kwargs @@ -422,6 +428,14 @@ AVAILABLE_CLI_OPTIONS = { ), "candle_types": Arg( "--candle-types", + fthelp={ + "freqtrade download-data": ( + "Select candle type to download. " + "Defaults to the necessary candles for the selected trading mode " + "(e.g. 'spot' or ('futures', 'funding_rate' and 'mark') for futures)." + ), + "_": "Select candle type to convert. Defaults to all available types.", + }, help="Select candle type to convert. Defaults to all available types.", choices=[c.value for c in CandleType], nargs="+", From f0f48395c5875a2ddf0074a8383871f2d288280f Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 9 Dec 2025 18:25:54 +0100 Subject: [PATCH 206/243] chore: update download-data help text --- docs/commands/download-data.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/commands/download-data.md b/docs/commands/download-data.md index 35f15d19d..dd6474e12 100644 --- a/docs/commands/download-data.md +++ b/docs/commands/download-data.md @@ -11,6 +11,7 @@ usage: freqtrade download-data [-h] [-v] [--no-color] [--logfile FILE] [-V] [--data-format-ohlcv {json,jsongz,feather,parquet}] [--data-format-trades {json,jsongz,feather,parquet}] [--trading-mode {spot,margin,futures}] + [--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]] [--prepend] options: @@ -50,6 +51,11 @@ options: `feather`). --trading-mode, --tradingmode {spot,margin,futures} Select Trading mode + --candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...] + Select candle type to download. Defaults to the + necessary candles for the selected trading mode (e.g. + 'spot' or ('futures', 'funding_rate' and 'mark') for + futures). --prepend Allow data prepending. (Data-appending is disabled) Common arguments: From 46538d9a5b347cfc5ef9ea5b5d5b6fb91744c330 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 9 Dec 2025 19:34:58 +0100 Subject: [PATCH 207/243] fix: verify prog actually exists before using it --- freqtrade/commands/arguments.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/commands/arguments.py b/freqtrade/commands/arguments.py index 3ccb854b3..f84822ac8 100755 --- a/freqtrade/commands/arguments.py +++ b/freqtrade/commands/arguments.py @@ -352,7 +352,7 @@ class Arguments: opt = AVAILABLE_CLI_OPTIONS[val] options = deepcopy(opt.kwargs) help_text = options.pop("help", None) - if opt.fthelp and isinstance(opt.fthelp, dict): + if opt.fthelp and isinstance(opt.fthelp, dict) and hasattr(parser, "prog"): help_text = opt.fthelp.get(parser.prog, help_text) parser.add_argument(*opt.cli, dest=val, help=help_text, **options) From 6aeab16ce4cfb7ce9bf6009d75041ae743059e79 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 9 Dec 2025 20:13:10 +0100 Subject: [PATCH 208/243] test: improve candle type verification test --- tests/exchange/test_exchange.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 422b8033f..4a1f4ae5f 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -6646,3 +6646,23 @@ def test_verify_candle_type_support(default_conf, mocker): match=r"Exchange .* does not support fetching premiumindex candles\.", ): exchange.verify_candle_type_support(CandleType.PREMIUMINDEX) + + type(api_mock).has = PropertyMock( + return_value={ + "fetchFundingRateHistory": False, + "fetchIndexOHLCV": False, + "fetchMarkOHLCV": False, + "fetchPremiumIndexOHLCV": True, + } + ) + for candle_type in [ + CandleType.FUNDING_RATE, + CandleType.INDEX, + CandleType.MARK, + ]: + with pytest.raises( + OperationalException, + match=rf"Exchange .* does not support fetching {candle_type.value} candles\.", + ): + exchange.verify_candle_type_support(candle_type) + exchange.verify_candle_type_support(CandleType.PREMIUMINDEX) From d15d08a2d5c9c54b2082c738ddf28a295b0a59b9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 9 Dec 2025 20:18:12 +0100 Subject: [PATCH 209/243] test: Improve refresh_backtest test --- tests/data/test_history.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/data/test_history.py b/tests/data/test_history.py index 3051a4140..59606d485 100644 --- a/tests/data/test_history.py +++ b/tests/data/test_history.py @@ -546,6 +546,7 @@ def test_refresh_backtest_ohlcv_data( ): caplog.set_level(logging.DEBUG) dl_mock = mocker.patch("freqtrade.data.history.history_utils._download_pair_history") + mocker.patch(f"{EXMS}.verify_candle_type_support", MagicMock()) def parallel_mock(pairs, timeframe, candle_type, **kwargs): return {(pair, timeframe, candle_type): DataFrame() for pair in pairs} @@ -600,6 +601,24 @@ def test_refresh_backtest_ohlcv_data( ) assert parallel_mock.call_count == 0 + if trademode == "futures": + dl_mock.reset_mock() + refresh_backtest_ohlcv_data( + exchange=ex, + pairs=[ + "ETH/BTC", + ], + timeframes=["5m", "1h"], + datadir=testdatadir, + timerange=timerange, + erase=False, + trading_mode=trademode, + no_parallel_download=True, + candle_types=["premiumIndex", "funding_rate"], + ) + assert parallel_mock.call_count == 0 + assert dl_mock.call_count == 3 # 2 timeframes premiumIndex + 1x funding_rate + def test_download_data_no_markets(mocker, default_conf, caplog, testdatadir): dl_mock = mocker.patch( From 23a426085937b84363da9d03c8d3c0b3237bd7bc Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 10 Dec 2025 17:23:01 +0100 Subject: [PATCH 210/243] chore: simplify okx cancel stoploss method --- freqtrade/exchange/okx.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/freqtrade/exchange/okx.py b/freqtrade/exchange/okx.py index c8c1130e5..51c112010 100644 --- a/freqtrade/exchange/okx.py +++ b/freqtrade/exchange/okx.py @@ -266,14 +266,7 @@ class Okx(Exchange): return order["id"] def cancel_stoploss_order(self, order_id: str, pair: str, params: dict | None = None) -> dict: - params1 = {"stop": True} - # 'ordType': 'conditional' - # - return self.cancel_order( - order_id=order_id, - pair=pair, - params=params1, - ) + 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 4c3d9b8c70d2310a96fb6ffb9d88f8c39ff10b17 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 10 Dec 2025 19:28:19 +0100 Subject: [PATCH 211/243] test: simplify some stoploss test setups --- tests/exchange/test_exchange.py | 18 ++--- tests/freqtradebot/test_integration.py | 9 ++- .../freqtradebot/test_stoploss_on_exchange.py | 69 ++++++++++++------- tests/rpc/test_rpc.py | 15 ++-- tests/rpc/test_rpc_apiserver.py | 3 +- 5 files changed, 69 insertions(+), 45 deletions(-) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 8d7e0b0d8..8c01500fb 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -3901,37 +3901,29 @@ def test_cancel_stoploss_order(default_conf, mocker, exchange_name): @pytest.mark.parametrize("exchange_name", EXCHANGES) def test_cancel_stoploss_order_with_result(default_conf, mocker, exchange_name): default_conf["dry_run"] = False - mock_prefix = "freqtrade.exchange.gate.Gate" - if exchange_name == "okx": - mock_prefix = "freqtrade.exchange.okx.Okx" - mocker.patch(f"{EXMS}.fetch_stoploss_order", return_value={"for": 123}) - mocker.patch(f"{mock_prefix}.fetch_stoploss_order", return_value={"for": 123}) exchange = get_patched_exchange(mocker, default_conf, exchange=exchange_name) + mocker.patch.object(exchange, "fetch_stoploss_order", return_value={"for": 123}) res = {"fee": {}, "status": "canceled", "amount": 1234} - mocker.patch(f"{EXMS}.cancel_stoploss_order", return_value=res) - mocker.patch(f"{mock_prefix}.cancel_stoploss_order", return_value=res) + mocker.patch.object(exchange, "cancel_stoploss_order", return_value=res) co = exchange.cancel_stoploss_order_with_result(order_id="_", pair="TKN/BTC", amount=555) assert co == res - mocker.patch(f"{EXMS}.cancel_stoploss_order", return_value="canceled") - mocker.patch(f"{mock_prefix}.cancel_stoploss_order", return_value="canceled") + mocker.patch.object(exchange, "cancel_stoploss_order", return_value="canceled") # Fall back to fetch_stoploss_order co = exchange.cancel_stoploss_order_with_result(order_id="_", pair="TKN/BTC", amount=555) assert co == {"for": 123} exc = InvalidOrderException("") - mocker.patch(f"{EXMS}.fetch_stoploss_order", side_effect=exc) - mocker.patch(f"{mock_prefix}.fetch_stoploss_order", side_effect=exc) + mocker.patch.object(exchange, "fetch_stoploss_order", side_effect=exc) co = exchange.cancel_stoploss_order_with_result(order_id="_", pair="TKN/BTC", amount=555) assert co["amount"] == 555 assert co == {"id": "_", "fee": {}, "status": "canceled", "amount": 555, "info": {}} with pytest.raises(InvalidOrderException): exc = InvalidOrderException("Did not find order") - mocker.patch(f"{EXMS}.cancel_stoploss_order", side_effect=exc) - mocker.patch(f"{mock_prefix}.cancel_stoploss_order", side_effect=exc) exchange = get_patched_exchange(mocker, default_conf, exchange=exchange_name) + mocker.patch.object(exchange, "cancel_stoploss_order", side_effect=exc) exchange.cancel_stoploss_order_with_result(order_id="_", pair="TKN/BTC", amount=123) diff --git a/tests/freqtradebot/test_integration.py b/tests/freqtradebot/test_integration.py index 5d3df4c3b..b5520ae42 100644 --- a/tests/freqtradebot/test_integration.py +++ b/tests/freqtradebot/test_integration.py @@ -60,13 +60,10 @@ def test_may_execute_exit_stoploss_on_exchange_multi(default_conf, ticker, fee, cancel_order_mock = MagicMock(side_effect=patch_stoploss) mocker.patch.multiple( EXMS, - create_stoploss=stoploss, fetch_ticker=ticker, get_fee=fee, amount_to_precision=lambda s, x, y: y, price_to_precision=lambda s, x, y: y, - fetch_stoploss_order=stoploss_order_mock, - cancel_stoploss_order_with_result=cancel_order_mock, ) mocker.patch.multiple( @@ -80,6 +77,12 @@ def test_may_execute_exit_stoploss_on_exchange_multi(default_conf, ticker, fee, mocker.patch("freqtrade.wallets.Wallets.check_exit_amount", return_value=True) freqtrade = get_patched_freqtradebot(mocker, default_conf) + mocker.patch.multiple( + freqtrade.exchange, + create_stoploss=stoploss, + fetch_stoploss_order=stoploss_order_mock, + cancel_stoploss_order_with_result=cancel_order_mock, + ) freqtrade.strategy.order_types["stoploss_on_exchange"] = True # Switch ordertype to market to close trade immediately freqtrade.strategy.order_types["exit"] = "market" diff --git a/tests/freqtradebot/test_stoploss_on_exchange.py b/tests/freqtradebot/test_stoploss_on_exchange.py index c71621620..1cfedbf7c 100644 --- a/tests/freqtradebot/test_stoploss_on_exchange.py +++ b/tests/freqtradebot/test_stoploss_on_exchange.py @@ -103,7 +103,7 @@ def test_handle_stoploss_on_exchange( trade.is_open = True hanging_stoploss_order = MagicMock(return_value={"id": "13434334", "status": "open"}) - mocker.patch(f"{EXMS}.fetch_stoploss_order", hanging_stoploss_order) + mocker.patch.object(freqtrade.exchange, "fetch_stoploss_order", hanging_stoploss_order) assert freqtrade.handle_stoploss_on_exchange(trade) is False hanging_stoploss_order.assert_called_once_with("13434334", trade.pair) @@ -116,7 +116,7 @@ def test_handle_stoploss_on_exchange( trade.is_open = True canceled_stoploss_order = MagicMock(return_value={"id": "13434334", "status": "canceled"}) - mocker.patch(f"{EXMS}.fetch_stoploss_order", canceled_stoploss_order) + mocker.patch.object(freqtrade.exchange, "fetch_stoploss_order", canceled_stoploss_order) stoploss.reset_mock() amount_before = trade.amount @@ -149,7 +149,7 @@ def test_handle_stoploss_on_exchange( "amount": enter_order["amount"], } ) - mocker.patch(f"{EXMS}.fetch_stoploss_order", stoploss_order_hit) + mocker.patch.object(freqtrade.exchange, "fetch_stoploss_order", stoploss_order_hit) freqtrade.strategy.order_filled = MagicMock(return_value=None) assert freqtrade.handle_stoploss_on_exchange(trade) is True assert log_has_re(r"STOP_LOSS_LIMIT is hit for Trade\(id=1, .*\)\.", caplog) @@ -158,7 +158,7 @@ def test_handle_stoploss_on_exchange( assert freqtrade.strategy.order_filled.call_count == 1 caplog.clear() - mocker.patch(f"{EXMS}.create_stoploss", side_effect=ExchangeError()) + mocker.patch.object(freqtrade.exchange, "create_stoploss", side_effect=ExchangeError()) trade.is_open = True freqtrade.handle_stoploss_on_exchange(trade) assert log_has("Unable to place a stoploss order on exchange.", caplog) @@ -168,8 +168,13 @@ def test_handle_stoploss_on_exchange( # It should try to add stoploss order stop_order_dict.update({"id": "105"}) stoploss.reset_mock() - mocker.patch(f"{EXMS}.fetch_stoploss_order", side_effect=InvalidOrderException()) - mocker.patch(f"{EXMS}.create_stoploss", stoploss) + mocker.patch.multiple( + freqtrade.exchange, + fetch_stoploss_order=MagicMock( + side_effect=InvalidOrderException(), + ), + create_stoploss=stoploss, + ) freqtrade.handle_stoploss_on_exchange(trade) assert len(trade.open_sl_orders) == 1 assert stoploss.call_count == 1 @@ -179,8 +184,7 @@ def test_handle_stoploss_on_exchange( trade.is_open = False trade.open_sl_orders[-1].ft_is_open = False stoploss.reset_mock() - mocker.patch(f"{EXMS}.fetch_order") - mocker.patch(f"{EXMS}.create_stoploss", stoploss) + mocker.patch.multiple(freqtrade.exchange, fetch_order=MagicMock(), create_stoploss=stoploss) assert freqtrade.handle_stoploss_on_exchange(trade) is False assert trade.has_open_sl_orders is False assert stoploss.call_count == 0 @@ -644,8 +648,11 @@ def test_handle_stoploss_on_exchange_trailing( stoploss_order_cancel = deepcopy(stoploss_order_hanging) stoploss_order_cancel["status"] = "canceled" - mocker.patch(f"{EXMS}.fetch_stoploss_order", return_value=stoploss_order_hanging) - mocker.patch(f"{EXMS}.cancel_stoploss_order", return_value=stoploss_order_cancel) + mocker.patch.multiple( + freqtrade.exchange, + fetch_stoploss_order=MagicMock(return_value=stoploss_order_hanging), + cancel_stoploss_order=MagicMock(return_value=stoploss_order_cancel), + ) # stoploss initially at 5% assert freqtrade.handle_trade(trade) is False @@ -671,9 +678,12 @@ def test_handle_stoploss_on_exchange_trailing( return_value={"id": "13434334", "status": "canceled", "fee": {}, "amount": trade.amount} ) stoploss_order_mock = MagicMock(return_value={"id": "so1", "status": "open"}) - mocker.patch(f"{EXMS}.fetch_stoploss_order") - mocker.patch(f"{EXMS}.cancel_stoploss_order", cancel_order_mock) - mocker.patch(f"{EXMS}.create_stoploss", stoploss_order_mock) + mocker.patch.multiple( + freqtrade.exchange, + fetch_stoploss_order=MagicMock(), + cancel_stoploss_order=cancel_order_mock, + create_stoploss=stoploss_order_mock, + ) # stoploss should not be updated as the interval is 60 seconds assert freqtrade.handle_trade(trade) is False @@ -711,8 +721,9 @@ def test_handle_stoploss_on_exchange_trailing( } ), ) - mocker.patch( - f"{EXMS}.cancel_stoploss_order_with_result", + mocker.patch.object( + freqtrade.exchange, + "cancel_stoploss_order_with_result", return_value={"id": "so1", "status": "canceled"}, ) assert len(trade.open_sl_orders) == 1 @@ -786,8 +797,12 @@ def test_handle_stoploss_on_exchange_trailing_error( order_date=dt_now(), ) ) - mocker.patch(f"{EXMS}.cancel_stoploss_order", side_effect=InvalidOrderException()) - mocker.patch(f"{EXMS}.fetch_stoploss_order", return_value=stoploss_order_hanging) + mocker.patch.object( + freqtrade.exchange, "cancel_stoploss_order", side_effect=InvalidOrderException() + ) + mocker.patch.object( + freqtrade.exchange, "fetch_stoploss_order", return_value=stoploss_order_hanging + ) time_machine.shift(timedelta(minutes=50)) freqtrade.handle_trailing_stoploss_on_exchange(trade, stoploss_order_hanging) assert log_has_re(r"Could not cancel stoploss order abcd for pair ETH/USDT.*", caplog) @@ -799,8 +814,8 @@ def test_handle_stoploss_on_exchange_trailing_error( # Fail creating stoploss order caplog.clear() - cancel_mock = mocker.patch(f"{EXMS}.cancel_stoploss_order") - mocker.patch(f"{EXMS}.create_stoploss", side_effect=ExchangeError()) + cancel_mock = mocker.patch.object(freqtrade.exchange, "cancel_stoploss_order") + mocker.patch.object(freqtrade.exchange, "create_stoploss", side_effect=ExchangeError()) time_machine.shift(timedelta(minutes=50)) freqtrade.handle_trailing_stoploss_on_exchange(trade, stoploss_order_hanging) assert cancel_mock.call_count == 2 @@ -932,8 +947,11 @@ def test_handle_stoploss_on_exchange_custom_stop( cancel_order_mock = MagicMock() stoploss_order_mock = MagicMock(return_value={"id": "so1", "status": "open"}) - mocker.patch(f"{EXMS}.cancel_stoploss_order", cancel_order_mock) - mocker.patch(f"{EXMS}.create_stoploss", stoploss_order_mock) + mocker.patch.multiple( + freqtrade.exchange, + cancel_stoploss_order=cancel_order_mock, + create_stoploss=stoploss_order_mock, + ) # stoploss should not be updated as the interval is 60 seconds assert freqtrade.handle_trade(trade) is False @@ -1054,7 +1072,9 @@ def test_execute_trade_exit_sloe_cancel_exception( mocker, default_conf_usdt, ticker_usdt, fee, caplog ) -> None: freqtrade = get_patched_freqtradebot(mocker, default_conf_usdt) - mocker.patch(f"{EXMS}.cancel_stoploss_order", side_effect=InvalidOrderException()) + mocker.patch.object( + freqtrade.exchange, "cancel_stoploss_order", side_effect=InvalidOrderException() + ) mocker.patch("freqtrade.wallets.Wallets.get_free", MagicMock(return_value=300)) create_order_mock = MagicMock( side_effect=[ @@ -1114,12 +1134,15 @@ def test_execute_trade_exit_with_stoploss_on_exchange( get_fee=fee, amount_to_precision=lambda s, x, y: y, price_to_precision=lambda s, x, y: y, + ) + freqtrade = FreqtradeBot(default_conf_usdt) + mocker.patch.multiple( + freqtrade.exchange, create_stoploss=stoploss, cancel_stoploss_order=cancel_order, _dry_is_price_crossed=MagicMock(side_effect=[True, False]), ) - freqtrade = FreqtradeBot(default_conf_usdt) freqtrade.strategy.order_types["stoploss_on_exchange"] = True patch_get_signal(freqtrade, enter_short=is_short, enter_long=not is_short) diff --git a/tests/rpc/test_rpc.py b/tests/rpc/test_rpc.py index 40e2b8266..f288cd0ba 100644 --- a/tests/rpc/test_rpc.py +++ b/tests/rpc/test_rpc.py @@ -386,11 +386,14 @@ def test_rpc_delete_trade(mocker, default_conf, fee, markets, caplog, is_short): mocker.patch.multiple( EXMS, markets=PropertyMock(return_value=markets), - cancel_order=cancel_mock, - cancel_stoploss_order=stoploss_mock, ) freqtradebot = get_patched_freqtradebot(mocker, default_conf) + mocker.patch.multiple( + freqtradebot.exchange, + cancel_order=cancel_mock, + cancel_stoploss_order=stoploss_mock, + ) freqtradebot.strategy.order_types["stoploss_on_exchange"] = True create_mock_trades(fee, is_short) rpc = RPC(freqtradebot) @@ -426,13 +429,17 @@ def test_rpc_delete_trade(mocker, default_conf, fee, markets, caplog, is_short): assert stoploss_mock.call_count == 1 assert res["cancel_order_count"] == 1 - stoploss_mock = mocker.patch(f"{EXMS}.cancel_stoploss_order", side_effect=InvalidOrderException) + stoploss_mock = mocker.patch.object( + freqtradebot.exchange, "cancel_stoploss_order", side_effect=InvalidOrderException + ) res = rpc._rpc_delete("3") assert stoploss_mock.call_count == 1 stoploss_mock.reset_mock() - cancel_mock = mocker.patch(f"{EXMS}.cancel_order", side_effect=InvalidOrderException) + cancel_mock = mocker.patch.object( + freqtradebot.exchange, "cancel_order", side_effect=InvalidOrderException + ) res = rpc._rpc_delete("4") assert cancel_mock.call_count == 1 diff --git a/tests/rpc/test_rpc_apiserver.py b/tests/rpc/test_rpc_apiserver.py index aa5483e88..edfb4ff75 100644 --- a/tests/rpc/test_rpc_apiserver.py +++ b/tests/rpc/test_rpc_apiserver.py @@ -1034,8 +1034,7 @@ def test_api_delete_trade(botclient, mocker, fee, markets, is_short): stoploss_mock = MagicMock() cancel_mock = MagicMock() mocker.patch.multiple( - EXMS, - markets=PropertyMock(return_value=markets), + ftbot.exchange, cancel_order=cancel_mock, cancel_stoploss_order=stoploss_mock, ) From 6d017c9a6ce4fc05fedf794a2a3946c6a8242a48 Mon Sep 17 00:00:00 2001 From: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com> Date: Thu, 11 Dec 2025 03:29:24 +0000 Subject: [PATCH 212/243] chore: update pre-commit hooks --- .../exchange/binance_leverage_tiers.json | 3328 +++++++---------- 1 file changed, 1429 insertions(+), 1899 deletions(-) diff --git a/freqtrade/exchange/binance_leverage_tiers.json b/freqtrade/exchange/binance_leverage_tiers.json index e0e983fc8..e5bf4695d 100644 --- a/freqtrade/exchange/binance_leverage_tiers.json +++ b/freqtrade/exchange/binance_leverage_tiers.json @@ -2415,15 +2415,15 @@ "symbol": "1000WHY/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -2431,55 +2431,21 @@ "tier": 2.0, "symbol": "1000WHY/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "1000WHY/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "1000WHY/USDT:USDT", - "currency": "USDT", - "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1525.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "1000WHY/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -2487,16 +2453,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2775.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "1000WHY/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -2504,46 +2470,46 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6945.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "1000WHY/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", - "notionalCap": "500000", + "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "1000WHY/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": "651745.0" } } ], @@ -3466,15 +3432,15 @@ "symbol": "42/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -3482,119 +3448,85 @@ "tier": 2.0, "symbol": "42/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "42/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1750.0" } }, { "tier": 4.0, "symbol": "42/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 100000.0, + "maxNotional": 250000.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": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "5920.0" } }, { "tier": 5.0, "symbol": "42/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 250000.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": "250000", + "maintMarginRatio": "0.25", + "cum": "26745.0" } }, { "tier": 6.0, "symbol": "42/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": "42/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": "42/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": "651745.0" } } ], @@ -4553,10 +4485,10 @@ "minNotional": 0.0, "maxNotional": 5000.0, "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maxLeverage": 25.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "25", "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.02", @@ -5912,15 +5844,15 @@ "symbol": "AGT/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -5928,119 +5860,85 @@ "tier": 2.0, "symbol": "AGT/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "AGT/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1750.0" } }, { "tier": 4.0, "symbol": "AGT/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 100000.0, + "maxNotional": 250000.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": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "5920.0" } }, { "tier": 5.0, "symbol": "AGT/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 250000.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": "250000", + "maintMarginRatio": "0.25", + "cum": "26745.0" } }, { "tier": 6.0, "symbol": "AGT/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": "AGT/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": "AGT/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": "651745.0" } } ], @@ -7033,15 +6931,15 @@ "symbol": "AKE/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -7049,119 +6947,85 @@ "tier": 2.0, "symbol": "AKE/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "AKE/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1750.0" } }, { "tier": 4.0, "symbol": "AKE/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 100000.0, + "maxNotional": 250000.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": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "5920.0" } }, { "tier": 5.0, "symbol": "AKE/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 250000.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": "250000", + "maintMarginRatio": "0.25", + "cum": "26745.0" } }, { "tier": 6.0, "symbol": "AKE/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": "AKE/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": "AKE/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": "651745.0" } } ], @@ -16078,15 +15942,15 @@ "symbol": "BDXN/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -16094,55 +15958,21 @@ "tier": 2.0, "symbol": "BDXN/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "BDXN/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "BDXN/USDT:USDT", - "currency": "USDT", - "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1525.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "BDXN/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -16150,16 +15980,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2775.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "BDXN/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -16167,16 +15997,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6945.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "BDXN/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -16184,16 +16014,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "BDXN/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -16201,12 +16031,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": "651745.0" } } ], @@ -17008,15 +16838,15 @@ "symbol": "BID/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -17024,55 +16854,21 @@ "tier": 2.0, "symbol": "BID/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "BID/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "BID/USDT:USDT", - "currency": "USDT", - "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1525.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "BID/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -17080,16 +16876,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2775.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "BID/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -17097,16 +16893,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6945.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "BID/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -17114,16 +16910,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "BID/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -17131,12 +16927,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": "651745.0" } } ], @@ -19989,15 +19785,15 @@ "symbol": "BROCCOLIF3B/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -20005,55 +19801,21 @@ "tier": 2.0, "symbol": "BROCCOLIF3B/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "BROCCOLIF3B/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "BROCCOLIF3B/USDT:USDT", - "currency": "USDT", - "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1525.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "BROCCOLIF3B/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -20061,16 +19823,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2775.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "BROCCOLIF3B/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -20078,16 +19840,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6945.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "BROCCOLIF3B/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -20095,16 +19857,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "BROCCOLIF3B/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -20112,12 +19874,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": "651745.0" } } ], @@ -21299,15 +21061,15 @@ "symbol": "BTR/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -21315,119 +21077,85 @@ "tier": 2.0, "symbol": "BTR/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "BTR/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1750.0" } }, { "tier": 4.0, "symbol": "BTR/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 100000.0, + "maxNotional": 250000.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": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "5920.0" } }, { "tier": 5.0, "symbol": "BTR/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 250000.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": "250000", + "maintMarginRatio": "0.25", + "cum": "26745.0" } }, { "tier": 6.0, "symbol": "BTR/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": "BTR/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": "BTR/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": "651745.0" } } ], @@ -21437,15 +21165,15 @@ "symbol": "BULLA/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -21453,119 +21181,85 @@ "tier": 2.0, "symbol": "BULLA/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "BULLA/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1750.0" } }, { "tier": 4.0, "symbol": "BULLA/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 100000.0, + "maxNotional": 250000.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": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "5920.0" } }, { "tier": 5.0, "symbol": "BULLA/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 250000.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": "250000", + "maintMarginRatio": "0.25", + "cum": "26745.0" } }, { "tier": 6.0, "symbol": "BULLA/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": "BULLA/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": "BULLA/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": "651745.0" } } ], @@ -23331,15 +23025,15 @@ "symbol": "CHESS/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -23347,55 +23041,21 @@ "tier": 2.0, "symbol": "CHESS/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "CHESS/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "CHESS/USDT:USDT", - "currency": "USDT", - "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1275.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "CHESS/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -23403,16 +23063,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2525.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "CHESS/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -23420,16 +23080,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6695.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "CHESS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -23437,16 +23097,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27520.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "CHESS/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -23454,12 +23114,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", "notionalCap": "5000000", "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "652520.0" + "cum": "651745.0" } } ], @@ -25038,15 +24698,15 @@ "symbol": "COS/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -25054,55 +24714,21 @@ "tier": 2.0, "symbol": "COS/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "COS/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "COS/USDT:USDT", - "currency": "USDT", - "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1525.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "COS/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -25110,16 +24736,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2775.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "COS/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -25127,16 +24753,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6945.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "COS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -25144,16 +24770,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "COS/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -25161,12 +24787,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": "651745.0" } } ], @@ -26227,15 +25853,15 @@ "symbol": "CUDIS/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -26243,119 +25869,85 @@ "tier": 2.0, "symbol": "CUDIS/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "CUDIS/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1750.0" } }, { "tier": 4.0, "symbol": "CUDIS/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 100000.0, + "maxNotional": 250000.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": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "5920.0" } }, { "tier": 5.0, "symbol": "CUDIS/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 250000.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": "250000", + "maintMarginRatio": "0.25", + "cum": "26745.0" } }, { "tier": 6.0, "symbol": "CUDIS/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": "CUDIS/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": "CUDIS/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": "651745.0" } } ], @@ -26968,15 +26560,15 @@ "symbol": "DAM/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -26984,119 +26576,85 @@ "tier": 2.0, "symbol": "DAM/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "DAM/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1750.0" } }, { "tier": 4.0, "symbol": "DAM/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 100000.0, + "maxNotional": 250000.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": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "5920.0" } }, { "tier": 5.0, "symbol": "DAM/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 250000.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": "250000", + "maintMarginRatio": "0.25", + "cum": "26745.0" } }, { "tier": 6.0, "symbol": "DAM/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": "DAM/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": "DAM/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": "651745.0" } } ], @@ -28692,15 +28250,15 @@ "symbol": "DMC/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -28708,55 +28266,21 @@ "tier": 2.0, "symbol": "DMC/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "DMC/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "DMC/USDT:USDT", - "currency": "USDT", - "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1275.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "DMC/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -28764,16 +28288,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2525.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "DMC/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -28781,16 +28305,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6695.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "DMC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -28798,16 +28322,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27520.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "DMC/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -28815,12 +28339,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", "notionalCap": "5000000", "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "652520.0" + "cum": "651745.0" } } ], @@ -32187,15 +31711,15 @@ "symbol": "EPT/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -32203,55 +31727,21 @@ "tier": 2.0, "symbol": "EPT/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "EPT/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "EPT/USDT:USDT", - "currency": "USDT", - "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1275.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "EPT/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -32259,16 +31749,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2525.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "EPT/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -32276,16 +31766,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6695.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "EPT/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -32293,16 +31783,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27520.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "EPT/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -32310,12 +31800,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", "notionalCap": "5000000", "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "652520.0" + "cum": "651745.0" } } ], @@ -34355,15 +33845,15 @@ "symbol": "EVAA/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -34371,119 +33861,85 @@ "tier": 2.0, "symbol": "EVAA/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "EVAA/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1750.0" } }, { "tier": 4.0, "symbol": "EVAA/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 100000.0, + "maxNotional": 250000.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": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "5920.0" } }, { "tier": 5.0, "symbol": "EVAA/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 250000.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": "250000", + "maintMarginRatio": "0.25", + "cum": "26745.0" } }, { "tier": 6.0, "symbol": "EVAA/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": "EVAA/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": "EVAA/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": "651745.0" } } ], @@ -35164,15 +34620,15 @@ "symbol": "FHE/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -35180,55 +34636,21 @@ "tier": 2.0, "symbol": "FHE/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "FHE/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "FHE/USDT:USDT", - "currency": "USDT", - "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1275.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "FHE/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -35236,16 +34658,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2525.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "FHE/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -35253,16 +34675,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6695.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "FHE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -35270,16 +34692,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27520.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "FHE/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -35287,12 +34709,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", "notionalCap": "5000000", "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "652520.0" + "cum": "651745.0" } } ], @@ -35784,15 +35206,15 @@ "symbol": "FIO/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -35800,55 +35222,21 @@ "tier": 2.0, "symbol": "FIO/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "FIO/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "FIO/USDT:USDT", - "currency": "USDT", - "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1525.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "FIO/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -35856,16 +35244,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2775.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "FIO/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -35873,46 +35261,46 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6945.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "FIO/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", - "notionalCap": "500000", + "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "FIO/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": "651745.0" } } ], @@ -35922,15 +35310,15 @@ "symbol": "FIS/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -35938,55 +35326,21 @@ "tier": 2.0, "symbol": "FIS/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "FIS/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "FIS/USDT:USDT", - "currency": "USDT", - "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1525.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "FIS/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -35994,16 +35348,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2775.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "FIS/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -36011,46 +35365,46 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6945.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "FIS/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", - "notionalCap": "500000", + "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "FIS/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": "651745.0" } } ], @@ -40695,15 +40049,15 @@ "symbol": "HANA/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -40711,119 +40065,85 @@ "tier": 2.0, "symbol": "HANA/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "HANA/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1750.0" } }, { "tier": 4.0, "symbol": "HANA/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 100000.0, + "maxNotional": 250000.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": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "5920.0" } }, { "tier": 5.0, "symbol": "HANA/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 250000.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": "250000", + "maintMarginRatio": "0.25", + "cum": "26745.0" } }, { "tier": 6.0, "symbol": "HANA/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": "HANA/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": "HANA/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": "651745.0" } } ], @@ -49188,15 +48508,15 @@ "symbol": "KOMA/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -49204,55 +48524,21 @@ "tier": 2.0, "symbol": "KOMA/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "KOMA/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "KOMA/USDT:USDT", - "currency": "USDT", - "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1525.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "KOMA/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -49260,16 +48546,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2775.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "KOMA/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -49277,16 +48563,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6945.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "KOMA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -49294,16 +48580,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "KOMA/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -49311,12 +48597,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": "651745.0" } } ], @@ -53943,14 +53229,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, - "maxLeverage": 50.0, + "maintenanceMarginRate": 0.03, + "maxLeverage": 20.0, "info": { "bracket": "1", - "initialLeverage": "50", + "initialLeverage": "20", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.03", "cum": "0.0" } }, @@ -53960,15 +53246,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": "100.0" } }, { @@ -53976,50 +53262,50 @@ "symbol": "MAVIA/USDT:USDT", "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "3", - "initialLeverage": "10", - "notionalCap": "20000", + "initialLeverage": "5", + "notionalCap": "50000", "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "maintMarginRatio": "0.1", + "cum": "600.0" } }, { "tier": 4.0, "symbol": "MAVIA/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 50000.0, + "maxNotional": 150000.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": "150000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1850.0" } }, { "tier": 5.0, "symbol": "MAVIA/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, + "minNotional": 150000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, "info": { "bracket": "5", - "initialLeverage": "4", + "initialLeverage": "3", "notionalCap": "250000", - "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2550.0" + "notionalFloor": "150000", + "maintMarginRatio": "0.1667", + "cum": "8105.0" } }, { @@ -54027,50 +53313,33 @@ "symbol": "MAVIA/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, - "maintenanceMarginRate": 0.1667, - "maxLeverage": 3.0, + "maxNotional": 800000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, "info": { "bracket": "6", - "initialLeverage": "3", - "notionalCap": "500000", + "initialLeverage": "2", + "notionalCap": "800000", "notionalFloor": "250000", - "maintMarginRatio": "0.1667", - "cum": "12975.0" + "maintMarginRatio": "0.25", + "cum": "28930.0" } }, { "tier": 7.0, "symbol": "MAVIA/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": "MAVIA/USDT:USDT", - "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 12500000.0, + "minNotional": 800000.0, + "maxNotional": 1000000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "7", "initialLeverage": "1", - "notionalCap": "12500000", - "notionalFloor": "7500000", + "notionalCap": "1000000", + "notionalFloor": "800000", "maintMarginRatio": "0.5", - "cum": "1929625.0" + "cum": "228930.0" } } ], @@ -59484,6 +58753,144 @@ } } ], + "NIGHT/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "NIGHT/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": "NIGHT/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": "50.0" + } + }, + { + "tier": 3.0, + "symbol": "NIGHT/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": "300.0" + } + }, + { + "tier": 4.0, + "symbol": "NIGHT/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": "1300.0" + } + }, + { + "tier": 5.0, + "symbol": "NIGHT/USDT:USDT", + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "5", + "initialLeverage": "4", + "notionalCap": "250000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2550.0" + } + }, + { + "tier": 6.0, + "symbol": "NIGHT/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": "NIGHT/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": "NIGHT/USDT:USDT", + "currency": "USDT", + "minNotional": 7500000.0, + "maxNotional": 12500000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "8", + "initialLeverage": "1", + "notionalCap": "12500000", + "notionalFloor": "7500000", + "maintMarginRatio": "0.5", + "cum": "1929625.0" + } + } + ], "NIL/USDT:USDT": [ { "tier": 1.0, @@ -64089,13 +63496,13 @@ "symbol": "PAXG/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 20000.0, + "maxNotional": 5000.0, "maintenanceMarginRate": 0.01, "maxLeverage": 75.0, "info": { "bracket": "1", "initialLeverage": "75", - "notionalCap": "20000", + "notionalCap": "5000", "notionalFloor": "0", "maintMarginRatio": "0.01", "cum": "0.0" @@ -64105,136 +63512,170 @@ "tier": 2.0, "symbol": "PAXG/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 200000.0, + "minNotional": 5000.0, + "maxNotional": 10000.0, "maintenanceMarginRate": 0.015, "maxLeverage": 50.0, "info": { "bracket": "2", "initialLeverage": "50", - "notionalCap": "200000", - "notionalFloor": "20000", + "notionalCap": "10000", + "notionalFloor": "5000", "maintMarginRatio": "0.015", - "cum": "100.0" + "cum": "25.0" } }, { "tier": 3.0, "symbol": "PAXG/USDT:USDT", "currency": "USDT", - "minNotional": 200000.0, - "maxNotional": 1000000.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, "maintenanceMarginRate": 0.02, "maxLeverage": 25.0, "info": { "bracket": "3", "initialLeverage": "25", - "notionalCap": "1000000", - "notionalFloor": "200000", + "notionalCap": "50000", + "notionalFloor": "10000", "maintMarginRatio": "0.02", - "cum": "1100.0" + "cum": "75.0" } }, { "tier": 4.0, "symbol": "PAXG/USDT:USDT", "currency": "USDT", - "minNotional": 1000000.0, - "maxNotional": 2000000.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, "maintenanceMarginRate": 0.025, "maxLeverage": 20.0, "info": { "bracket": "4", "initialLeverage": "20", - "notionalCap": "2000000", - "notionalFloor": "1000000", + "notionalCap": "100000", + "notionalFloor": "50000", "maintMarginRatio": "0.025", - "cum": "6100.0" + "cum": "325.0" } }, { "tier": 5.0, "symbol": "PAXG/USDT:USDT", "currency": "USDT", - "minNotional": 2000000.0, - "maxNotional": 5000000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "minNotional": 100000.0, + "maxNotional": 175000.0, + "maintenanceMarginRate": 0.03333, + "maxLeverage": 15.0, "info": { "bracket": "5", - "initialLeverage": "10", - "notionalCap": "5000000", - "notionalFloor": "2000000", - "maintMarginRatio": "0.05", - "cum": "56100.0" + "initialLeverage": "15", + "notionalCap": "175000", + "notionalFloor": "100000", + "maintMarginRatio": "0.03333", + "cum": "1158.0" } }, { "tier": 6.0, "symbol": "PAXG/USDT:USDT", "currency": "USDT", - "minNotional": 5000000.0, - "maxNotional": 7500000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 175000.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "6", - "initialLeverage": "5", - "notionalCap": "7500000", - "notionalFloor": "5000000", - "maintMarginRatio": "0.1", - "cum": "306100.0" + "initialLeverage": "10", + "notionalCap": "500000", + "notionalFloor": "175000", + "maintMarginRatio": "0.05", + "cum": "4075.25" } }, { "tier": 7.0, "symbol": "PAXG/USDT:USDT", "currency": "USDT", - "minNotional": 7500000.0, - "maxNotional": 10000000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 500000.0, + "maxNotional": 750000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "7", - "initialLeverage": "4", - "notionalCap": "10000000", - "notionalFloor": "7500000", - "maintMarginRatio": "0.125", - "cum": "493600.0" + "initialLeverage": "5", + "notionalCap": "750000", + "notionalFloor": "500000", + "maintMarginRatio": "0.1", + "cum": "29075.25" } }, { "tier": 8.0, "symbol": "PAXG/USDT:USDT", "currency": "USDT", - "minNotional": 10000000.0, - "maxNotional": 12500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, + "minNotional": 750000.0, + "maxNotional": 1500000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "8", - "initialLeverage": "2", - "notionalCap": "12500000", - "notionalFloor": "10000000", - "maintMarginRatio": "0.25", - "cum": "1743600.0" + "initialLeverage": "4", + "notionalCap": "1500000", + "notionalFloor": "750000", + "maintMarginRatio": "0.125", + "cum": "47825.25" } }, { "tier": 9.0, "symbol": "PAXG/USDT:USDT", "currency": "USDT", - "minNotional": 12500000.0, - "maxNotional": 15000000.0, + "minNotional": 1500000.0, + "maxNotional": 4500000.0, + "maintenanceMarginRate": 0.1667, + "maxLeverage": 3.0, + "info": { + "bracket": "9", + "initialLeverage": "3", + "notionalCap": "4500000", + "notionalFloor": "1500000", + "maintMarginRatio": "0.1667", + "cum": "110375.25" + } + }, + { + "tier": 10.0, + "symbol": "PAXG/USDT:USDT", + "currency": "USDT", + "minNotional": 4500000.0, + "maxNotional": 7500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "10", + "initialLeverage": "2", + "notionalCap": "7500000", + "notionalFloor": "4500000", + "maintMarginRatio": "0.25", + "cum": "485225.25" + } + }, + { + "tier": 11.0, + "symbol": "PAXG/USDT:USDT", + "currency": "USDT", + "minNotional": 7500000.0, + "maxNotional": 12500000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "9", + "bracket": "11", "initialLeverage": "1", - "notionalCap": "15000000", - "notionalFloor": "12500000", + "notionalCap": "12500000", + "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "4868600.0" + "cum": "2360225.25" } } ], @@ -67253,6 +66694,127 @@ } } ], + "POWER/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "POWER/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": "POWER/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": "POWER/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": "POWER/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": "POWER/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": "POWER/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": "POWER/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" + } + } + ], "POWR/USDT:USDT": [ { "tier": 1.0, @@ -68310,15 +67872,15 @@ "symbol": "PUMPBTC/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -68326,55 +67888,21 @@ "tier": 2.0, "symbol": "PUMPBTC/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "PUMPBTC/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "PUMPBTC/USDT:USDT", - "currency": "USDT", - "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1275.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "PUMPBTC/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -68382,16 +67910,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2525.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "PUMPBTC/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -68399,16 +67927,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6695.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "PUMPBTC/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -68416,16 +67944,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27520.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "PUMPBTC/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -68433,12 +67961,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", "notionalCap": "5000000", "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "652520.0" + "cum": "651745.0" } } ], @@ -70465,15 +69993,15 @@ "symbol": "REI/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -70481,55 +70009,21 @@ "tier": 2.0, "symbol": "REI/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "REI/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "REI/USDT:USDT", - "currency": "USDT", - "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1525.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "REI/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -70537,16 +70031,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2775.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "REI/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -70554,46 +70048,46 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6945.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "REI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", - "notionalCap": "500000", + "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "REI/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": "651745.0" } } ], @@ -72773,15 +72267,15 @@ "symbol": "RVV/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -72789,55 +72283,21 @@ "tier": 2.0, "symbol": "RVV/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "RVV/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "RVV/USDT:USDT", - "currency": "USDT", - "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1275.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "RVV/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -72845,16 +72305,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2525.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "RVV/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -72862,16 +72322,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6695.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "RVV/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -72879,16 +72339,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27520.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "RVV/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -72896,12 +72356,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", "notionalCap": "5000000", "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "652520.0" + "cum": "651745.0" } } ], @@ -78407,14 +77867,14 @@ "currency": "USDT", "minNotional": 0.0, "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, - "maxLeverage": 40.0, + "maintenanceMarginRate": 0.01, + "maxLeverage": 75.0, "info": { "bracket": "1", - "initialLeverage": "40", + "initialLeverage": "75", "notionalCap": "5000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.01", "cum": "0.0" } }, @@ -78424,14 +77884,14 @@ "currency": "USDT", "minNotional": 5000.0, "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 20.0, + "maintenanceMarginRate": 0.015, + "maxLeverage": 50.0, "info": { "bracket": "2", - "initialLeverage": "20", + "initialLeverage": "50", "notionalCap": "10000", "notionalFloor": "5000", - "maintMarginRatio": "0.025", + "maintMarginRatio": "0.015", "cum": "25.0" } }, @@ -78441,15 +77901,15 @@ "currency": "USDT", "minNotional": 10000.0, "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 10.0, + "maintenanceMarginRate": 0.02, + "maxLeverage": 25.0, "info": { "bracket": "3", - "initialLeverage": "10", + "initialLeverage": "25", "notionalCap": "25000", "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" + "maintMarginRatio": "0.02", + "cum": "75.0" } }, { @@ -78458,15 +77918,15 @@ "currency": "USDT", "minNotional": 25000.0, "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "maintenanceMarginRate": 0.025, + "maxLeverage": 20.0, "info": { "bracket": "4", - "initialLeverage": "5", + "initialLeverage": "20", "notionalCap": "50000", "notionalFloor": "25000", - "maintMarginRatio": "0.1", - "cum": "1525.0" + "maintMarginRatio": "0.025", + "cum": "200.0" } }, { @@ -78474,33 +77934,33 @@ "symbol": "STABLE/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, - "maxNotional": 100000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "maxNotional": 125000.0, + "maintenanceMarginRate": 0.05, + "maxLeverage": 10.0, "info": { "bracket": "5", - "initialLeverage": "4", - "notionalCap": "100000", + "initialLeverage": "10", + "notionalCap": "125000", "notionalFloor": "50000", - "maintMarginRatio": "0.125", - "cum": "2775.0" + "maintMarginRatio": "0.05", + "cum": "1450.0" } }, { "tier": 6.0, "symbol": "STABLE/USDT:USDT", "currency": "USDT", - "minNotional": 100000.0, + "minNotional": 125000.0, "maxNotional": 250000.0, - "maintenanceMarginRate": 0.167, - "maxLeverage": 3.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "6", - "initialLeverage": "3", + "initialLeverage": "5", "notionalCap": "250000", - "notionalFloor": "100000", - "maintMarginRatio": "0.167", - "cum": "6975.0" + "notionalFloor": "125000", + "maintMarginRatio": "0.1", + "cum": "7700.0" } }, { @@ -78508,33 +77968,67 @@ "symbol": "STABLE/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 2500000.0, - "maintenanceMarginRate": 0.25, - "maxLeverage": 2.0, + "maxNotional": 500000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "7", - "initialLeverage": "2", - "notionalCap": "2500000", + "initialLeverage": "4", + "notionalCap": "500000", "notionalFloor": "250000", - "maintMarginRatio": "0.25", - "cum": "27725.0" + "maintMarginRatio": "0.125", + "cum": "13950.0" } }, { "tier": 8.0, "symbol": "STABLE/USDT:USDT", "currency": "USDT", - "minNotional": 2500000.0, - "maxNotional": 5000000.0, + "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": "STABLE/USDT:USDT", + "currency": "USDT", + "minNotional": 1000000.0, + "maxNotional": 7500000.0, + "maintenanceMarginRate": 0.25, + "maxLeverage": 2.0, + "info": { + "bracket": "9", + "initialLeverage": "2", + "notionalCap": "7500000", + "notionalFloor": "1000000", + "maintMarginRatio": "0.25", + "cum": "118100.0" + } + }, + { + "tier": 10.0, + "symbol": "STABLE/USDT:USDT", + "currency": "USDT", + "minNotional": 7500000.0, + "maxNotional": 12500000.0, "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "10", "initialLeverage": "1", - "notionalCap": "5000000", - "notionalFloor": "2500000", + "notionalCap": "12500000", + "notionalFloor": "7500000", "maintMarginRatio": "0.5", - "cum": "652725.0" + "cum": "1993100.0" } } ], @@ -82510,15 +82004,15 @@ "symbol": "TANSSI/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -82526,55 +82020,21 @@ "tier": 2.0, "symbol": "TANSSI/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "TANSSI/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "TANSSI/USDT:USDT", - "currency": "USDT", - "minNotional": 20000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "20000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1275.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "TANSSI/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -82582,16 +82042,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2525.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "TANSSI/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -82599,16 +82059,16 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6695.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "TANSSI/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, @@ -82616,16 +82076,16 @@ "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27520.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "TANSSI/USDT:USDT", "currency": "USDT", "minNotional": 2500000.0, @@ -82633,12 +82093,12 @@ "maintenanceMarginRate": 0.5, "maxLeverage": 1.0, "info": { - "bracket": "8", + "bracket": "6", "initialLeverage": "1", "notionalCap": "5000000", "notionalFloor": "2500000", "maintMarginRatio": "0.5", - "cum": "652520.0" + "cum": "651745.0" } } ], @@ -89678,15 +89138,15 @@ "symbol": "VOXEL/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.02, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.02", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -89694,55 +89154,21 @@ "tier": 2.0, "symbol": "VOXEL/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, - "info": { - "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "25.0" - } - }, - { - "tier": 3.0, - "symbol": "VOXEL/USDT:USDT", - "currency": "USDT", "minNotional": 10000.0, - "maxNotional": 25000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, - "info": { - "bracket": "3", - "initialLeverage": "6", - "notionalCap": "25000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "275.0" - } - }, - { - "tier": 4.0, - "symbol": "VOXEL/USDT:USDT", - "currency": "USDT", - "minNotional": 25000.0, "maxNotional": 50000.0, "maintenanceMarginRate": 0.1, "maxLeverage": 5.0, "info": { - "bracket": "4", + "bracket": "2", "initialLeverage": "5", "notionalCap": "50000", - "notionalFloor": "25000", + "notionalFloor": "10000", "maintMarginRatio": "0.1", - "cum": "1525.0" + "cum": "500.0" } }, { - "tier": 5.0, + "tier": 3.0, "symbol": "VOXEL/USDT:USDT", "currency": "USDT", "minNotional": 50000.0, @@ -89750,16 +89176,16 @@ "maintenanceMarginRate": 0.125, "maxLeverage": 4.0, "info": { - "bracket": "5", + "bracket": "3", "initialLeverage": "4", "notionalCap": "100000", "notionalFloor": "50000", "maintMarginRatio": "0.125", - "cum": "2775.0" + "cum": "1750.0" } }, { - "tier": 6.0, + "tier": 4.0, "symbol": "VOXEL/USDT:USDT", "currency": "USDT", "minNotional": 100000.0, @@ -89767,46 +89193,46 @@ "maintenanceMarginRate": 0.1667, "maxLeverage": 3.0, "info": { - "bracket": "6", + "bracket": "4", "initialLeverage": "3", "notionalCap": "250000", "notionalFloor": "100000", "maintMarginRatio": "0.1667", - "cum": "6945.0" + "cum": "5920.0" } }, { - "tier": 7.0, + "tier": 5.0, "symbol": "VOXEL/USDT:USDT", "currency": "USDT", "minNotional": 250000.0, - "maxNotional": 500000.0, + "maxNotional": 2500000.0, "maintenanceMarginRate": 0.25, "maxLeverage": 2.0, "info": { - "bracket": "7", + "bracket": "5", "initialLeverage": "2", - "notionalCap": "500000", + "notionalCap": "2500000", "notionalFloor": "250000", "maintMarginRatio": "0.25", - "cum": "27770.0" + "cum": "26745.0" } }, { - "tier": 8.0, + "tier": 6.0, "symbol": "VOXEL/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": "651745.0" } } ], @@ -90878,6 +90304,144 @@ } } ], + "WET/USDT:USDT": [ + { + "tier": 1.0, + "symbol": "WET/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": "WET/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": "50.0" + } + }, + { + "tier": 3.0, + "symbol": "WET/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": "300.0" + } + }, + { + "tier": 4.0, + "symbol": "WET/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": "1300.0" + } + }, + { + "tier": 5.0, + "symbol": "WET/USDT:USDT", + "currency": "USDT", + "minNotional": 50000.0, + "maxNotional": 250000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, + "info": { + "bracket": "5", + "initialLeverage": "4", + "notionalCap": "250000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "2550.0" + } + }, + { + "tier": 6.0, + "symbol": "WET/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": "WET/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": "WET/USDT:USDT", + "currency": "USDT", + "minNotional": 7500000.0, + "maxNotional": 12500000.0, + "maintenanceMarginRate": 0.5, + "maxLeverage": 1.0, + "info": { + "bracket": "8", + "initialLeverage": "1", + "notionalCap": "12500000", + "notionalFloor": "7500000", + "maintMarginRatio": "0.5", + "cum": "1929625.0" + } + } + ], "WIF/USDC:USDC": [ { "tier": 1.0, @@ -94139,15 +93703,15 @@ "symbol": "YALA/USDT:USDT", "currency": "USDT", "minNotional": 0.0, - "maxNotional": 5000.0, - "maintenanceMarginRate": 0.015, + "maxNotional": 10000.0, + "maintenanceMarginRate": 0.05, "maxLeverage": 10.0, "info": { "bracket": "1", "initialLeverage": "10", - "notionalCap": "5000", + "notionalCap": "10000", "notionalFloor": "0", - "maintMarginRatio": "0.015", + "maintMarginRatio": "0.05", "cum": "0.0" } }, @@ -94155,119 +93719,85 @@ "tier": 2.0, "symbol": "YALA/USDT:USDT", "currency": "USDT", - "minNotional": 5000.0, - "maxNotional": 10000.0, - "maintenanceMarginRate": 0.025, - "maxLeverage": 8.0, + "minNotional": 10000.0, + "maxNotional": 50000.0, + "maintenanceMarginRate": 0.1, + "maxLeverage": 5.0, "info": { "bracket": "2", - "initialLeverage": "8", - "notionalCap": "10000", - "notionalFloor": "5000", - "maintMarginRatio": "0.025", - "cum": "50.0" + "initialLeverage": "5", + "notionalCap": "50000", + "notionalFloor": "10000", + "maintMarginRatio": "0.1", + "cum": "500.0" } }, { "tier": 3.0, "symbol": "YALA/USDT:USDT", "currency": "USDT", - "minNotional": 10000.0, - "maxNotional": 20000.0, - "maintenanceMarginRate": 0.05, - "maxLeverage": 6.0, + "minNotional": 50000.0, + "maxNotional": 100000.0, + "maintenanceMarginRate": 0.125, + "maxLeverage": 4.0, "info": { "bracket": "3", - "initialLeverage": "6", - "notionalCap": "20000", - "notionalFloor": "10000", - "maintMarginRatio": "0.05", - "cum": "300.0" + "initialLeverage": "4", + "notionalCap": "100000", + "notionalFloor": "50000", + "maintMarginRatio": "0.125", + "cum": "1750.0" } }, { "tier": 4.0, "symbol": "YALA/USDT:USDT", "currency": "USDT", - "minNotional": 20000.0, - "maxNotional": 50000.0, - "maintenanceMarginRate": 0.1, - "maxLeverage": 5.0, + "minNotional": 100000.0, + "maxNotional": 250000.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": "250000", + "notionalFloor": "100000", + "maintMarginRatio": "0.1667", + "cum": "5920.0" } }, { "tier": 5.0, "symbol": "YALA/USDT:USDT", "currency": "USDT", - "minNotional": 50000.0, - "maxNotional": 250000.0, - "maintenanceMarginRate": 0.125, - "maxLeverage": 4.0, + "minNotional": 250000.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": "250000", + "maintMarginRatio": "0.25", + "cum": "26745.0" } }, { "tier": 6.0, "symbol": "YALA/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": "YALA/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": "YALA/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": "651745.0" } } ], From 878bd7cbc7584097f328e58bf6858bcab7c79fed Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 11 Dec 2025 06:35:27 +0100 Subject: [PATCH 213/243] chore: pin pycares for now --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index 6cd25e43b..5da6d5722 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,6 +8,8 @@ ta-lib==0.6.8 technical==1.5.3 ccxt==4.5.26 +# TODO: remove pycares pin must wait until aiodns releases a new version: # https://github.com/aio-libs/aiodns/issues/214 +pycares==4.11.0 cryptography==46.0.3 aiohttp==3.13.2 SQLAlchemy==2.0.44 From 451eef5c99e2e962f142207ebb118ae347b8e9f3 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 11 Dec 2025 06:49:56 +0100 Subject: [PATCH 214/243] test: further test simplifications --- tests/exchange/test_exchange.py | 2 +- .../freqtradebot/test_stoploss_on_exchange.py | 59 +++++++++++-------- 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 8c01500fb..a846cb3e6 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -4108,7 +4108,7 @@ def test_fetch_order_or_stoploss_order(default_conf, mocker): fetch_order_mock = MagicMock() fetch_stoploss_order_mock = MagicMock() mocker.patch.multiple( - EXMS, + exchange, fetch_order=fetch_order_mock, fetch_stoploss_order=fetch_stoploss_order_mock, ) diff --git a/tests/freqtradebot/test_stoploss_on_exchange.py b/tests/freqtradebot/test_stoploss_on_exchange.py index 1cfedbf7c..a3271e4ea 100644 --- a/tests/freqtradebot/test_stoploss_on_exchange.py +++ b/tests/freqtradebot/test_stoploss_on_exchange.py @@ -256,9 +256,12 @@ def test_handle_stoploss_on_exchange_emergency( stoploss = MagicMock(side_effect=InvalidOrderException()) assert trade.has_open_sl_orders is True Trade.commit() - mocker.patch(f"{EXMS}.cancel_stoploss_order_with_result", side_effect=InvalidOrderException()) - mocker.patch(f"{EXMS}.fetch_stoploss_order", stoploss_order_cancelled) - mocker.patch(f"{EXMS}.create_stoploss", stoploss) + mocker.patch.multiple( + freqtrade.exchange, + cancel_stoploss_order_with_result=MagicMock(side_effect=InvalidOrderException()), + fetch_stoploss_order=stoploss_order_cancelled, + create_stoploss=stoploss, + ) assert freqtrade.handle_stoploss_on_exchange(trade) is False assert trade.has_open_sl_orders is False assert trade.is_open is False @@ -315,7 +318,7 @@ def test_handle_stoploss_on_exchange_partial( "amount": enter_order["amount"], } ) - mocker.patch(f"{EXMS}.fetch_stoploss_order", stoploss_order_hit) + mocker.patch.multiple(freqtrade.exchange, fetch_stoploss_order=stoploss_order_hit) assert freqtrade.handle_stoploss_on_exchange(trade) is False # Stoploss filled partially ... assert trade.amount == 15 @@ -387,8 +390,11 @@ def test_handle_stoploss_on_exchange_partial_cancel_here( "amount": enter_order["amount"], } ) - mocker.patch(f"{EXMS}.fetch_stoploss_order", stoploss_order_hit) - mocker.patch(f"{EXMS}.cancel_stoploss_order_with_result", stoploss_order_cancel) + mocker.patch.multiple( + freqtrade.exchange, + fetch_stoploss_order=stoploss_order_hit, + cancel_stoploss_order_with_result=stoploss_order_cancel, + ) time_machine.shift(timedelta(minutes=15)) assert freqtrade.handle_stoploss_on_exchange(trade) is False @@ -412,20 +418,20 @@ def test_handle_sle_cancel_cant_recreate( mocker.patch.multiple( EXMS, fetch_ticker=MagicMock(return_value={"bid": 1.9, "ask": 2.2, "last": 1.9}), + get_fee=fee, + ) + freqtrade = FreqtradeBot(default_conf_usdt) + mocker.patch.multiple( + freqtrade.exchange, create_order=MagicMock( side_effect=[ enter_order, exit_order, ] ), - get_fee=fee, - ) - mocker.patch.multiple( - EXMS, fetch_stoploss_order=MagicMock(return_value={"status": "canceled", "id": "100"}), create_stoploss=MagicMock(side_effect=ExchangeError()), ) - freqtrade = FreqtradeBot(default_conf_usdt) patch_get_signal(freqtrade, enter_short=is_short, enter_long=not is_short) freqtrade.enter_positions() @@ -861,20 +867,9 @@ def test_handle_stoploss_on_exchange_custom_stop( mocker.patch.multiple( EXMS, fetch_ticker=MagicMock(return_value={"bid": 1.9, "ask": 2.2, "last": 1.9}), - create_order=MagicMock( - side_effect=[ - enter_order, - exit_order, - ] - ), get_fee=fee, is_cancel_order_result_suitable=MagicMock(return_value=True), ) - mocker.patch.multiple( - EXMS, - create_stoploss=stoploss, - stoploss_adjust=MagicMock(return_value=True), - ) # enabling TSL default_conf_usdt["use_custom_stoploss"] = True @@ -883,6 +878,17 @@ def test_handle_stoploss_on_exchange_custom_stop( default_conf_usdt["minimal_roi"]["0"] = 999999999 freqtrade = get_patched_freqtradebot(mocker, default_conf_usdt) + mocker.patch.multiple( + freqtrade.exchange, + create_order=MagicMock( + side_effect=[ + enter_order, + exit_order, + ] + ), + create_stoploss=stoploss, + stoploss_adjust=MagicMock(return_value=True), + ) # enabling stoploss on exchange freqtrade.strategy.order_types["stoploss_on_exchange"] = True @@ -927,8 +933,11 @@ def test_handle_stoploss_on_exchange_custom_stop( x["id"] = order_id return x - mocker.patch(f"{EXMS}.fetch_stoploss_order", MagicMock(fetch_stoploss_order_mock)) - mocker.patch(f"{EXMS}.cancel_stoploss_order", return_value=slo_canceled) + mocker.patch.multiple( + freqtrade.exchange, + fetch_stoploss_order=MagicMock(fetch_stoploss_order_mock), + cancel_stoploss_order=MagicMock(return_value=slo_canceled), + ) assert freqtrade.handle_trade(trade) is False assert freqtrade.handle_stoploss_on_exchange(trade) is False @@ -1231,7 +1240,7 @@ def test_may_execute_trade_exit_after_stoploss_on_exchange_hit( "trades": None, } ) - mocker.patch(f"{EXMS}.fetch_stoploss_order", stoploss_executed) + mocker.patch.object(freqtrade.exchange, "fetch_stoploss_order", stoploss_executed) freqtrade.exit_positions(trades) assert trade.has_open_sl_orders is False From d4ced7b4160815ea3c510bb76c8430598142276d Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 11 Dec 2025 07:05:58 +0100 Subject: [PATCH 215/243] docs: improve doc wording --- docs/strategy-callbacks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/strategy-callbacks.md b/docs/strategy-callbacks.md index 727075215..c24857612 100644 --- a/docs/strategy-callbacks.md +++ b/docs/strategy-callbacks.md @@ -644,7 +644,7 @@ Each of these methods are called right before placing an order on the exchange. If your custom pricing function return None or an invalid value, price will fall back to `proposed_rate`, which is based on the regular pricing configuration. !!! Note - Using custom_entry_price, the Trade object will be available as soon as the first entry order associated with the trade is created, for the first entry, `trade` parameter value will be `None`. + When using `custom_entry_price()`, the Trade object will be available as soon as the first entry order associated with the trade is created, for the first entry, `trade` parameter value will be `None`. ### Custom order entry and exit price example From 4c7944ac77997468dfba867671e03e39b5e0d665 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 11 Dec 2025 07:09:23 +0100 Subject: [PATCH 216/243] chore: update comment wording --- freqtrade/freqtradebot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 09afd8528..eae16c158 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -2101,7 +2101,7 @@ class FreqtradeBot(LoggingMixin): order_type = ordertype or self.strategy.order_types[exit_type] if exit_check.exit_type == ExitType.EMERGENCY_EXIT: - # Emergency sells (default to market!) + # Emergency exits (default to market!) order_type = self.strategy.order_types.get("emergency_exit", "market") amount = self._safe_exit_amount(trade, trade.pair, sub_trade_amt or trade.amount) @@ -2130,7 +2130,7 @@ class FreqtradeBot(LoggingMixin): return False try: - # Execute sell and update trade record + # Execute exit and update trade record order = self.exchange.create_order( pair=trade.pair, ordertype=order_type, @@ -2157,7 +2157,7 @@ class FreqtradeBot(LoggingMixin): trade.exit_reason = exit_reason self._notify_exit(trade, order_type, sub_trade=bool(sub_trade_amt), order=order_obj) - # In case of market sell orders the order can be closed immediately + # In case of market exit orders the order can be closed immediately if order.get("status", "unknown") in ("closed", "expired"): self.update_trade_state(trade, order_obj.order_id, order) Trade.commit() From 12206f028b00fff572b0512495b87d75b0b3081a Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 11 Dec 2025 07:16:28 +0100 Subject: [PATCH 217/243] chore: comment wording improvements --- freqtrade/freqtradebot.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index eae16c158..80de52025 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -2011,14 +2011,14 @@ class FreqtradeBot(LoggingMixin): def _safe_exit_amount(self, trade: Trade, pair: str, amount: float) -> float: """ - Get sellable amount. + Get exitable amount. Should be trade.amount - but will fall back to the available amount if necessary. This should cover cases where get_real_amount() was not able to update the amount for whatever reason. :param trade: Trade we're working with - :param pair: Pair we're trying to sell + :param pair: Pair we're trying to exit :param amount: amount we expect to be available - :return: amount to sell + :return: amount to exit :raise: DependencyException: if available balance is not within 2% of the available amount. """ # Update wallets to ensure amounts tied up in a stoploss is now free! @@ -2058,7 +2058,7 @@ class FreqtradeBot(LoggingMixin): """ Executes a trade exit for the given trade and limit :param trade: Trade instance - :param limit: limit rate for the sell order + :param limit: limit rate for the exit order :param exit_check: CheckTuple with signal and reason :return: True if it succeeds False """ From 97e2e0a405760c9b850c2792281794ce4589a983 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 11 Dec 2025 18:23:58 +0100 Subject: [PATCH 218/243] chore: remove hard-pin of pycares --- requirements.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 5da6d5722..6cd25e43b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,8 +8,6 @@ ta-lib==0.6.8 technical==1.5.3 ccxt==4.5.26 -# TODO: remove pycares pin must wait until aiodns releases a new version: # https://github.com/aio-libs/aiodns/issues/214 -pycares==4.11.0 cryptography==46.0.3 aiohttp==3.13.2 SQLAlchemy==2.0.44 From 93bde7dc4676314a2efcbf4a2087a736462e8758 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 12 Dec 2025 06:52:11 +0100 Subject: [PATCH 219/243] fix: support binance algo orders closes #12610 --- 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 7d9c616bb..37c355d4d 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 FtHas, Tickers +from freqtrade.exchange.exchange_types import CcxtOrder, 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 @@ -145,6 +145,20 @@ 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}) + return self.fetch_order(order_id, pair, params) + + 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, From 6d2c30abca93c0f8767ea2e7620b45c73de660a2 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 12 Dec 2025 06:54:29 +0100 Subject: [PATCH 220/243] chore: bump ccxt to 4.5.27 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 6cd25e43b..d2dcb63eb 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.26 +ccxt==4.5.27 cryptography==46.0.3 aiohttp==3.13.2 SQLAlchemy==2.0.44 From 51e0b204b6131d672a1c2688f47f8726abba4a5c Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 13 Dec 2025 18:30:30 +0100 Subject: [PATCH 221/243] docs: improve download data docs --- docs/data-download.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/data-download.md b/docs/data-download.md index c2b104b1b..4339e9862 100644 --- a/docs/data-download.md +++ b/docs/data-download.md @@ -60,6 +60,7 @@ freqtrade download-data --exchange binance --pairs ".*/USDT" * Given starting points are ignored if data is already available, downloading only missing data up to today. * Use `--timeframes` to specify what timeframe download the historical candle (OHLCV) data for. Default is `--timeframes 1m 5m` which will download 1-minute and 5-minute data. * To use exchange, timeframe and list of pairs as defined in your configuration file, use the `-c/--config` option. With this, the script uses the whitelist defined in the config as the list of currency pairs to download data for and does not require the pairs.json file. You can combine `-c/--config` with most other options. +* When downloading futures data (`--trading-mode futures` or a configuration specifying futures mode), freqtrade will automatically download the necessary candle types (e.g. `mark` and `funding_rate` candles) unless specified otherwise via `--candle-types`. ??? Note "Permission denied errors" If your configuration directory `user_data` was made by docker, you may get the following error: From 83b372a32d2a254da308813b34a03f63ef880d7b Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 13 Dec 2025 19:30:21 +0100 Subject: [PATCH 222/243] docs: add "Funding fee adjustment" to deprecated docs --- docs/deprecated.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/deprecated.md b/docs/deprecated.md index f6ef8768f..6af1e0d76 100644 --- a/docs/deprecated.md +++ b/docs/deprecated.md @@ -98,3 +98,33 @@ Please use configuration based [log setup](advanced-setup.md#advanced-logging) i The edge module has been deprecated in 2023.9 and removed in 2025.6. All functionalities of edge have been removed, and having edge configured will result in an error. + +## Adjustment to dynamic funding rate handling + +With version 2025.12, the handling of dynamic funding rates has been adjusted to also support dynamic funding rates down to 1h funding intervals. +As a consequence, the mark and funding rate timeframes have been changed to 1h for every supported futures exchange. + +As the timeframe for both mark and funding_fee candles has changed (usually from 8h to 1h) - already downloaded data will have to be adjusted or partially re-downloaded. +You can either re-download everything (`freqtrade download-data [...] --erase` - :warning: can take a long time) - or download the updated data selectively. + +### Selective data re-download + +The script below should serve as an example - you may need to adjust the timeframe and exchange to your needs! + +``` bash +# Cleanup no longer needed data +rm user_data/data//futures/*-mark-* +rm user_data/data//futures/*-funding_rate-* + +# download new data (only required once to fix the mark and funding fee data) +freqtrade download-data -t 1h --trading-mode futures --candle-types funding_rate mark [...] --timerange + +``` + +The result of the above will be that your funding_rates and mark data will have the 1h timeframe. +you can verify this with `freqtrade list-data --exchange --show`. + +!!! Note "Additional arguments" + 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. From 31d3a19836cf5d011d29f9da7f9b60d580e8595b Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 14 Dec 2025 13:49:39 +0100 Subject: [PATCH 223/243] feat: support candle_type parameter via API download --- freqtrade/rpc/api_server/api_download_data.py | 2 ++ freqtrade/rpc/api_server/api_schemas.py | 1 + freqtrade/rpc/api_server/api_v1.py | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/freqtrade/rpc/api_server/api_download_data.py b/freqtrade/rpc/api_server/api_download_data.py index 6e446b063..b755474c9 100644 --- a/freqtrade/rpc/api_server/api_download_data.py +++ b/freqtrade/rpc/api_server/api_download_data.py @@ -63,6 +63,8 @@ def pairlists_evaluate( config_loc["timeframes"] = payload.timeframes config_loc["erase"] = payload.erase config_loc["download_trades"] = payload.download_trades + if payload.candle_types is not None: + config_loc["candle_types"] = payload.candle_types handleExchangePayload(payload, config_loc) diff --git a/freqtrade/rpc/api_server/api_schemas.py b/freqtrade/rpc/api_server/api_schemas.py index 21a93807c..51507fb04 100644 --- a/freqtrade/rpc/api_server/api_schemas.py +++ b/freqtrade/rpc/api_server/api_schemas.py @@ -506,6 +506,7 @@ class DownloadDataPayload(ExchangeModePayloadMixin, BaseModel): timerange: str | None = None erase: bool = False download_trades: bool = False + candle_types: list[str] | None = None @model_validator(mode="before") def check_mutually_exclusive(cls, values): diff --git a/freqtrade/rpc/api_server/api_v1.py b/freqtrade/rpc/api_server/api_v1.py index dc9682b09..3d1ec8433 100644 --- a/freqtrade/rpc/api_server/api_v1.py +++ b/freqtrade/rpc/api_server/api_v1.py @@ -91,7 +91,8 @@ logger = logging.getLogger(__name__) # 2.41: Add download-data endpoint # 2.42: Add /pair_history endpoint with live data # 2.43: Add /profit_all endpoint -API_VERSION = 2.43 +# 2.44: Add candle_types parameter to download-data endpoint +API_VERSION = 2.44 # Public API, requires no auth. router_public = APIRouter() From b406219515a964601b5051cbf56d5c81ae9788d6 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 14 Dec 2025 15:51:06 +0100 Subject: [PATCH 224/243] test: add candle_types test --- tests/rpc/test_rpc_apiserver.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/rpc/test_rpc_apiserver.py b/tests/rpc/test_rpc_apiserver.py index aa5483e88..c4e4978f9 100644 --- a/tests/rpc/test_rpc_apiserver.py +++ b/tests/rpc/test_rpc_apiserver.py @@ -3251,6 +3251,7 @@ def test_api_download_data(botclient, mocker, tmp_path): body = { "pairs": ["ETH/BTC", "XRP/BTC"], "timeframes": ["5m"], + "candle_types": ["spot"], } # Fail, already running From bd5630a104977b504053cd2c6b3cffca79d6dcef Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 14 Dec 2025 16:19:37 +0100 Subject: [PATCH 225/243] test: simplify test mock --- tests/exchange/test_exchange.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 4a1f4ae5f..4ec983cdf 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -2388,8 +2388,8 @@ async def test__async_get_historic_ohlcv(default_conf, mocker, caplog, exchange_ 5, # volume (in quote currency) ] ] - mocker.patch(f"{EXMS}.verify_candle_type_support", MagicMock()) exchange = get_patched_exchange(mocker, default_conf, exchange=exchange_name) + mocker.patch.object(exchange, "verify_candle_type_support") # Monkey-patch async function exchange._api_async.fetch_ohlcv = get_mock_coro(ohlcv) @@ -2439,8 +2439,8 @@ def test_refresh_latest_ohlcv(mocker, default_conf_usdt, caplog, candle_type) -> ] caplog.set_level(logging.DEBUG) - mocker.patch(f"{EXMS}.verify_candle_type_support", MagicMock()) exchange = get_patched_exchange(mocker, default_conf_usdt) + mocker.patch.object(exchange, "verify_candle_type_support") exchange._api_async.fetch_ohlcv = get_mock_coro(ohlcv) pairs = [("IOTA/USDT", "5m", candle_type), ("XRP/USDT", "5m", candle_type)] @@ -2690,8 +2690,8 @@ def test_refresh_latest_ohlcv_cache(mocker, default_conf, candle_type, time_mach ohlcv = generate_test_data_raw("1h", 100, start.strftime("%Y-%m-%d")) time_machine.move_to(start + timedelta(hours=99, minutes=30)) - mocker.patch(f"{EXMS}.verify_candle_type_support", MagicMock()) exchange = get_patched_exchange(mocker, default_conf) + mocker.patch.object(exchange, "verify_candle_type_support") exchange._set_startup_candle_count(default_conf) mocker.patch(f"{EXMS}.ohlcv_candle_limit", return_value=100) From 2e3d2763046115e0dee042bb2c7603a229aa1c7c Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 14 Dec 2025 17:13:03 +0100 Subject: [PATCH 226/243] docs: Add strategy docs to migrate funding fees --- docs/deprecated.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/deprecated.md b/docs/deprecated.md index 6af1e0d76..ce3bf3b95 100644 --- a/docs/deprecated.md +++ b/docs/deprecated.md @@ -107,6 +107,13 @@ As a consequence, the mark and funding rate timeframes have been changed to 1h f As the timeframe for both mark and funding_fee candles has changed (usually from 8h to 1h) - already downloaded data will have to be adjusted or partially re-downloaded. You can either re-download everything (`freqtrade download-data [...] --erase` - :warning: can take a long time) - or download the updated data selectively. +### Strategy + +Most strategies should not need adjustments to continue to work as expected - however, strategies using `@informative("8h", candle_type="funding_rate")` or similar will have to switch the timeframe to 1h. +The same is true for `dp.get_pair_dataframe(metadata["pair"], "8h", candle_type="funding_rate")` - which will need to be switched to 1h. + +freqtrade will auto-adjust the timeframe and return `funding_rates` despite the wrongly given timeframe. It'll issue a warning - and may still break your strategy. + ### Selective data re-download The script below should serve as an example - you may need to adjust the timeframe and exchange to your needs! From 0ed3bdc747839465c9ebd7e9f65e3dc9b1d2f200 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 12 Dec 2025 06:23:55 +0100 Subject: [PATCH 227/243] test: add test for force exit API logic --- tests/rpc/test_rpc_apiserver.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/rpc/test_rpc_apiserver.py b/tests/rpc/test_rpc_apiserver.py index beb772712..768858aac 100644 --- a/tests/rpc/test_rpc_apiserver.py +++ b/tests/rpc/test_rpc_apiserver.py @@ -1852,9 +1852,35 @@ def test_api_forceexit(botclient, mocker, ticker, fee, markets): Trade.rollback() trade = Trade.get_trades([Trade.id == 5]).first() + last_order = trade.orders[-1] + + assert last_order.side == "sell" + assert last_order.status == "closed" + assert last_order.order_type == "market" + assert last_order.amount == 23 assert pytest.approx(trade.amount) == 100 assert trade.is_open is True + # Test with explicit price + rc = client_post( + client, + f"{BASE_URI}/forceexit", + data={"tradeid": "5", "ordertype": "limit", "amount": 25, "price": 0.12345}, + ) + assert_response(rc) + assert rc.json() == {"result": "Created exit order for trade 5."} + Trade.rollback() + + trade = Trade.get_trades([Trade.id == 5]).first() + last_order = trade.orders[-1] + assert last_order.status == "closed" + assert last_order.order_type == "limit" + assert pytest.approx(last_order.safe_price) == 0.12345 + assert pytest.approx(last_order.amount) == 25 + + assert pytest.approx(trade.amount) == 75 + assert trade.is_open is True + rc = client_post(client, f"{BASE_URI}/forceexit", data={"tradeid": "5"}) assert_response(rc) assert rc.json() == {"result": "Created exit order for trade 5."} From bac6219cc13b46a1482df104931cb2afa9a929f5 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 12 Dec 2025 06:24:21 +0100 Subject: [PATCH 228/243] feat: add price to force-exit --- freqtrade/rpc/api_server/api_schemas.py | 1 + freqtrade/rpc/api_server/api_v1.py | 7 +++++-- freqtrade/rpc/rpc.py | 26 +++++++++++++++++++------ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/freqtrade/rpc/api_server/api_schemas.py b/freqtrade/rpc/api_server/api_schemas.py index 51507fb04..0dcd95edf 100644 --- a/freqtrade/rpc/api_server/api_schemas.py +++ b/freqtrade/rpc/api_server/api_schemas.py @@ -426,6 +426,7 @@ class ForceExitPayload(BaseModel): tradeid: str | int ordertype: OrderTypeValues | None = None amount: float | None = None + price: float | None = None class BlacklistPayload(BaseModel): diff --git a/freqtrade/rpc/api_server/api_v1.py b/freqtrade/rpc/api_server/api_v1.py index 3d1ec8433..39c8e9821 100644 --- a/freqtrade/rpc/api_server/api_v1.py +++ b/freqtrade/rpc/api_server/api_v1.py @@ -92,7 +92,8 @@ logger = logging.getLogger(__name__) # 2.42: Add /pair_history endpoint with live data # 2.43: Add /profit_all endpoint # 2.44: Add candle_types parameter to download-data endpoint -API_VERSION = 2.44 +# 2.45: Add price to forceexit endpoint +API_VERSION = 2.45 # Public API, requires no auth. router_public = APIRouter() @@ -325,7 +326,9 @@ def force_entry(payload: ForceEnterPayload, rpc: RPC = Depends(get_rpc)): @router.post("/forcesell", response_model=ResultMsg, tags=["trading"]) def forceexit(payload: ForceExitPayload, rpc: RPC = Depends(get_rpc)): ordertype = payload.ordertype.value if payload.ordertype else None - return rpc._rpc_force_exit(str(payload.tradeid), ordertype, amount=payload.amount) + return rpc._rpc_force_exit( + str(payload.tradeid), ordertype, amount=payload.amount, price=payload.price + ) @router.get("/blacklist", response_model=BlacklistResponse, tags=["info", "pairlist"]) diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index 22e457eef..b7630c47b 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -940,7 +940,11 @@ class RPC: return {"status": "Reloaded from orders from exchange"} def __exec_force_exit( - self, trade: Trade, ordertype: str | None, amount: float | None = None + self, + trade: Trade, + ordertype: str | None, + amount: float | None = None, + price: float | None = None, ) -> bool: # Check if there is there are open orders trade_entry_cancelation_registry = [] @@ -964,8 +968,13 @@ class RPC: # Order cancellation failed, so we can't exit. return False # Get current rate and execute sell - current_rate = self._freqtrade.exchange.get_rate( - trade.pair, side="exit", is_short=trade.is_short, refresh=True + + current_rate = ( + self._freqtrade.exchange.get_rate( + trade.pair, side="exit", is_short=trade.is_short, refresh=True + ) + if ordertype == "market" or price is None + else price ) exit_check = ExitCheckTuple(exit_type=ExitType.FORCE_EXIT) order_type = ordertype or self._freqtrade.strategy.order_types.get( @@ -990,11 +999,16 @@ class RPC: return False def _rpc_force_exit( - self, trade_id: str, ordertype: str | None = None, *, amount: float | None = None + self, + trade_id: str, + ordertype: str | None = None, + *, + amount: float | None = None, + price: float | None = None, ) -> dict[str, str]: """ Handler for forceexit . - Sells the given trade at current price + exts the given trade. Uses current price if price is None. """ if self._freqtrade.state == State.STOPPED: @@ -1024,7 +1038,7 @@ class RPC: logger.warning("force_exit: Invalid argument received") raise RPCException("invalid argument") - result = self.__exec_force_exit(trade, ordertype, amount) + result = self.__exec_force_exit(trade, ordertype, amount, price) Trade.commit() self._freqtrade.wallets.update() if not result: From e26529b6952bf54d462d48f1e3b459e765176985 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 12 Dec 2025 06:36:10 +0100 Subject: [PATCH 229/243] feat: Don't run custom_exit_price callback when exiting with price --- freqtrade/freqtradebot.py | 26 +++++++++++++++----------- freqtrade/rpc/rpc.py | 7 ++++++- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 80de52025..8f34ee748 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -2054,6 +2054,7 @@ class FreqtradeBot(LoggingMixin): exit_tag: str | None = None, ordertype: str | None = None, sub_trade_amt: float | None = None, + skip_custom_exit_price: bool = False, ) -> bool: """ Executes a trade exit for the given trade and limit @@ -2080,26 +2081,29 @@ class FreqtradeBot(LoggingMixin): ): exit_type = "stoploss" + order_type = ordertype or self.strategy.order_types[exit_type] # set custom_exit_price if available proposed_limit_rate = limit + custom_exit_price = limit + current_profit = trade.calc_profit_ratio(limit) - custom_exit_price = strategy_safe_wrapper( - self.strategy.custom_exit_price, default_retval=proposed_limit_rate - )( - pair=trade.pair, - trade=trade, - current_time=datetime.now(UTC), - proposed_rate=proposed_limit_rate, - current_profit=current_profit, - exit_tag=exit_reason, - ) + if order_type == "limit" and not skip_custom_exit_price: + custom_exit_price = strategy_safe_wrapper( + self.strategy.custom_exit_price, default_retval=proposed_limit_rate + )( + pair=trade.pair, + trade=trade, + current_time=datetime.now(UTC), + proposed_rate=proposed_limit_rate, + current_profit=current_profit, + exit_tag=exit_reason, + ) limit = self.get_valid_price(custom_exit_price, proposed_limit_rate) # First cancelling stoploss on exchange ... trade = self.cancel_stoploss_on_exchange(trade, allow_nonblocking=True) - order_type = ordertype or self.strategy.order_types[exit_type] if exit_check.exit_type == ExitType.EMERGENCY_EXIT: # Emergency exits (default to market!) order_type = self.strategy.order_types.get("emergency_exit", "market") diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index b7630c47b..8a8376afb 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -992,7 +992,12 @@ class RPC: sub_amount = amount self._freqtrade.execute_trade_exit( - trade, current_rate, exit_check, ordertype=order_type, sub_trade_amt=sub_amount + trade, + current_rate, + exit_check, + ordertype=order_type, + sub_trade_amt=sub_amount, + skip_custom_exit_price=price is not None and ordertype == "limit", ) return True From fe187310578b25a5cfa4b783d8268ac5bf68cc7d Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 12 Dec 2025 06:46:15 +0100 Subject: [PATCH 230/243] test: slightly improve custom_exit_rate test --- tests/freqtradebot/test_freqtradebot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/freqtradebot/test_freqtradebot.py b/tests/freqtradebot/test_freqtradebot.py index f8b790c44..d08daa2f1 100644 --- a/tests/freqtradebot/test_freqtradebot.py +++ b/tests/freqtradebot/test_freqtradebot.py @@ -3092,7 +3092,7 @@ def test_execute_trade_exit_custom_exit_price( "exit_reason": "foo", "open_date": ANY, "close_date": ANY, - "close_rate": ANY, + "close_rate": 2.25, # the custom exit price "sub_trade": False, "cumulative_profit": 0.0, "stake_amount": pytest.approx(60), From 13c86452e9d3af5b5657069f9f38c1dbfa5e9dba Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 14 Dec 2025 18:29:37 +0100 Subject: [PATCH 231/243] refactor: only assign order_type once --- freqtrade/freqtradebot.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 8f34ee748..4c5207e93 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -2081,7 +2081,12 @@ class FreqtradeBot(LoggingMixin): ): exit_type = "stoploss" - order_type = ordertype or self.strategy.order_types[exit_type] + order_type = ( + (ordertype or self.strategy.order_types[exit_type]) + if exit_check.exit_type != ExitType.EMERGENCY_EXIT + else self.strategy.order_types.get("emergency_exit", "market") + ) + # set custom_exit_price if available proposed_limit_rate = limit custom_exit_price = limit @@ -2104,10 +2109,6 @@ class FreqtradeBot(LoggingMixin): # First cancelling stoploss on exchange ... trade = self.cancel_stoploss_on_exchange(trade, allow_nonblocking=True) - if exit_check.exit_type == ExitType.EMERGENCY_EXIT: - # Emergency exits (default to market!) - order_type = self.strategy.order_types.get("emergency_exit", "market") - amount = self._safe_exit_amount(trade, trade.pair, sub_trade_amt or trade.amount) time_in_force = self.strategy.order_time_in_force["exit"] From a16d2a1ef90de96352cbf82d5dc6e5d3579d96b8 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 14 Dec 2025 18:29:43 +0100 Subject: [PATCH 232/243] chore: fix typo --- freqtrade/rpc/rpc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index 8a8376afb..81bb52ce5 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -1013,7 +1013,7 @@ class RPC: ) -> dict[str, str]: """ Handler for forceexit . - exts the given trade. Uses current price if price is None. + exits the given trade. Uses current price if price is None. """ if self._freqtrade.state == State.STOPPED: From 57d1e2427521d5b8ddd9e1bc3258aeb92268d0b6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 03:01:39 +0000 Subject: [PATCH 233/243] chore(deps-dev): bump pytest from 9.0.1 to 9.0.2 in the pytest group Bumps the pytest group with 1 update: [pytest](https://github.com/pytest-dev/pytest). Updates `pytest` from 9.0.1 to 9.0.2 - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/9.0.1...9.0.2) --- updated-dependencies: - dependency-name: pytest dependency-version: 9.0.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: pytest ... 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 c03470653..3e522955c 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -9,7 +9,7 @@ ruff==0.14.7 mypy==1.19.0 pre-commit==4.5.0 -pytest==9.0.1 +pytest==9.0.2 pytest-asyncio==1.3.0 pytest-cov==7.0.0 pytest-mock==3.15.1 From 293989f0194c1516e5b3f8c999ad7a54d8be2877 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 03:01:59 +0000 Subject: [PATCH 234/243] chore(deps): bump fastapi from 0.123.0 to 0.124.0 Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.123.0 to 0.124.0. - [Release notes](https://github.com/fastapi/fastapi/releases) - [Commits](https://github.com/fastapi/fastapi/compare/0.123.0...0.124.0) --- updated-dependencies: - dependency-name: fastapi dependency-version: 0.124.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d2dcb63eb..b3488cf5e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -37,7 +37,7 @@ orjson==3.11.4 sdnotify==0.3.2 # API Server -fastapi==0.123.0 +fastapi==0.124.0 pydantic==2.12.5 uvicorn==0.38.0 pyjwt==2.10.1 From 1099fd2525f8b4e1b0a215038a53ed78134bfbb4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 03:02:03 +0000 Subject: [PATCH 235/243] chore(deps): bump actions/checkout from 6.0.0 to 6.0.1 Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v6.0.0...v6.0.1) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/binance-lev-tier-update.yml | 2 +- .github/workflows/ci.yml | 16 ++++++++-------- .github/workflows/deploy-docs.yml | 2 +- .github/workflows/devcontainer-build.yml | 2 +- .github/workflows/docker-build.yml | 4 ++-- .github/workflows/docker-update-readme.yml | 2 +- .github/workflows/pre-commit-update.yml | 2 +- .github/workflows/zizmor.yml | 2 +- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/binance-lev-tier-update.yml b/.github/workflows/binance-lev-tier-update.yml index 05ac6c01e..2a3b8bb95 100644 --- a/.github/workflows/binance-lev-tier-update.yml +++ b/.github/workflows/binance-lev-tier-update.yml @@ -15,7 +15,7 @@ jobs: environment: name: develop steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a341741f7..8013bd7b0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: python-version: ["3.11", "3.12", "3.13"] steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false @@ -177,7 +177,7 @@ jobs: name: "Mypy Version Check" runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false @@ -195,7 +195,7 @@ jobs: name: "Pre-commit checks" runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false @@ -208,7 +208,7 @@ jobs: name: "Documentation build" runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false @@ -240,7 +240,7 @@ jobs: name: "Tests and Linting - Online tests" runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false @@ -320,7 +320,7 @@ jobs: with: jobs: ${{ toJSON(needs) }} - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false @@ -367,7 +367,7 @@ jobs: id-token: write steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false @@ -396,7 +396,7 @@ jobs: id-token: write steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index f109ddf7a..33272efa6 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -19,7 +19,7 @@ jobs: name: Deploy Docs through mike runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: true diff --git a/.github/workflows/devcontainer-build.yml b/.github/workflows/devcontainer-build.yml index 429a2bbae..485ff30ed 100644 --- a/.github/workflows/devcontainer-build.yml +++ b/.github/workflows/devcontainer-build.yml @@ -24,7 +24,7 @@ jobs: packages: write runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false - name: Login to GitHub Container Registry diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 6790b3497..500e02614 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -33,7 +33,7 @@ jobs: if: github.repository == 'freqtrade/freqtrade' steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false @@ -152,7 +152,7 @@ jobs: if: github.repository == 'freqtrade/freqtrade' steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false diff --git a/.github/workflows/docker-update-readme.yml b/.github/workflows/docker-update-readme.yml index de2e5faee..7f3a75280 100644 --- a/.github/workflows/docker-update-readme.yml +++ b/.github/workflows/docker-update-readme.yml @@ -11,7 +11,7 @@ jobs: dockerHubDescription: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false diff --git a/.github/workflows/pre-commit-update.yml b/.github/workflows/pre-commit-update.yml index 601c61d76..fe46aa6fe 100644 --- a/.github/workflows/pre-commit-update.yml +++ b/.github/workflows/pre-commit-update.yml @@ -13,7 +13,7 @@ jobs: auto-update: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6.0.0 + - uses: actions/checkout@v6.0.1 with: persist-credentials: false diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index 594b6507d..cec2469b8 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -22,7 +22,7 @@ jobs: # actions: read # only needed for private repos steps: - name: Checkout repository - uses: actions/checkout@v6.0.0 + uses: actions/checkout@v6.0.1 with: persist-credentials: false From 5d25adfc42d68ae3a118dc5165faddc993771784 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 03:02:07 +0000 Subject: [PATCH 236/243] chore(deps): bump stable-baselines3 from 2.7.0 to 2.7.1 Bumps [stable-baselines3](https://github.com/DLR-RM/stable-baselines3) from 2.7.0 to 2.7.1. - [Release notes](https://github.com/DLR-RM/stable-baselines3/releases) - [Commits](https://github.com/DLR-RM/stable-baselines3/compare/v2.7.0...v2.7.1) --- updated-dependencies: - dependency-name: stable-baselines3 dependency-version: 2.7.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-freqai-rl.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-freqai-rl.txt b/requirements-freqai-rl.txt index af86a1d0a..83a6515cc 100644 --- a/requirements-freqai-rl.txt +++ b/requirements-freqai-rl.txt @@ -5,7 +5,7 @@ torch==2.9.1; sys_platform != 'darwin' or platform_machine != 'x86_64' gymnasium==1.2.2 # SB3 >=2.5.0 depends on torch 2.3.0 - which implies it dropped support x86 macos -stable_baselines3==2.7.0; sys_platform != 'darwin' or platform_machine != 'x86_64' +stable_baselines3==2.7.1; sys_platform != 'darwin' or platform_machine != 'x86_64' sb3_contrib>=2.2.1; sys_platform != 'darwin' or platform_machine != 'x86_64' # Progress bar for stable-baselines3 and sb3-contrib tqdm==4.67.1 From 484b3ff2f383ce706ae5339b1937a9b486e57318 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 03:02:15 +0000 Subject: [PATCH 237/243] chore(deps): bump orjson from 3.11.4 to 3.11.5 Bumps [orjson](https://github.com/ijl/orjson) from 3.11.4 to 3.11.5. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.11.4...3.11.5) --- updated-dependencies: - dependency-name: orjson dependency-version: 3.11.5 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 d2dcb63eb..685dd1bc1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -31,7 +31,7 @@ pyarrow==22.0.0; platform_machine != 'armv7l' # Load ticker files 30% faster python-rapidjson==1.22 # Properly format api responses -orjson==3.11.4 +orjson==3.11.5 # Notify systemd sdnotify==0.3.2 From c20f511418358734dcc35c7e4c95a7684af7d6c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 03:02:20 +0000 Subject: [PATCH 238/243] chore(deps): bump pymdown-extensions from 10.17.2 to 10.18 Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.17.2 to 10.18. - [Release notes](https://github.com/facelessuser/pymdown-extensions/releases) - [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.17.2...10.18) --- updated-dependencies: - dependency-name: pymdown-extensions dependency-version: '10.18' 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 b98977366..becef5127 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.17.2 +pymdown-extensions==10.18 jinja2==3.1.6 mike==2.1.3 From 7dc0d5d146a27095060e703ae9ecbcd40bf7b692 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 03:02:48 +0000 Subject: [PATCH 239/243] chore(deps-dev): bump ruff from 0.14.7 to 0.14.8 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.7 to 0.14.8. - [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.7...0.14.8) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.14.8 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 c03470653..b4d4ab36f 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.7 +ruff==0.14.8 mypy==1.19.0 pre-commit==4.5.0 pytest==9.0.1 From c0d40a03aa3bcfd77f4e3da7f8b96a4cea2d2030 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 05:50:08 +0000 Subject: [PATCH 240/243] chore(deps): bump python-rapidjson from 1.22 to 1.23 Bumps [python-rapidjson](https://github.com/python-rapidjson/python-rapidjson) from 1.22 to 1.23. - [Changelog](https://github.com/python-rapidjson/python-rapidjson/blob/master/CHANGES.rst) - [Commits](https://github.com/python-rapidjson/python-rapidjson/compare/v1.22...v1.23) --- updated-dependencies: - dependency-name: python-rapidjson dependency-version: '1.23' dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- ft_client/requirements.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ft_client/requirements.txt b/ft_client/requirements.txt index 9d3110871..e492410b1 100644 --- a/ft_client/requirements.txt +++ b/ft_client/requirements.txt @@ -1,3 +1,3 @@ # Requirements for freqtrade client library requests==2.32.5 -python-rapidjson==1.22 +python-rapidjson==1.23 diff --git a/requirements.txt b/requirements.txt index 490d7efc9..d14fddede 100644 --- a/requirements.txt +++ b/requirements.txt @@ -29,7 +29,7 @@ pyarrow==22.0.0; platform_machine != 'armv7l' # Load ticker files 30% faster -python-rapidjson==1.22 +python-rapidjson==1.23 # Properly format api responses orjson==3.11.5 From 289e53ed5a4c428e0601ebdae44340877b57884f Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 15 Dec 2025 20:22:52 +0100 Subject: [PATCH 241/243] fix: allow set-leverage failures on followup orders --- freqtrade/exchange/exchange.py | 5 +++-- freqtrade/freqtradebot.py | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 6f8eab820..cc1cd3322 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1405,8 +1405,9 @@ class Exchange: amount: float, rate: float, leverage: float, - reduceOnly: bool = False, time_in_force: str = "GTC", + reduceOnly: bool = False, + initial_order: bool = True, ) -> CcxtOrder: if self._config["dry_run"]: dry_order = self.create_dry_run_order( @@ -1423,7 +1424,7 @@ class Exchange: rate_for_order = self.price_to_precision(pair, rate) if needs_price else None if not reduceOnly: - self._lev_prep(pair, leverage, side) + self._lev_prep(pair, leverage, side, accept_fail=not initial_order) order = self._api.create_order( pair, diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 4c5207e93..b80442ca0 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -937,6 +937,7 @@ class FreqtradeBot(LoggingMixin): reduceOnly=False, time_in_force=time_in_force, leverage=leverage, + initial_order=trade is None, ) order_obj = Order.parse_from_ccxt_object(order, pair, side, amount, enter_limit_requested) order_obj.ft_order_tag = enter_tag @@ -2145,6 +2146,7 @@ class FreqtradeBot(LoggingMixin): leverage=trade.leverage, reduceOnly=self.trading_mode == TradingMode.FUTURES, time_in_force=time_in_force, + initial_order=False, ) except InsufficientFundsError as e: logger.warning(f"Unable to place order {e}.") From fa5210aa4bbe59440b8974b4f3e5d9b6e9ab1d89 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 15 Dec 2025 20:35:05 +0100 Subject: [PATCH 242/243] fix: function signature mismatch --- freqtrade/exchange/kucoin.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/freqtrade/exchange/kucoin.py b/freqtrade/exchange/kucoin.py index 17afbd63a..e1fe469fb 100644 --- a/freqtrade/exchange/kucoin.py +++ b/freqtrade/exchange/kucoin.py @@ -44,8 +44,9 @@ class Kucoin(Exchange): amount: float, rate: float, leverage: float, - reduceOnly: bool = False, time_in_force: str = "GTC", + reduceOnly: bool = False, + initial_order: bool = True, ) -> CcxtOrder: res = super().create_order( pair=pair, @@ -56,6 +57,7 @@ class Kucoin(Exchange): leverage=leverage, reduceOnly=reduceOnly, time_in_force=time_in_force, + initial_order=initial_order, ) # Kucoin returns only the order-id. # ccxt returns status = 'closed' at the moment - which is information ccxt invented. From 98da54ae8245555695f15b24ada2707a2adf9ca9 Mon Sep 17 00:00:00 2001 From: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com> Date: Tue, 16 Dec 2025 03:30:35 +0000 Subject: [PATCH 243/243] 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 6e92eaaff..e174acc50 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: # stages: [push] - repo: https://github.com/pre-commit/mirrors-mypy - rev: "v1.19.0" + rev: "v1.19.1" hooks: - id: mypy exclude: build_helpers @@ -44,7 +44,7 @@ repos: - repo: https://github.com/charliermarsh/ruff-pre-commit # Ruff version. - rev: 'v0.14.8' + rev: 'v0.14.9' hooks: - id: ruff - id: ruff-format