export interface MungerStock { symbol: string; price: number; wma200: number; roe: number; debtToEquity: number; isQuality: boolean; lastCandleColor: 'GREEN' | 'RED'; touchedWMA: boolean; signal: 'BUY_TRIGGER' | 'WATCHLIST' | 'IGNORE' | 'WAIT' | 'PORTFOLIO'; details: string; sector?: string; marketCap?: number; mungerScore?: number; lastUpdated: string; tradePlan?: TradePlan; } export interface TradeOrder { role: 'ENTRY' | 'PROTECTIVE_STOP' | 'TAKE_PROFIT' | 'EXIT' | 'EXIT_AFTER_FILL'; type: 'MARKET' | 'LIMIT' | 'STOP' | 'STOP_LIMIT' | 'OCO'; side: 'BUY' | 'SELL'; limitPrice?: number; stopPrice?: number; takeProfitLimit?: number; stopLossStop?: number; timeInForce?: 'GTC' | 'DAY'; qty?: number; expireAfterDays?: number; } export interface TradePlan { symbol: string; recommendation: 'BUY' | 'SELL' | 'NO_TRADE'; playbook: string; riskModel?: { atrPeriod: number; atr: number; kAtr: number; rr: number; }; levels?: { entry: number; entryLimit?: number; stopLoss: number; takeProfit: number; }; sizing?: { equity: number; buyingPower: number; riskPct: number; riskBudget: number; riskPerShare: number; qty: number; caps: { maxPositionPct: number; qtyByRisk: number; qtyByNotional: number; qtyByBuyingPower: number; }; }; orders: TradeOrder[]; followUp: string[]; reasons: string[]; } export interface EngineStatus { status: 'IDLE' | 'SCANNING' | 'SYNCING' | 'ERROR'; lastSyncTimestamp: string; apiLatencyMs: number; totalAssets: number; assetsAnalyzed: number; buyTriggers: number; errors: string[]; } export interface SyncPayload { force?: boolean; segments?: ('mega' | 'large')[]; symbols?: string[]; } export interface AlpacaOrder { id: string; symbol: string; side: 'buy' | 'sell'; type: string; qty: string; status: string; limitPrice?: string; stopPrice?: string; filledQty?: string; filledAvgPrice?: string; // Average fill price submittedAt: string; orderClass?: string; legs?: any[]; }