diff --git a/app/api/settings/route.ts b/app/api/settings/route.ts index 2a6ae24..3933548 100644 --- a/app/api/settings/route.ts +++ b/app/api/settings/route.ts @@ -127,6 +127,12 @@ export async function GET() { MIN_SIGNAL_QUALITY_SCORE_SHORT: parseInt(env.MIN_SIGNAL_QUALITY_SCORE_SHORT || env.MIN_SIGNAL_QUALITY_SCORE || '60'), SLIPPAGE_TOLERANCE: parseFloat(env.SLIPPAGE_TOLERANCE || '1.0'), DRY_RUN: env.DRY_RUN === 'true', + + // Adaptive Leverage (Dec 1, 2025) + USE_ADAPTIVE_LEVERAGE: env.USE_ADAPTIVE_LEVERAGE === 'true', + HIGH_QUALITY_LEVERAGE: parseFloat(env.HIGH_QUALITY_LEVERAGE || '5'), + LOW_QUALITY_LEVERAGE: parseFloat(env.LOW_QUALITY_LEVERAGE || '1'), + QUALITY_LEVERAGE_THRESHOLD: parseInt(env.QUALITY_LEVERAGE_THRESHOLD || '95'), } return NextResponse.json(settings) @@ -196,6 +202,12 @@ export async function POST(request: NextRequest) { MIN_SIGNAL_QUALITY_SCORE_SHORT: settings.MIN_SIGNAL_QUALITY_SCORE_SHORT.toString(), SLIPPAGE_TOLERANCE: settings.SLIPPAGE_TOLERANCE.toString(), DRY_RUN: settings.DRY_RUN.toString(), + + // Adaptive Leverage (Dec 1, 2025) + USE_ADAPTIVE_LEVERAGE: settings.USE_ADAPTIVE_LEVERAGE.toString(), + HIGH_QUALITY_LEVERAGE: settings.HIGH_QUALITY_LEVERAGE.toString(), + LOW_QUALITY_LEVERAGE: settings.LOW_QUALITY_LEVERAGE.toString(), + QUALITY_LEVERAGE_THRESHOLD: settings.QUALITY_LEVERAGE_THRESHOLD.toString(), } const success = updateEnvFile(updates) diff --git a/app/settings/page.tsx b/app/settings/page.tsx index 4664618..2fdd59f 100644 --- a/app/settings/page.tsx +++ b/app/settings/page.tsx @@ -55,6 +55,12 @@ interface TradingSettings { MIN_ADX_INCREASE: number MAX_PRICE_POSITION_FOR_SCALE: number + // Adaptive Leverage (Quality-based) + USE_ADAPTIVE_LEVERAGE: boolean + HIGH_QUALITY_LEVERAGE: number + LOW_QUALITY_LEVERAGE: number + QUALITY_LEVERAGE_THRESHOLD: number + // Safety MAX_DAILY_DRAWDOWN: number MAX_TRADES_PER_HOUR: number @@ -468,6 +474,79 @@ export default function SettingsPage() { /> + {/* Adaptive Leverage */} +
+
+

+ Automatically adjust leverage based on signal quality score. High-quality signals get more leverage for maximum profit, borderline signals use lower leverage for risk management. +

+
+
+
+
🎯 Enable Adaptive Leverage
+
+ Dynamically adjust leverage based on signal quality +
+
+ +
+ updateSetting('HIGH_QUALITY_LEVERAGE', v)} + min={1} + max={20} + step={1} + description={`Leverage for exceptional signals (Quality ${settings.QUALITY_LEVERAGE_THRESHOLD}+ LONG, 90+ SHORT). Current: ${settings.HIGH_QUALITY_LEVERAGE}x leverage.`} + /> + updateSetting('LOW_QUALITY_LEVERAGE', v)} + min={1} + max={20} + step={1} + description={`Leverage for borderline signals (Quality 90-${settings.QUALITY_LEVERAGE_THRESHOLD-1} LONG, 80-89 SHORT). Current: ${settings.LOW_QUALITY_LEVERAGE}x leverage.`} + /> + updateSetting('QUALITY_LEVERAGE_THRESHOLD', v)} + min={80} + max={100} + step={1} + description="Minimum quality score for high-quality leverage tier (applies to LONG signals, SHORT uses 90+)." + /> +
+
Leverage Tiers (with $560 collateral)
+
+
+ 🔥 High Quality (Q{settings.QUALITY_LEVERAGE_THRESHOLD}+ LONG, Q90+ SHORT): + {settings.HIGH_QUALITY_LEVERAGE}x = ${(560 * settings.HIGH_QUALITY_LEVERAGE).toFixed(0)} position +
+
+ 📊 Low Quality (Q90-{settings.QUALITY_LEVERAGE_THRESHOLD-1} LONG, Q80-89 SHORT): + {settings.LOW_QUALITY_LEVERAGE}x = ${(560 * settings.LOW_QUALITY_LEVERAGE).toFixed(0)} position +
+
+ ❌ Below Threshold: + Blocked (no trade) +
+
+
+
+ {/* Risk Management */}