Files
gavindiaz 9259325d8a
deploy GitHub Pages / deploy (push) Has been cancelled
tests / test (push) Has been cancelled
first commit
2026-07-22 18:53:44 +08:00

212 lines
8.7 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Polymarket Strategy Lab — honest backtests</title>
<meta name="description" content="See how five different arbitrage and betting strategies actually performed on 135 real resolved Polymarket events. No cherry-picked examples. No lies." />
<link rel="preconnect" href="https://rsms.me/" />
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
<link rel="stylesheet" href="assets/style.css?v=7" />
<link rel="stylesheet" href="assets/lab.css?v=3" />
</head>
<body>
<div class="lab-shell">
<nav class="demo-nav">
<div class="brand">
<span class="dot on"></span>
<strong>Polymarket Strategy Lab</strong>
<span class="status-text"><span id="event-count-inline"></span> real resolved events · backtested in your browser</span>
</div>
<div class="nav-links">
<a href="index.html">About the project</a>
<a href="demo.html">Live scanner</a>
<a href="https://github.com/matthewnyc2/arbitrage" target="_blank" rel="noopener">Source</a>
</div>
</nav>
<div class="tabs">
<div class="tabs-inner">
<button type="button" class="tab active" data-tab="results" id="tab-results">
Results
</button>
<button type="button" class="tab" data-tab="strategies" id="tab-strategies">
Strategies <span class="tab-count">5</span>
</button>
</div>
</div>
<!-- =================== RESULTS TAB =================== -->
<main class="panel active" id="panel-results">
<section class="lab-hero">
<div class="lab-hero-inner">
<div class="hero-strategy-row">
<div class="strategy-badge" id="active-strategy-label">Strategy</div>
<button type="button" class="switch-btn" id="switch-btn">
Change strategy
<span class="arrow"></span>
</button>
</div>
<h1 id="active-strategy-name"></h1>
<p id="active-strategy-desc" class="lead"></p>
<div class="bankroll-row">
<span class="bankroll-lbl">Bankroll per opportunity</span>
<div class="bankroll-choices" id="bankroll-choices">
<button type="button" data-bankroll="100">$100</button>
<button type="button" data-bankroll="1000" class="active">$1,000</button>
<button type="button" data-bankroll="10000">$10,000</button>
<button type="button" data-bankroll="100000">$100,000</button>
</div>
</div>
<div class="bankroll-row">
<span class="bankroll-lbl">Trade at prices from</span>
<div class="bankroll-choices" id="window-choices">
<button type="button" data-window="close">at close</button>
<button type="button" data-window="1h">1h before</button>
<button type="button" data-window="6h">6h before</button>
<button type="button" data-window="24h" class="active">24h before</button>
<button type="button" data-window="3d">3 days before</button>
<button type="button" data-window="7d">7 days before</button>
</div>
<span class="bankroll-note" id="window-note">
These are <strong>real historical Polymarket prices</strong>, pulled from
their public CLOB price-history endpoint. For each event, we look up the
actual price of every outcome at the chosen moment before the market closed.
</span>
</div>
</div>
</section>
<section class="verdict-section">
<div class="verdict-inner">
<div class="verdict-card" id="verdict-card">
<div class="verdict-icon" id="verdict-icon"></div>
<div class="verdict-body">
<div class="verdict-label" id="verdict-label">calculating…</div>
<div class="verdict-detail" id="verdict-detail">Running the strategy against every resolved event</div>
</div>
</div>
<div class="verdict-stats">
<div class="vstat">
<div class="vstat-val" id="vstat-pnl"></div>
<div class="vstat-lbl" id="vstat-pnl-lbl">Total profit across every trade</div>
</div>
<div class="vstat">
<div class="vstat-val" id="vstat-roi"></div>
<div class="vstat-lbl">Return on bankroll per trade</div>
</div>
<div class="vstat">
<div class="vstat-val" id="vstat-trades"></div>
<div class="vstat-lbl">Trades taken (out of 93 events)</div>
</div>
<div class="vstat">
<div class="vstat-val" id="vstat-winrate"></div>
<div class="vstat-lbl">Fraction of trades that won</div>
</div>
<div class="vstat">
<div class="vstat-val" id="vstat-annual"></div>
<div class="vstat-lbl" id="vstat-annual-lbl">Projected annual profit</div>
</div>
</div>
<p class="verdict-explainer" id="verdict-explainer"></p>
</div>
</section>
<section class="trades-section">
<div class="trades-inner">
<div class="section-header">
<h2>Every trade, one row each</h2>
<p>
Each row below is one resolved Polymarket event. The strategy either
placed a trade or skipped it. When it traded, you can see exactly
what it paid, what it got back, and whether it won money.
</p>
<div class="trade-filter">
<button type="button" class="filter-btn active" data-filter="all">All <span id="cnt-all">0</span></button>
<button type="button" class="filter-btn" data-filter="trades">Took trade <span id="cnt-trades">0</span></button>
<button type="button" class="filter-btn" data-filter="wins">Wins <span id="cnt-wins">0</span></button>
<button type="button" class="filter-btn" data-filter="losses">Losses <span id="cnt-losses">0</span></button>
<button type="button" class="filter-btn" data-filter="skipped">Skipped <span id="cnt-skipped">0</span></button>
</div>
</div>
<div id="trade-list" class="trade-list"></div>
</div>
</section>
<section class="data-section">
<div class="data-inner">
<h2>What you're looking at, in plain English</h2>
<p>
These events are real Polymarket markets that have already ended
in the last few weeks. For each one, we know who won and we have
the actual price of every outcome at every moment before the
market closed. The page runs a trading strategy on every event
and adds up how much money you would have made or lost.
</p>
<p>
The <strong>"trade at prices from"</strong> selector above is the
important knob. Prices right before a market closes tend to be
correct (because everyone already knows the answer). Prices a
day or more earlier are often noticeably off — and that's where
real arbitrage lives. Try clicking the different time windows
and watch the numbers change.
</p>
<p>
<strong>Every price on this page is a real price Polymarket
recorded.</strong> Pulled from their public CLOB price-history
API. No estimates, no math tricks. You can verify every trade
by looking up the event on polymarket.com.
</p>
</div>
</section>
</main>
<!-- =================== STRATEGIES TAB =================== -->
<main class="panel" id="panel-strategies">
<section class="strategies-hero">
<div class="strategies-hero-inner">
<h1>Pick a strategy to see how it actually performed</h1>
<p>
Each of these strategies has a clear rule. Each was run against the
same <span id="event-count-strat"></span> real resolved Polymarket
events. Results are plain: did it make money or lose money, and by
how much.
</p>
</div>
</section>
<section class="strategy-grid-section">
<div class="strategy-grid" id="strategy-grid"></div>
</section>
</main>
</div>
<!-- strategy detail modal -->
<div class="modal" id="strategy-modal" hidden>
<div class="modal-backdrop" data-close></div>
<div class="modal-card modal-wide">
<button type="button" class="modal-x" data-close aria-label="close">×</button>
<div id="strategy-modal-content"></div>
</div>
</div>
<footer class="site-footer">
<p>
Backtested on real, resolved Polymarket events —
<a href="https://github.com/matthewnyc2/arbitrage" target="_blank" rel="noopener">source on GitHub</a> ·
<a href="index.html">About this portfolio</a>
</p>
</footer>
<script src="assets/lab.js?v=8"></script>
</body>
</html>