u/ryanturbine

A Kalshi BTC bot hit a +54.7% live snapshot by only trading the last 4 minutes

A Kalshi BTC bot hit a +54.7% live snapshot by only trading the last 4 minutes

I pulled one anonymized TurbineFi user run because the setup produced a big short-term move within its first day.
Public strategy

It trades Kalshi's 15-minute BTC markets. The bot waits until there are less than 4 minutes left, then buys the side that is already winning

  • buy YES if YES is 85c or higher
  • buy NO if YES is 15c or lower
  • use 50 contracts
  • sell everything with 30 seconds left

The thesis is very simple: near the end of the market, follow the side already priced as likely to settle in the money instead of trying to catch a reversal.

The historical backtest showed +229.96% ROI with a 92.8% win rate over the test window. In live telemetry, the bot hit a +54.7% snapshot after about 14 hours. However, a later snapshot for the same run was only +6.31%, and the the run even dipped slightly negative on one occurrences. The backtest actually clearly shows a large drawdown and not so great sharpe so this doesn't come as a big surprise to me.

What are some tweaks you would make to improve the drawdown on this strategy?

u/ryanturbine — 3 days ago

A Kalshi BTC VWAP bot did $100 in 1 day after adding guardrails

I pulled an anonymized run from one of our TurbineFi users that shows how regime dependent these 15-minute crypto markets can be. Same VWAP idea, but the live behavior changed a lot once the user started messing with sizing and exits.

The first version traded Kalshi KXBTC15M using Coinbase BTC-USD as the signal. If BTC was above its 1h VWAP and the 5m move was positive, it bought YES. If BTC was below VWAP and the 5m move was negative, it bought NO.

The base rules were 1 contract per signal, max position 11, spread filter at 0.03, entry band from $0.25 to $0.75, and max loss at $100. No take-profit. No “only enter when flat” check.

That was the issue. It could keep firing whenever VWAP agreed. On these short crypto markets, that can go from “nice signal” to churn pretty quickly.

So the user added restrictions:
https://www.turbinefi.com/backtest/coinbase-vwap-momentum-db0239e9238d

They did increase size from 1 contract to 2 contracts per signal, with max position 12 instead of 11. But the more important change was making the bot pickier. Spread had to be 0.02 or tighter. It could only enter when there was no open position. It took profit at +$1 unrealized PnL. Max loss went from $100 to $20.

Funny part: the base version had the better headline backtest PnL.

Base version:

  • +$1,980.71 PnL
  • 55.7% win rate
  • 0.54 Sharpe

Updated version:

  • +$470.51 PnL
  • 71.1% win rate
  • 0.59 Sharpe

So the update gave up a lot of raw historical PnL, but got a much higher win rate and better guardrails.

The first Coinbase VWAP live run netted +$20.46. The later live run showed +$99.61 after 1 day, with 50 fills and 250 trades/fills observed.

Curious how others would tune this first: VWAP threshold, spread filter, take-profit, or sizing?

u/ryanturbine — 6 days ago

Has anyone had success automating sports prediction markets?

Most of what I see people build on TurbineFi is around crypto or weather markets, where the extra signals are pretty obvious i.e. Coinbase/market data for crypto, NWS/METAR-style data for weather, etc.

I’m curious about sports markets though. Has anyone here had real success with automated sports strategies on Kalshi or Polymarket?

What types of sports markets seem most bot-friendly; game winners, spreads/totals, player props, tournament outcomes, in-play markets, something else?

And do external signals like sportsbook odds movement, injury/lineup feeds, or public betting data actually create an edge after fees, slippage, and liquidity or does the edge mostly get arbitraged away too fast?

reddit.com
u/ryanturbine — 7 days ago

What do you look for in a backtesting engine

For people who build trading strategies on Kalshi or Polymarket, what are some nonnegotiables and things that stand out to you in a great backtesting engine.

I’m currently trying to make our own backtesting engine on TurbineFi the best it can be and I’m trying to figure out what parts are most worth improving next.

Right now we use L2 orderbook candle data, simulate fills against depth, handle partial fills, model platform specific fees, and track slippage from signal price to fill price.

Where do you think backtesting products usually fall short? Fill modeling? Queue position? Latency? Settlement handling? Overfitting? Better trade logs?

Would love to know what things you would expect before you could trust a backtest for your own strategies.

reddit.com
u/ryanturbine — 8 days ago

100 variants of one Kalshi weather thesis all finished green in my backtest

I ran a full 100-variant backtest on TurbineFi on a Kalshi Chicago high-temperature strategy using NWS data.

