HKUDS/Vibe-Trading/agent/src/skills/strategy-generate/SKILL.md
strategy-generate
Create, modify, and optimize quantitative trading strategies, then backtest and evaluate them.
- Source repository stars
- 29,558
- Declared platforms
- 0
- Static risk flags
- 0
- Last source update
- 2026-08-04
- Source checked
- 2026-08-04
Decision brief
What it does—and where it fits
1. Requirements parsing: parse user intent, extract instrument codes, time range, and strategy logic, then write config.json 2. Strategy design: think through the 5 questions of data / signal / position sizing / backtest / validation 3. Strategy coding: write code/signalengine.p…
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/HKUDS/Vibe-Trading --skill "agent/src/skills/strategy-generate"Inspect the Agent Skill "strategy-generate" from https://github.com/HKUDS/Vibe-Trading/blob/3a752d5a8ed088633040893de1cc9e6dc712596f/agent/src/skills/strategy-generate/SKILL.md at commit 3a752d5a8ed088633040893de1cc9e6dc712596f. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Workflow
1. Requirements parsing: parse user intent, extract instrument codes, time range, and strategy logic, then write config.json 2. Strategy design: think through the 5 questions of data / signal / position sizing / backtest / validation 3. Strategy coding: write code/signalengine.p…
Requirements parsing: parse user intent, extract instrument codes, time range, and strategy logic, then write config.jsonStrategy design: think through the 5 questions of data / signal / position sizing / backtest / validationStrategy coding: write code/signalengine.py (following the SignalEngine contract) - 02
Review Criteria
1. artifacts/metrics.csv exists and is non-empty 2. artifacts/equity.csv exists and is non-empty 3. exitcode == 0 (backtest exits normally) 4. The equity column in equity.csv contains no NaN values 5. tradecount 0 (zero trades = signal bug)
artifacts/metrics.csv exists and is non-emptyartifacts/equity.csv exists and is non-emptyexitcode == 0 (backtest exits normally) - 03
Requirements Parsing
Extract the following from the user's description: - Instrument codes: process them according to the normalization rules below - Time range: if the user does not specify dates, default to 10 years back from today (for example, if today is 2026-03-18, then startdate=2016-03-18, e…
Instrument codes: process them according to the normalization rules belowTime range: if the user does not specify dates, default to 10 years back from today (for example, if today is 2026-03-18, then startdate=2016-03-18, enddate=2026-03-18)Strategy logic: entry / exit conditions and indicator parameters - 04
Strategy Design
Before writing code, think through these 5 questions:
Data requirements: what fields are needed (basic OHLCV only, daily valuation fields such as pe/pb/roe, or statement fields such as incometotalrevenue / finaindicatorroe?), data frequency (daily), and market (which deter…Signal logic: what are the entry conditions? What are the exit conditions? Direction (long / short / long-short)? Are there filters (volume, trend confirmation, and so on)?Position management: equal-weight allocation or scaling in/out? Risk control (stop-loss, maximum position)? In portfolio strategies, once top N names are selected, each weight = 1/N - 05
SignalEngine Contract
Hard constraints: - The signal Series index must align exactly with the input DataFrame index - Include all required imports (numpy, pandas, and so on) - Do not hardcode dates or stock codes (read them from config.json) - Do not include an if name == "main" block - Pure pandas /…
The signal Series index must align exactly with the input DataFrame indexInclude all required imports (numpy, pandas, and so on)Do not hardcode dates or stock codes (read them from config.json)
Permission review
Static risk signals and limitations
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 99/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 29,558 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- HKUDS/Vibe-Trading
- Skill path
- agent/src/skills/strategy-generate/SKILL.md
- Commit
- 3a752d5a8ed088633040893de1cc9e6dc712596f
- License
- MIT
- Collected
- 2026-08-04
- Default branch
- main
View the original SKILL.md
Workflow
- Requirements parsing: parse user intent, extract instrument codes, time range, and strategy logic, then write
config.json - Strategy design: think through the 5 questions of data / signal / position sizing / backtest / validation
- Strategy coding: write
code/signal_engine.py(following theSignalEnginecontract) - Syntax check:
bash("python -c \"import ast; ast.parse(open('code/signal_engine.py').read()); print('OK')\"") - Run backtest: call the
backtesttool (built into the engine; no need to writerun_backtest.py) - Evaluate results: read
artifacts/metrics.csvand judge by the review criteria - Iterative fixing: if results are poor, modify with
edit_file→ runbacktest→ re-evaluate
You only need to write signal_engine.py and config.json. The backtest tool automatically handles data loading and backtest execution.
Requirements Parsing
Extract the following from the user's description:
- Instrument codes: process them according to the normalization rules below
- Time range: if the user does not specify dates, default to 10 years back from today (for example, if today is
2026-03-18, thenstart_date=2016-03-18,end_date=2026-03-18) - Strategy logic: entry / exit conditions and indicator parameters
If critical information is missing, you must ask the user instead of guessing:
- Instrument not specified → ask which instrument they want to backtest (offer several popular suggestions)
- Strategy description is vague (for example, "help me build a strategy") → provide 2-3 strategy directions for the user to choose from
- Mixed markets but not clearly specified → confirm the data source
Write config.json first, then write code. config.json must be placed in the root of run_dir.
Strategy Design
Before writing code, think through these 5 questions:
- Data requirements: what fields are needed (basic OHLCV only, daily valuation fields such as
pe/pb/roe, or statement fields such asincome_total_revenue/fina_indicator_roe?), data frequency (daily), and market (which determines the data source) - Signal logic: what are the entry conditions? What are the exit conditions? Direction (long / short / long-short)? Are there filters (volume, trend confirmation, and so on)?
- Position management: equal-weight allocation or scaling in/out? Risk control (stop-loss, maximum position)? In portfolio strategies, once top N names are selected, each weight = 1/N
- Backtest parameters: time range, initial capital (default 1,000,000), commission (default 0.1%)
- Validation checklist: signal consistency (no NaN signals), position check (normalized to prevent leverage), and completeness of generated artifacts
There is no need to output a JSON design document. Express these design decisions directly in code.
SignalEngine Contract
class SignalEngine:
def generate(self, data_map: Dict[str, pd.DataFrame]) -> Dict[str, pd.Series]:
"""
Args:
data_map: code -> DataFrame (columns: open, high, low, close, volume, DatetimeIndex)
If config.extra_fields is specified, pe, pb, roe, and similar daily_basic columns will also be present.
If config.fundamental_fields is specified, PIT-safe statement columns such as
income_total_revenue, income_n_income, and fina_indicator_roe will also be present.
Returns:
code -> signal Series, value range [-1.0, 1.0]
1.0 = fully long, 0.5 = half position, 0.0 = flat, -1.0 = fully short
Portfolio strategy: selected stocks split weights equally (for example top 10 -> each 0.1)
Legacy integer signals {-1, 0, 1} remain compatible (treated as -100% / 0% / 100%)
"""
Hard constraints:
- The signal
Seriesindex must align exactly with the inputDataFrameindex - Include all required imports (
numpy,pandas, and so on) - Do not hardcode dates or stock codes (read them from
config.json) - Do not include an
if __name__ == "__main__"block - Pure pandas / numpy implementation, with no external signal libraries
- Output plain Python code, not Markdown fences
Quality Checklist
Self-check after writing signal_engine.py:
- All imports are included (
numpy,pandas,typing, and so on) - No undefined variables
- Signal logic is consistent with the strategy description
- Boundary handling: for empty data or insufficient history before the lookback window, use
fillna(0)or skip - Portfolio strategy: once N stocks are selected, each weight = 1/N (for example top 10 → each 0.1), unselected names = 0
- Signal values stay within
[-1.0, 1.0]
Instrument Code Normalization
- 6-digit China A-share codes → automatically append suffix: codes starting with
600/601/603→.SH, all others →.SZ - US stocks: uppercase letters +
.US, such asAAPL.US(yfinanceconverts automatically) - Hong Kong stocks: digits +
.HK, such as700.HK(yfinanceconverts automatically) - Cryptocurrencies:
BTC-USDTformat (OKX spot pairs, must use the hyphen-, not slash/)- The user may write
BTC/USDT, butconfig.jsonmust use"BTC-USDT"
- The user may write
Cryptocurrency Notes
- Code format: must be
XXX-USDT(uppercase + hyphen), such asBTC-USDTandETH-USDT - source: must be set to
"okx" - extra_fields: must be
null(OKX does not support fundamentals) - Data format:
DataLoaderhas already normalized the output to match China A-shares exactly:open, high, low, close, volume+DatetimeIndex - No special handling needed in strategy code:
signal_engine.pyshould be written the same way as for China A-shares; do not add extra data conversion for OKX
Market Detection and Data Sources
| Pattern | Market | source | Extra Fields |
|---|---|---|---|
^\d{6}\.(SZ|SH|BJ)$ | China A-shares | tushare | extra_fields: pe, pb, pe_ttm, ps_ttm, dv_ttm, total_mv, circ_mv, roe; fundamental_fields: income/balancesheet/cashflow/fina_indicator |
^[A-Z]+\.US$ | US stocks | yfinance | - |
^\d{3,5}\.HK$ | Hong Kong stocks | yfinance | - |
^[A-Z]+-USDT$ | Cryptocurrency | okx | - |
extra_fields selection logic: only China A-shares (tushare) support daily valuation fields. If the strategy needs PE/PB/ROE and similar daily_basic fields, specify them in config.json.extra_fields and DataLoader will retrieve them automatically. Hong Kong stocks, US stocks, and crypto do not support extra_fields.
fundamental_fields selection logic: use this for China A-share financial statement pre-filters. The runner queries income, balancesheet, cashflow, and/or fina_indicator through the Tushare fundamental provider, then merges rows into daily bars only after their announcement/disclosure date. Output columns are prefixed by table name, for example income_total_revenue, income_n_income, balancesheet_total_hldr_eqy_exc_min_int, and fina_indicator_roe.
config.json Format
{
"source": "auto",
"codes": ["000001.SZ"],
"start_date": "2016-03-18",
"end_date": "2026-03-18",
"interval": "1D",
"initial_cash": 1000000,
"commission": 0.001,
"extra_fields": null,
"fundamental_fields": null,
"optimizer": null,
"optimizer_params": {},
"engine": "daily",
"validation": null
}
source:"auto"(recommended, auto-select by code format) /"tushare"/"yfinance"/"okx"/"akshare"/"ccxt""auto"supports mixed instruments. For example,["000001.SZ", "BTC-USDT"]will be automatically routed totushareandokx- Futures codes (e.g.
"IF2406.CFFEX","ESZ4") and forex pairs (e.g."EUR/USD") are also auto-routed
interval: candlestick interval, default"1D". Supported values:"1m"/"5m"/"15m"/"30m"/"1H"/"4H"/"1D"- The annualization factor for minute backtests is inferred automatically from
source(252 trading days for China A-shares, 365 calendar days for crypto) - Minute backtests can be very data-heavy. Recommended limits are no more than 30 days for
1m, or 1 year for1H
- The annualization factor for minute backtests is inferred automatically from
extra_fields: China A-shares can use values such as["pe", "pb", "roe"]; other markets should usenullfundamental_fields: optional China A-share statement fields, such as{"income": ["total_revenue", "n_income"], "fina_indicator": ["roe"]}; usenullunless the strategy needs financial statement pre-filteringoptimizer: optional, one of"equal_volatility"/"risk_parity"/"mean_variance"/"max_diversification"/"turnover_aware"/null(equal-weight by default)optimizer_params: optimizer parameters, such as{"lookback": 60}.mean_varianceadditionally supports{"risk_free": 0.0};turnover_awaresupports{"risk_aversion": 1.0, "turnover_penalty": 0.5}(L1 penalty on weight changes; tune to data frequency)engine: backtest engine, default"daily". For options strategies, set"options"(requiresOptionsSignalEngine)initial_cash: default 1,000,000commission: default 0.1%validation: optional statistical validation after backtest completes. Omit to skip. Example:"validation": { "monte_carlo": {"n_simulations": 1000}, "bootstrap": {"n_bootstrap": 1000, "confidence": 0.95}, "walk_forward": {"n_windows": 5} }monte_carlo: permutation test — shuffles trade order to compute p-value (is Sharpe significantly better than random?)bootstrap: resamples daily returns to compute Sharpe 95% confidence intervalwalk_forward: splits equity curve into N windows, checks performance consistency- Each key is optional — include only the validations you want
- Can also run standalone on past results:
python -m backtest.validation <run_dir>
Review Criteria
Hard Gates (any failure → passed=false)
artifacts/metrics.csvexists and is non-emptyartifacts/equity.csvexists and is non-emptyexit_code == 0(backtest exits normally)- The
equitycolumn inequity.csvcontains noNaNvalues trade_count > 0(zero trades = signal bug)
Scoring Rules
- Successful backtest + complete artifacts + at least 1 trade →
score ≥ 60→ passed - Poor return / low Sharpe alone should not push the score below 60; they are optimization suggestions only
score ≥ 60=passed=true
Bug Categories (reduce the score)
- Zero trades (
trade_count=0): signal-logic bug, conditions may be too strict - Late first trade (first trade > 2 years after backtest start): data-filtering bug or overly long lookback window
- Capital utilization < 50%: position-management bug, portfolio is flat most of the time
- Open position at the end (positions still open when backtest ends): exit-signal timing bug
action_items Format
If improvements are needed after evaluation, write action_items:
- Format:
"Change X from A to B"or"Add X logic in signal_engine.py" - Must be specific down to parameter values, file names, and function names
- At least 2 items
- Examples:
"Change short MA from 5 to 10 days to reduce whipsaw signals""Add stop-loss: force close when loss exceeds 5%""Add volume filter in signal_engine.py: only trigger buy on high volume"
Cross-Market Strategies
When the user requests a backtest with codes from different markets (e.g. ["000001.SZ", "BTC-USDT"]):
- Set
source: "auto"inconfig.json - The
CompositeEnginehandles calendar alignment, shared capital, and per-market rules automatically - Use volatility-adjusted weights so high-vol assets (crypto) don't dominate the risk budget
- See the cross-market-strategy skill for per-market parameters, vol-adjustment, and example code
Supporting Files
- examples.md — example call sequence
Alternatives
Compare before choosing
AI-Unified-Process/marketplace
browserless-test
Creates Vaadin Browserless server-side unit tests for Vaadin views covering navigation, component interactions, form validation, grid operations, and notifications. Use when the user asks to "write Browserless tests", "write Vaadin UI unit tests", "unit test a Vaadin view without a browser", "create view tests with the official Vaadin testing framework", or mentions Browserless testing, SpringBrowserlessTest, browserless-test-junit6, UI Unit Testing, or server-side Vaadin testing.
freenet/freenet-agent-skills
dapp-builder
Build and maintain decentralized applications on Freenet using river as a template. Guides through designing contracts (shared state), delegates (private state), and UI, and through upgrading a live dApp safely. Use when user wants to create a new Freenet dApp, design contract state, implement delegates, build a Freenet-connected UI, OR upgrade an existing dApp — bump freenet-stdlib, ship a new contract/delegate version (v2), fix a bug that re-keys the WASM, or migrate state across a contract/de
mgiovani/cc-arsenal
team-review
Multi-agent review team: architecture, security, performance, testing, style, docs/UX, plus an adversary that cross-examines the other 6, for security-sensitive, architectural, or large PRs (15+ files) where a single-agent pass risks missing cross-cutting issues. Use for auth/payments/PII changes, schema/pattern changes, compliance sign-off, or when asked to 'get the review team on this' / 'multi-agent review' / 'thorough review before merge'. For a standard PR or a quick pre-merge check, use /r
alirezarezvani/claude-skills
loop-library
Discover, find, compare, audit, repair, adapt, and design repeatable AI-agent loops with explicit triggers, actions, verification, stopping conditions, guardrails, and handoffs. Use when a user asks to analyze a codebase for potential loops, mine coding-thread history for work done more than once, turn repeated engineering work into a loop, find or recommend a published loop, create a recurring agent workflow or automation cadence, turn an outcome into a bounded copy-ready loop, or review an exi