Skip to content
All strategies

Strategies

Dual-Timeframe Momentum Confluence on Six Untested OKX USDT Swaps (LTC/BCH/ETC/FIL/XLM/UNI): long-short per name when the 4H and 1D momentum signs agree, flat on disagreement, intrabar 3-ATR trailing stop, vol-scaled equal-risk panel (OKX 4H + 1D)

Outcome: Abandoned

OkxSixNameDualTfMomentumConfluencePanelLS

Outcome Summary

This hypothesis tried the factory's most often promoted directional idea, 4H/1D momentum confluence with a flat state when the timeframes disagree, as a fresh long-short test on six OKX swaps that had never had a confluence test. The unweighted average trade cleared the 0.15% floor, but each dollar traded earned only about 0.055%, and commissions were larger than the net profit. One XLM trade accounted for all of the gains, the drawdown was about 64-67%, and three of the six names lost money. The analyst abandoned it at the backtest review after one iteration, and it never reached optimization.

Hypothesis

Original Research Lead hypothesis. It is a fresh-universe, fresh-venue test (lesson L219, L228) of the one directional mechanism that has repeatedly been promoted in this factory: momentum with higher-timeframe agreement and an explicit flat-on-disagreement state (SOL 12H/3D, NEAR 4H/1D, ADA 4H/1D and the seven-major 1D/1W basket were promoted with average trades of 0.97-3.5%, while BTC 4H/1D failed with an average trade near zero). None of the six names here has had a confluence test on any venue (prior……Show moreShow less

Original Research Lead hypothesis. It is a fresh-universe, fresh-venue test (lesson L219, L228) of the one directional mechanism that has repeatedly been promoted in this factory: momentum with higher-timeframe agreement and an explicit flat-on-disagreement state (SOL 12H/3D, NEAR 4H/1D, ADA 4H/1D and the seven-major 1D/1W basket were promoted with average trades of 0.97-3.5%, while BTC 4H/1D failed with an average trade near zero). None of the six names here has had a confluence test on any venue (prior confluence runs covered BTC, ETH, SOL, BNB, XRP, DOT, AVAX, ADA, LINK, AAVE, ATOM, TRX and NEAR). OKX is under-represented (3.7% of the corpus against a 5% target), and the book is long-short, which the direction quota needs (long-only is 75.6%). Each name is traded INDEPENDENTLY with the same frozen rule inside one strategy, so the panel adds breadth, not a cross-sectional ranking. The instruments are LTCUSDT.OKX (primary), BCHUSDT.OKX, ETCUSDT.OKX, FILUSDT.OKX, XLMUSDT.OKX and UNIUSDT.OKX. Each uses 4-HOUR bars for the signal and execution and 1-DAY bars for the trend confirmation. Bars on all six names start in 2019-12 to 2020-09, about six years of history. DOGE was dropped because its OKX 4H bars only start in 2026. Execution: decisions are taken at the 4H bar close and filled with a market order at that close. On this 24/7 venue that price is the next bar's open (the platform's use_equivalent for next-bar-open fills). The protective stop is an intrabar 3xATR trailing stop matched by the platform's simulated venue, which is the platform's equivalent of a stop and is not hosted on the exchange. Fixed-rule pre-registration measurement: I measured the bare rule on OKX 4H closes (4H momentum over 30 bars, 1D momentum over 20 days, flip/flat on the sign, no trailing stop, 0.10% round-trip charged). LTC came out at -0.15% per trade, BCH +0.14%, ETC +0.40%, FIL +0.42%, XLM +0.26% and UNI +0.07%, with 650-790 trades per name. At 42/30 lookbacks the figures were -0.10%, +0.21%, +0.69%, +0.51%, +0.42% and +0.45%. The long arm carries most of it: the short arm alone averaged about -0.4% to +0.3% net. This crude measurement sets the predictions below. It is not an acceptance test. The ATR trail is expected to cut the losers short and lift the average.

Bucket choice: OKX (3.7%, below its 5% target), long-short (24.4% of the corpus), multi-instrument. BINANCE (49%) and BTC were avoided. The mechanism is the factory's best-supported directional family (L219), tested on six names that have never had it. A fixed-rule after-cost measurement was done before proposing, as L219 and L222 ask: 5 of 6 names were positive, about 0.3% net average per trade on the bare rule. Predictions are deliberately modest (OOS Sharpe 0.7) because the short arm is weak. 2,400 trades over about 6 years and 6 names, at roughly 400 per name after the trail and deadband, gives many distinct entry dates, not one basket date counted six times.

negative_expectancy. This verdict covers this frozen 4H/1D momentum-confluence panel on six OKX swaps with a 3-ATR trail. The 0.19% unweighted average trade clears the 0.15% floor, but each dollar traded earned only 0.055%: +$38.5k net on about $70M of notional, after $69.9k of commissions. PF is 1.03 and Sharpe 0.38. The single XLM long of Nov 2024 (+$50.2k) is more than the whole profit; without it the book loses $11.7k. Drawdown is 64.4%, more than twice the pre-registered 30% limit. Only 2021 and 2024 were positive years. LTC, UNI and BCH lose on both the long and short arms, and the short arm loses on four of six names. QA's concern is borne out: 35% of trades are immediate same-side re-entries after an exit. Optimization cannot fix this. The tunables (atr_mult and the two lookbacks) would only refit which few trend bursts get caught. Dropping the losing names or the short arm after seeing these results would be selection on the result, and either change would be a new hypothesis. ETC and FIL are profitable on both sides, but that is two names in one sample.

