Research
Stochastic events — when AUC 0.85 is an artefact
On EURUSD, raw stochastic crosses inflate the model. After fixing sampling, AUC drops: weak regime filter, not a strategy.
In brief. I tested stochastic (%K) crosses as events on EURUSD (tick imbalance bars, 2023). Counting all crosses, the directional model shows a seductive AUC (~0.85). Restricting to tradable events (alternating sides, no same-leg spam), AUC falls to ~0.59–0.63. Sampling is the metric — possible use: regime / permission filter, not direct execution.
Why I ran this study
Stochastic crosses are a classic: visual signal, simple rule, trivial to code. In my process-first lab I ask first whether the event carries information under a frozen protocol (train/valid split, causal features, no PnL tuning).
Surprise: the gap between raw (all crosses) and alt (tradable events). The first pipeline pass looked promising; the second forced a rethink.
The trap: scoring on the wrong universe
On a Tr8dr up-leg, stoch can re-cross same-side repeatedly — “same-side spam”. The model learns replicated trend correlation, not an independent entry decision. Hence inflated directional AUC with no executable edge.
With alternate_sides=True, event count drops by ~5 (35,040 → 7,279 for stoch_32_10_90). That is the price of an honest metric.
Setup (summary)
| Parameter | Value |
|---|---|
| Asset / barrier | EURUSD · TIMB (tick_imbalance_10_fixed), 2023 |
| Split | train H1 / valid H2 |
| Focus config | stoch_32_10_90 (period 32, bands 10/90) |
| Features | context (range, slope, TOD); direction (FFD slope, OFI) |
Event at : %K crosses band .
Three universes:
| Mode | Events (stoch_32_10_90) | Role |
|---|---|---|
| raw | 35,040 | Archive — same-side bias |
| alt_overlap | 7,279 | Lab reference |
| alt_no_overlap | 3,736 | Trade-sim swing (RR1, time-cap) |
Key results
| Mode | C_event | A_leg | A_fwd |
|---|---|---|---|
| raw | 0.70 | 0.85 | 0.79 |
| alt_overlap | 0.63 | 0.59 | 0.54 |
| alt_no_overlap | 0.62 | 0.63 | 0.60 |
- C_event (~0.62 on alt): permission / context around the event — weak but coherent.
- A_leg: brutal drop 0.85 → ~0.59 when sampling is fixed — raw “performance” was an artefact.
- A_fwd: near random on alt; no net directional edge.
Incremental log-likelihood vs prior stays modest on alt. Stoch period 16 keeps slightly higher AUC (~0.70–0.75) than 32 — still “filter” territory, not alpha.
Takeaways
| Question | Answer |
|---|---|
| Is raw AUC 0.85 an edge? | No — same-side spam artefact |
| What remains on alt? | C_event ~0.62; A_leg ~0.59–0.63 |
| Recommended use | Regime / permission filter, not execution |
Always score on a tradable universe. Otherwise the model learns replicated trend correlation, not an entry decision.
I am not dropping stoch events — I relocate them: context brick in a stack (Tr8dr labels, HMM regime, upstream gates) rather than a standalone signal. Consistent with other lab notes where net tradability often fails while state structure holds.
Links
- Research bias & methodology: Backtesting & systematic research (page being expanded).
- eurusd-lab series: multi-scale pullback, HMM slope, Tr8dr labels
- Full protocol (figures, reproducibility):
docs/research/05_stoch_event_context.md.
Research note — Aug 2026. EURUSD · TIMB · frozen train/valid protocol.