liquidity-paired-basis-maker
Liquidity Paired Basis Maker
For Claude: How to Use This Skill
Skill instructions are preloaded in context when this skill is active. Do not perform filesystem searches or tool-driven exploration to rediscover them; use the guidance below directly.
When to Use
- trade relative-value dislocations between logically linked Polymarket contracts
- enforce backtest-first validation before generating paired trade intents
- run a dry-run-first workflow for hedged pair execution
On Invoke
Immediately run the default paired-market backtest without asking. Do not present a menu of modes. Execute:
cd ~/.config/seren/skills/liquidity-paired-basis-maker && source .venv/bin/activate && python3 scripts/agent.py --config config.json
Display the full backtest results to the user. Only after results are displayed, present available next steps (trade mode). If the user explicitly requests a specific mode in their invocation message, run that mode instead.
Backtest Period
- Default:
90days - Allowed range:
90to365days - Why this range: keeps the replay current while requiring enough data for repeated widening/convergence behavior.
Workflow Summary
load_backtest_pairspulls live market histories from Seren Polymarket Publisher (Gamma markets + CLOB history), attaches per-leg order-book snapshots, applies a liquidity-filtered universe cap, builds pairs, and timestamp-aligns each pair.simulate_basis_reversionruns an event-driven stateful replay with carried cash and inventory across both legs, order-book-aware fills, and pessimistic spread-decay.summarize_backtestreports total return, annualized return, Sharpe-like score, max drawdown, hit rate, quoted/fill counts, order-book mode coverage, telemetry counts, and pair-level contributions.sample_gatefails backtest ifevents < backtest.min_events(default120).backtest_gateblocks trade mode by default if backtest return is non-positive.emit_pair_tradesoutputs two-leg trade intents (primary+pair) with risk caps.
Execution Modes
backtest(default): paired historical simulation only.trade: always runs backtest first, then emits paired trade intents if gate passes.
Live execution requires both:
execution.live_mode=truein config--yes-liveon the CLIPOLY_PRIVATE_KEY(orWALLET_PRIVATE_KEY) plusPOLY_API_KEY/POLY_PASSPHRASE/POLY_SECRET
Trade Execution Contract
When the user gives a direct exit instruction (sell, close, exit, unwind, flatten), execute the exit path immediately.
Do not editorialize or argue against recovering remaining funds.
If the user request is ambiguous, ask only the minimum clarifying question needed to identify the positions to exit.
CLOB Exit Rules
py-clob-clientviaDirectClobTraderis the canonical live execution path.- For immediate sells, use a marketable limit priced at the market minimum tick from the live order book. Do not hardcode
$0.001; use the currenttick_size. - Never place a passive sell above the best bid when the user asked for an immediate exit.
- Estimate recovery by sweeping visible bid levels (
price x size) across the full book, not just the best bid. - If visible bid depth cannot cover the full exit size, report the partial-depth estimate and remaining unfilled size.
Pre-Trade Checklist (Mandatory)
Before any live buy, sell, or unwind:
- Fetch the live order book for every token involved.
- Snap prices to the market
tick_sizeand compute visible-book recovery or cost across all levels. - Verify the current environment can legally and technically reach the Polymarket CLOB API. If access is blocked, stop and report the restriction; do not suggest bypasses.
- Verify
py-clob-clientis installed andPOLY_PRIVATE_KEYorWALLET_PRIVATE_KEY,POLY_API_KEY,POLY_PASSPHRASE, andPOLY_SECRETare loaded. - If any dependency check fails, fail closed with a concrete remediation message.
Emergency Exit
Immediately liquidate held inventory with:
python3 scripts/agent.py --config config.json --unwind-all --yes-live
The unwind path cancels open orders first, then submits marketable min-tick sells and reports visible-book exit estimates.
Runtime Files
scripts/agent.py- basis backtest + paired trade-intent runtimescripts/setup_cron.py- create/update the skill-local seren-cron local-pull runner and jobscripts/run_local_pull_runner.py- poll seren-cron and execute due local jobs on this machineconfig.example.json- strategy parameters and live backtest defaults.env.example- optional fallback auth/env template (SEREN_API_KEYonly if runtime auth is unavailable)requirements.txt- installspy-clob-clientfor live order signing/submission
Quick Start
cd ~/.config/seren/skills/polymarket-liquidity-paired-basis-maker
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
cp .env.example .env
cp config.example.json config.json
python3 scripts/agent.py --config config.json
If you are already running inside Seren Desktop, the runtime can use injected auth automatically.
Live market data only. Always leave
"markets": []and"state": {"leg_exposure": {}}empty in your config.json. The skill discovers and fetches live Polymarket pairs automatically viabacktest.gamma_markets_url. Never add placeholder market IDs — they do not exist on Polymarket and will cause the backtest to fail with "No markets with sufficient history".
Run Trade Mode (Backtest-First)
python3 scripts/agent.py --config config.json --run-type trade
Optional Fixture Replay
python3 scripts/agent.py --config config.json --backtest-file tests/fixtures/backtest_pairs.json
Set backtest.telemetry_path to capture JSONL replay telemetry for each decision step.
Seren Predictions Intelligence
After a backtest completes, the output will suggest enabling Seren Predictions if it is not already active. This optional feature uses computed pair-specific endpoints to:
- Validate pair correlation strength with cross-platform data
- Rank pairs by basis deviation sigma for better entry signals
- Filter for pairs where cross-platform data confirms mean-reversion potential
Endpoints used (computed, not consensus):
GET /api/polymarket/pairs/suggested($0.10) — suggested pairs ranked by basis deviationGET /api/polymarket/correlations($0.10) — pair correlation and basis spread statistics
To enable, set predictions_enabled: true in the backtest section of your config.json. Estimated cost: ~$0.20 SerenBucks per backtest run.
Disclaimer
This skill can lose money. Basis spreads can persist or widen, hedge legs can slip, and liquidity can fail during volatility. Backtests are hypothetical and do not guarantee future results. This skill is software tooling and not financial advice. Use dry-run first and only trade with risk capital.
Seren-Cron Integration
Use the skill-local seren-cron local-pull runner for scheduling. The schedule lives in Seren, but a local polling process must stay online on the machine that will execute the strategy.
Requirements: Seren Desktop login or a valid SEREN_API_KEY. Live schedules also require Polymarket credentials plus funded SerenBucks.
Current Seren funding flow:
- Buy SerenBucks at
https://serendb.com/serenbucksorhttps://console.serendb.com - Stripe deposits start at
$5 - A verified email is required before Stripe deposits
- API-first users can fund with
POST /wallet/deposit
Step 1 — Check seren-cron is available
publisher: seren-cron
path: /api/health
method: GET
Step 2 — Create or update the local pull schedule
Create or upsert the runner plus the local-pull job:
python3 scripts/setup_cron.py create --config config.json --schedule "*/30 * * * *"
For live mode, include --yes-live after you have set execution.live_mode=true in config.json.
Step 3 — Start the local pull runner
Start the polling process that claims due work and runs scripts/agent.py locally:
python3 scripts/run_local_pull_runner.py --config config.json
Leave this process running on the machine that should execute the strategy.
Step 4 — Manage the schedule and runner
python3 scripts/setup_cron.py list
python3 scripts/setup_cron.py list-runners
python3 scripts/setup_cron.py pause --job-id <job_id>
python3 scripts/setup_cron.py resume --job-id <job_id>
python3 scripts/setup_cron.py delete --job-id <job_id>
python3 scripts/setup_cron.py delete-runner --runner-id <runner_id>
Pause the job immediately if live execution fails because trading funds or SerenBucks are exhausted.
More from serenorg/seren-skills
polymarket-bot
Autonomous trading agent for Polymarket prediction markets using Seren ecosystem
9polymarket-maker-rebate-bot
Provide two-sided liquidity on Polymarket with rebate-aware quoting, inventory controls, and dry-run-first execution for binary markets.
6saas-short-trader
Alpaca-branded SaaS short trader with MCP-native execution: scores AI disruption risk, builds capped short baskets, and tracks paper/live PnL in SerenDB.
2high-throughput-paired-basis-maker
Run a paired-market basis strategy on Polymarket with mandatory backtest-first gating before trade intents.
2seren-bounty
Work with Seren Bounty affiliate bounties: customers create and fund verifier-backed bounties; agents join to receive a referral_code and accrue earnings as qualifying events are verified; a release sweep pays matured earnings out of escrow.
2budget-tracker
Compare actual Wells Fargo spending against user-defined monthly budgets per category, calculate variance, and track budget adherence over time.
1