Implementation

Six OKX USDT perpetual swaps (LTC primary, BCH, ETC, FIL, XLM, UNI), each traded independently by the same frozen rule. On every aligned 4H close: m4 = 4H close / close mom_4h_bars ago - 1, and m1 = 1-DAY close / close mom_1d_bars days ago - 1. Each sign has a +/-deadband_pct hysteresis: it flips only when momentum crosses beyond the band and otherwise keeps its last value. Long when both signs are +1, short when both are -1, flat when they disagree. A held leg whose agreement disappears or reverses is closed at……Show moreShow less

Six OKX USDT perpetual swaps (LTC primary, BCH, ETC, FIL, XLM, UNI), each traded independently by the same frozen rule. On every aligned 4H close: m4 = 4H close / close mom_4h_bars ago - 1, and m1 = 1-DAY close / close mom_1d_bars days ago - 1. Each sign has a +/-deadband_pct hysteresis: it flips only when momentum crosses beyond the band and otherwise keeps its last value. Long when both signs are +1, short when both are -1, flat when they disagree. A held leg whose agreement disappears or reverses is closed at that 4H close. On a reversal the opposite entry is taken on the next 4H close if the signs still agree, because accounts are netting and the strategy does not flip in one order. Each leg carries a reduce-only intrabar STOP_MARKET (matched by the platform's simulated venue) at best close -/+ atr_mult x ATR(14) (Wilder). It is placed at the fill (from the fill price) and ratcheted every 4H bar only in the protective direction. After a stop-out the leg re-enters on a later close if the confluence still holds, as in the promoted NEAR/ADA single-name versions. Sizing per leg: notional = equity x target_leg_vol / realised annual vol (30 daily log returns, sqrt(365)), capped at equity x min(max_leg_notional_frac, leverage x margin_budget_frac / 6) = 0.30 x equity at 2x. Six full legs are 1.8x gross, about 0.9x initial margin. Execution substitution (next_bar_open_fill = use_equivalent): decisions are filled by a market order at the signal bar's close, which on this 24/7 venue is the next bar's open.

Implements the hypothesis panel with the optimization plan's exact parameter names: tunable mom_4h_bars, mom_1d_bars, atr_mult; fixed leverage 2.0, atr_period 14, deadband_pct 0.005, target_leg_vol 0.2, vol_lookback_days 30, max_leg_notional_frac 0.3. One unlisted engineering constant, margin_budget_frac 0.9, keeps six simultaneous legs within the 2x initial margin; at 2x it equals the 0.3 cap, so it does not bind. The deadband is implemented as hysteresis on each momentum sign, since the hypothesis credits it……Show moreShow less

Implements the hypothesis panel with the optimization plan's exact parameter names: tunable mom_4h_bars, mom_1d_bars, atr_mult; fixed leverage 2.0, atr_period 14, deadband_pct 0.005, target_leg_vol 0.2, vol_lookback_days 30, max_leg_notional_frac 0.3. One unlisted engineering constant, margin_budget_frac 0.9, keeps six simultaneous legs within the 2x initial margin; at 2x it equals the 0.3 cap, so it does not bind. The deadband is implemented as hysteresis on each momentum sign, since the hypothesis credits it with cutting churn. Alignment: a leg acts only on a 4H bar whose close stamp equals the primary's, and the daily close used is the last 1-DAY bar closed at or before the decision. At a UTC-midnight 4H close whose daily bar has not arrived yet, the identical 4H close stands in for it, so the result does not depend on delivery order. Vol uses only daily bars closed strictly before the decision. Every leg is booked as its own position on its own instrument: the primary goes through the base hooks, the extras through _submit_entry_instrument and _submit_exit_position, and the per-leg trailing state (best close, stop level) sits in a persisted dict of scalars. Risk control is route (b) plus an intrabar stop. Each leg is at most 0.3x equity, so a 3-ATR 4H stop (~6-10%) loses about 2-3% of equity per trade, well inside the 15% max_trade_loss. Caveat for QA/Analyst: target_leg_vol=0.2 is per leg. With all six correlated alts aligned (rho ~0.6), ex-ante book vol can approach 60-90%, and at the 60% vol band only partial alignment keeps realised vol inside. The frozen plan fixes this sizing, so I did not change it.

Verification Results

In _refresh_signal, build the daily view from [(t, c) for t, c in daily if t <= ts] before choosing latest/ref, matching the filter _annual_vol already uses.

Daily-leg point-in-time protection relies on chronological delivery, not on an explicit check. _refresh_signal uses daily[-1] (and daily[-need]) without asserting daily_ts <= decision ts; only _annual_vol filters t < ts. The 4H legs are strictly guarded (leg bar ts must equal the primary ts), and in normal chronological replay a 1-DAY bar with a later close cannot have arrived. If the alignment barrier is ever released late (an extra leg has a 4H gap and the barrier waits for that leg's next bar), a daily bar stamped after the decision could be read. Lesson L147 asks for an explicit guard.

None required for verification.

Restart persistence: leg_book (stop_level, best_close) is persisted, but the resting reduce-only stop is found again only through cache.orders_open. After a paper restart without the order in cache, _manage_open_leg re-places a stop at the persisted level, which is the intended behaviour. Noted only; the backtest never restarts.

Keep warmup_bars >= 6 x (max(mom_1d_bars_high, vol_lookback_days) + 2).

min_bars_required is overridden on purpose: 6 x (max(mom_1d, vol_lookback) + 2) = 192 primary 4H bars at defaults, up to 6 x 47 = 282 at mom_1d_bars = 45. That is inside the plan's warmup_bars of 300, so it is consistent. Flagged only because Layer 1 raised base_shadow.

The sandbox booked 8,010 trades over about 2,400 days on 6 legs, roughly 1,300 per name. The pre-registration expected about 400 per name after the trail and deadband, and the bare rule produced 650-790. The trail-then-re-enter loop is the likely cause: after a stop-out the leg re-enters on the next 4H close while the confluence holds, which adds round trips. Combined with the weak short arm (about -0.4% to +0.3% net in the pre-study) and LTC being negative on the bare rule, the per-trade average may sit near the 0.15% floor. At the backtest review, check avg_trade_return_pct per leg and per side, and the share of trades that are immediate re-entries after a stop.

Backtest Review

Sharpe
0.24
Total return
5.01%
Max drawdown
66.84%
Trades
4005
Win rate
34.2%
Profit factor
1.00

The code implements the stated rule: both directions are traded (1512 long, 1665 short), each leg sits at about 0.15x equity of vol-scaled notional, and the 3-ATR trailing stop and the flat-on-disagreement exits fire as written.

ETC (+$75.6k, 0.65% notional-weighted) and FIL (+$75.4k, 0.70%) make money on both sides.

The sample is large: 3,177 closed trades over 1,728 days.

Net expectancy is too thin. The unweighted average of 0.19% clears the 0.15% OKX floor, but per dollar traded the return is only 0.055% (+$38.5k on about $70M notional), with PF 1.03 and Sharpe 0.38. Commissions came to $69.9k, more than the whole net profit.

One trade carries the result. Without the single XLM long of Nov 2024 (+$50.2k), net PnL is -$11.7k. Annual returns are 2020 -5%, 2021 +96%, 2022 -16%, 2023 -19%, 2024 +39%, 2025 -22%.

Max drawdown is 64.4%, against the pre-registered 30% constraint. Calmar is 0.11 and the longest drawdown lasted 1,445 days.

Three of six names lose money: LTC -$60.8k, UNI -$39.3k, BCH -$19.8k. The short arm loses on BCH, LTC, UNI and XLM, as the pre-study predicted.

QA's concern is borne out: 35% of trades re-enter the same side on the same name within one 4H bar of the previous exit, so stop-out and re-entry churn adds round trips.

Iteration History

Daily-leg point-in-time protection relies on chronological delivery, not on an explicit check. _refresh_signal uses daily[-1] (and daily[-need]) without asserting daily_ts <= decision ts; only _annual_vol filters t < ts. The 4H legs are strictly guarded (leg bar ts must equal the primary ts), and in normal chronological replay a 1-DAY bar with a later close cannot have arrived. If the alignment barrier is ever released late (an extra leg has a 4H gap and the barrier waits for that leg's next bar), a daily bar stamped after the decision could be read. Lesson asks for an explicit guard.

Outcome Summary

Momentum confluence that was promoted on majors did not carry over to this six-name OKX panel: the edge per dollar traded sat below costs, profit depended on a single trend outlier, and stop-out/re-entry churn (35% immediate same-side re-entries) added round trips, so check notional-weighted returns and single-trade concentration before relying on an unweighted average trade.

The backtest review gate returned 'abandon' for negative_expectancy: one XLM long from Nov 2024 (+$50.2k) was more than the whole profit, drawdown was over twice the pre-registered 30% limit, LTC, UNI and BCH lost money, and the short arm lost on four of six names. Optimization was judged unable to fix this, so optimization and the later stages never ran.

Trade six OKX USDT swaps (LTC, BCH, ETC, FIL, XLM, UNI) independently, going long or short only when 4H and 1D momentum signs agree and staying flat when they disagree, with a 3-ATR intrabar trailing stop and vol-scaled equal-risk sizing.

The attached backtest (Nov 2020 to Oct 2026) returned 5.01% total with Sharpe 0.24, profit factor 1.003, 4,005 trades, an average trade of 0.116% of notional and a 66.8% max drawdown; the backtest review cited 3,177 trades, a 0.19% unweighted average trade but only 0.055% per dollar traded, PF 1.03, Sharpe 0.38 and a 64.4% drawdown, with commissions ($69.9k) larger than the net profit ($38.5k).

Backtest and paper results are hypothetical. Trading involves risk of loss.