I didn't design this strategy on paper. I found it by trading, losing, adjusting, and trading again until the win rate stabilized and stopped moving around.
11,717 trades later, here's what actually works and why.
The core idea
The bot trades BTC Up/Down markets on Polymarket across three timeframes - 5-minute, 15-minute, and 1-hour. Each timeframe has a different job. They're not three separate strategies running in parallel. They're one framework where each layer filters the one below it.
The 1-hour tells you the direction of the bigger trend.
The 15-minute confirms momentum within that trend.
The 5-minute is where the actual entry happens.
Best trades happen when all three align. The bot knows this and sizes up when they do.
5-minute markets - core, highest frequency
This is where most of the trades happen and where the big days come from. The $1,210 days are 5-minute setups.
The entry window is tight: first 30-90 seconds of each new 5-minute candle. After that the signal degrades - the crowd has had time to price in whatever just happened, and you're chasing rather than leading.
Two setups the bot looks for:
Momentum burst - sudden volume spike, BTC spot moving clearly in one direction, Polymarket odds moving with it. The bot enters on continuation when these line up in the opening 60 seconds. Doesn't wait for confirmation. By the time the confirmation is obvious, the entry price has moved.
Mean reversion - when the previous candle was overextended and the new candle opens flat or starts reversing. The crowd overcorrects on 5-minute markets constantly. Sharp moves in one direction get faded in the next candle more often than people expect.
Position sizing is larger on 5-minute high-conviction setups than on anything else. The edge is clearest here, so that's where the size goes.
One hard rule: no entries after T-90 seconds before resolution. The order book in the final 10-15 seconds gets taken over by MEV bots running latency arb - spreads blow out, one side of the book disappears, prices jump with no matching spot move. Not a fight worth having at any size.
15-minute markets - secondary, higher quality
Fewer trades, better risk-reward.
The 15-minute market only gets a trade when the 5-minute signal aligns with the current 15-minute direction. If the 5-minute is showing bullish momentum but BTC has been grinding down for 15 minutes, skip it. If both point the same direction, that's the setup.
Specific things the bot looks for here: clean breakouts from consolidation, strong rejection at round numbers ($70k, $71k etc.), and momentum continuation after a clean pullback. The 15-minute market is less noisy than the 5-minute, which means the setups are cleaner but less frequent.
The hold is also different. On a 5-minute market you're in and out by definition. On a 15-minute market with a strong signal, holding the full duration is often the right move. The bot doesn't try to exit early unless the signal deteriorates.
1-hour markets - trend filter and occasional standalone
The 1-hour direction is the background context for everything else.
If the 1-hour is clearly trending up, the bot weights toward BTC Up on lower timeframe entries and becomes more skeptical of BTC Down setups. Not a hard block - just a filter that shifts sizing and confidence thresholds.
Standalone 1-hour trades happen on specific conditions: major reversals after extended moves, strong continuation after a significant news event, situations where the 1-hour setup is so clean that it makes sense on its own merits. These are lower frequency but the position size goes up because when 5m, 15m, and 1h all align, the win rate is meaningfully higher than the base rate.
The oracle problem every bot needs to solve
Polymarket crypto markets don't settle against Binance. They settle against Chainlink - specifically Chainlink Data Streams, a decentralized oracle network that aggregates across independent node operators and delivers a signed, timestamped price report on-chain.
The bot watches the Chainlink feed directly, not a CEX proxy. During volatile windows - macro events, liquidation cascades, anything sudden - Binance spot and the Chainlink oracle can diverge by 0.3-0.5% for 15-30 seconds. In a binary market with a hard threshold, that gap is the entire outcome.
Most bots use Binance as the reference. Most bots get surprised by close trades that resolve wrong. This is why.
Risk management - what actually matters
Fixed max USD per trade. Not percentage-based - fixed dollar amount. Percentage-based sizing with a variable win rate creates compounding exposure in drawdowns. Fixed size doesn't.
Daily and weekly drawdown limits. Bot stops automatically when hit. Not a suggestion - a hard stop in the execution layer.
No martingale. No doubling after losses. Every position is sized the same regardless of the previous trade. The win rate over thousands of trades justifies the edge. Chasing losses with bigger size just amplifies the drawdowns.
Profit taking on targets or candle close. The bot doesn't hold hoping for more. Takes the profit when the target is hit or exits at candle close if it hasn't triggered.
What the numbers actually mean
77% win rate across 11,717 trades. Average entry near 75 cents. Break-even on these markets is ~75%.
The two-point gap between break-even and actual win rate is the edge. It's thin. On any given day it doesn't feel like much. Across 11,717 trades it's the difference between a system that works and one that bleeds.
The $292 net all-time looks small for 11,717 trades. It is small - this is a low-position-size system, not a high-capital one. The point isn't the dollar number. The point is the edge is real and provable across a large enough sample that variance isn't explaining it.
What's next
Expanding from BTC-only to ETH, SOL, and XRP with the same multi-timeframe framework. Different volatility profiles, different crowd behavior, different calibration needed. BTC is the most liquid and most predictable. The others are noisier but the same framework should port.
Also testing a news-reading layer - feed recent headlines into a model, get a probability estimate, compare against live Polymarket odds, flag divergences for review before the bot acts. Not fully automated. More like a second opinion on the signal.
Full code: https://github.com/Eixen30/polymarket-bot
Questions in the comments about the timeframe logic or the oracle implementation - happy to go deeper.
Top comments (0)