Enhance trailing stop with ATR-based sizing
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user