munger-engine / lib /types.ts
dromerosm's picture
feat: integrate real Alpaca orders in detail page and chart with layer toggles
bf9d545
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[];
}