feat: ATR-based trailing stop + rate limit monitoring
MAJOR FIXES: - ATR-based trailing stop for runners (was fixed 0.3%, now adapts to volatility) - Fixes runners with +7-9% MFE exiting for losses - Typical improvement: 2.24x more room (0.3% → 0.67% at 0.45% ATR) - Enhanced rate limit logging with database tracking - New /api/analytics/rate-limits endpoint for monitoring DETAILS: - Position Manager: Calculate trailing as (atrAtEntry / price × 100) × multiplier - Config: TRAILING_STOP_ATR_MULTIPLIER=1.5, MIN=0.25%, MAX=0.9% - Settings UI: Added ATR multiplier controls - Rate limits: Log hits/recoveries/exhaustions to SystemEvent table - Documentation: ATR_TRAILING_STOP_FIX.md + RATE_LIMIT_MONITORING.md IMPACT: - Runners can now capture big moves (like morning's $172→$162 SOL drop) - Rate limit visibility prevents silent failures - Data-driven optimization for RPC endpoint health
This commit is contained in:
@@ -35,6 +35,9 @@ interface TradingSettings {
|
||||
PROFIT_LOCK_PERCENT: number
|
||||
USE_TRAILING_STOP: boolean
|
||||
TRAILING_STOP_PERCENT: number
|
||||
TRAILING_STOP_ATR_MULTIPLIER: number
|
||||
TRAILING_STOP_MIN_PERCENT: number
|
||||
TRAILING_STOP_MAX_PERCENT: number
|
||||
TRAILING_STOP_ACTIVATION: number
|
||||
|
||||
// ATR-based Dynamic Targets
|
||||
@@ -608,13 +611,40 @@ export default function SettingsPage() {
|
||||
description="Enable trailing stop for 25% runner position when TP2 triggers. 0 = disabled, 1 = enabled."
|
||||
/>
|
||||
<Setting
|
||||
label="Trailing Stop Distance (%)"
|
||||
label="Trailing Stop Distance (%) [FALLBACK]"
|
||||
value={settings.TRAILING_STOP_PERCENT}
|
||||
onChange={(v) => updateSetting('TRAILING_STOP_PERCENT', v)}
|
||||
min={0.1}
|
||||
max={2}
|
||||
step={0.1}
|
||||
description="How far below peak price (for longs) to trail the stop loss. Example: 0.3% = SL trails 0.3% below highest price reached."
|
||||
description="Legacy fallback used only if ATR data is unavailable. Normally, ATR-based trailing is used instead."
|
||||
/>
|
||||
<Setting
|
||||
label="ATR Trailing Multiplier"
|
||||
value={settings.TRAILING_STOP_ATR_MULTIPLIER}
|
||||
onChange={(v) => updateSetting('TRAILING_STOP_ATR_MULTIPLIER', v)}
|
||||
min={1.0}
|
||||
max={3.0}
|
||||
step={0.1}
|
||||
description="🔥 NEW: Trailing distance = (ATR × multiplier). Example: 0.5% ATR × 1.5 = 0.75% trailing. Higher = more room for runner, lower = tighter protection."
|
||||
/>
|
||||
<Setting
|
||||
label="Min Trailing Distance (%)"
|
||||
value={settings.TRAILING_STOP_MIN_PERCENT}
|
||||
onChange={(v) => updateSetting('TRAILING_STOP_MIN_PERCENT', v)}
|
||||
min={0.1}
|
||||
max={1.0}
|
||||
step={0.05}
|
||||
description="Minimum trailing distance cap. Prevents ultra-tight stops in low ATR conditions."
|
||||
/>
|
||||
<Setting
|
||||
label="Max Trailing Distance (%)"
|
||||
value={settings.TRAILING_STOP_MAX_PERCENT}
|
||||
onChange={(v) => updateSetting('TRAILING_STOP_MAX_PERCENT', v)}
|
||||
min={0.5}
|
||||
max={2.0}
|
||||
step={0.1}
|
||||
description="Maximum trailing distance cap. Prevents excessively wide stops in high ATR conditions."
|
||||
/>
|
||||
<Setting
|
||||
label="Trailing Stop Activation (%)"
|
||||
|
||||
Reference in New Issue
Block a user