Run a paper-trading / simulated investing workflow with explicit style selection, fixed risk rules, three decision windows per trading day, optional cron set...
Run a disciplined paper-trading loop for an OpenClaw user.
This skill is meant to be reusable across different OpenClaw setups. Do not assume one specific user's style, files, or schedule. Confirm the user's preferences before locking in the workflow.
Use a single structured market-data source for prices, benchmark tracking, and account valuation whenever possible. Current recommended source for this skill: Finnhub.
Never fabricate market data, execution prices, benchmark performance, news, portfolio state, or trade history.
If data is missing, delayed, unavailable, or uncertain:
HOLD over pretending certaintyTrust matters more than simulated returns.
Before turning the workflow into a persistent setup, confirm these four items with the user:
Do not skip confirmation unless the user explicitly says to use the current/default version.
The skill should support multiple styles.
Examples:
A custom style should be personalized for the current OpenClaw user based on their preferences, temperament, and working style. Do not assume one universal custom style across all users.
When building or updating a custom style:
Default starter rules for this MVP:
$10,000US stocks + ETFsoptions, leverage, shorting30%10%3SPY and QQQThese are defaults, not sacred constants. If the user changes them, store the updated rules in the project files.
The default workflow uses three decision windows per trading day:
pre_or_openintradaynear_closeIn each window, output exactly one action:
BUYSELLHOLDHOLD is a valid action. Do not force activity.
If the user wants automation, set up cron jobs for:
If cron already exists, inspect before changing it. Avoid duplicate jobs.
The default post-market report should include:
SPY / QQQ)The report can be concise, but it must remain honest and specific.
Use a project directory so the simulated account survives across sessions.
Suggested files:
account.json — account state, rules, style, positions, watchlisttrades.jsonl — append-only decision / execution logREADME.md — brief project noteIf the user already has a preferred project path, use that instead.
Follow this order.
Read the account file and trade log before making any decision.
At minimum, know:
Determine whether you are acting in:
pre_or_openintradaynear_closepostmarket_syncFor the first three, make exactly one action decision.
Before every decision, gather enough real market context to justify the move.
Use Finnhub as the primary single source for:
SPY and QQQUse open research/news sources as secondary inputs for:
Prefer a small number of useful sources over noisy overcollection.
Store API keys outside the skill itself, for example in a local project .env or another secret-bearing runtime configuration.
Never hardcode, publish, commit, or echo a user's market-data API key into SKILL.md, reference files, public repos, or ClawHub releases.
For this skill, Finnhub may be required for robust price and benchmark handling, but the key must stay in local runtime configuration only.
When researching and reporting:
If the needed data is unavailable, say something like:
Market data was unavailable for this window, so I recorded HOLD rather than fabricate a view.Always enforce the stored account rules.
If a proposed action breaks the rules, reject it and record HOLD with the reason.
Examples:
For every BUY or SELL, record three things:
For HOLD, explain why patience is better than forced activity.
Append one JSON object per line to trades.jsonl.
Suggested shape:
{"date":"2026-03-12","window":"intraday","action":"HOLD","ticker":null,"qty":0,"price":null,"reason":"No clean setup.","thesisInvalidation":null,"exitPlan":null,"dataStatus":"incomplete"}
For executed buys/sells, include:
At the end of the trading day, send a concise Chinese recap containing:
If any figures are incomplete or estimated, label them clearly.
Read references/project-template.md when setting up a new account from scratch.
Read references/report-template.md when formatting the daily sync.
Read references/log-schema.md when updating or validating the trading log format.
Read references/cron-setup.md when the user wants automated decision windows and post-market sync.
Read references/style-profiles.md when selecting or generating a style profile, especially custom.
Use scripts/update_account.py <account.json> as a minimal account-update helper.
It currently:
cash plus position market value when currentPrice is availabletotalReturnPctupdatedAtTreat it as a safe starter framework. Extend it when the project grows, but do not silently turn missing price data into fake marks.
ZIP package — ready to use