SOL Momentum Price Bounds
On the SOL 15-minute market series (KXSOL15M), test sensitivity to the run-wide risk price bounds while the two-sided SOL momentum thresholds and the regime confirmation filters are held fixed. This sweep varies only risk.price_floor and risk.price_ceiling, which set the order-price bounds the runtime clamps buy limit prices into; it does not vary the literal momentum thresholds or the per-rule 0.35 to 0.65 purchased-side ask conditions, which stay unchanged. This does not establish that any bound setting causes or improves an outcome.
Historical research only. Not investment advice.
Top strategy variants
Bottom strategy variants
SOL Momentum with BTC Confirmation — Risk Price Bound Sweep
Research note on Kalshi crypto markets. Historical simulation only.
Disclaimer (short)
This is a historical simulation study, not investment advice and not a claim about future results. Nothing here is a recommendation to trade. Read the longer disclaimer at the bottom before drawing any conclusion from these numbers.
Intro / thesis
This report looks at one narrow question on the SOL 15-minute market series (KXSOL15M, Kalshi, crypto): how sensitive is this strategy to the run-wide risk price bounds?
The strategy family is a two-sided SOL momentum setup with BTC confirmation. It only takes one position at a time, capped at 10 contracts per market, and it evaluates the market every 10 seconds. The logic is consistent across the whole family:
- Rule 1 (buy_yes): fires when position size is zero, SOL's 5-minute change is at least +0.0015, SOL's 1-minute velocity is positive, BTC's 5-minute change and 1-minute velocity are both positive, time to expiry is between 3 and 10 minutes, the spread is at most 0.03, and the YES best ask is between 0.35 and 0.65. Action: buy 10 YES.
- Rule 2 (buy_no): the mirror image. Position size zero, SOL 5-minute change at most −0.0015, SOL velocity negative, BTC change and velocity both negative, same expiry window, same spread cap, and the NO best ask between 0.35 and 0.65. Action: buy 10 NO.
- Rule 3 (hold to settlement): at or past expiry, sell all.
Those thresholds and the 0.35 to 0.65 purchased-side ask window are held fixed for this entire sweep. The only thing that moves is risk.price_floor and risk.price_ceiling — the order-price bounds the runtime clamps buy limit prices into. This does not establish that any particular bound setting causes or improves an outcome.
The full grid is 10 floors × 10 ceilings = 100 cells, and all 100 completed successfully.
Variant and strategy explanation
Each of the 100 variants is the same rule set with a different pair of bound values. The floor values swept were 0.01, 0.35, 0.36, 0.37, 0.38, 0.39, 0.40, 0.41, 0.42, and 0.44. The ceiling values were 0.56, 0.57, 0.58, 0.59, 0.60, 0.61, 0.62, 0.63, 0.65, and 0.99.
A useful thing to keep in mind: the literal momentum thresholds (0.0015 on SOL change, the velocity signs, the 3–10 minute expiry window, the 0.03 spread cap) do not change at all. The ask conditions on the purchased side also stay at 0.35–0.65. The only degree of freedom is the outer price clamp. So any variation you see in trade counts and P&L is coming from how the runtime constrains order prices, not from a change in signal generation.
Every successful variant in this report is saved as a runnable Turbine strategy, so you can pull the slug or strategy ID and inspect the exact configuration behind any row in the tables below.
Top results
| Rank | Variant | Trades | Win rate | Total PnL | ROI % | Sharpe | Max DD |
|---|---|---|---|---|---|---|---|
| 1 | floor 0.01 / ceil 0.99 | 1038 | 69.3% | 478.16 | 4781.6 | 0.82 | −51.88 |
| 2 | floor 0.35 / ceil 0.99 | 1024 | 70.1% | 474.29 | 4742.9 | 0.83 | −53.63 |
| 3 | floor 0.01 / ceil 0.65 | 814 | 66.5% | 462.09 | 4620.9 | 0.87 | −50.19 |
| 4 | floor 0.01 / ceil 0.62 | 746 | 65.9% | 457.22 | 4572.2 | 0.88 | −46.95 |
| 5 | floor 0.36 / ceil 0.99 | 1020 | 70.2% | 456.95 | 4569.5 | 0.84 | −53.63 |
| 6 | floor 0.35 / ceil 0.65 | 798 | 67.4% | 455.18 | 4551.8 | 0.88 | −46.73 |
| 7 | floor 0.01 / ceil 0.61 | 725 | 65.5% | 451.62 | 4516.2 | 0.85 | −54.19 |
| 8 | floor 0.01 / ceil 0.63 | 770 | 65.7% | 451.13 | 4511.3 | 0.88 | −46.96 |
The winner is floor 0.01 / ceil 0.99, which is simply the base DSL's default pair. It posts the highest net PnL (478.16) and the highest ROI (4781.6%), though not the highest Sharpe or the lowest drawdown. Note the win rate on that one (69.3%) is slightly lower than the second-place floor 0.35 / ceil 0.99 (70.1%), and it has a larger drawdown (−51.88 vs −53.63 — actually slightly smaller here). The relationship between net PnL and win rate across the top rows is not monotone, and that discrepancy is unresolved based on what's in this dataset.
Looking at the marginals rather than the individual cells, the pattern is at least directionally consistent: mean PnL falls as the floor rises (444.07 at floor 0.01 down to 320.11 at floor 0.44) and rises as the ceiling rises (349.10 at ceiling 0.56 up to 432.91 at ceiling 0.99). The same direction shows up in the max-of-column values. That's a description of the grid, not proof of cause.
One robustness check worth naming explicitly: the deflated Sharpe probability is 0.999, against an expected max Sharpe benchmark of 0.140 on the Sharpe scale. Those two numbers are on different scales and should not be compared to each other. The high deflated Sharpe probability is favorable for that check alone — it says the observed Sharpe clears the selection-noise hurdle this test is designed to measure. It cannot establish profitability and does not substitute for out-of-sample evidence. No permutation p-value was supplied in the statistics given here, so the permutation test result is unavailable; I would not frame this as "validated" on that basis.
Bottom results
| Rank | Variant | Trades | Win rate | Total PnL | ROI % | Sharpe | Max DD |
|---|---|---|---|---|---|---|---|
| 100 | floor 0.44 / ceil 0.56 | 520 | 65.1% | 273.22 | 2732.2 | 0.80 | −43.49 |
| 99 | floor 0.44 / ceil 0.57 | 522 | 65.2% | 277.66 | 2776.6 | 0.80 | −45.24 |
| 98 | floor 0.44 / ceil 0.58 | 546 | 65.8% | 299.41 | 2994.1 | 0.86 | −47.22 |
| 97 | floor 0.42 / ceil 0.56 | 551 | 64.9% | 308.46 | 3084.6 | 0.85 | −42.15 |
| 96 | floor 0.44 / ceil 0.59 | 569 | 65.9% | 311.67 | 3116.7 | 0.81 | −54.50 |
| 95 | floor 0.42 / ceil 0.57 | 553 | 65.0% | 312.90 | 3129.0 | 0.85 | −43.90 |
| 94 | floor 0.44 / ceil 0.60 | 620 | 66.1% | 315.75 | 3157.5 | 0.76 | −48.02 |
| 93 | floor 0.44 / ceil 0.61 | 643 | 66.3% | 326.02 | 3260.2 | 0.73 | −47.78 |
The weakest cells are all tight-band configurations — floor pushed up to 0.42–0.44, ceiling pulled down to 0.56–0.61. These produce far fewer trades (520 to 643 versus 725 to 1038 in the top group) and noticeably lower PnL. Trade count and PnL move together here.
A caveat on reading "bottom" as "worst risk-adjusted": the worst rows actually have the smallest drawdowns (−42 to −48) because they take far fewer positions. The tight bands buy less exposure, so they lose less in absolute terms when they're wrong. If you rank by drawdown alone, rank 100 looks better than rank 1. That inconsistency — lowest PnL but also lowest drawdown — is not something I can resolve from this data alone.
Also worth flagging honestly: even the worst cell in the grid posts a positive total PnL of 273.22. All 100 cells succeeded and all 100 are positive. That is a property of this particular window and configuration, not a promise.
Conclusion
Within this historical simulation on KXSOL15M, the risk price bounds move results meaningfully
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.