Enhance trailing stop with ATR-based sizing

This commit is contained in:
mindesbunister
2025-11-05 15:28:12 +01:00
parent 149294084e
commit a100945864
8 changed files with 183 additions and 35 deletions

View File

@@ -7,6 +7,7 @@
import { NextRequest, NextResponse } from 'next/server'
import fs from 'fs'
import path from 'path'
import { DEFAULT_TRADING_CONFIG } from '@/config/trading'
const ENV_FILE_PATH = path.join(process.cwd(), '.env')
@@ -50,6 +51,11 @@ function updateEnvFile(updates: Record<string, any>) {
})
fs.writeFileSync(ENV_FILE_PATH, content, 'utf-8')
// Also update in-memory environment so running process sees new values immediately
Object.entries(updates).forEach(([key, value]) => {
process.env[key] = value
})
return true
} catch (error) {
console.error('Failed to write .env file:', error)
@@ -86,6 +92,9 @@ export async function GET() {
PROFIT_LOCK_PERCENT: parseFloat(env.PROFIT_LOCK_PERCENT || '0.4'),
USE_TRAILING_STOP: env.USE_TRAILING_STOP === 'true' || env.USE_TRAILING_STOP === undefined,
TRAILING_STOP_PERCENT: parseFloat(env.TRAILING_STOP_PERCENT || '0.3'),
TRAILING_STOP_ATR_MULTIPLIER: parseFloat(env.TRAILING_STOP_ATR_MULTIPLIER || '1.5'),
TRAILING_STOP_MIN_PERCENT: parseFloat(env.TRAILING_STOP_MIN_PERCENT || '0.25'),
TRAILING_STOP_MAX_PERCENT: parseFloat(env.TRAILING_STOP_MAX_PERCENT || '0.9'),
TRAILING_STOP_ACTIVATION: parseFloat(env.TRAILING_STOP_ACTIVATION || '0.5'),
// Position Scaling
@@ -144,6 +153,9 @@ export async function POST(request: NextRequest) {
PROFIT_LOCK_PERCENT: settings.PROFIT_LOCK_PERCENT.toString(),
USE_TRAILING_STOP: settings.USE_TRAILING_STOP.toString(),
TRAILING_STOP_PERCENT: settings.TRAILING_STOP_PERCENT.toString(),
TRAILING_STOP_ATR_MULTIPLIER: (settings.TRAILING_STOP_ATR_MULTIPLIER ?? DEFAULT_TRADING_CONFIG.trailingStopAtrMultiplier).toString(),
TRAILING_STOP_MIN_PERCENT: (settings.TRAILING_STOP_MIN_PERCENT ?? DEFAULT_TRADING_CONFIG.trailingStopMinPercent).toString(),
TRAILING_STOP_MAX_PERCENT: (settings.TRAILING_STOP_MAX_PERCENT ?? DEFAULT_TRADING_CONFIG.trailingStopMaxPercent).toString(),
TRAILING_STOP_ACTIVATION: settings.TRAILING_STOP_ACTIVATION.toString(),
// Position Scaling
@@ -167,6 +179,15 @@ export async function POST(request: NextRequest) {
const success = updateEnvFile(updates)
if (success) {
try {
const { getPositionManager } = await import('@/lib/trading/position-manager')
const manager = getPositionManager()
manager.refreshConfig()
console.log('⚙️ Position manager config refreshed after settings update')
} catch (pmError) {
console.error('Failed to refresh position manager config:', pmError)
}
return NextResponse.json({ success: true })
} else {
return NextResponse.json(