The market family was KXHIGHCHI, the weather feed was NWS station KMDW, and the idea was to fade expensive YES prices when the official weather data did not support a hot outcome. In plain English; if the market was still pricing a meaningful chance of 85°F or higher, but the current temperature and NWS forecast high were both capped below that level, the bot bought NO.

The base entry rules were:

  • Broad NO entry: buy NO when YES was above 0.40, current_temp_f was below 85°F, forecast_high_f was at or below 85°F, and the NWS observation was fresh.
  • Stronger NO add: add when YES was above 0.50, current_temp_f was below 83°F, forecast_high_f was at or below 84°F, and the NWS observation was fresh.
  • NWS freshness mattered. The base rule capped observation age at 3600 seconds so the bot was not trading on stale weather readings.

The exits rules wee:

  • Take profit when YES repriced below 0.30.
  • Exit if the current temperature reached 85°F or higher, since that invalidated the NO thesis.
  • Hard stop if unrealized P&L hit -$10.
  • Flatten near expiry, within 30 minutes of market close.

Across the 100 runs, I varied price bounds, max position, position size, loop timing, observation-age limits, and some exit triggers.

https://preview.redd.it/u98g0zr4bm9h1.png?width=1080&format=png&auto=webp&s=f8cc59601083d9bfe4c879297f9c0b7c8f0f3713

  • Completed variants: 100/100
  • Profitable variants: 100/100
  • Total simulated trades: 999
  • Best ROI: 54.6%
  • Weakest completed ROI: 3.44%
  • Average ROI: 23.3341%

The top performers split into two types. The best ROI runs were selective where variants 042 and 044 returned 54.6% ROI on only 8 trades. The higher P&L winners traded more often where variants 032 to 035 took 17 to 19 trades leading to an overall higher P&L. Both groups kept a 100% win rate in the simulation.

The bottom performers were still green, but they showed where the signal got weaker. Variants 038, 039, and 040 returned 3.44% ROI, took 28 trades, and had a 50% win rate. The weak variants usually let NWS observations get stale or entered closer to the 85°F danger zone. Variant 017 shows the other failure mode. It kept a 100% win rate but only reached 21.12% ROI because it scaled down too much.

Overall the strongest variants enforced fresh NWS observations, kept the broad entry at YES > 0.40 with current temperature below 85°F and forecast high at or below 85°F, and used the stronger add only when YES was above 0.50 with current temperature below 83°F and forecast high at or below 84°F.

Position sizing seemed to scale with confidence. The stronger entry added exposure without creating many losses, while stale data and threshold erosion were the main ways the weaker variants gave back edge. The strategy looked best when it waited for a clear gap between market pricing and the NWS read, then exited quickly if YES repriced lower or the temperature actually reached the danger zone.

Historical simulation only. Backtests can be wrong or incomplete. Not investment advice.

reddit.com
u/ryanturbine — 10 days ago

I ran 100 Kalshi BTC variants fading the ETH-leads-BTC hunch. The best ROI was -46.08%.

I tested a simple Kalshi BTC idea: maybe ETH impulses are not useful as a BTC continuation signal. What if ETH leading BTC is a trap?

The setup used the KXBTC15M market. When Coinbase ETH had a clean 5-minute and 15-minute impulse but Coinbase BTC was lagging or failing to confirm, the bot would fade the expected BTC catch-up. ETH up and BTC not confirming meant buying NO. ETH down and BTC not confirming meant buying YES.

I kept that rule family fixed and swept the risk bounds, price filters, max position, and loop timing across 100 variants.

These were the results:

https://preview.redd.it/lpm54ji1q29h1.png?width=1080&format=png&auto=webp&s=803a66315ba96a606ea8e26c02e13139e914fff9

  • Completed variants: 100
  • Failed variants: 0
  • Profitable variants: 0/100
  • Total trades: 7,000
  • Average P&L: -$11.10
  • Average ROI: -96.816%
  • Best ROI: -46.08%
  • Best P&L: -$11.52
  • Best win rate: 3.0%
  • Best run trades: 71
  • Weakest completed ROI: -188.40%
  • Weakest completed P&L: -$9.42

https://preview.redd.it/rtaef757q29h1.png?width=1080&format=png&auto=webp&s=784c9c82507d933af34ea36094ad3fbce48af7bd

As you can see, this did not just fail on one bad setting. The entire sweep was red. The other part that stood out to me was the win rate. The best run only won 3.0% of trades across 71 trades. That suggests the entry condition was catching a lot of bad spots, not just paying too much on execution.

These results obviously aren't proof that "ETH leads BTC" is guaranteed to work either; they just show that this contrarian version did not hold up in this backtest. Even so, I was quite surprised by how poorly this contrarian strategy performed.

Historical simulation only. Backtests can be wrong or incomplete. Not investment advice.

reddit.com
u/ryanturbine — 12 days ago