Python-based futures price-action engine
Time-staggered setups resolved by a single priority router
One shared exit brain across every setup · Outputs: Discord
Session-Stacker runs several price-action setups inside one bot and lets a priority router decide which single setup may act at any moment. Each setup is scoped to the part of the 23-hour futures session where it has an edge — the opening-range breakout only fires in the first hour of the regular session, while liquidity- and structure-based setups run around the clock — so the bot is always watching the right pattern for the current time of day rather than firing everything at once.
It has its own engine, forked from the pure-trendline
Tori-Trendline bot, and reuses that bot's exit brain
unchanged. Tori-Trendline is intentionally kept separate as a
single-setup control, so Session-Stacker can add breadth without
disturbing the clean trendline baseline. Its role is signal generation
and stateful alerting on closed bars, not brokerage execution.
Each setup is a self-contained detector that returns a direction and a reason, or nothing. They share the same bar feed, indicator context, and exit logic.
| Setup | Type | Session window |
|---|---|---|
| ORB — Opening-Range Breakout | Momentum | First 15 / 30 / 60 min of the RTH open |
| ES/YM Reversal | Mean-reversion | First 15–30 min of the RTH open |
| SFP — Swing-Failure Pattern | Liquidity reversal | All session |
| SMC — Smart-Money Structure | Structure | All session |
| Bubble Fade | Volatility mean-reversion | All session |
| Tori-Trendline | Trend-following | All session |
Setups become eligible only inside their configured window, measured in minutes from the 09:30 ET regular-session open. Bars before the open fail every open-window gate, so the opening setups never fire overnight. The all-session setups have no window and are eligible on every closed bar across the near-24-hour futures day.
When more than one setup qualifies on the same bar, exactly one is allowed to act. A fixed priority ladder resolves the conflict:
ORB > ES/YM > { SFP > SMC > Bubble } > Trendline
| Mode | Behavior |
|---|---|
--mode multiple (default) |
Every setup is armed and the router picks the winner each bar — the full staggered stack. |
--mode single |
Restrict the bot to one named setup, for isolating and measuring a single strategy's behavior. |
Because SFP is a reversal trigger with no context of its own, it can repeatedly fade a strong trend and get stopped. A lightweight market-structure gate (v0.3.0) requires the smart-money structure to support the trade before an SFP may fire:
Every setup shares one exit engine, inherited from Tori-Trendline, so management is identical regardless of how a position was opened. The stack is evaluated in order:
Targets default to an automatic mode that uses the volatility "bubble" band as the take-profit when available, and entries are screened against a minimum reward-to-risk (default 2.0) before they are allowed.
Session-Stacker publishes to its own Discord channel. Two card types are emitted:
A session-start card records the run configuration: tickers, timeframe, broker and fallback, mode, active setups, direction, target mode, minimum reward-to-risk, and the strategy version.
Session-Stacker is a closed-bar, multi-setup price-action engine built around:
The engine is not a brokerage execution layer. It maintains a mirror book for tracking and alerting; it does not place live orders. It is also deliberately separate from Tori-Trendline, which remains a single-setup control for clean comparison.
Session-Stacker is designed for: