SCANNING…
Waiting for next 5-min window
Cheaper
—
Costly
—
Window
—
Streak
—
Period
Mode
Session PnL
—
Real-Time
Success Rate
—
— W / — L
Profit Factor
—
Avg W/L
CLOB Bal
—
— Real · Init: —
Redeemable
—
— REALIZED PNL (DB)
Gross PnL
—
Before fees
Net PnL
—
After fees
Fees
—
CLOB fees paid
Effective Rate
—
Fees / Gross
Equity Curve
Exit Attribution
CURRENT SESSION
Loading…
Recent Trades
LIVE
— ROWS
| # | Date / Time | Side | Result | Mode | Fill | Market | Entry | Exit | Cost | P&L | P&L % | Reason | 🔗 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading trades… | |||||||||||||
SYSTEM CONTROLS
Live Market
Network Stats
LIVE
Status
—
Uptime
—
Windows Seen
—
Fill Rate
—
Drawdown
—
Routing Mode
Fee Engine
0 BPS
Live Fee
0.0 BPS
Slippage
—
Breakeven
~38%
Global Wallet
CLOB (pUSD)
—
Redeemable
—
Total AUM
—
Scaling Phase
PHASE 1
Risk / Trade
$5 / trade
Target
First 20 trades — verify fills
Mode
PAPER
Trading Dashboard
Live session overview — auto-refreshes every 15s
Oracle Mid
—
DOWN implied probability
UP —%DN —%
Dominant Signal
Scanning...
↔ NEUTRAL
Confidence
—
Max Entry
—
UP Ask
—
DOWN Ask
—
Scanning every 0.5s
Paper Account
$—
P&L — · Mult —
CLOB Balance
$—
Real USDC on-chain
Auto-resolved: —
Session Trades
0
0W / 0L
Signal Throughput
—
seen / skipped
Quick Controls
Session Performance — Equity Curve
expand ↗
Recent Trades
view all →
Sort
Rows
| Time (EDT) | Side | Entry | Exit | P&L | P&L% | W/L | Reason |
|---|---|---|---|---|---|---|---|
| No trades yet this session | |||||||
Recent Log Tail AUTO-REFRESH 30s
full log →
Loading...
BOT RUNNING
Uptime: —
Paper Balance
—
Open Position
None
Entry Size
—
Post-Exit Cooldown
None
Session Performance
$+0.00
Session in progress
—
Success Rate
—
Profit Factor
0
Trades
—
Avg Win
—
Avg Loss
—
Uptime
Server Time
—
Bot Controls
Start, stop, and manage the systemd service
Command Output
Awaiting command...
Check Orders
Runs check_orders.py — positions, P&L, balance
⟳ auto-refreshes every 60s
Running check_orders.py...
PnL History
Runs pnl_tracker.py — full session breakdown
⟳ auto-refreshes every 60s
Running pnl_tracker.py...
Redeem Funds
Runs redeem_winnings.py — sends won positions to wallet
⚠ On-Chain Transaction — sends a Polygon blockchain transaction. Ensure no open trade is active first. Gas fees apply.
Click "Redeem Funds" to run.
Wallet Approvals
One-time on-chain approval transactions for Polymarket CLOB
⚠ One-time setup only. Run Approve Contracts first, then Approve USDC. Each click sends an on-chain transaction.
Select an approval to run.
Convert Funds
Add funds to trade, or withdraw your trading balance back to your wallet
Current Balances
Trading Balance (pUSD)
—
What the bot uses to place trades
USDC.e Wallet
—
USDC (bridged) in your wallet — wrap it to start trading
USDC Wallet
—
USDC (native) in your wallet — wrap it to start trading
POL Balance
—
Used to pay Polygon network fees on every transaction
Redeemable Positions
—
Polymarket auto-redeems winners within ~5 min — proceeds appear in CLOB pUSD. Usually $0 unless a market just resolved.
A · Add Funds to Trade
Step 0 — Add Funds to Your Wallet
To add trading funds: buy USDC on an exchange (e.g. Coinbase), send it to your Polygon wallet address, then swap USDC → USDC.e in MetaMask or via a Polygon DEX. Once USDC.e is in your wallet, continue to Step 1.
Step 1 — Redeem Positions
Step 2 — Wrap to Trading Balance
B · Withdraw Funds
Step 1 — Move pUSD back to your wallet (pick one)
OR
Step 2 — Send from MetaMask
Once USDC.e is in your wallet, send it to your destination address via MetaMask.
ℹ Wrap and Unwrap to USDC.e each send two on-chain transactions (approve + action) — both cost a small amount of POL for gas. After your first wrap, run Approve USDC in the Approvals tab.
Click an action above to begin.
.env Configuration
Edit bot parameters — restart bot after saving any change
Private keys, API secrets and Telegram credentials are hidden and cannot be edited here. Use SSH for those.
Loading config...
After saving, restart the bot for changes to take effect:
Loading...
Portfolio
Live position data from Polymarket — refreshes every 60s · ⚠ All-Time P&L shows only redeemed on-chain positions. Your full bot performance is in the Bot Trade Database below. Polymarket's -$283 includes all manual trades made before the bot started.
↗ Live Market
VIEW:
—
Total P&L
—
Realized P&L
—
Unrealized P&L
—
CLOB Balance
—
Positions Value
—
Pending Funds
—
Success Rate
—
Trades Settled
—
Avg Win
—
Avg Loss
—
Profit Factor
—
ROI on Capital
—
Success Rate Visual
—
—
Biggest win: —
Biggest loss: —
Total wagered: —
Bot Trade Database
Loading...
Daily P&L Chart — Last 30 Days
Bars = daily P&L | Line = cumulative P&L | Source: latency_arb_trades.db
Open Positions (0)
None
Pending Redemptions — Won, Not Yet Redeemed (0)
None
Closed Wins — Redeemed (0)
ℹ Profitable positions disappear from Polymarket API after redemption.
This section shows any unredeemed wins (curPrice ≥ 0.95).
Your actual win history is in the Bot Trade Database above.
None pending
Closed Losses (0)
None
⚙️ Open Fade Settings
Edit BS_ parameters live — restart bot after saving any change
Secret keys (Telegram, private key) are hidden and must be edited via SSH.
After saving:
After saving:
docker restart openfade-bot
Paper Mode
BS_PAPER
Entry Mode
BS_POST_ONLY / BS_MARKET_ENTRY
Drift Filter
BS_DRIFT_FILTER
Kill Switch Override
BS_DAILY_DRAWDOWN_OVERRIDE
Streak Flip
BS_STREAK_FLIP_ENABLED — flip/skip after N consecutive losses (hot-reload)
Overnight Gate
BS_OVERNIGHT_GATE — pause live trading overnight
Overnight Paper Mode
BS_OVERNIGHT_PAPER — collect paper data while gated
Loading...
Loading...
FAQ & Operator Reference
Tab guide, common questions, copy-paste commands, and setup checklists
1 · Getting Started
What the Open Fade Bot does
Trades BTC 5-minute Up/Down windows on Polymarket. At each new window the bot looks for the cheaper side and "fades" the open: places a limit order just before the window opens and exits via take-profit, trailing stop, near-resolve, or time exit. Designed to capture small edge from market overreaction at window boundaries.
What each dashboard tab is for
- Dashboard — live session stats, equity curve, active position, exit-reason attribution.
- Recent Trades — full trade history with filters (live/paper/today/all-time).
- Live Logs — real-time bot log viewer.
- Convert Funds — add funds to trade, wrap/unwrap pUSD, redeem positions.
- Approvals — one-time on-chain wallet approvals (CTF + USDC); only run when setting up a new wallet.
- Settings — configure all
BS_*bot parameters from .env.
Top stats bar
- Oracle Mid — current Chainlink-derived market mid for the active window.
- Market Gap — distance between Oracle Mid and the bot's entry side.
- Window Close — countdown to the active window's resolution.
- Down Ask / Up Ask — best ask price on each side of the market.
- Entry Cap —
BS_MAX_ENTRY_PRICE— bot skips entry if both asks exceed this.
Session banner
Top-of-page banner shows session number, runtime, trades count, win rate, session PnL, and current mode (LIVE/PAPER). Resets at midnight ET. Persists across bot restarts within the same day.
2 · Common Questions
Why is the bot skipping every window?
Most likely both sides are above the
BS_MAX_ENTRY_PRICE cap (currently $0.45). This is correct behavior — the bot only enters when at least one side is cheap enough. Check the Live Logs for skip-reason lines like SKIP_TOO_EXPENSIVE.Why does the dashboard show OFFLINE?
The bot host process isn't running. Click Start Bot in System Controls (or in the side nav). The dashboard supervises only itself; the bot is a separate host process.
What is pUSD and why does the bot use it?
pUSD is Polymarket V2's wrapped collateral token. The CLOB only accepts pUSD for trading. Wrap is 1:1 with USDC.e via the
CollateralOnramp contract; unwrap is 1:1 the other way via CollateralOfframp. The dashboard's Convert Funds tab handles both flows.Difference between LIVE and PAPER mode?
PAPER simulates orders without sending to chain — uses
BS_PAPER_* sizing. LIVE sends real on-chain orders using BS_ENTRY_USDC. Live trading requires LIVE_TRADING=1 AND BS_LIVE_CONFIRMED=1 in .env.Why does the startup log show 1000 bps fees?
1000 bps is the configured maximum fee tolerance — not the actual fee charged. The actual maker fee is 0 bps when
BS_POST_ONLY=1. The 1000 cap is just a safety bound.What does the streak flip do?
After
BS_STREAK_FLIP consecutive losses (default 3), the bot inverts its bias side for subsequent windows until it wins BS_STREAK_STAY_WINS back-to-back. Designed to avoid bleeding through extended directional runs.When should I redeem positions?
Daily. Resolved positions sit as on-chain claim tokens until you redeem. Use the Redeem Positions button in Convert Funds → Section A → Step 1. Redeemed funds arrive as USDC.e in the wallet.
What is the drawdown kill switch?
BS_DAILY_DRAWDOWN_KILL (default 0.10 = 10%) halts new entries for the rest of the day if cumulative live PnL drops below that fraction of BS_PORTFOLIO_USDC. Reset automatically at midnight ET. Override with BS_DAILY_DRAWDOWN_OVERRIDE=1.Why did I get a VPN alert on Telegram?
The bot's VPN watchdog probes Polymarket's CLOB every 60s. If it gets a 403 or connection error, it sends VPN connectivity lost. When connectivity returns, you get VPN restored. Geoblock alerts are state-transitions only — not spam-per-iteration.
Can I manual trade from the same wallet?
No — manual trades land in the same
bs_trades table the bot reads from. They corrupt session stats, win-rate, and the kill-switch's PnL accounting. Use a separate wallet for manual trading.3 · Most Used SSH Commands
Bot Management
pgrep -af open_fade.pyCheck if the bot host process is running
tail -f /root/polymarket/log_openfade/*.logStream live bot logs
tail -f /root/polymarket/log_openfade/*.log | grep -E '\[RESULT\]|\[ENTRY\]|\[EXEC\]|\[VPN\]'Filter logs to high-signal events only
systemctl status dsaiq-apiCheck dashboard API service
systemctl restart dsaiq-apiRestart dashboard API (does NOT restart the bot)
rm -f /root/polymarket/open_fade.lockClear stuck lock file (only if bot won't start)
Database
sqlite3 open_fade_trades.db "SELECT COUNT(*) trades, ROUND(SUM(pnl),2) pnl, ROUND(AVG(CASE WHEN pnl>0 THEN 1.0 ELSE 0 END)*100,1) wr FROM bs_trades WHERE paper_trade=0;"Quick live stats: total trades, total PnL, win rate
sqlite3 open_fade_trades.db "SELECT entry, COUNT(*) n, ROUND(AVG(CASE WHEN pnl>0 THEN 1.0 ELSE 0 END)*100,1) wr, ROUND(SUM(pnl),2) pnl FROM bs_trades WHERE paper_trade=0 GROUP BY entry ORDER BY wr DESC;"Win rate broken out by entry price
sqlite3 open_fade_trades.db "SELECT skip_reason, COUNT(*) FROM bs_windows WHERE timestamp >= date('now','-1 day') GROUP BY skip_reason ORDER BY 2 DESC;"Skip-reason breakdown for last 24h
VPN
curl -s -o /dev/null -w "%{http_code}" -X POST https://clob.polymarket.com/order -H "Content-Type: application/json" -d '{}'Test VPN connectivity. 401 = good (auth required); 403 = blocked (VPN problem)
docker logs gluetun | tail -10Recent gluetun (VPN container) logs
docker restart gluetun && sleep 15 && docker logs gluetun | tail -5Restart VPN container and check recovery
Wallet
scp root@45.76.95.104:/root/polymarket/log_openfade/*.log "C:\Users\dsmit\OneDrive\Polymarket\log"Download logs to local Windows OneDrive folder
venv/bin/python3 check_orders.pyList open orders on the wallet
venv/bin/python3 close_all_positions.pySell every open position immediately (use with care)
4 · New Wallet Setup Checklist
- Connect the new wallet to polymarket.com and complete onboarding.
- Update
POLYMARKET_PRIVATE_KEYin/root/polymarket/.env. - Run
venv/bin/python3 regen_api_keys.py— derives fresh API_KEY / SECRET / PASSPHRASE and writes them back into .env (with a timestamped backup). - Open Approvals tab and run Approve Contracts.
- In Approvals, run Approve USDC.
- Send USDC.e to the wallet, then go to Convert Funds and click Wrap USDC.e → pUSD.
- In Settings, update
BS_PORTFOLIO_USDCandBS_LIVE_START_DATE. - Start the bot from System Controls.
5 · Scaling Plan
Increase position size in phases as the edge gets confirmed. Don't skip ahead.
| Phase | Size / Trade | Gate to next phase |
|---|---|---|
| 1 | $5 | First 20 trades — verify fills |
| 2 | $10 | Maker confirmed, 0 fees validated |
| 3 | $25 | 50+ trades at $0.45 cap, profit factor > 2.5× |
| 4 | $50 | 150+ trades, edge confirmed |
| 5 | Kelly formula | 300+ trades |
6 · Known Issues & Fixes
Lock file conflict — bot won't start
Run
rm -f /root/polymarket/open_fade.lock, then click Start Bot from the dashboard.VPN drop
Check
docker logs gluetun; if the container is unhealthy, docker restart gluetun.Bot shows OFFLINE
Click Start Bot in System Controls. The dashboard does not auto-start the bot on boot.
Sell unconfirmed in logs
Wait 2 minutes — usually self-resolves. If it's still stuck after the
[RESULT] line is logged, restarting the bot is safe./api/openfade/positions returns 0
Expected — the dashboard falls back to CLOB balance automatically when the positions API rate-limits.
Recent Trades
Full trade history — direction and outcome are shown separately
Source
🎯 Open Fade Trades
Mode
Sort
Show
Date From
Date To
UP / DOWN = direction
PROFIT / LOSS = outcome
| # | Date / Time (EDT) ↕ | Side ⓘ | Result ⓘ | Mode | Fill | Market | Entry | Exit | Cost | P&L ↕ | P&L % ↕ | Reason | 🔗 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| No trades yet this session | ||||||||||||||
0 trades
Page 1
🎯 Open Fade — Live Logs
Tailing log_openfade/
Loading...