Fabio Valentini scalps NASDAQ futures live with a million-dollar personal account and consistently pulls six-figure weeks. None of the edge is the platform. It’s the discipline. Here’s how that discipline maps onto bot logic.
A discretionary scalper and a Polymarket bot don’t look like the same animal. One is a human reading order flow on NASDAQ futures with reflexes, judgment, and ego on the line. The other is a Python loop polling the Polymarket CLOB. But strip away the surface and the rules an elite scalper actually follows are exactly what good bot architecture enforces by default.
We watched Fabio’s two-hour live session and pulled out the principles he keeps repeating. Each one below is the human version on the left, the bot translation on the right. If your Polymarket bot already enforces all of these, you’ve built something good. If it doesn’t, you have a roadmap.
Most people optimizing a strategy reach for win rate. Fabio loses more trades than he wins. The reason he prints money is the shape of his return distribution: tiny, capped losses on the wrong side and big asymmetric wins on the right side. Win rate is a vanity metric. Expected value per trade is the only one that matters.
Cuts losing trades within seconds when the order flow shows the level didn’t hold. Lets winners build by trailing stops and adding contracts as the move develops. Knows his historical EV per trade because he tracks it.
Optimize the strategy for E[trade_return], not P(win). Track per-trade EV by market type. Refuse trades where the modeled EV doesn’t clear fees + slippage with margin. Win rate of 50% is fine if average win > average loss.
Fabio’s first goal every session is one good trade that puts him into profit. Once he’s up, he changes mode entirely, every subsequent trade is sized so that the worst case is giving back today’s gains, never touching base capital. This is psychological for him. It’s mechanical for a bot.
Walks away after the first AAA setup hits if it produces a meaningful day. The 20K profit is the cushion. Anything after risks only that cushion, never the underlying account.
Track session PnL in state. While session_pnl <= 0: trade only highest-conviction setups at min size. While session_pnl > 0: scale up, but hard-stop the bot if PnL retraces to zero. Daily loss cap is non-negotiable.
Fabio enters with 2-4 contracts, not 10. Stop is tight. The moment the trade moves in his favor, stop goes to breakeven and he adds size. The shape is: small bet to test the thesis, big bet once the market confirms. It’s the opposite of how most people scale. Most go big on entry, then average down when wrong.
Reads order flow to confirm the level held. If absorption shows on his side, scales up immediately. Tight stop, usually 1-2K loss tolerance, moved to zero within a minute of being right.
Initial order = 25-33% of intended position. If price moves favorably by N ticks within T seconds, add the next tranche and trail stop to entry. If thesis breaks before scaling, exit at 1x size loss.
if confirm_signal(t+30s):
add_tranche()
stop = entry_price
else:
exit_at_market()
Every trade Fabio takes has a target/stop ratio of at least 3:1, often 5:1, sometimes 10:1. He won’t take symmetric trades. The reason is brutal arithmetic: if your average win equals your average loss, you need >50% win rate to be profitable, and you don’t have that. Asymmetric R:R is what lets a sub-50% win rate strategy compound.
Refuses setups without clean structure for an asymmetric exit. Won’t risk 5K to make 5K, “totally not worth it.” Looks for trades where the stop is right behind the protection level and the target is the next major level.
Hard filter at signal generation: (target - entry) / (entry - stop) >= 3.0. If a market doesn’t offer that geometry, don’t trade it. Prediction markets bounded 0-1 actually give you natural asymmetry: a market at 0.15 has more upside room than downside, mathematically.
The single most important sentence in the whole interview. Fabio admits that all the trades he took after the first AAA setup were for the camera, not for him. In real life, he books the win and walks. Most retail traders give back days of profit grinding mediocre setups after a great one. Bots have the same disease: they trade because they can, not because they should.
Has hard rules: 3-5 stop losses → done for the day. Hits target after a clean AAA setup → done for the day. Doesn’t trade consolidation. “Probably you will have consolidation after a strong move. We took the best move. We walk away.”
Score every setup A/B/C at signal time. Trade only A. Once N successful A trades have hit per market per session, the bot pauses on that market until the next session window. No grinding B-grade setups during consolidation just because the bot is awake.
Fabio runs different models for different market states. His main NASDAQ model is for trending sessions. He has a separate consolidation model. He has an option model. He has a long-term crypto allocation model. He doesn’t try to make one strategy work in all conditions because he knows it can’t.
Reads market regime in real time using volume distribution, delta, and price action structure. If the day looks like contraction, he steps away from the trend model and either switches or sits out. Refuses to force a trend strategy on a sideways market.
Implement regime detection as a first-class component. Classify each market: trending, ranging, news_shocked, illiquid, near_resolution. Route to appropriate sub-strategy. Default route = no trade. Most market hours should produce no trades.
Fabio exports every trade to Python and runs slice-and-dice analysis on the weekends. He found his crude oil model was profitable Mon/Tue/Thu/Fri but bled every Wednesday due to volatility patterns. He removed Wednesdays. The model became consistent. This is the difference between a strategy that lasts and one that quietly dies.
Tracks every execution. Slices by day-of-week, hour-of-day, session, market condition. Asks “is this slice positive EV in the last 90 days?” If no, removes it from the strategy. Repeats every weekend.
Auto-validation pipeline running on rolling windows. For each market, each hour bucket, each setup type: track 30/60/90-day PnL. Auto-disable buckets that go negative on fresh data. The bot kills its own dead patterns before they kill the bot.
A strategy that prints at $100K may not work at $10M. A market-impact ceiling exists for every edge. Fabio knows his. He diversifies into options for scale because order-flow scalping doesn’t compound past a certain account size. Polymarket bots hit this wall fast because the books are thin.
Splits execution across NASDAQ and S&P (95% correlated, more liquid) when he wants to deploy more capital. Builds separate models for options, crypto arbitrage, and stock picking, because each has a different capacity ceiling.
Per-market position size cap as a function of min(book_depth × 0.05, max_size). Polymarket book depth is the binding constraint. A bot that works on $50 trades may move the price 2-3 cents on a $5,000 trade and destroy its own edge. Test capacity before scaling capital.
Every one of these principles is about discipline imposed before opportunity. Fabio decides his rules cold, then executes them hot. The reason a bot has a structural advantage over a human is that it can’t break those rules, but only if you’ve actually written them down and made them mechanical. Most bots fail not because the strategy was bad but because the operator never encoded the discipline that made the strategy work.
A Polymarket bot is just a list of rules running on a clock. The work isn’t in the rules being clever. It’s in the rules being right, and in the bot being honest enough to follow them when they’re inconvenient. Fabio’s edge is that he treats his own emotions like noise and his rules like law. Build a bot that does the same.
The Discord #research-discipline channel has the full encoded rule-set, the scoring rubric for A/B/C setups, and members running it on live markets.