================================================================================ BENNETT'S EURUSD MACRO MODEL — PROJECT JOURNAL ================================================================================ Last updated: 2026-04-04 Chat history: /mnt/transcripts/ (sessions 1-3 plus this session) ================================================================================ MODEL OVERVIEW ================================================================================ Strategy: US-DE 2Y yield spread z-score mean reversion Long EURUSD when spread dislocation extreme negative (z < -2.75) Short EURUSD when spread dislocation extreme positive (z > +2.75) Entry: Fibonacci 0.786 pullback within 6-hour window after signal Exit: TP 0.20% | SL 0.25% | Z-exit ±1.5 | Max hold 52 hours Risk: 0.75% of $300k notional per trade (base) Sizing: 1x band z 2.75-3.50 | 1.5x band z 3.50-4.50 | 2x band z 4.50+ Session: 07:00-17:00 EET (05:00-15:00 UTC) for NEW signals only Z-exit monitoring continues overnight if position open Validated backtest (combined_candidate_matrix_v1.py): Trades : 4,019 Win rate : 75.0% Sharpe : 5.22 Sortino : 4.01 Max DD : -2.56% CAGR : 12.0% Period : 2003-2026 (22 years) Exit split : TP 68.6% | SL 21.5% | Z-exit 9.9% Source file: data/processed/trades_real_costs.csv ================================================================================ INFRASTRUCTURE ================================================================================ VPS: ForexVPS.net C:\Users\Administrator\OneDrive\fx_macro_intraday\ IP: 193.38.138.152 Home: C:\Users\paul_\OneDrive\fx_macro_intraday\ Broker: IC Markets Raw Trading Ltd Account: 52793562 (demo paper trading) Balance: ~$99,798 (after 2 live trades) MT5: Installed on VPS, connected to IC Markets demo Data: 1H EURUSD : via MT5 copy_rates (146 days live) 15M EURUSD: EURUSD_15M_2003_2026.csv (570,912 bars) US 2Y : data/raw/rates/us2y.csv (FRED DGS2) DE 2Y : data/raw/rates/de2y.csv (ECB fallback) SOFR : data/raw/rates/sofr.csv (FRED) COT : data/raw/cot/eur_fx_cot.csv ================================================================================ KEY FILES ================================================================================ Live execution: src/execution/live_signal_monitor.py — main live trading script src/execution/dashboard_server.py — dashboard HTTP server Dashboard: dashboard.html — web dashboard (VPS root) http://193.38.138.152:8765/dashboard.html State files: data/state/live_state.json — position + armed state data/state/trade_history.json — closed trade log Commands (VPS): python src/execution/live_signal_monitor.py C:\Users\Administrator\AppData\Local\Programs\Python\Python314\python.exe src/execution/dashboard_server.py Get-Content data\logs\live_monitor.log -Wait -Tail 30 Telegram bot: @Bennetts_eurusd_macro_bot Token: 8794831706:AAGzqHNhyvfWL2lG_kCQUupacilRf7GfNSI Chat ID: 1031071259 ================================================================================ LIVE TRADES TO DATE (paper trading started 16 March 2026) ================================================================================ Trade 1 — LONG Date : 30/03/2026 Signal : 13:01 UTC, z = +3.201 (1x band) Entry : 13:35 UTC @ 1.14626, 3.00 lots Exit : TP hit @ 1.14855 (~06:00 31/03) Net P&L : +$662.03 Result : WIN ✅ Notes : First live trade. TP hit cleanly. Monday swap paid $24.97. Trade 2 — SHORT Date : 31/03/2026 Signal : 13:01 UTC, z = -3.039 (1x band) Entry : 13:35 UTC @ 1.15074, 3.02 lots Exit : SL hit @ 1.15363 (17:30 UTC) — 1 pip above SL level Net P&L : -$863.72 Result : LOSS ❌ Notes : Multiple script restarts during signal window due to bug fixes (Fib range bug, armed state persistence). Both bugs resolved before Trade 3. Running tally: 2 trades | 1W 1L | 50% WR | -$201.69 net Trade 3 — Signal fired, entry MISSED Date : 31/03/2026 ~15:30 UTC Signal : z = -3.367 to -3.493 (strengthening) Issue : Armed state lost on script restart, fast poll missed entry Resolution: Armed state persistence now saves to live_state.json and restores on restart within 6-hour window. ================================================================================ BUGS FIXED (all resolved) ================================================================================ 1. Session window blocking Fibonacci entries (54.9% of trades missed) Fix: Session end only blocks NEW signals; armed entries continue 6h 2. Fibonacci range using wrong columns Fix: Use bars_1h.iloc[-1] for high/low, not signal_df row 3. Armed target not updating between hourly checks Fix: ARMED["target_price"] updated on each hourly recalculation Log shows: "Already armed | SHORT | Target updated: X → Y" 4. Armed state lost on restart Fix: ARMED dict persisted to live_state.json on arm/disarm Restores on startup with 6h expiry check Telegram alert: "🎯 SIGNAL RESTORED AFTER REBOOT" 5. Z-exit blind overnight Fix: If position_open, always compute z-score regardless of session 6. P&L detection using wrong MT5 deal Fix: Match by position_id with entry==1 filter, 7-day lookback 7. Dashboard showing stale Armed status Fix: Dashboard reads armed status from live_state.json exclusively 8. Yield data using wrong ^IRX proxy (returned 4.33% T-bill rate) Fix: Removed all yfinance proxies. US 2Y from CSV, SOFR from FRED 9. rates_dir wrong path (DATA_FILE.parent.parent too high) Fix: Use BASE_PATH / "data" / "raw" / "rates" directly 10. Post-close immediate signal check Decision: NOT implemented — backtest showed 0 extra trades generated Keep hourly-only schedule to match validated backtest exactly ================================================================================ RESEARCH COMPLETED ================================================================================ Post-close immediate signal check (post_close_signal_check_v1.py) Result: 0 extra trades — KEEP hourly schedule Mid-trade z-score scaling (mid_trade_zscore_scaling_v1.py) Result: All three approaches identical — KEEP fixed lots at entry COT integration Result: +1.6% WR improvement — too marginal, use as context only Signal timing analysis Peak entry hours: 15:00-16:00 UTC (after 14:00 UTC z-crossings) Best days: Thursday and Friday Weekly signal frequency 6.6% of weeks have 0 trades Longest zero streak: 2 consecutive weeks (historically normal) Markov regime backtest (markov_regime_backtest_v1.py) Result: NO IMPROVEMENT Key finding: Counter-trend trades in high-persistence regime have 92.7% WR vs 75% baseline — do NOT filter them out HMM: Could not distinguish regimes (both states similar means) Hurst/BM: H values unreliable on z-score series (mean 1.32, capped) Kalman filter backtest (kalman_zscore_backtest_v1.py) Result: NO IMPROVEMENT Kalman on z-score: destroys signal (0 trades with heavy smoothing) Kalman on spread: monotonic degradation (more smooth = worse Sharpe) Conclusion: Raw z-score already optimally calibrated FIRM RULES established from research: - Do not re-optimise this model - Do not add complexity without beating validated Sharpe on holdout - Threshold for implementing any change: Sharpe +0.3, >80% trades kept ================================================================================ DASHBOARD ================================================================================ URL: http://193.38.138.152:8765/dashboard.html Features: - Z-score gauge with threshold lines - Live yield monitor (US 2Y, DE 2Y, Spread, SOFR) with 60-day charts - SOFR monitoring note with stress thresholds - Paper trade stats (wins/losses/WR/PnL/max consecutive) - DD bars (1-step $3k daily, 2-step $5k daily, $10k overall) - FTMO challenge tracker (Phase 1 + Phase 2) - Win rate by z-score band chart (1x/1.5x/2x) - Z-score history chart (60 days, hourly readings, signal dots) - Monthly P&L heatmap (22 years, from trades_real_costs.csv) - Equity curves (fixed notional + compounded) - Light/dark mode toggle (preference saved to localStorage) - Regime performance bars (6 regimes all positive) - Frozen parameters table - Risk & trade statistics Live updates (every 30s): - Z-score from live_monitor.log - Position/armed status from live_state.json - Trade count/PnL from trade_history.json - 2026 heatmap row from trade_history.json - Z-score history from log (all hourly readings, last 60 days) ================================================================================ FTMO PLAN ================================================================================ Current status: Paper trading demo (accumulating 3-5 trades minimum) Target : Start fresh FTMO 1-Step $100k challenge for this model 1-Step rules: Profit target : 10% ($10,000) Daily DD : 3% ($3,000) — resets midnight CEST Overall DD : 10% ($10,000) Min trading days: 4 No time limit Best Day Rule : Single best day < 50% of total profit Trade economics at 0.75% risk (2 pip spread): Win : ~$537 per trade at 1x (~$600 gross - $63 spread) Loss : ~$750 per trade at 1x Breakeven WR: 60% (model delivers 75%) Risk limits (max before account breach): 0.75% (current) : 7 losses = $5,250 (52% of $10k limit) ✅ 1.00% : 7 losses = $7,000 (70% of $10k limit) ✅ 1.25% : 7 losses = $8,750 (88% — too close) ⚠️ Separate existing FTMO account: Being passed with different approach Do NOT put macro model on that account ================================================================================ RESEARCH BACKLOG ================================================================================ Pending (run when more live data available): 1. GBPUSD yield spread model (same framework, different pair) 2. USDJPY YCC regime model (more complex, longer project) 3. Markov persistence regime on GBPUSD New model development (separate chat): Start fresh chat for any new model work Come back to this context for: - Live trade logging and bug fixes - FTMO challenge launch (after 3-5 paper trades) - 30-day paper trading evaluation (~16 April 2026) ================================================================================ CORE LESSONS — FULL CURRICULUM (MUST READ AT START OF EVERY CHAT) ================================================================================ These lessons were provided at the very start of the project and form the intellectual foundation of every model decision. Any Claude session working on this project MUST read and internalise these before proceeding. When starting a new chat, paste this journal and say: "I am working on a live EURUSD macro model. Please read the journal above carefully, especially the CORE LESSONS section, before we begin." ================================================================================ SECTION 1 — QUANTITATIVE & MACRO FOUNDATIONS (C.OG Lessons 1-6) ================================================================================ These six lessons dismantle the retail mindset and rebuild understanding from the ground up. Before indicators, before chart patterns, before any technical setup — there's macro. It's the current that moves markets. LESSON 1 — Repositioning Your Approach to Financial Markets URL: https://cog000.github.io/Repositioning-Your-Approach-to-Financial-Markets/ KEY PRINCIPLES: - Signal-to-Noise Ratio (SNR) determines exploitability. At short horizons noise dominates signal. Extend holding periods to improve SNR. - Transaction costs compound at high frequencies — erode edge geometrically. - Systematic validation (walk-forward, OOS, Monte Carlo) before any capital. - The Validation Funnel: 52 hypotheses → 34 pass IS → 13 pass OOS → 6 pass walk-forward → 4 deployed. Capital preserved through all failures. - Know your max DD, win rate, losing streak BEFORE going live — not through it. - The Double Negative Trap: ad-hoc trading destroys both time AND capital. LESSON 2 — Understanding What Moves Markets URL: https://cog000.github.io/Understanding-What-Moves-Markets/ KEY PRINCIPLES: - THE CAPITAL FLOW HIERARCHY (most important concept in the curriculum): Central Banks → Sovereign Bonds → FX Markets → Equity Indices → Credit Information degrades at each level. Trade as high up the hierarchy as possible. - Rate differentials drive FX. US-DE 2Y spread is the #1 EURUSD driver. - Money flows to highest risk-adjusted return — this drives trillions daily. - Risk-On: stocks up, VIX down, yields up, safe havens down. Risk-Off: stocks down, VIX up, safe havens (JPY, CHF, UST) rally. - Liquidity TRUMPS fundamentals. March 2020: worst GDP ever + 45% stock rally because the Fed injected $3T. Don't fight the flow. - Institutional calendar flows (month-end rebalancing, OpEx) create predictable mechanical pressure — know when forced flows happen. - Positioning data > news narrative. Extreme longs are vulnerable. Extreme shorts are squeeze candidates. Check COT before trading headlines. LESSON 3 — Central Bank Policy Deep Dive URL: https://cog000.github.io/Central-Bank-Policy/ KEY PRINCIPLES: - Fed dual mandate: maximum employment + price stability (2% PCE). - FOMC = 7 permanent voters (Governors) + 5 rotating (Regional Presidents). - Hawks prioritise inflation. Doves prioritise employment. Know who's voting. - Fed reaction function: hot inflation + tight labour = aggressive tightening. - FOMC communication cycle: Statement (2pm ET) → Press conference (2:30pm) → Minutes (3 weeks later). Each layer adds nuance. - Fedspeak is precise — every word change is deliberate. "Elevated" → "easing" is a policy signal. Compare statements word-for-word. - Dot plot = conditional projections, NOT commitments. Compare dots to market pricing (CME FedWatch) to find surprise direction. - Net Liquidity = Fed Balance Sheet − TGA − RRP. Track weekly. Rising = risk tailwind. Falling = headwind. H.4.1 report published every Thursday 4:30pm ET. - ECB single mandate (inflation). BoJ structurally dovish (wants inflation), YCC changes are seismic. BoE faces stagflation risk. - Policy DIVERGENCE drives FX. Fed hawkish + ECB dovish = EUR/USD falls. - Initial FOMC moves often reverse during press conference — wait for presser before committing. True direction often takes 2-3 days to establish. LESSON 4 — Fixed Income Deep Dive URL: https://cog000.github.io/Fixed-Income/ KEY PRINCIPLES: - Bond prices move INVERSE to yields. When yields rise, prices fall. - Duration: sensitivity of bond price to yield changes. Longer duration = more sensitive. 10Y duration ~8-9, 2Y duration ~2. - Yield curve: normally upward sloping (more yield for longer risk). Inversion (2Y > 10Y) historically predicts recession 6-18 months ahead. - 2Y yield = market's best guess at where rates will be. Most policy-sensitive. - 10Y yield = long-term growth + inflation expectations. - Term premium: extra yield demanded for holding long-duration bonds. - Real yield = nominal yield minus inflation expectations (TIPS breakevens). Rising real yields = bearish for gold, growth stocks, EM. - Credit spreads (HY vs IG): widening = risk-off / recession fears. HY OAS above 500bps = stress. Below 350bps = risk appetite healthy. - The yield spread between US and DE 2Y is the primary EURUSD driver — this is the exact signal our model exploits. LESSON 5 — Currency Markets & Global Flows URL: https://cog000.github.io/Currency-Markets-Global-Flows/ KEY PRINCIPLES: - FX market is $7.5T/day — largest and most liquid market globally. - G10 FX driven by: rate differentials, current account, risk sentiment. - Purchasing Power Parity (PPP): long-term anchor but useless short-term. - Interest Rate Parity: the mechanical driver of FX. Higher rates = stronger currency as capital flows toward better yield. - The carry trade: borrow low-yield currency, invest in high-yield currency. Earns carry until it unwinds violently. JPY can rally 10% in days on unwind. - USD is reserve currency: safe-haven flows → USD strengthens in risk-off. - EUR: driven by ECB vs Fed divergence, Eurozone growth differential, and political risk (fragmentation). - JPY: dominated by BoJ policy (YCC), carry trade positioning, and risk-off safe-haven demand. Most likely to surprise. - AUD/NZD: commodity currencies — sensitive to China growth and commodity cycles. - Intervention: BoJ/MoF can intervene in FX. Verbal intervention comes first, then actual buying/selling. Watch for repeated warnings. LESSON 6 — Cross-Asset Synthesis URL: https://cog000.github.io/Cross-Asset-Synthesis/ KEY PRINCIPLES: - Macro regimes (Growth-Inflation quadrant) determine which assets outperform: High Growth / Low Inflation (Goldilocks): equities and credit outperform High Growth / High Inflation (Reflation): commodities and real assets lead Low Growth / High Inflation (Stagflation): cash, commodities, short duration Low Growth / Low Inflation (Deflation): long bonds, quality equities - Transition detection is where alpha lives — regime change is the signal. - Lead-lag relationships: bonds lead equities by 3-6 months on rate cycles. Rate differentials lead FX by 2-8 weeks. This is the foundation of our model. - The 4 core systematic strategies and when each works: Mean Reversion: works in range-bound, high-volatility regimes Momentum: works in trending regimes with persistent flows Statistical Arb: works when pairs/spreads have structural relationships Lead-Lag: works when information flows have predictable timing OUR MODEL = Lead-Lag + Mean Reversion hybrid - Validation framework: walk-forward, Monte Carlo, t-statistic, OOS Sharpe. A strategy is real when it survives ALL of these — not just IS backtest. ================================================================================ SECTION 2 — REGRESSION ANALYSIS (8 Lessons) ================================================================================ Quantitative validation is not optional. It is the foundation everything is built on. These lessons cover the exact tools used to validate this model. LESSON R1 — Why Regression Matters URL: https://cog000.github.io/Why-Regression-Matters/ LESSON R2 — Simple Linear Regression URL: https://cog000.github.io/Simple-Linear-Regression/ LESSON R3 — Measuring Model Fit URL: https://cog000.github.io/Measuring-Model-Fit/ KEY: R², adjusted R², residual analysis. Our model uses rolling beta regression to estimate the EURUSD-spread relationship. LESSON R4 — Statistical Inference & Significance URL: https://cog000.github.io/Statistical-Inference-Significance/ KEY: t-statistic, p-value, confidence intervals. Validated model t-stat = 24.93, p = 0.000. This is the mathematical proof the edge is real. LESSON R5 — Multiple Regression & Factor Models URL: https://cog000.github.io/Multiple-Regression-Factor-Models/ LESSON R6 — Regression Diagnostics & Pitfalls URL: https://cog000.github.io/Regression-Diagnostics-Pitfalls/ KEY: Heteroskedasticity, multicollinearity, autocorrelation, overfitting. These are the failure modes that destroy strategies between backtest and live execution. Understanding them is why we use OOS validation. LESSON R7 — From Regression to Production Models URL: https://cog000.github.io/From-Regression-To-Production-Models/ KEY: Walk-forward analysis, parameter stability, regime dependence. This is why we never re-optimise — parameters must be stable OOS. LESSON R8 — Advanced Extensions URL: https://cog000.github.io/Advanced-Extensions-What-s-Next/ ================================================================================ SECTION 3 — RANGE EXTENSION LEVELS ================================================================================ URL: https://cog000.github.io/Range-Extension-Levels/ KEY PRINCIPLES: - Technical analysis is a timing and structure tool, NOT a source of edge alone. - Widely-known setups get arbitraged. Edge requires something most cannot see. - Range extension levels used for Fibonacci entry precision (0.786 pullback). - Charts show what HAS happened. Macro tells you what WILL happen. Combine both. ================================================================================ SECTION 4 — VOLATILITY (5 Lessons) ================================================================================ Volatility isn't background noise — it clusters, mean-reverts, and follows identifiable regime patterns. These lessons underpin position sizing. LESSON V1 — Why Volatility Is Predictable URL: https://cog000.github.io/Why-Volatility-Is-Predictable/ KEY: Volatility clustering (GARCH), mean reversion, regime persistence. LESSON V2 — Daily Volatility Forecasting URL: https://cog000.github.io/Daily-Volatility-Forecasting/ KEY: ATR-based range forecasting. Used to validate our fixed 0.25% stop is appropriate for typical EURUSD microstructure. LESSON V3 — Weekly Regimes & Multi-Day Structure URL: https://cog000.github.io/Weekly-Regimes-Multi-Day-Structure/ KEY: Session structure, weekly range patterns, regime classification. LESSON V4 — Session Structure & Asia Range URL: https://cog000.github.io/Session-Structure-Asia-Range/ KEY: Asia range sets weekly structure. London breaks it. NY confirms or fades. Signal timing (14:00 UTC peak) aligns with London/NY overlap. LESSON V5 — Position Sizing with Volatility URL: https://cog000.github.io/Position-Sizing-with-Volatility/ KEY: Volatility-adjusted sizing keeps risk consistent across conditions. Our model uses fixed 0.75% risk — simple and validated over 22 years. ================================================================================ SECTION 5 — OPEN INTEREST (6 Lessons) ================================================================================ The edge hiding in plain sight. Institutional positioning in options and futures is publicly available and almost universally ignored by retail. LESSON OI1 — Foundations of Open Interest URL: https://cog000.github.io/Lesson-01-Foundations-Of-Open-Interest/ KEY: OI = total outstanding contracts. Rising OI + rising price = trend confirmed. Falling OI = position unwinding. Context for COT interpretation. LESSON OI2 — Reading the CME Data URL: https://cog000.github.io/Lesson-02-Reading-The-CME-Data-Access/ KEY: COT report (CFTC, Fridays) shows commercial vs speculative positioning. Extreme speculative positioning = mean reversion opportunity. Used as CONTEXT in our model (not a hard filter — tested and rejected). LESSON OI3 — Futures to CFD Conversion URL: https://cog000.github.io/Lesson-03-Futures-To-CFD-Conversion/ KEY: CME EUR futures = $125,000/contract. EURUSD 1 lot = $100,000. Conversion factor for mapping COT data to retail position sizing. LESSON OI4 — The Open Interest Matrix URL: https://cog000.github.io/Lesson-04-The-Open-Interest-Matrix/ KEY: Gamma walls (high OI strikes) act as support/resistance. Price gravitates toward max pain near expiry. LESSON OI5 — Gamma & Dealer Dynamics URL: https://cog000.github.io/Lesson-05-Gamma-Dealer-Dynamics/ KEY: Dealers hedge gamma exposure mechanically. Above gamma wall = dealers buy on dips (stabilising). Below gamma wall = dealers sell rallies (destabilising). This explains why our model works better at large dislocations — gamma forces keep small moves mean-reverting. LESSON OI6 — Trading Frameworks URL: https://cog000.github.io/Lesson-06-Trading-Frameworks/ KEY: Range trading between OI walls. Momentum trades when walls break. Max pain reversion near expiry. Confirmation filters for setups. ================================================================================ SECTION 6 — YIELD SPREAD DEEP DIVE + LIVE EXAMPLE ================================================================================ This is the direct theoretical foundation of the live EURUSD model. YIELD SPREAD DEEP DIVE URL: https://cog000.github.io/The-Yield-Spread-/ KEY PRINCIPLES: - US-DE 2Y yield spread is the single most important driver of EURUSD. - The bond market tells you where EURUSD is headed days/weeks in advance. - Mechanism: policy divergence → yield differential → capital flows → FX. - This is not statistical correlation — it is a CAUSAL mechanism. Fed hikes → US 2Y rises → spread widens → EURUSD should fall. - When EURUSD fails to follow the spread (dislocation), a mean reversion trade exists. This IS the signal our model exploits. - Hedge funds and reserve managers apply this at scale with many factors. We are exploiting a simplified, validated version of the same mechanism. LIVE EXAMPLE — Feb 17-18 2026 URL: https://cog000.github.io/Yield-Spread-Live-Example-/ KEY PRINCIPLES: - Tuesday Feb 17: DE-US spread fell all day. EURUSD ranged/mean-reverted. Spot traders saw noise. Bond traders saw the setup building. - Wednesday Feb 18: EURUSD caught up — hard selloff, accelerating into close. - The spread LED by ~24 hours. This is the lead-lag in action. - This exact behaviour is why our model uses a lagged z-score (24h lag v3). ================================================================================ SECTION 7 — MACRO REGIME DETECTION FRAMEWORK ================================================================================ URL: https://cog000.github.io/Macro-Data-Importance/ KEY PRINCIPLES: - Growth-Inflation quadrant classifies macro regime. Four states: Goldilocks (high growth/low inflation), Reflation, Stagflation, Deflation. - Each regime has distinct asset class preferences and strategy implications. - Transition detection is where the real alpha lives — not being in the regime but catching the change before it's fully priced. - Indicators to classify current regime: Growth: PMI, ISM, NFP, GDP nowcast, yield curve slope Inflation: CPI, PCE, PPI, breakeven rates, commodity prices - Python implementation: regime classification via indicator z-scores, transition detection via rolling regime assignment. - Historical performance 1970-2024: each regime has consistent asset winners. ================================================================================ HOW THESE LESSONS APPLY TO THIS MODEL SPECIFICALLY ================================================================================ 1. We trade at Level 3 of the Capital Flow Hierarchy (FX) using signals from Level 2 (bonds). This is ABOVE where most retail traders operate. 2. The yield spread lead-lag is a causal mechanism, not curve-fitted pattern. The t-statistic of 24.93 (p=0.000) confirms statistical validity. 3. The z-score threshold ±2.75 identifies extreme dislocations where mean-reversion force is strongest. This is validated by the 75% win rate. 4. The Fibonacci 0.786 entry uses range extension principles to enter at optimal price within the dislocation window. 5. Position sizing at 0.75% respects volatility-adjusted risk principles — consistent exposure regardless of z-score band (band scaling handles expected value, not risk). 6. Walk-forward validation over 22 years (2003-2026) with Monte Carlo simulation and t-statistic confirmation meets ALL validation requirements from the regression and cross-asset synthesis lessons. 7. Every failed enhancement (COT filter, news trigger, Markov, Hurst, Kalman) reflects correct application of the validation framework — accept negative results rather than re-test until positive. ================================================================================ ================================================================================ CORE LESSONS — MUST BE READ AND FOLLOWED IN EVERY CHAT ================================================================================ These lessons were learned through painful experience during model development. Every future Claude session working on this project MUST follow these rules. Violating them has historically led to worse performance and wasted research. 1. NEVER RE-OPTIMISE A WORKING MODEL Once a model is validated and deployed, do not change its parameters. Every "improvement" attempt on the carry model (V9-V12) and this model failed to beat the original validated result on holdout data. The urge to tweak is the enemy of good systematic trading. RULE: Parameters are frozen. Research only. No live changes without beating validated Sharpe by +0.3 on clean holdout data. 2. PARTIAL TAKE-PROFITS DESTROY EDGE — NEVER USE THEM Testing partial TPs capped the fat-tail winners that generate most of the strategy's edge. The distribution of returns depends on letting winners run to full TP. RULE: Single TP at 0.20%. No scaling out. No partial exits. Ever. 3. TIGHT STOPS ARE TOO TIGHT FOR REAL FOREX MICROSTRUCTURE 0.75 ATR stops were tested and consistently underperformed the fixed 0.25% stop. Real forex has noise that triggers ATR stops prematurely. RULE: Fixed 0.25% stop only. No ATR stops. No trailing stops. 4. QUALITY FILTERS THAT SEEM SENSIBLE OFTEN DESTROY EDGE COT filter: only +1.6% WR improvement — not worth the complexity News filter: no improvement Markov filter: counter-trend trades had 92.7% WR — filtering hurt Kalman filter: every smoothing level made results worse RULE: Do not add filters without full backtest proof on holdout. The bar is Sharpe +0.3, >80% trades kept. Nothing below this. 5. DO NOT OVER-OPTIMISE — THE EFFICIENT FRONTIER IS REAL The carry model V8 (OOS Sharpe 0.653) was the peak. V9-V12 all degraded. This model's validated parameters are its efficient frontier. More optimisation = more curve fitting = worse live performance. RULE: Stop when validation metrics stop improving. We stopped here. 6. ALWAYS TEST WITH THE VALIDATED PIPELINE, NOT SIMPLIFICATIONS Research scripts that simplify the signal logic produce fewer trades (e.g. 1,712 vs 4,019) and wrong win rates. Always use: - trades_real_costs.csv for filtering tests - combined_candidate_matrix_v1.py for signal-level tests - The full Fibonacci entry and TP/SL exit logic Never approximate or simplify the model for convenience. 7. LIVE SYSTEM MUST MATCH BACKTEST EXACTLY Every deviation between live execution and backtest assumptions must be investigated and resolved. Key deviations fixed: - Session window bug (54.9% of trades were being missed) - Armed target not updating hourly (wrong Fib level) - Armed state lost on restart (6h window broken) RULE: If live behaviour differs from backtest, treat as a bug. 8. STATE PERSISTENCE BEFORE DEPLOYMENT Any stateful variable (position, armed signal, running P&L) must be persisted to disk and restored on restart. Live systems will restart. RULE: Never assume a script will run uninterrupted. Always persist state. 9. RESEARCH IS FOR EVIDENCE, NOT CONFIRMATION The purpose of running backtests is to find out the truth, not to confirm an idea. If the backtest says NO, the answer is NO. We ran Markov, Hurst, Brownian Motion and Kalman — all said NO. That is the correct outcome. The model does not need them. RULE: Accept negative results. Do not reframe or retest until positive. 10. THE MODEL'S EDGE COMES FROM SIMPLICITY The z-score of a yield spread crossing a threshold is a clean, theoretically grounded signal. Every layer of complexity added on top has degraded it. The 22-year Sharpe 5.22 exists BECAUSE of simplicity. RULE: When in doubt, do less. Complexity is the enemy of robustness. ================================================================================ HOW TO START A NEW CHAT FOR THIS PROJECT ================================================================================ Paste this journal at the start of the chat and say: "I am working on a live EURUSD macro model. Please read the journal above carefully, especially the CORE LESSONS section, before we begin." The Claude in that chat must acknowledge the core lessons before proceeding with any research, code changes or model development. Any suggestion that violates the core lessons (e.g. "let's try a partial TP", "let's add a news filter", "let's re-optimise the threshold") should be challenged immediately with reference to the specific lesson it violates. ================================================================================ ================================================================================ SIGNAL PARAMETERS (LOCKED — DO NOT CHANGE) ================================================================================ Signal threshold : z ≥ ±2.75 Entry method : Fib 0.786, 6h window Take profit : 0.20% (~23 pip) Stop loss : 0.25% (~29 pip) Z-exit : ±1.5 reversal Max hold time : 52 hours Base risk : 0.75% Signal scaling : 1× / 1.5× / 2× Session (EET) : 08:00–17:00 Beta window : 120 days Z-score window : 60 bars ================================================================================