Target: 30 min/day saved + fewer missed setups from not watching screens during 50-call days.
On-demand:
"market digest" → runs full scan now
"what's setting up" → filtered to high-conviction setups only
"check my positions" → IBKR portfolio health only
Trigger phrases:
- "market digest" / "trading alerts" / "pre-market scan"
- "watchlist check" / "what's setting up"
- "trading morning brief" / "market open prep"
- "check my positions" / "position health"
Architecture
SCHEDULED (7am CST) ANALYSIS OUTPUT
──────────────────────────────────────────────────────────────────────
Watchlist tickers → Regime detection (Markov) → Daily Digest
IBKR open positions → Technical scan (5 methods) → Action List
Market internals → Options flow anomalies → Position Alerts
Economic calendar → Greeks/risk check positions → Risk Dashboard
Stage 1: Data Collection
1a. Watchlist Tickers
Tim's default watchlist (update in reference/watchlist.json):
Core positions: SPY, QQQ, IWM, TLT, GLD, SLV, USO, VIX
Individual stocks: AAPL, MSFT, NVDA, TSLA, AMZN, META, GOOG, AMD, PLTR, COIN
Crypto proxies: BITO, MSTR
Sector ETFs: XLF, XLE, XLK, ARKK, SMH
For each ticker, use web search to pull:
- Current price + pre-market move
- 5-day price action summary
- Volume vs average
- Key support/resistance levels
- Any overnight news/catalysts
1b. IBKR Portfolio Positions
Use IBKR MCP server tools (ArjunDivecha/ibkr-mcp-server, installed at ~/Desktop/tk_projects/ibkr-mcp-server/):
| Tool |
Data Pulled |
get_portfolio |
All open positions + P&L across accounts (Roth IRA, personal brokerage, THK Enterprises) |
get_account_summary |
Balances, margin utilization, buying power, cash available |
switch_account |
Toggle between accounts for per-account view |
get_margin_requirements |
Current margin needs per position |
Prerequisites: IB Gateway must be running on port 7497 (paper) or 7496 (live).
If IBKR not connected: Skip this section — web search covers market data. Portfolio section shows "IBKR not connected — start IB Gateway to enable portfolio checks."
1c. Market Internals
Web search for:
- S&P 500 advance/decline
- VIX level + term structure (contango/backwardation)
- Put/call ratio
- 10Y Treasury yield
- DXY (dollar index)
- Fed funds futures (rate expectations)
- Economic calendar events for today
Stage 2: Analysis (Using trading-signals Framework)
2a. Regime Detection
For SPY (market proxy), run Markov 7-state regime model:
| State |
Description |
Strategy Bias |
| 0 |
Strong bull |
Long bias, sell puts |
| 1 |
Moderate bull |
Long bias, covered calls |
| 2 |
Weak bull / consolidation |
Neutral, iron condors |
| 3 |
Transition / chop |
Reduce size, wait |
| 4 |
Weak bear |
Hedge, reduce long |
| 5 |
Moderate bear |
Short bias, buy puts |
| 6 |
Crash / high vol |
Protection mode, VIX plays |
2b. Per-Ticker Technical Scan
For each watchlist ticker, score on 5 methodologies:
| Method |
Signal |
Weight (regime-adjusted) |
| Elliott Wave |
Wave position + projected target |
20-30% |
| Wyckoff |
Accumulation/distribution phase |
15-25% |
| Fibonacci |
Key retracement/extension levels |
15-20% |
| Turtle |
Donchian breakout signals |
10-20% |
| Markov Regime |
Regime-appropriate strategy |
20-30% |
Confluence Score: Weighted average across methods
- ≥ 0.7: HIGH — Flag as actionable setup
- 0.4-0.7: MODERATE — Watch list, note trigger level
- < 0.4: LOW — No action, skip from digest
2c. Options Flow Scan
For tickers with options positions or high confluence:
- Unusual volume (>2x avg) on specific strikes
- Put/call ratio shifts
- Implied volatility rank (IVR) — is premium rich or cheap?
- Earnings dates within 14 days
2d. Position Health Check
For each open IBKR position (via get_portfolio + get_account_summary):
| Check |
Alert Threshold |
| Days to expiry |
< 7 DTE on options → ROLL/CLOSE decision |
| Delta exposure |
Portfolio delta > ±50 → hedge needed |
| Max loss approaching |
Position down > 50% of max loss → manage |
| Assignment risk |
ITM short options near expiry → close or roll |
| Theta decay |
Positive theta across portfolio? |
| Margin utilization |
> 50% → reduce risk |
| Concentrated position |
Any single position > 15% of portfolio → flag |
Stage 3: Output — Daily Trading Digest
╔══════════════════════════════════════════════════════════════╗
║ TRADING DIGEST — [Date] | Pre-Market ║
║ Market Regime: [STATE] | VIX: [level] | Futures: [ES move] ║
╠══════════════════════════════════════════════════════════════╣
MARKET OVERVIEW:
- ES Futures: [+/-X.XX%] | NQ: [+/-X.XX%]
- VIX: [level] ([contango/backwardation])
- 10Y: [yield] | DXY: [level]
- Key event today: [economic calendar item]
═══════════════════════════════════════════════════════════════
🎯 HIGH-CONVICTION SETUPS (confluence ≥ 0.7):
1. [TICKER] — [Direction] | Confluence: [0.XX]
Setup: [description — e.g., "Wyckoff spring at $185 support,
Elliott wave 3 launching, Turtle breakout confirmed"]
Entry: $[XX.XX] | Target: $[XX.XX] | Stop: $[XX.XX]
Options play: [specific strategy — e.g., "Apr 190C @ $3.20,
delta 0.45, 3:1 R:R"]
Why: [1-2 sentence reasoning]
2. [TICKER] — [Direction] | Confluence: [0.XX]
...
═══════════════════════════════════════════════════════════════
⚠️ POSITION ALERTS (action needed):
1. [TICKER] [STRIKE] [EXPIRY] — [ALERT TYPE]
Current P&L: [+/-$XXX] | Days to expiry: [X]
Recommended action: [ROLL to [new strike/expiry] | CLOSE | HOLD]
Why: [reason]
═══════════════════════════════════════════════════════════════
👀 WATCHLIST (confluence 0.4-0.7, not yet actionable):
| Ticker | Direction | Confluence | Trigger Level | Note |
|--------|-----------|------------|---------------|------|
| NVDA | Long | 0.55 | Break $950 | Needs volume confirm |
| TLT | Long | 0.48 | Hold $88 | Rate decision Thurs |
═══════════════════════════════════════════════════════════════
📊 PORTFOLIO SNAPSHOT:
| Account | Value | Day P&L | Margin Used |
|---------|-------|---------|-------------|
| Roth IRA | $XX,XXX | +/-$XXX | N/A |
| Personal | $XX,XXX | +/-$XXX | XX% |
| Business | $XX,XXX | +/-$XXX | XX% |
Net Delta: [+/-XX] | Net Theta: [+/-$XX/day] | IVR avg: [XX%]
═══════════════════════════════════════════════════════════════
📅 THIS WEEK:
- [Earnings/events that affect watchlist]
- [Fed speakers / economic data]
- [Options expiration dates]
╚══════════════════════════════════════════════════════════════╝
Rules
- No intraday alerts. This runs ONCE at 7am. Tim checks it, makes decisions, then focuses on BDR work.
- Actionable only. Don't list 30 tickers with "neutral" signals. Only surface what needs attention.
- Position management first. Alerts on existing positions before new setups.
- Risk management always. Every setup includes stop loss. Portfolio delta/margin always visible.
- 2% rule enforced. Flag if any suggested trade exceeds 2% portfolio risk.
- 15% concentration rule. Flag if any position exceeds 15% of account.
Required Tools
- Web Search: Pre-market data, news, economic calendar, options flow (primary data source)
- IBKR MCP (
ArjunDivecha/ibkr-mcp-server): get_portfolio, get_account_summary, switch_account, get_market_data, get_historical_data, get_margin_requirements, check_shortable_shares, get_borrow_rates, short_selling_analysis, get_connection_status — requires IB Gateway on port 7497 (paper) or 7496 (live). If not connected, web search covers market data.
- Scheduling: CronCreate
"53 6 * * 1-5" for session-based 7am CST runs (3-day auto-expire)
Data Sources (via web search)
- Yahoo Finance / TradingView: Price data, technicals
- CBOE: VIX, put/call ratios
- CME: Futures, Fed funds
- Finviz: Screener, market internals
- Unusual Whales / Barchart: Options flow
Emit Outcome Sidecar
As the final step, write to ~/.claude/skill-analytics/last-outcome-trading-alert-scheduler.json:
{"ts":"[UTC ISO8601]","skill":"trading-alert-scheduler","version":"1.0.0","variant":"default",
"status":"[success|partial|error]","runtime_ms":[estimated ms from start],
"metrics":{"alerts_generated":[n],"tickers_scanned":[n],"regime_changes":[n]},
"error":null,"session_id":"[YYYY-MM-DD]"}
Use status "partial" if some stages failed but results were produced. Use "error" only if no output was generated.
1---2name: trading-alert-scheduler3description: Market signals → daily digest delivered before market open. Scans watchlist tickers for regime changes, technical setups, options flow anomalies, and IBKR position health — then delivers a prioritized action list. No IBKR distraction during 50-call BDR days. Use when: 'market digest', 'trading alerts', 'pre-market scan', 'watchlist check', 'what's setting up', 'trading morning brief', 'market open prep'.4---5
6<objective>
7Eliminate real-time market monitoring during BDR work hours. Scan Tim's watchlist and IBKR positions once daily before market open, identify actionable setups using the trading-signals framework, and deliver a single prioritized digest. No intraday distractions — just one morning read that surfaces what matters.
8
9Target: 30 min/day saved + fewer missed setups from not watching screens during 50-call days.
10</objective>
11
12<quick_start>
13**Daily automated run (7am CST / 8am EST — 1.5 hrs before market open):**
14Scheduled task scans all watchlist tickers + open positions → delivers digest
15
16**On-demand:**
17"market digest" → runs full scan now
18"what's setting up" → filtered to high-conviction setups only
19"check my positions" → IBKR portfolio health only
20
21**Trigger phrases:**
22- "market digest" / "trading alerts" / "pre-market scan"
23- "watchlist check" / "what's setting up"
24- "trading morning brief" / "market open prep"
25- "check my positions" / "position health"
26</quick_start>
27
28<success_criteria>
29- All watchlist tickers scanned with regime + technical analysis
30- Open IBKR positions checked for risk/expiry/Greeks health
31- High-conviction setups (confluence ≥ 0.7) surfaced at top
32- Position risk alerts flagged (approaching max loss, expiry, assignment risk)
33- Digest scannable in under 3 minutes
34- No intraday interruptions — one daily read covers everything
35- Missed setup rate reduced vs manual checking
36</success_criteria>
37
38<workflow>
39
40## Architecture
41
42```
43SCHEDULED (7am CST) ANALYSIS OUTPUT
44──────────────────────────────────────────────────────────────────────
45Watchlist tickers → Regime detection (Markov) → Daily Digest
46IBKR open positions → Technical scan (5 methods) → Action List
47Market internals → Options flow anomalies → Position Alerts
48Economic calendar → Greeks/risk check positions → Risk Dashboard
49```
50
51## Stage 1: Data Collection
52
53### 1a. Watchlist Tickers
54Tim's default watchlist (update in `reference/watchlist.json`):
55
56**Core positions:** SPY, QQQ, IWM, TLT, GLD, SLV, USO, VIX
57**Individual stocks:** AAPL, MSFT, NVDA, TSLA, AMZN, META, GOOG, AMD, PLTR, COIN
58**Crypto proxies:** BITO, MSTR
59**Sector ETFs:** XLF, XLE, XLK, ARKK, SMH
60
61For each ticker, use web search to pull:
62- Current price + pre-market move
63- 5-day price action summary
64- Volume vs average
65- Key support/resistance levels
66- Any overnight news/catalysts
67
68### 1b. IBKR Portfolio Positions
69Use IBKR MCP server tools (`ArjunDivecha/ibkr-mcp-server`, installed at `~/Desktop/tk_projects/ibkr-mcp-server/`):
70
71| Tool | Data Pulled |
72|------|------------|
73| `get_portfolio` | All open positions + P&L across accounts (Roth IRA, personal brokerage, THK Enterprises) |
74| `get_account_summary` | Balances, margin utilization, buying power, cash available |
75| `switch_account` | Toggle between accounts for per-account view |
76| `get_margin_requirements` | Current margin needs per position |
77
78**Prerequisites:** IB Gateway must be running on port 7497 (paper) or 7496 (live).
79**If IBKR not connected:** Skip this section — web search covers market data. Portfolio section shows "IBKR not connected — start IB Gateway to enable portfolio checks."
80
81### 1c. Market Internals
82Web search for:
83- S&P 500 advance/decline
84- VIX level + term structure (contango/backwardation)
85- Put/call ratio
86- 10Y Treasury yield
87- DXY (dollar index)
88- Fed funds futures (rate expectations)
89- Economic calendar events for today
90
91## Stage 2: Analysis (Using trading-signals Framework)
92
93### 2a. Regime Detection
94For SPY (market proxy), run Markov 7-state regime model:
95
96| State | Description | Strategy Bias |
97|-------|-------------|--------------|
98| 0 | Strong bull | Long bias, sell puts |
99| 1 | Moderate bull | Long bias, covered calls |
100| 2 | Weak bull / consolidation | Neutral, iron condors |
101| 3 | Transition / chop | Reduce size, wait |
102| 4 | Weak bear | Hedge, reduce long |
103| 5 | Moderate bear | Short bias, buy puts |
104| 6 | Crash / high vol | Protection mode, VIX plays |
105
106### 2b. Per-Ticker Technical Scan
107For each watchlist ticker, score on 5 methodologies:
108
109| Method | Signal | Weight (regime-adjusted) |
110|--------|--------|------------------------|
111| Elliott Wave | Wave position + projected target | 20-30% |
112| Wyckoff | Accumulation/distribution phase | 15-25% |
113| Fibonacci | Key retracement/extension levels | 15-20% |
114| Turtle | Donchian breakout signals | 10-20% |
115| Markov Regime | Regime-appropriate strategy | 20-30% |
116
117**Confluence Score:** Weighted average across methods
118- ≥ 0.7: **HIGH** — Flag as actionable setup
119- 0.4-0.7: **MODERATE** — Watch list, note trigger level
120- < 0.4: **LOW** — No action, skip from digest
121
122### 2c. Options Flow Scan
123For tickers with options positions or high confluence:
124- Unusual volume (>2x avg) on specific strikes
125- Put/call ratio shifts
126- Implied volatility rank (IVR) — is premium rich or cheap?
127- Earnings dates within 14 days
128
129### 2d. Position Health Check
130For each open IBKR position (via `get_portfolio` + `get_account_summary`):
131
132| Check | Alert Threshold |
133|-------|----------------|
134| Days to expiry | < 7 DTE on options → ROLL/CLOSE decision |
135| Delta exposure | Portfolio delta > ±50 → hedge needed |
136| Max loss approaching | Position down > 50% of max loss → manage |
137| Assignment risk | ITM short options near expiry → close or roll |
138| Theta decay | Positive theta across portfolio? |
139| Margin utilization | > 50% → reduce risk |
140| Concentrated position | Any single position > 15% of portfolio → flag |
141
142## Stage 3: Output — Daily Trading Digest
143
144```
145╔══════════════════════════════════════════════════════════════╗
146║ TRADING DIGEST — [Date] | Pre-Market ║
147║ Market Regime: [STATE] | VIX: [level] | Futures: [ES move] ║
148╠══════════════════════════════════════════════════════════════╣
149
150MARKET OVERVIEW:
151- ES Futures: [+/-X.XX%] | NQ: [+/-X.XX%]
152- VIX: [level] ([contango/backwardation])
153- 10Y: [yield] | DXY: [level]
154- Key event today: [economic calendar item]
155
156═══════════════════════════════════════════════════════════════
157
158🎯 HIGH-CONVICTION SETUPS (confluence ≥ 0.7):
159
1601. [TICKER] — [Direction] | Confluence: [0.XX]
161 Setup: [description — e.g., "Wyckoff spring at $185 support,
162 Elliott wave 3 launching, Turtle breakout confirmed"]
163 Entry: $[XX.XX] | Target: $[XX.XX] | Stop: $[XX.XX]
164 Options play: [specific strategy — e.g., "Apr 190C @ $3.20,
165 delta 0.45, 3:1 R:R"]
166 Why: [1-2 sentence reasoning]
167
1682. [TICKER] — [Direction] | Confluence: [0.XX]
169 ...
170
171═══════════════════════════════════════════════════════════════
172
173⚠️ POSITION ALERTS (action needed):
174
1751. [TICKER] [STRIKE] [EXPIRY] — [ALERT TYPE]
176 Current P&L: [+/-$XXX] | Days to expiry: [X]
177 Recommended action: [ROLL to [new strike/expiry] | CLOSE | HOLD]
178 Why: [reason]
179
180═══════════════════════════════════════════════════════════════
181
182👀 WATCHLIST (confluence 0.4-0.7, not yet actionable):
183
184| Ticker | Direction | Confluence | Trigger Level | Note |
185|--------|-----------|------------|---------------|------|
186| NVDA | Long | 0.55 | Break $950 | Needs volume confirm |
187| TLT | Long | 0.48 | Hold $88 | Rate decision Thurs |
188
189═══════════════════════════════════════════════════════════════
190
191📊 PORTFOLIO SNAPSHOT:
192| Account | Value | Day P&L | Margin Used |
193|---------|-------|---------|-------------|
194| Roth IRA | $XX,XXX | +/-$XXX | N/A |
195| Personal | $XX,XXX | +/-$XXX | XX% |
196| Business | $XX,XXX | +/-$XXX | XX% |
197
198Net Delta: [+/-XX] | Net Theta: [+/-$XX/day] | IVR avg: [XX%]
199
200═══════════════════════════════════════════════════════════════
201
202📅 THIS WEEK:
203- [Earnings/events that affect watchlist]
204- [Fed speakers / economic data]
205- [Options expiration dates]
206
207╚══════════════════════════════════════════════════════════════╝
208```
209
210## Rules
211- **No intraday alerts.** This runs ONCE at 7am. Tim checks it, makes decisions, then focuses on BDR work.
212- **Actionable only.** Don't list 30 tickers with "neutral" signals. Only surface what needs attention.
213- **Position management first.** Alerts on existing positions before new setups.
214- **Risk management always.** Every setup includes stop loss. Portfolio delta/margin always visible.
215- **2% rule enforced.** Flag if any suggested trade exceeds 2% portfolio risk.
216- **15% concentration rule.** Flag if any position exceeds 15% of account.
217
218</workflow>
219
220<dependencies>
221## Required Skills
222- `trading-signals-skill` — Core analysis framework (regime detection, 5 methodologies, options strategies, Greeks)
223- `ibkr-api-skill` — IBKR portfolio data (positions, P&L, margin, account values)
224
225## Required Tools
226- **Web Search:** Pre-market data, news, economic calendar, options flow (primary data source)
227- **IBKR MCP** (`ArjunDivecha/ibkr-mcp-server`): get_portfolio, get_account_summary, switch_account, get_market_data, get_historical_data, get_margin_requirements, check_shortable_shares, get_borrow_rates, short_selling_analysis, get_connection_status — requires IB Gateway on port 7497 (paper) or 7496 (live). If not connected, web search covers market data.
228- **Scheduling:** CronCreate `"53 6 * * 1-5"` for session-based 7am CST runs (3-day auto-expire)
229
230## Data Sources (via web search)
231- Yahoo Finance / TradingView: Price data, technicals
232- CBOE: VIX, put/call ratios
233- CME: Futures, Fed funds
234- Finviz: Screener, market internals
235- Unusual Whales / Barchart: Options flow
236
237## Emit Outcome Sidecar
238
239As the final step, write to `~/.claude/skill-analytics/last-outcome-trading-alert-scheduler.json`:
240```json
241{"ts":"[UTC ISO8601]","skill":"trading-alert-scheduler","version":"1.0.0","variant":"default",
242 "status":"[success|partial|error]","runtime_ms":[estimated ms from start],
243 "metrics":{"alerts_generated":[n],"tickers_scanned":[n],"regime_changes":[n]},
244 "error":null,"session_id":"[YYYY-MM-DD]"}
245```
246Use status "partial" if some stages failed but results were produced. Use "error" only if no output was generated.
247</dependencies>