Trading Plan Builder
from datetime import datetime, timedelta
from dataclasses import dataclass, field
@dataclass
class DailyTradingPlan:
date: str
session_focus: str
watchlist: list[dict] = field(default_factory=list)
macro_context: str = ""
key_events: list[str] = field(default_factory=list)
bias: dict = field(default_factory=dict)
risk_budget: dict = field(default_factory=dict)
rules_today: list[str] = field(default_factory=list)
checklist: dict = field(default_factory=dict)
class TradingPlanBuilder:
@staticmethod
def pre_market_checklist() -> dict:
return {
"1_macro_scan": {
"task": "Check DXY, VIX, yield curves, equity futures",
"tools": ["macro-economic-dashboard"],
"time": "5 min",
},
"2_news_check": {
"task": "Review upcoming economic events and overnight news",
"tools": ["market-news-impact", "risk-calendar-trade-filter"],
"time": "5 min",
},
"3_htf_analysis": {
"task": "D1 and H4 analysis on watchlist pairs — set daily bias",
"tools": ["mt5-chart-browser", "mtf-confluence-scorer"],
"time": "10 min",
},
"4_key_levels": {
"task": "Mark S/R, order blocks, FVGs on H1 charts",
"tools": ["trendline-sr-vision", "liquidity-order-flow-mapper"],
"time": "10 min",
},
"5_risk_budget": {
"task": "Set max risk for the day, check portfolio heat",
"tools": ["risk-and-portfolio"],
"time": "2 min",
},
"6_session_check": {
"task": "Verify current session quality and killzones",
"tools": ["session-profiler", "risk-calendar-trade-filter"],
"time": "2 min",
},
"total_time": "~35 minutes",
}
@staticmethod
def generate_watchlist(pairs: list[str], confluence_scores: dict) -> list[dict]:
"""Rank pairs by confluence and generate focused watchlist."""
watchlist = []
for pair in pairs:
score = confluence_scores.get(pair, {})
watchlist.append({
"pair": pair,
"mtf_score": score.get("overall_score", 0),
"bias": score.get("direction", "NEUTRAL"),
"confluence_pct": score.get("confluence_pct", 0),
"priority": "A" if score.get("confluence_pct", 0) >= 75 else
"B" if score.get("confluence_pct", 0) >= 50 else "C",
})
return sorted(watchlist, key=lambda w: w.get("confluence_pct", 0), reverse=True)[:6]
@staticmethod
def end_of_day_review() -> dict:
return {
"1_log_trades": "Journal all trades with setup type, entry/exit reasoning, and R-multiple",
"2_review_execution": "Did you follow the plan? Rate 1-10.",
"3_what_worked": "List setups that worked and why",
"4_what_failed": "List setups that failed and why",
"5_lessons": "One key lesson for tomorrow",
"6_emotional_state": "Rate emotional discipline 1-10",
"7_plan_adjustments": "Any changes for tomorrow's plan?",
}
@staticmethod
def build_plan(now: datetime = None) -> DailyTradingPlan:
now = now or datetime.utcnow()
session = "london" if 7 <= now.hour < 13 else "new_york" if 13 <= now.hour < 22 else "tokyo"
return DailyTradingPlan(
date=now.strftime("%Y-%m-%d"),
session_focus=session,
risk_budget={"max_risk_today": "4%", "max_trades": 3, "max_loss_per_trade": "2%"},
rules_today=[
"Follow the plan. Do not deviate.",
"Only A and B grade setups.",
"No revenge trades after a loss.",
"Stop after 3 trades (win or lose).",
"No trading in last hour before high-impact news."],
checklist=TradingPlanBuilder.pre_market_checklist(),
)
1---2name: trading-plan-builder3description: Structured pre-market routine, watchlist generation, daily preparation checklist, and trading plan templates. Use this skill for "trading plan", "pre-market routine", "daily prep", "watchlist", "what should I focus on today", "morning routine", "prepare for trading", "daily checklist", "plan my trading day", "what pairs to watch", or any trading preparation. Works with all analysis skills to auto-generate the daily plan.4---56# Trading Plan Builder78```python9from datetime import datetime, timedelta10from dataclasses import dataclass, field1112@dataclass13class DailyTradingPlan:14 date: str15 session_focus: str16 watchlist: list[dict] = field(default_factory=list)17 macro_context: str = ""18 key_events: list[str] = field(default_factory=list)19 bias: dict = field(default_factory=dict)20 risk_budget: dict = field(default_factory=dict)21 rules_today: list[str] = field(default_factory=list)22 checklist: dict = field(default_factory=dict)2324class TradingPlanBuilder:2526 @staticmethod27 def pre_market_checklist() -> dict:28 return {29 "1_macro_scan": {30 "task": "Check DXY, VIX, yield curves, equity futures",31 "tools": ["macro-economic-dashboard"],32 "time": "5 min",33 },34 "2_news_check": {35 "task": "Review upcoming economic events and overnight news",36 "tools": ["market-news-impact", "risk-calendar-trade-filter"],37 "time": "5 min",38 },39 "3_htf_analysis": {40 "task": "D1 and H4 analysis on watchlist pairs — set daily bias",41 "tools": ["mt5-chart-browser", "mtf-confluence-scorer"],42 "time": "10 min",43 },44 "4_key_levels": {45 "task": "Mark S/R, order blocks, FVGs on H1 charts",46 "tools": ["trendline-sr-vision", "liquidity-order-flow-mapper"],47 "time": "10 min",48 },49 "5_risk_budget": {50 "task": "Set max risk for the day, check portfolio heat",51 "tools": ["risk-and-portfolio"],52 "time": "2 min",53 },54 "6_session_check": {55 "task": "Verify current session quality and killzones",56 "tools": ["session-profiler", "risk-calendar-trade-filter"],57 "time": "2 min",58 },59 "total_time": "~35 minutes",60 }6162 @staticmethod63 def generate_watchlist(pairs: list[str], confluence_scores: dict) -> list[dict]:64 """Rank pairs by confluence and generate focused watchlist."""65 watchlist = []66 for pair in pairs:67 score = confluence_scores.get(pair, {})68 watchlist.append({69 "pair": pair,70 "mtf_score": score.get("overall_score", 0),71 "bias": score.get("direction", "NEUTRAL"),72 "confluence_pct": score.get("confluence_pct", 0),73 "priority": "A" if score.get("confluence_pct", 0) >= 75 else74 "B" if score.get("confluence_pct", 0) >= 50 else "C",75 })76 return sorted(watchlist, key=lambda w: w.get("confluence_pct", 0), reverse=True)[:6]7778 @staticmethod79 def end_of_day_review() -> dict:80 return {81 "1_log_trades": "Journal all trades with setup type, entry/exit reasoning, and R-multiple",82 "2_review_execution": "Did you follow the plan? Rate 1-10.",83 "3_what_worked": "List setups that worked and why",84 "4_what_failed": "List setups that failed and why",85 "5_lessons": "One key lesson for tomorrow",86 "6_emotional_state": "Rate emotional discipline 1-10",87 "7_plan_adjustments": "Any changes for tomorrow's plan?",88 }8990 @staticmethod91 def build_plan(now: datetime = None) -> DailyTradingPlan:92 now = now or datetime.utcnow()93 session = "london" if 7 <= now.hour < 13 else "new_york" if 13 <= now.hour < 22 else "tokyo"94 return DailyTradingPlan(95 date=now.strftime("%Y-%m-%d"),96 session_focus=session,97 risk_budget={"max_risk_today": "4%", "max_trades": 3, "max_loss_per_trade": "2%"},98 rules_today=[99 "Follow the plan. Do not deviate.",100 "Only A and B grade setups.",101 "No revenge trades after a loss.",102 "Stop after 3 trades (win or lose).",103 "No trading in last hour before high-impact news."],104 checklist=TradingPlanBuilder.pre_market_checklist(),105 )106```