Files
trading_bot_v3/lib/settings.ts
root 3361359119 feat: Add persistent settings and multiple layouts support
- Add settings manager to persist symbol, timeframe, and layouts
- Support multiple layouts for comprehensive chart analysis
- Remove debug screenshots for cleaner logs
- Update AI analysis with professional trading prompt
- Add multi-screenshot analysis for better trading insights
- Update analyze API to use saved settings and multiple layouts
2025-07-09 14:24:48 +02:00

89 lines
2.3 KiB
TypeScript

import fs from 'fs/promises'
import path from 'path'
export interface TradingSettings {
symbol: string
timeframe: string
layouts: string[]
lastUpdated: number
}
const SETTINGS_FILE = path.join(process.cwd(), 'trading-settings.json')
export class SettingsManager {
private static instance: SettingsManager
private settings: TradingSettings = {
symbol: 'BTCUSD',
timeframe: '5',
layouts: ['ai'],
lastUpdated: Date.now()
}
private constructor() {}
static getInstance(): SettingsManager {
if (!SettingsManager.instance) {
SettingsManager.instance = new SettingsManager()
}
return SettingsManager.instance
}
async loadSettings(): Promise<TradingSettings> {
try {
const data = await fs.readFile(SETTINGS_FILE, 'utf-8')
this.settings = JSON.parse(data)
console.log('Loaded settings:', this.settings)
} catch (error) {
console.log('No existing settings found, using defaults')
await this.saveSettings()
}
return this.settings
}
async saveSettings(): Promise<void> {
try {
this.settings.lastUpdated = Date.now()
await fs.writeFile(SETTINGS_FILE, JSON.stringify(this.settings, null, 2))
console.log('Settings saved:', this.settings)
} catch (error) {
console.error('Failed to save settings:', error)
}
}
async updateSettings(updates: Partial<TradingSettings>): Promise<TradingSettings> {
this.settings = { ...this.settings, ...updates }
await this.saveSettings()
return this.settings
}
getSettings(): TradingSettings {
return this.settings
}
async setSymbol(symbol: string): Promise<void> {
await this.updateSettings({ symbol })
}
async setTimeframe(timeframe: string): Promise<void> {
await this.updateSettings({ timeframe })
}
async setLayouts(layouts: string[]): Promise<void> {
await this.updateSettings({ layouts })
}
async addLayout(layout: string): Promise<void> {
if (!this.settings.layouts.includes(layout)) {
const layouts = [...this.settings.layouts, layout]
await this.updateSettings({ layouts })
}
}
async removeLayout(layout: string): Promise<void> {
const layouts = this.settings.layouts.filter(l => l !== layout)
await this.updateSettings({ layouts })
}
}
export const settingsManager = SettingsManager.getInstance()