Trade Construction Reference
A side-by-side reference for reading what the bot detects, what passes each gate, and what each operator-facing alert represents. The worked examples below originate from the prior zone strategy; a BOS-specific rewrite is in progress for the next release.
NOTE: The six worked examples below are illustrative — they describe the shape of a clean, ambiguous, or unsafe BOS setup so the operator can pattern-match against live ones. Real annotated trades from the bot's journal will replace these as the live demo collects them.
These are the setups where every BOS criterion lines up — clean swing break, daily alignment, qualifying retrace zone, RRR above the 2.0 floor, and every pre-entry gate clearing. When the dashboard's BOS PLANNED row matches what one of these describes, you're looking at the cleanest textbook expression of the RETRACE workflow. In shadow-only mode the fill and outcome are simulated to the shadow journal; live orders on MOMENTUM-classified BOSes fire immediately at market and never publish a PLANNED row.
Every criterion clean. When the 🎯 BOS PLANNED Telegram lands, the setup is one retrace away from firing. Watch for the ✅ RETRACE CONFIRMED — then the order is at OANDA.
The rare case where the aggressive 2/2 path may fire — two positions on the same setup, doubled risk for a clean signature. The bot only takes this when score, group cap, and direction all line up.
These RETRACE-path BOS setups clear the minimum bar but one or two signals are softer than ideal. In shadow simulation the bot may take them; the operator should read the shadow journal outcome as a wider distribution than for the textbook cases above.
Acceptable but not elite. The bot will take it if all 17 gates pass. Operator should expect a wider range of outcomes here than on a clean break with a 3:1 setup.
Structure and zone are right; timing is not. The bot does not gate purely on time-of-day, but the operator's eye on the retrace candle quality matters more here than on a 09:00 setup.
These BOS conditions are exactly what the bot was designed to reject. The Active BOS Detections row may or may not even appear — what's certain is no live order reaches OANDA. Trust the bot. The temptation to override on a "feels right" gut read is the precise bias the strategy was built to remove.
The single most common losing trade across all timeframes: a clean break against the daily direction. Stage 2's hard filter is doing exactly its job. Do not override.
The 2:1 minimum is the single non-negotiable parameter of the strategy. If RRR is below 2.0 the bot will not publish a plan, won't fire an order, won't pretend the setup exists. Mirror the bot's discipline.
Before any BOS becomes a MOMENTUM entry, the classifier (_classify_bos_momentum, bot_v4_final.py:40722) reads the current H4 structure — UPTREND, DOWNTREND, or RANGE — from the same swing-point pipeline the bot uses on the trade timeframe. This runs the same way regardless of which timeframe (M5, M15, H1) produced the BOS: the H4 context tells the classifier whether the break lines up with a directional macro backdrop or is happening inside chop.
Recent H4 swing highs step higher; swing lows step higher. A BULLISH BOS on any timeframe is aligned — a top-quality MOMENTUM candidate.
H4 highs and lows both step down. A BEARISH BOS is aligned; a BULLISH BOS is counter-trend and — on the default rule — cannot classify as MOMENTUM.
H4 highs and lows churn inside a band — no directional structure. A BOS in either direction is unaligned by default.
A BOS classifies as MOMENTUM only when its direction matches the H4 trend — bullish BOS on H4 UPTREND, or bearish BOS on H4 DOWNTREND. When H4 is RANGE, or when H4 is trending in the opposite direction, the same BOS is normally downgraded to RETRACE (departure_r ≥ 0.5 without H4 alignment) or WEAK (departure_r below 0.5).
This is the guardrail that keeps MOMENTUM from firing into chop or against the higher-timeframe tape. It's a large part of the reason MOMENTUM-classed entries have a materially higher win-rate baseline than RETRACE-classed signals in the shadow journal.
_relax_h4 override — per-symbol calibrationFour instruments — ... — carry an override at bot_v4_final.py:40800. For these four, a BOS can still classify as MOMENTUM when H4=RANGE, provided departure_r clears the per-symbol threshold. H4=UPTREND / DOWNTREND behaviour is unchanged; the relax is an OR-branch on the H4 check, not a replacement for it.
Each of the four was added on evidence, not by symmetry:
XAG_USD carries the relaxation despite not being live-promoted — v1.14.34 shipped it deliberately to unblock MOMENTUM shadow-journal accrual, since XAG's 87% H4=RANGE distribution would otherwise leave the shadow with zero MOMENTUM rows and no basis for a future promotion decision. The relaxation starts the data clock; live promotion (adding XAG to BOS_MOMENTUM_LIVE_PROMOTED) is a separate downstream decision that follows the shadow sample reaching the n≥20 floor and the WR reaching the 33.3% breakeven bar.
Five instruments — AUD_USD, EUR_USD, GBP_USD, NAS100_USD, SPX500_USD, US30_USD, USD_JPY, XAG_USD, XAU_USD — do NOT have the H4 relaxation. On these, a BOS can only reach MOMENTUM classification when H4 is in a directional trend matching the BOS direction. If H4=RANGE, the best they can get is a RETRACE classification (which, under the current BOS_RETRACE_LIVE_PROMOTED = set() policy, is shadow-only).
This is deliberate. The four relaxed instruments earned the OR-branch on documented H4=RANGE-dominant shadow distributions; the other five haven't shown the same pattern. Adding a new instrument to the relax set requires the same evidence — a real shadow distribution showing H4=RANGE dominance, not a symmetry argument.
The H4 regime filter and the departure_r threshold are independent per-symbol calibrations. A BOS must clear BOTH to reach MOMENTUM.
departure_r thresholdHow strong the break candle needs to be, measured as (|close − swing| / ATR).
Defined in BOS_MOMENTUM_THRESHOLDS, bot_v4_final.py:504. Calibration re-confirmed via 2026-07 shadow-replay.
_relax_h4 overrideWhether H4=RANGE is acceptable for MOMENTUM classification on this symbol.
Defined in _classify_bos_momentum, bot_v4_final.py:40800.
Failing the departure_r bar drops the BOS to WEAK — never traded, never journaled beyond the detection log. Passing departure_r but failing the H4 rule drops it to RETRACE — shadow-only under the current policy. Passing both = MOMENTUM classification, which is what the live entry path (_try_bos_momentum_entry, bot_v4_final.py:43478) actually acts on.
MOMENTUM classification says "this BOS looks like a real directional move." The tier matrix says "on THIS timeframe of THIS instrument, we are willing to place a live OANDA order today." Both gates must clear before _try_bos_momentum_entry (bot_v4_final.py:43478) reaches the market-order call.
| Symbol | M5 | M15 | H1 | Momentum live-promoted? |
|---|---|---|---|---|
| XAU_USD | live | live | scan_only | ✓ live-promoted (v1.14.18) |
| NAS100_USD | live | live | scan_only | ✓ live-promoted (v1.14.66) |
| US30_USD | live | live | scan_only | ✓ live-promoted (v1.14.66) |
| SPX500_USD | scan_only | scan_only | scan_only | no (v1.14.70 demoted, WR below breakeven) |
| XAG_USD | scan_only | scan_only | scan_only | no (awaiting n≥20 shadow floor — see Section 04) |
| EUR_USD / GBP_USD / AUD_USD / USD_JPY |
scan_only | scan_only | scan_only | no (below-breakeven shadow WR to date) |
H1 scan_only across XAU, NAS100, and US30 is intentional. Two reasons:
bot_v4_final.py:42330).The v1.16.1 fix (ADV-48) enforces this at runtime: _bos_momentum_live_eligible now returns False for any (sym, tf) whose tier matrix cell is not live, with refusal reason SCAN_ONLY_TF. Before v1.16.1 there was a gap where an H1 BOS on a live-promoted sym could reach the live entry path even though the tier matrix said scan-only. That gap is now closed by two independent gates: the tier check in the eligibility function AND the tier check in the block-reason enumerator.
The tier matrix is a data-gated decision, not a preference. Adding a cell to live requires:
Everything else stays scan_only. Removing a cell from live (demoting) requires only sustained WR regression; the change is a single dict edit + a PARAM_VERSION bump.
When the classifier routes a BOS to RETRACE — departure_r in the 0.5-0.7 band, or above 0.7 without H4 alignment on the non-relaxed instruments — the shadow simulator builds a planned entry at the zone proximal and scores a fill against the subsequent price path. The depth of the retrace into the planned demand or supply zone changes the character of the simulated fill. Five tiers, each with a different meaning for shadow-fill probability and follow-through.
Once a RETRACE-classed BOS produces a PLANNED row in the shadow simulator, the next question is how price is moving relative to the retrace zone. The distance-to-entry field and how fast it closes or widens shape the simulated fill probability and the follow-through band on the shadow journal.
Price falling fast into the planned demand zone. Distance to entry closing rapidly. Stay at screen — RETRACE CONFIRMED is imminent.
(M5: 6h, M15: 12h, H1: 24h)
No movement either way. Watch the window countdown — if it ticks to zero with price still flat, the BOS expires and the PLANNED row disappears.
Price continuing in the BOS direction without retracing. Fill probability dropping. Often the BOS plays out without ever offering an entry — and that's fine.
Strong continuation away from the zone. Entry will not fire on this BOS. Do not chase a runaway with a manual order.
Price rising fast into the planned supply zone. Same urgency as the bullish-retrace fast case. RETRACE CONFIRMED is imminent.
The one-page check. When in doubt, scan these two lists — if more greens than reds line up on a card, trust the bot. If reds dominate, the bot will protect you at the gate; your job is to not override it.
The dashboard surfaces everything. The bot's gate decides. This playbook helps you read the dashboard the way the gate reads it — so the two of you arrive at the same conclusion in real time.