munger-engine / docs /funct_reqs.md
dromerosm's picture
Refactor project structure: Move docs to /docs, update README
4811dd1

Functional Requirements Document: "The Munger Engine" (Unified TS Stack)

Project Goal: Automated paper-trading dashboard that executes a 200-Week Moving Average (WMA) strategy on high-quality stocks. Architecture: Unified TypeScript Stack (Next.js + Node.js + Alpaca SDK).


1. System Architecture Overview

  • Core: Next.js 14/15 (App Router) using Server Actions and API Routes.
  • Engine: Automated logic running via Vercel Cron or GitHub Actions (Node.js).
  • Execution: Alpaca Trade API (Node SDK) for paper trading.
  • Data: yahoo-finance2 for fundamental and technical metrics.

2. Technical Stack Specifications

  • Language: TypeScript (Strict Mode).
  • Frontend: Tailwind CSS, Lucide React (Icons), Shadcn/UI (Components).
  • Backend: Next.js Route Handlers (Serverless Functions).
  • External APIs:
    • @alpacahq/alpaca-trade-api (Execution).
    • yahoo-finance2 (Market Data).

3. Backend Logic & Strategy (TypeScript)

3.1 The "Forever Stock" Filter

Every asset in the watchlist must be validated against these fundamental criteria:

  • Return on Equity (ROE): > 15% (Source: quoteSummary.financialData).
  • Debt-to-Equity: < 50 (Source: quoteSummary.financialData).
  • Market Cap: Filter for "Large Cap" (> $10B).

3.2 Strategy Execution Logic

  • Buy Trigger: 1. Calculate $SMA_{200}$ using the last 200 weekly closing prices.
    1. Condition: $CurrentPrice \leq SMA_{200} \times 1.05$ (within 5% of the average).
    2. Action: Execute buy order via Alpaca.
  • Sell Trigger:
    1. Trend Death: $CurrentPrice < SMA_{200} \times 0.90$ (10% breakdown).
    2. Fundamental Decay: $ROE < 10%$ or $Debt/Equity > 100$.
    3. Action: Execute liquidate order via Alpaca.

4. Frontend Requirements (Next.js Dashboard)

4.1 Component: Opportunity Heatmap

  • Visual Goal: Show distance from the "Munger Entry Point".
  • Logic: Calculate $(\frac{Price - SMA_{200}}{SMA_{200}}) \times 100$.
  • UI: Color-coded cards (Green: < 3% distance, Yellow: 3-8%, Grey: > 8%).

4.2 Component: Discipline Tracker

  • Visual Goal: Gamify "Wait-and-See" investing.
  • Logic: Days since last_trade_event.
  • UI: Counter "Days of Discipline" with a progress bar towards a "Munger Badge".

4.3 Component: Quality Scorecards

  • Visual Goal: Display the "Why" behind the holding.
  • Logic: Real-time fetch of ROE, Debt/Equity, and Net Profit Margin.
  • UI: Dashboard cards with a "Strategy Compliance" status (e.g., "Active Support" or "Risk: Fundamental Decay").

5. Workflow & Scheduling

  1. The Sync: A Cron Job calls /api/strategy/execute every Sunday before market open.
  2. The Scan: The handler iterates through the WATCHLIST, fetches Yahoo Finance data, and compares it with Alpaca positions.
  3. The Trade: If signals match, the Alpaca SDK sends orders.
  4. The Log: All results are stored in a database (Supabase/Prisma) or a state.json for the frontend.

6. Safety Guardrails

  • Paper Trading Only: The paper flag in the Alpaca client must be hardcoded to true.
  • Max Position Size: No single stock should exceed 10% of the paper account's total buying power.
  • Error Handling: Use Zod for validating Yahoo Finance responses to prevent engine crashes on missing data.