Psychology: staying hands-off in drawdowns
The hardest chapter to turn into code, and arguably the one that determines whether everything else in this course actually gets used correctly. Chapter 84's walk-forward validation established that even a genuinely good strategy has losing stretches — this chapter is about surviving them without sabotaging the strategy.
The core problem, stated precisely
A validated strategy (chapters 79-88) has a known, backtested distribution of possible drawdowns. When you're *inside* a real drawdown, it feels indistinguishable from "the strategy stopped working" — because from the inside, they look identical. The entire discipline is having a pre-committed process for telling them apart, decided *before* you're emotionally inside the drawdown, not during it.
Pre-commit a drawdown response plan, in writing, before going live
Strategy: Opening Range Breakout — NIFTY futures
Backtested max drawdown: 12%, longest recovery: 45 trading days
Pre-committed response plan:
- Drawdown < 8%: no action, this is within expected variance
- Drawdown 8-15%: reduce position size by 50%, continue monitoring,
review trade journal weekly for any pattern change
- Drawdown > 15% (beyond backtested max): HALT strategy, full review
required before resuming — something may genuinely be different
from the backtest period (regime change, broker/execution issue,
a bug)
- Recovery taking > 2x backtested longest recovery period: HALT and
review, regardless of drawdown depth
Writing this down *before* going live, and referring back to the document during an actual drawdown, converts an emotional decision ("this feels broken, I should stop") into a mechanical one ("my pre-committed threshold says X, and we're not there yet" or "we've crossed it, time to review as planned").
Why "the algo underperformed, so I'll just intervene manually" is usually the wrong instinct
Manually overriding a backtested strategy mid-drawdown reintroduces exactly the discretionary, emotion-driven decision-making that algo trading was supposed to remove. If you don't trust the strategy enough to let it run through its backtested drawdown range, the actual problem is insufficient conviction in the backtest (go back to chapters 84-85) — not something to solve by improvising decisions live.
The distinction that actually matters: process failure vs. bad luck
def drawdown_diagnostic(journal: TradeJournal, strategy: str, current_drawdown_pct: float, backtested_max_dd: float):
checks = {
"within_backtested_range": current_drawdown_pct <= backtested_max_dd * 1.2,
"trade_count_sufficient": journal_trade_count(journal, strategy) > 30, # enough trades to judge
"execution_matches_backtest": check_slippage_vs_backtest_assumption(journal, strategy), # chapter 86
"no_recent_broker_or_bug_issues": check_recent_error_log(strategy),
}
return checks
If execution quality, trade count, and error logs all check out and you're still within (even if uncomfortably near) the backtested drawdown range — this is very likely just variance, the exact thing chapter 84 told you to expect. If slippage has meaningfully worsened, or there's a bug in recent logs, or the drawdown has genuinely exceeded backtested bounds — that's a real signal to stop and investigate, not stubbornness to push through.
A practical habit: review on a schedule, not on a feeling
Set a fixed weekly or monthly review cadence (chapter 89's monthly_review) regardless of how the strategy is doing — this prevents both "checking obsessively during every dip" (which invites emotional overrides) and "not checking at all until something feels badly wrong" (which delays catching a genuine problem).