ETH Entry Families
Isolate each entry family in the saved ETH 15-minute KXETH15M stack — early_entry (ETH price vs vwap_1h and ema_12_1m vs sma_20_1m, change_5m and velocity_1m above/below zero, 0.40-0.60 price band), triple_confirm (ETH+BTC+SOL change_5m agreement above/below 0.0010, ETH above/below vwap_1h and ema_12_1m, 0.35-0.65 band), accel_momentum (ETH change_5m above/below 0.0015 plus velocity_1m, 0.20-0.80 band), and triple_accel (ETH+BTC+SOL change_5m agreement above/below 0.0015 plus 15m agreement above/below zero, 0.20-0.80 band) — as standalone strategies sharing the identical four-tier exit stack (three take-profit tiers at unrealized_pnl > 3/5/8 gated by position_size bands and price guards, plus a stop at unrealized_pnl < -5 with 0.15-0.85 price guards), the full stacked baseline as the fifth candidate, held risk.max_position 60, risk.price_floor 0.01 / risk.price_ceiling 0.99, the 10s loop, 50-contract entries, and the 0.015 spread gate on every candidate, so per-signal PnL, trade count, win rate, and drawdown are directly comparable. Caveat: entries are size 50 in every family, so exit tier 3 (position_size >= 21) is reachable on fill while tiers 1 (position_size <= 10) and 2 (11-20) cannot fire — all tiers are retained verbatim for fidelity.
Historical research only. Not investment advice.
Comparison results
KXETH15M Entry-Family Isolation Study
Short disclaimer: This is historical simulation research on past market data. It is not investment advice, not a recommendation, and tells you nothing certain about future results. Options and prediction markets can lose money quickly.
Intro / thesis
The saved ETH 15-minute stack on Kalshi (KXETH15M) contains four distinct entry families that normally run together. When they run together, you can't tell which one is actually doing the work. This batch takes each family apart, runs it alone, and holds everything else constant so the comparison is clean.
The four families are:
- early_entry — ETH-only. Price between 0.40 and 0.60, ETH
change_5mandvelocity_1mboth above zero, ETH price abovevwap_1h, andema_12_1mabovesma_20_1m. A mirror rule fires the NO side on the full negative set. - triple_confirm — ETH, BTC, and SOL all agree on
change_5mabove 0.0010 (or all below -0.0010), with ETH price above bothvwap_1handema_12_1m(or below both). Price band 0.35–0.65. - accel_momentum — ETH
change_5mbeyond ±0.0015 plusvelocity_1magreeing in sign. No cross-asset confirmation. Price band 0.20–0.80. - triple_accel — ETH, BTC, and SOL all agree on
change_5mbeyond ±0.0015 and onchange_15msign. Price band 0.20–0.80.
The fifth candidate is the full stacked baseline: all four gates live at once. Everything — exit logic, risk caps, loop cadence, entry size, spread gate — is shared across all five, so PnL, trade count, win rate, and drawdown line up directly.
The core question: does the stacked entry earn its complexity, or does one family carry the whole thing?
Variant and strategy explanation
Every candidate shares the identical shell:
- Venue and market: Kalshi,
series_ticker: KXETH15M, crypto market. - Loop: every 10 seconds.
- Risk:
max_position 60,price_floor 0.01,price_ceiling 0.99. Other runtime checks may still block orders. - Entry size: 50 contracts on every fill.
- Spread gate:
spread <= 0.015on every entry rule. - Entry window:
time_to_expiry <= 10mon every entry rule.
The exit stack is four rules, evaluated top to bottom, first match wins and ends the tick:
position_size <= 10ANDunrealized_pnl > 3ANDpricebetween 0.10 and 0.90 → sell all.position_size >= 11ANDposition_size <= 20ANDunrealized_pnl > 5ANDpricebetween 0.10 and 0.90 → sell all.position_size >= 21ANDunrealized_pnl > 8→ sell all.unrealized_pnl < -5ANDpricebetween 0.15 and 0.85 → sell all.
Each candidate then adds only its own entry rules on top of that shell. Candidates 2–5 each carry one family's YES and NO entry rules. Candidate 1 carries all four families' entry rules stacked.
One caveat you should read before the numbers. Entries are size 50 in every family. That means on a fill, position_size is already 50, so exit tier 3 (position_size >= 21) is the only take-profit tier that can fire on a live position. Tiers 1 and 2 require position_size <= 10 and 11–20 respectively, which a 50-contract entry never produces. All four tiers are kept verbatim across every candidate for fidelity to the saved stack, but in practice tier 3 and the stop are the working exits. This is a property of the shared exit stack, not a difference between candidates, so it doesn't break comparability — but it does mean the take-profit side is coarser than the tier names suggest.
Every successful variant in this batch is saved as a runnable Turbine strategy, so you can load, inspect, and re-run any of them directly.
Top results
| Rank | Variant | Total PnL | ROI % | Trades | Win rate | Max drawdown | Sharpe |
|---|---|---|---|---|---|---|---|
| 1 | Baseline: full stacked entry (all four gates) | 881.93 | 1469.88 | 1118 | 0.492 | -277.28 | 0.33 |
| 2 | early_entry only (0.40–0.60 band) | 852.66 | 1421.10 | 676 | 0.512 | -260.11 | 0.41 |
| 3 | triple_confirm only (0.35–0.65 band) | 835.78 | 1392.97 | 254 | 0.598 | -105.62 | 0.67 |
| 4 | accel_momentum only (0.20–0.80 band) | 832.47 | 1387.45 | 574 | 0.523 | -215.51 | 0.44 |
| 5 | triple_accel only (0.20–0.80 band) | 547.94 | 913.23 | 248 | 0.597 | -190.80 | 0.34 |
Note on the ordering: these five candidates finish within a fairly tight band on ROI, so "top" here is really about which one you'd want to run given how much drawdown and how much trade flow you're willing to accept. Rank 1 is the highest total PnL, but it is not the best candidate on every column.
The headline number: the full stacked baseline tops PnL at 881.93 over 30 days on 1118 trades, with a 49.2% win rate and a -277.28 max drawdown. That is the largest drawdown in the batch and the weakest Sharpe (0.33) among the four highest-PnL candidates.
The interesting result is triple_confirm only. It produces 835.78 PnL — within about 5% of the baseline — on 254 trades, roughly one quarter the activity. Its win rate is 0.598 and its max drawdown is -105.62, the smallest of the five by a wide margin. Its Sharpe of 0.67 is the best in the batch. If you care about drawdown-adjusted behavior rather than raw PnL, this is the number that stands out.
early_entry only lands at 852.66 PnL on 676 trades with a 0.512 win rate, a -260.11 drawdown, and a Sharpe of 0.41. It carries a large share of the baseline's trade flow and a large share of its drawdown.
accel_momentum only is close on PnL at 832.47, on 574 trades, win rate 0.523, drawdown -215.51, Sharpe 0.44.
Bottom results
The bottom of the table is triple_accel only, at 547.94 PnL / 913.23% ROI on 248 trades, win rate 0.597, drawdown -190.80, Sharpe 0.34. It is the lowest PnL in the batch by a clear margin — roughly 38% below the baseline — despite having a win rate comparable to triple_confirm and a trade count comparable to triple_confirm. Same number of trades as triple_confirm, similar win rate, much lower PnL.
That gap is worth flagging directly. triple_accel and triple_confirm have nearly identical trade counts (248 vs 254) and nearly identical win rates (0.597 vs 0.598), yet triple_confirm produces about 288 more PnL. With the exit stack fixed and the entry size fixed, that difference is not explained by the mechanics documented here. It is an unresolved discrepancy in the results. It could come from differences in the price levels at which each family enters, from differences in the positions' paths to the exit triggers, or from something else — but nothing in the shared ruleset accounts for it, and I am not going to guess. Treat it as a real observation that needs a follow-up run to explain, not as a settled property of the two signals.
Second from the bottom on PnL is accel_momentum at 832.47, though on the drawdown column it sits above early_entry and the baseline. Third from the bottom by PnL is triple_confirm — which, again, is the best candidate in the batch on drawdown and Sharpe. Ranking by PnL and ranking by drawdown-adjusted return put different candidates on top, and that is the useful thing to take away from this table.
Conclusion
The stacked baseline wins on raw PnL, but it does so with the largest drawdown and the weakest Sharpe of the top four. The ROI spread across the top four candidates is narrow — 1469.88% down to 1387.45% — while the trade counts vary by more than 4x and the drawdowns vary by roughly 2.6x. Choosing between them is less about which one made the most in this 30-day window and more about what trade frequency and drawdown profile you're willing to carry.
If you're optimizing for drawdown-adjusted return on this window, triple_confirm only is the standout: best Sharpe, smallest drawdown, and PnL within about 5% of the baseline on a quarter of the trades. That is a materially different operating profile than the stacked version.
If you're optimizing for total activity and don't mind the deeper
This report is generated from historical simulations. Backtests can be wrong or incomplete, and live trading can differ materially because of liquidity, fees, slippage, latency, market resolution, outages, and data quality. Do your own review before running any strategy.