Spaces:
Running
Running
File size: 2,326 Bytes
ce3c7ff bf9d545 ce3c7ff 4435002 ce3c7ff bf9d545 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
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[];
}
|