paper-trader
v1.0.1Run a structured paper-trading loop with SQLite-backed event logging, position tracking, and PnL review. Use when opening/closing simulated trades, journaling thesis notes, checking portfolio status, or generating weekly performance summaries.
Installation
Please help me install the skill `paper-trader` from SkillHub official store.
npx skills add BRS999/paper-trader
Paper Trading
SQLite-backed paper trading with immutable event logs.
Asset identity:
symbolis required for trade/snapshot commands.mintis REQUIRED forsnapshotandopen(--mint <address>).- If multiple positions share the same symbol, pass
--mintforclose/set-levelsso you target the right one. - For ETH/BTC on DEXs, use wrapped token contract addresses (
WETH,WBTC/cbBTC) as the mint.
When to Use
Use this skill when the user wants to:
- paper trade ideas before live capital
- track entries/exits/stops/takes over time
- compute realized and unrealized PnL
- keep a thesis journal and periodic review
Database
Default DB path:
~/.openclaw/paper-trading.db
Override with --db <path>.
Commands
Use the script:
node --experimental-strip-types {baseDir}/scripts/paper_trading.ts --help
Environment notes:
- No npm dependency is required for SQLite (uses
node:sqlite). - Node may print
ExperimentalWarningfor SQLite in current versions; this is expected.
1) Initialize account
node --experimental-strip-types {baseDir}/scripts/paper_trading.ts init
--account main
--name "Main Paper Account"
--base-currency USD
--starting-balance 10000
2) Log market snapshot (for unrealized PnL)
node --experimental-strip-types {baseDir}/scripts/paper_trading.ts snapshot
--symbol BTC
--mint 6p6xgHyF7AeE6TZk8x9mNQd2r2hH7r4mYJ8t6x6hYfSR
--price 62000
--source dexscreener
3) Open position
node --experimental-strip-types {baseDir}/scripts/paper_trading.ts open
--account main
--symbol BTC
--mint 6p6xgHyF7AeE6TZk8x9mNQd2r2hH7r4mYJ8t6x6hYfSR
--side LONG
--qty 0.1
--price 62000
--fee 4
--stop-price 60500
--take-price 65000
--max-risk-pct 1.5
--note "Breakout + volume confirmation"
4) Update stop/take
node --experimental-strip-types {baseDir}/scripts/paper_trading.ts set-levels
--account main
--symbol BTC
--mint 6p6xgHyF7AeE6TZk8x9mNQd2r2hH7r4mYJ8t6x6hYfSR
--side LONG
--stop-price 61200
--take-price 66000
--note "Move stop to reduce downside"
5) Close position
node --experimental-strip-types {baseDir}/scripts/paper_trading.ts close
--account main
--symbol BTC
--mint 6p6xgHyF7AeE6TZk8x9mNQd2r2hH7r4mYJ8t6x6hYfSR
--side LONG
--qty 0.05
--price 63500
--fee 3
--note "Partial take profit"
6) Journal note
node --experimental-strip-types {baseDir}/scripts/paper_trading.ts note
--account main
--symbol BTC
--side LONG
--note "Invalidation if daily close < 61k"
--tags thesis risk macro
7) Portfolio status
node --experimental-strip-types {baseDir}/scripts/paper_trading.ts status --account main
node --experimental-strip-types {baseDir}/scripts/paper_trading.ts status --account main --format json --pretty
8) Weekly review
node --experimental-strip-types {baseDir}/scripts/paper_trading.ts review --account main
node --experimental-strip-types {baseDir}/scripts/paper_trading.ts review --account main --format json --pretty
Workflow
- Keep snapshots updated for symbols with open positions, always with
--mintand--source dexscreener. - Open trades only with explicit stop and risk cap (
--max-risk-pct). - Log every change as an event, do not edit old events.
- Run
statusafter each trade andreviewat week end.
Notes
- Events are append-only in SQLite (
eventstable). - PnL is recomputed by replaying events.
statususes the latest snapshot persymbol + mintpair for unrealized PnL.
Validation
Run the full paper-trading test suite:
node --test {baseDir}/tests/paper_trading.test.mjs