{"id":"c48980cd-beb2-4c17-a84f-d6bc4dcb3494","entityType":"agent","slug":"clawhub-gechengling-ai-trading-backtester","name":"AI Trading Strategy Backtester","canonicalUrl":"https://www.xpersona.co/agent/clawhub-gechengling-ai-trading-backtester","canonicalPath":"/agent/clawhub-gechengling-ai-trading-backtester","generatedAt":"2026-10-10T10:45:03.156Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T05:47:22.675Z","emptyReason":null},"description":"AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywords: trading backtest, quantitative strategy, algorithmic trading, Python backtesting, backtrader, vectorbt, trading strategy, momentum, mean reversion, pairs trading, A-share strategy, financial data, technical indicators. Skill: AI Trading Strategy Backtester Owner: gechengling Summary: AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywo","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.6K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17ewqc4f2s6gpcbm88hy7fgvn85kg1g:ai-trading-backtester","sourceUrl":"https://clawhub.ai/gechengling/ai-trading-backtester","homepage":"https://clawhub.ai/gechengling/skills/ai-trading-backtester","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/gechengling/ai-trading-backtester","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/gechengling/skills/ai-trading-backtester","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T05:47:22.675Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T05:47:22.675Z","emptyReason":null},"stars":null,"forks":null,"downloads":1642,"packageName":null,"latestVersion":"5.0.3","tractionLabel":"1.6K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T05:47:22.675Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T05:47:22.675Z","lastCrawledAt":"2026-10-10T05:47:22.675Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T05:47:22.675Z","lastVerifiedAt":null,"highlights":[{"version":"5.0.3","createdAt":"2026-10-09T06:00:37.899Z","changelog":"5.0.3: 移除与不提供投资建议边界冲突的Recommendation段落(SDI-4)，改为口径对照式结论读法","fileCount":3,"zipByteSize":19170},{"version":"5.0.2","createdAt":"2026-10-09T05:53:49.590Z","changelog":"5.0.2: 修复A股示例误用美股代码的市场口径不一致(SDI-4)；修复动量策略除零缺陷；语言与适用市场声明(SQP-3)；收窄触发词","fileCount":3,"zipByteSize":19087},{"version":"5.0.1","createdAt":"2026-09-14T05:47:38.853Z","changelog":"v5.0.1: 新增截至 2026-09-14 程序化交易监管与 A 股 T+1/涨跌停/成本口径背景；三套策略模板补调用示例与常见坑；绩效表新增口径与误读维度；新增压力测试情景表与 Walk-forward 示例","fileCount":3,"zipByteSize":14636},{"version":"5.0.0","createdAt":"2026-05-31T02:13:50.926Z","changelog":"融合阿里点金（Dianjin）金融数字员工精髓，版本升级至5.0.0","fileCount":3,"zipByteSize":9223},{"version":"1.0.0","createdAt":"2026-05-19T13:21:54.840Z","changelog":"Initial release of AI Trading Strategy Backtester. - Enables AI-powered design, coding, and backtesting of quantitative trading strategies. - Supports A-share (China), Hong Kong, and US equity markets. - Provides templates for momentum, mean reversion, breakout, pairs trading, and machine learning-based strategies. - Generates production-quality Python code compatible with backtrader and vectorbt. - Guides users step-by-step through strategy definition, backtest setup, performance analysis, and optimization. - Suitable for both quantitative analysts and retail traders across multiple markets.","fileCount":3,"zipByteSize":6652}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17ewqc4f2s6gpcbm88hy7fgvn85kg1g:ai-trading-backtester","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gechengling-ai-trading-backtester/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gechengling-ai-trading-backtester/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gechengling-ai-trading-backtester/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-gechengling-ai-trading-backtester/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-gechengling-ai-trading-backtester/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-gechengling-ai-trading-backtester/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T10:45:03.154Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gechengling-ai-trading-backtester/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gechengling-ai-trading-backtester/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gechengling-ai-trading-backtester/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gechengling-ai-trading-backtester/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T05:47:22.675Z","emptyReason":null},"readme":"Skill: AI Trading Strategy Backtester\n\nOwner: gechengling\n\nSummary: AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywords: trading backtest, quantitative strategy, algorithmic trading, Python backtesting, backtrader, vectorbt, trading strategy, momentum, mean reversion, pairs trading, A-share strategy, financial data, technical indicators.\n\nTags: ai-trading-backtester:5.0.3, banking:5.0.0, dianjin:5.0.0, finance:5.0.0, insurance:5.0.0, latest:5.0.3\n\nVersion history:\n\nv5.0.3 | 2026-10-09T06:00:37.899Z | user\n\n5.0.3: 移除与不提供投资建议边界冲突的Recommendation段落(SDI-4)，改为口径对照式结论读法\n\nv5.0.2 | 2026-10-09T05:53:49.590Z | user\n\n5.0.2: 修复A股示例误用美股代码的市场口径不一致(SDI-4)；修复动量策略除零缺陷；语言与适用市场声明(SQP-3)；收窄触发词\n\nv5.0.1 | 2026-09-14T05:47:38.853Z | user\n\nv5.0.1: 新增截至 2026-09-14 程序化交易监管与 A 股 T+1/涨跌停/成本口径背景；三套策略模板补调用示例与常见坑；绩效表新增口径与误读维度；新增压力测试情景表与 Walk-forward 示例\n\nv5.0.0 | 2026-05-31T02:13:50.926Z | user\n\n融合阿里点金（Dianjin）金融数字员工精髓，版本升级至5.0.0\n\nv1.0.0 | 2026-05-19T13:21:54.840Z | auto\n\nInitial release of AI Trading Strategy Backtester.\n\n- Enables AI-powered design, coding, and backtesting of quantitative trading strategies.\n- Supports A-share (China), Hong Kong, and US equity markets.\n- Provides templates for momentum, mean reversion, breakout, pairs trading, and machine learning-based strategies.\n- Generates production-quality Python code compatible with backtrader and vectorbt.\n- Guides users step-by-step through strategy definition, backtest setup, performance analysis, and optimization.\n- Suitable for both quantitative analysts and retail traders across multiple markets.\n\nArchive index:\n\nArchive v5.0.3: 3 files, 19170 bytes\n\nFiles: skill-card.md (1996b), SKILL.md (39824b), _meta.json (140b)\n\nFile v5.0.3:SKILL.md\n\n---\nname: \"AI Trading Strategy Backtester\"\ndescription: \"AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywords: trading backtest, quantitative strategy, algorithmic trading, Python backtesting, backtrader, vectorbt, trading strategy, momentum, mean reversion, pairs trading, A-share strategy, financial data, technical indicators.\"\nversion: \"5.0.3\"\n---\n\n# AI Trading Strategy Backtester\n\n## Overview\n\nAn AI-powered quantitative trading strategy design and backtesting assistant that helps you transform trading ideas into fully-coded, backtested strategies. It guides you through strategy design (mean reversion, momentum, breakout, pairs trading, ML-based), implements them in Python (backtrader, vectorbt, pandas), evaluates performance across historical data for A-share, HK, and US markets, and produces risk-adjusted performance reports.\n\n## Market & Regulatory Context (as of 2026-10-09)\n\n| 事项 | 对回测的直接影响 |\n|------|----------------|\n| **程序化交易管理要求** | 高频类策略需自行计入报备、流速与异常交易约束，回测中不能假设\"无限报单\" |\n| **A股 T+1 与涨跌幅限制** | 当日买入不可卖出、涨跌停无法成交，回测必须对不可成交信号做剔除或顺延处理 |\n| **停牌与流动性** | 停牌期间的\"信号\"不可成交；小市值标的需按实际成交量限制下单规模 |\n| **交易成本口径** | 佣金、印花税、滑点合计常被低估，年换手率高时成本可吞掉全部超额收益 |\n| **数据复权与幸存者偏差** | 使用不复权价格或仅含现存标的历史，会系统性高估策略表现 |\n\n**新动态（截至 2026-10-09）：**\n- **程序化交易监管常态化**：境内市场对程序化交易的报备、交易行为监测与异常交易认定持续细化，高频与日内回转类策略的合规成本上升。回测时应把\"报单频率上限\"\"撤单率约束\"纳入假设，而非只追求收益最大化。\n- **AI 选股与因子挖掘的合规关注上升**：以大模型或机器学习生成交易信号时，监管与机构风控普遍要求可解释、可复现、留痕，纯黑箱信号在实盘落地时面临额外审核成本。\n- **数据要素与另类数据应用扩展**：产业、舆情、供应链等另类数据被更广泛用于因子构建，但数据可得性的时点（point-in-time）问题更突出，回测中须严格避免引入未来信息。\n- 以上为公开信息综述，**具体规则、费率与执行口径以交易所、中国证监会及券商官方最新发布为准**。\n- **回测口径本身成为关注点**：机构内部评审 increasingly 要求回测报告披露「数据复权方式、样本区间、成本口径、可成交性过滤、样本外划分方式」五项，缺项即视为不可采信。建议把五项写进回测报告模板的固定开头。\n- **另类数据的 point-in-time 问题被单独提示**：产业、舆情、供应链类数据常见「事后回填」，直接用于回测会引入未来信息。可行做法是为每类数据记录「可获得时点」，并在回测中只允许使用该时点之前已经存在的数据版本。\n- 以上新增条目为公开信息综述，**具体规则、费率与执行口径以官方最新发布为准**。\n\n---\n\n## 语言与适用市场声明（Language & Markets）\n\n- **语言**：英文术语（Metrics、Sharpe、Drawdown、Walk-forward 等）保留原文，中文用于解释与结论——这是量化领域通用做法，便于与代码、公式和第三方工具对齐，属显式设计。\n- **支持市场**：A 股（沪深）、中国香港市场、美股。三个市场的**交易规则差异是回测结论的前提**，不可混用：\n  - A 股：T+1、涨跌停限制、停牌、卖出印花税、做空渠道有限；\n  - 中国香港市场：T+0、无涨跌停、交易成本与结算周期不同；\n  - 美股：T+0、可做空、税费与结算规则另行适用。\n- **口径优先**：任何回测示例都必须明确标注市场；**同一段代码在不同市场下的结论不可直接套用**。\n- 涉及中国香港、中国澳门、中国台湾及境外市场的具体监管要求，本技能仅提供通用回测方法，规则细节以当地监管与交易所口径为准。\n\n---\n\n## 数据最小化与执行边界（Data Minimization & Execution Boundary）\n\n**数据最小化前置声明（使用本技能前请先执行）**\n\n1. 不要粘贴实盘账户信息、持仓明细、真实成交记录；讨论时用脱敏后的结构或虚构标的。\n2. 数据文件路径、数据库地址、行情接口密钥一律用占位符，不写入提示词。\n3. 涉及的策略参数、因子逻辑如属机构未公开成果，只描述结构不给具体数值。\n4. 本技能不运行回测、不安装依赖、不读取本地行情文件、不发起任何网络请求；所有代码需你在自己的环境中执行。\n5. 生成的代码与报告如需落盘，须先预览确认无凭据与内部路径残留，再自行保存。\n\n**代码块性质与执行边界**\n\n| 内容 | 性质 | 谁来执行 |\n|------|------|---------|\n| backtrader / statsmodels 等示例 | 可运行脚手架，需本地安装依赖 | 使用者在自己的环境中运行，本技能不执行 |\n| 绩效指标表中的目标值与示例数字 | 参考区间与示意值，非承诺 | 使用者用自身回测结果替换 |\n| 成本、税率、费率数字 | 公开口径示例，随时变化 | 使用者以交易所与券商最新口径为准 |\n| 压力测试情景与参数 | 方法论示例 | 使用者按自身标的与时间调整 |\n\n**硬边界**：不执行回测、不安装依赖、不读写本地文件、不发起网络请求、不提供投资建议、不代为下单。\n\n---\n\n\n\n## Triggers\n\n**English Triggers:** backtest this trading strategy in Python, momentum strategy template for A-share, mean reversion with RSI and Bollinger, cointegrated pairs trading example, backtest performance metrics and Sharpe, walk-forward parameter optimization, transaction cost and slippage setup\n\n**English Non-Triggers:** stock picking or buy/sell recommendations, price prediction for a specific symbol, general Python or pandas help, options pricing theory, fundamental valuation, portfolio marketing content\n\n**中文触发词（须落在策略回测任务上才触发）：** 量化策略怎么回测 / 动量策略代码怎么写 / 均值回归参数怎么调 / 配对交易协整怎么检验 / 回测绩效指标怎么算 / 参数优化怎么防过拟合 / A股T+1和涨跌停怎么在回测里处理\n\n**不触发清单：** 个股买卖建议与标的推荐、行情预测、通用编程问题、期权定价、基本面估值、营销文案\n\n**路由判定三步**：① 是否已有（或正在设计）一条**可编码的交易规则**？② 诉求是否为把它回测、评估或优化？③ 前两步均为是才启用本技能；若只是想知道买什么，转投研或选股类技能。\n\n## Workflow\n\n\n### Step 1: Define the Strategy Brief\n\nCollect the trading idea:\n- **Strategy type**: Momentum, mean reversion, breakout, pairs trading, ML-based, event-driven\n- **Market**: A-share (sh/sz), HK stock (hk), US equity (us)\n- **Timeframe**: Intraday (1m/5m/15m), daily, weekly, monthly\n- **Assets**: Single stock, ETF, index, portfolio\n- **Entry/Exit signals**: Technical indicators, price patterns, fundamental signals, ML predictions\n- **Position sizing**: Fixed, Kelly criterion, risk-parity, dynamic\n- **Constraints**: Max position size, long-only/short, turnover limit, slippage model\n\n**简报示例（合格）：**\n> 策略类型：动量；市场：A股（沪深300成分股）；频率：日线；标的：成分股等权；信号：20日动量排名前20%；仓位：等权，最多10只；约束：仅做多、单边成本0.15%、单票上限10%、剔除ST与上市不足60日个股；回测区间：2019-01-01 至 2026-08-31。\n\n**简报示例（不合格及原因）：**\n> \"帮我做个能稳定赚钱的量化策略。\"\n>\n> 缺少市场、频率、成本、仓位与约束，任何回测结果都无法验证。更关键的缺失是**没有失败条件**——合格简报应写明\"什么情况下判定策略不可用\"（如样本外夏普<0.5 或最大回撤>25% 即放弃）。\n\n\n**再举一例（跨市场简报的差异）：** 同一个「20 日动量、前 20%、持有 5 日」的想法，写成 A 股简报与美股简报时约束完全不同。A 股版本必须写明：T+1（信号次日开盘执行）、涨停不可买入（顺延）、剔除 ST 与上市不足 60 日、单边成本约 0.15%、仅做多。美股版本则可写：T+0 当日收盘执行、允许做空、成本按每股或按比例另设。**把 A 股简报的美股约束照抄过去，是最常见的回测失真来源。**\n\n### Step 2: Strategy Design & Code Generation\n\nBased on the brief, generate production-quality Python code:\n\n#### A. Momentum Strategy Template\n```python\nimport pandas as pd\nimport numpy as np\nimport backtrader as bt\n\nclass MomentumStrategy(bt.Strategy):\n    params = (\n        ('lookback', 20),       # 回望期\n        ('hold_period', 5),    # 持有期\n        ('rank_percentile', 0.2),  # 选股分位数\n    )\n\n    def __init__(self):\n        self.inds = {}\n        for d in self.datas:\n            self.inds[d] = {}\n            self.inds[d]['momentum'] = bt.indicators.RateOfChange(\n                d.close, period=self.params.lookback\n            )\n\n    def next(self):\n        # 按动量排序，取前20%\n        rankings = sorted(\n            self.datas,\n            key=lambda d: self.inds[d]['momentum'][0],\n            reverse=True\n        )[:int(len(self.datas) * self.params.rank_percentile)]\n\n        # 平仓不在榜单的持仓\n        for d in self.datas:\n            if d not in rankings and self.getposition(d).size > 0:\n                self.close(d)\n\n        # 买入榜单中的标的\n        # 注意：rankings 为空时 1.0/len(rankings) 会除零，必须先返回\n        if not rankings:\n            return\n        for d in rankings:\n            if self.getposition(d).size == 0:\n                self.order_target_percent(d, 1.0 / len(rankings))\n```\n\n**调用示例与常见坑：**\n\n```python\ncerebro = bt.Cerebro()\ncerebro.addstrategy(MomentumStrategy, lookback=20, hold_period=5, rank_percentile=0.2)\n# 关键：传入的是\"回望期内的动量\"，必须剔除上市不足 lookback 天的新股，\n# 否则新股会因为没有足够历史而产生极端 ROC 值，长期占据榜单前排。\n```\n\n- **坑一（未来函数）**：若在 `next()` 里用当收盘价排序并在同一根 K 线以收盘价成交，等于用到了收盘才可知的信息。A 股应改为**次日开盘或次日均价成交**。\n- **坑二（涨跌停不可成交）**：榜单里的股票当日一字涨停时无法买入，回测若照单全收会高估收益。应对方式：当日涨停则跳过，顺延至下一交易日。\n- **坑三（集中度过低）**：`1.0 / len(rankings)` 在 rankings 为空时会除零，需先判断 `if rankings:`。\n\n#### B. Mean Reversion Strategy Template\n```python\nclass MeanReversionStrategy(bt.Strategy):\n    params = (\n        ('bb_period', 20),\n        ('bb_dev', 2.0),\n        ('rsi_period', 14),\n        ('rsi_oversold', 30),\n        ('rsi_overbought', 70),\n    )\n\n    def __init__(self):\n        self.bb = bt.indicators.BollingerBands(\n            self.data.close, period=self.params.bb_period,\n            devfactor=self.params.bb_dev\n        )\n        self.rsi = bt.indicators.RSI(\n            self.data.close, period=self.params.rsi_period\n        )\n\n    def next(self):\n        if self.position.size == 0:\n            # 价格触及下轨且RSI超卖 → 买入\n            if self.data.close < self.bb.lines.bot and \\\n               self.rsi < self.params.rsi_oversold:\n                self.order_target_percent(self.data, 1.0)\n        else:\n            # 价格触及上轨或RSI超买 → 卖出\n            if self.data.close > self.bb.lines.top or \\\n               self.rsi > self.params.rsi_overbought:\n                self.close()\n```\n\n**调用示例与参数敏感度说明：**\n\n```python\n# rsi_oversold 从 30 调到 25，交易次数可能从 127 次降到 70 次以下，\n# 而样本外夏普从 1.12 掉到 0.6 —— 这种\"微调剧变\"就是过拟合信号。\ncerebro.addstrategy(MeanReversionStrategy, bb_period=20, bb_dev=2.0,\n                    rsi_period=14, rsi_oversold=30, rsi_overbought=70)\n```\n\n- **适用场景**：震荡市中表现较好；单边下跌行情里\"越跌越买\"会连续触发买入信号，形成典型的**均值回归陷阱**——建议叠加趋势过滤（如仅在收盘价高于 MA60 时允许开仓）。\n- **A 股注意**：T+1 制度下当日买入不能当日卖出，若策略在盘中触发卖出信号，回测中必须顺延到下一交易日，否则会虚增收益。\n\n\n**再举一例（均值回归陷阱的量化对照）：** 同一策略在 2019-2021 震荡市年化 14.2%、最大回撤 -11%；在 2022 单边下行年化 -23%、最大回撤 -34%，且触发买入 31 次（越跌越买）。叠加「收盘价 > MA60 才允许开仓」的趋势过滤后，2022 年交易次数降到 6 次、回撤收窄到 -16%，全区间年化由 6.1% 回升到 9.8%。**结论**：均值回归策略必须把趋势过滤写进规则，而不是作为可选优化。\n\n#### C. Pairs Trading Strategy\n```python\nimport statsmodels.api as sm\n\ndef find_cointegrated_pairs(data_dict):\n    \"\"\"寻找协整配对\"\"\"\n    n = len(data_dict)\n    pairs = []\n    symbols = list(data_dict.keys())\n\n    for i in range(n):\n        for j in range(i + 1, n):\n            try:\n                x = data_dict[symbols[i]]\n                y = data_dict[symbols[j]]\n                # OLS回归\n                X = sm.add_constant(x)\n                model = sm.OLS(y, X).fit()\n                residuals = model.resid\n                # ADF检验\n                adf_result = sm.tsa.stattools.adfuller(residuals)\n                if adf_result[0] < adf_result[4]['1%']:\n                    pairs.append((symbols[i], symbols[j], adf_result[0]))\n            except:\n                continue\n    return sorted(pairs, key=lambda x: x[2])\n\ndef pairs_trading_signals(spread, z_entry=2.0, z_exit=0.5):\n    \"\"\"配对交易信号\"\"\"\n    signals = pd.Series(0, index=spread.index)\n    z_score = (spread - spread.mean()) / spread.std()\n\n    signals[z_score < -z_entry] = 1    # 做多价差\n    signals[z_score > z_entry] = -1     # 做空价差\n    signals[abs(z_score) < z_exit] = 0  # 平仓\n    return signals\n```\n\n**调用示例：**\n\n```python\npairs = find_cointegrated_pairs({\"600036\": s_a, \"601318\": s_b})\n# => [(\"600036\", \"601318\", -3.87)]   ADF 统计量 -3.87 < 1% 临界值，判定协整\n\nspread = s_a - 1.24 * s_b           # 1.24 来自 OLS 回归系数\nsignals = pairs_trading_signals(spread, z_entry=2.0, z_exit=0.5)\n```\n\n- **关键提醒一**：`z_score` 用全样本 `mean()`/`std()` 计算会引入未来函数。实务中应使用**滚动窗口**（如过去 60 日）的均值与标准差。\n- **关键提醒二**：协整关系会衰减。建议在回测中每 N 个月重新检验一次协整，关系破裂即停止交易该配对，而不是一路持有到止损。\n- **关键提醒三**：A 股缺乏便捷的做空渠道，配对交易的\"做空腿\"往往无法实现，因此在 A 股使用时应明确标注为\"仅做多腿的变体\"，收益预期需相应下调。\n\n\n**再举一例（协整衰减的滚动检验结果）：** 某配对在 2020-2022 的 ADF 统计量稳定在 -3.5 以下（协整成立），2023 年起升至 -2.1（不再显著），但策略仍在交易，当年亏损 -14%。改为每 6 个月重检一次、ADF 统计量 > -2.9 即停止该配对后，2023 年该配对空仓，组合全年回撤收窄 6 个百分点。**结论**：协整检验必须是滚动的、带停止规则的，一次性检验等同于假设关系永续。\n\n### Step 3: Backtest Execution\n\nGuide the user through running the backtest:\n\n```python\nimport backtrader as bt\nimport pandas as pd\n\n# 加载数据\ndata = bt.feeds.GenericCSVData(\n    dataname='historical_data.csv',\n    dtformat='%Y-%m-%d',\n    datetime=0,\n    open=1, high=2, low=3, close=4, volume=5,\n    openinterest=-1\n)\n\n# 运行回测\ncerebro = bt.Cerebro()\ncerebro.addstrategy(MomentumStrategy)\ncerebro.adddata(data)\ncerebro.broker.setcash(1000000.0)  # 100万初始资金\ncerebro.broker.setcommission(commission=0.001)  # 千一手续费\ncerebro.addsizer(bt.sizers.PercentSizer, percents=95)\n\nprint(f'初始资金: {cerebro.broker.getvalue():,.2f}')\ncerebro.run()\nprint(f'最终资金: {cerebro.broker.getvalue():,.2f}')\n```\n\n**A股成本设置的正确示范：**\n\n```python\n# 佣金双边 + 印花税（卖出单边）+ 滑点，缺一项都会高估收益\ncerebro.broker.setcash(1_000_000.0)\ncerebro.broker.setcommission(commission=0.0003, stocklike=True)   # 佣金万三\ncerebro.broker.set_slippage_perc(perc=0.0005)                     # 滑点万五\n# 印花税需在卖出侧单独计入（历史口径曾为卖出单边 0.1%，以最新官方口径为准）\n```\n\n**一次性跑完的最小检查清单：**\n1. 初始资金与期末资金是否如预期变化（没变说明根本没有成交）\n2. 成交笔数是否合理（为 0 说明信号从未触发；过多说明成本被低估）\n3. 是否有信号落在停牌日或涨跌停日（有则说明缺少可交易性过滤）\n\n4. 成交价格是否为「信号次日开盘/均价」而非「信号当日收盘」（用当日收盘成交即含未来函数）\n5. 期末资金不变时需反向排查：是信号未触发、还是全部订单被可交易性过滤掉\n\n**再举一例（成本口径差异导致的结论反转）：** 同一日频策略（年换手 18 倍），三种成本假设下净年化分别为：仅佣金万三 → 12.4%；加印花税与滑点（合计单边约 0.15%）→ 6.1%；成本翻倍 → -0.8%。**同一套信号，成本口径不同就能从「可用」变成「不可用」**，因此回测报告必须把成本口径写在结论之前。\n\n### Step 4: Performance Analysis\n\nGenerate comprehensive performance metrics:\n\n| Metric | Description | Target | Formula / 计算口径 | 常见误读 | A股口径注意点 |\n|--------|-------------|--------|-------------------|---------|---|\n| Total Return | Cumulative return | > Benchmark | 期末权益/期初权益 - 1 | 忽略分红再投与复权方式差异 | 需明确用前复权还是后复权，结论不可混用 |\n| Annualized Return | CAGR | > 10% (A-share), > 8% (HK/US) | (终值/初值)^(252/交易日数) - 1 | 回测期不足一年时年化会严重放大 | A股按约 244 个交易日/年折算，非固定 252 |\n| Sharpe Ratio | Risk-adjusted return | > 1.5 | (年化收益 - 无风险利率)/年化波动 | 用日收益简单乘√252 前需确认收益无自相关 | 无风险利率建议用同期国债或货币基金收益，口径须写明 |\n| Max Drawdown | Peak-to-trough loss | < 20% | max((峰值 - 当前值)/峰值) | 只看数值不看持续天数，低估心理压力 | A股极端行情下回撤持续天数常长于美股 |\n| Win Rate | Percentage of profitable trades | > 50% | 盈利次数/总平仓次数 | 高胜率配低盈亏比仍可能整体亏损 | A股 T+1 下同一笔日内无法反复开平，次数天然偏低 |\n| Profit Factor | Gross profit / Gross loss | > 1.5 | 总盈利/总亏损 | 不含成本时会被系统性高估 | 必须含印花税与滑点，否则系统性高估 |\n| Calmar Ratio | Annual return / Max DD | > 1.0 | 年化收益/最大回撤 | 回测期短时最大回撤尚未充分暴露 | A股熊市长，Calmar 普遍低于美股同类策略 |\n| Sortino Ratio | Return / Downside deviation | > 1.0 | (年化收益 - 无风险利率)/下行波动 | 与夏普混用会导致横向比较失真 | 下行波动的门槛设定需与回撤口径一致 |\n| Turnover / 换手率 | 年化双边成交额/平均权益 | 视策略而定 | 年双边成交额/平均权益 | 常被忽略，却是成本吞噬的主因 | A股换手成本中印花税占比高，降换手收益明显 |\n| Exposure / 持仓暴露 | 有仓位时间占比 | 视策略而定 | 持仓交易日/总交易日 | 低暴露策略的年化收益不可直接对比满仓策略 | A股停牌期持仓时间被拉长，暴露口径需说明 |\n\n### Step 5: Optimization & Stress Testing\n\n```\nA. 参数优化\n   - Grid search over key parameters\n   - Walk-forward analysis (in-sample / out-of-sample)\n   - Avoid overfitting: use Information Coefficient (IC) analysis\n\nB. 压力测试\n   - Historical crises: 2008, 2015 A-share crash, COVID-19 (2020)\n   - Monte Carlo simulation of equity curves\n   - Sensitivity analysis: commission, slippage, spread assumptions\n\nC. 风险分析\n   - Position-level VaR (Value at Risk)\n   - Factor exposure (momentum, size, volatility)\n   - Tail risk: maximum loss scenarios\n```\n\n**压力测试示例（A股场景）：**\n\n| 情景 | 假设 | 观察指标 | A股特有因素 |\n|------|------|---------|---|\n| 2015 年异常波动 | 指数快速回撤、流动性骤降、大面积停牌 | 策略最大回撤、停牌期间无法减仓的比例 | 大面积停牌导致减仓指令无法执行 |\n| 2018 年单边下跌 | 全年趋势向下 | 均值回归类策略是否连续触发买入、资金是否耗尽 | 越跌越买叠加 T+1，当日无法纠错 |\n| 2020 年疫情冲击 | 短期急跌后快速反弹 | 止损是否被触发在最低点、反弹是否踏空 | 涨停排队无法建仓，反弹踏空 |\n| 流动性收缩 | 成交额下降 50% | 冲击成本上升后的净收益变化 | 小市值标的冲击成本成倍上升 |\n| 成本翻倍 | 佣金与印花税假设提高 100% | 净收益是否仍为正——若为负说明策略靠低成本存活 | 印花税占比高，成本翻倍影响被放大 |\n\n**参数优化示例（Walk-forward）：**\n```\n样本划分：2019-2023 为优化期，2024-2026 为样本外\n滚动方式：每 12 个月重新优化一次参数，用下一年数据检验\n判定规则：样本外夏普 / 样本内夏普 > 0.6 视为可接受；< 0.4 判定过拟合\n```\n若样本内夏普 1.8、样本外 0.5（比值 0.28），即使样本内指标漂亮，也应判定该策略不可用。\n\n## Input/Output Examples\n\n### Example 1: Strategy Design Request\n\n**Input:**\n```\nDesign a momentum strategy for A-share market.\nCriteria:\n- Daily timeframe\n- Universe: CSI 300 constituents (沪深300成分股)\n- Lookback: 20 days\n- Hold for 5 days\n- Long only\n- Top 20% by momentum score\n- Max 10 positions\n- Exclude ST stocks and names listed < 60 trading days\n```\n\n**Output:**\n```\nStrategy Design Summary:\n\n┌─────────────────────────────────────────┐\n│ Strategy: Top-Momentum Long-Only        │\n│ Market: A-share (CSI 300 constituents)  │\n│ Timeframe: Daily                        │\n│ Backtest Period: 2019-01-01 to 2026-08-31 │\n└─────────────────────────────────────────┘\n\nKey Components:\n1. Momentum ranking: ROC(close, period=20)\n2. Selection: Top 20% by momentum score (max 10 stocks)\n3. Position sizing: Equal weight (10% per position)\n4. Hold period: 5 trading days\n5. Execution: signal at today's close, execute at NEXT day's open (T+1)\n6. Filters: skip limit-up (unable to buy), skip suspended, exclude ST\n\nExpected Performance (illustrative, before/after cost):\n- Annualized Return: 12-18% (gross) / 8-13% (net of ~0.15% one-way cost)\n- Sharpe Ratio: 0.7-1.1\n- Max Drawdown: 28-38%\n- Win Rate: 50-55%\n- Turnover: 12-18x per year  <- cost dominates; report it\n\nCode generated at: strategy_momentum_a_share.py\n```\n\n> **口径提示**：本示例为 A 股，因此执行价为**次日开盘**、需剔除涨停与停牌、且仅做多。若把同一段代码用于美股或中国香港市场，上述三项约束均不适用，须重新设定——**市场口径不可跨市场套用**。\n\n### Example 2: Performance Report\n\n\n**Input:**\n```\nCompare these two strategies: RSI mean reversion vs momentum breakout on CSI 300 (000300)\nPeriod: 2020-2024\nInitial capital: 1,000,000 CNY\n```\n\n**Output:**\n```\nBacktest Results: CSI 300 Strategies (2020-2024)\n\n┌──────────────────────┬─────────────────────┬────────────────────┐\n│ Metric               │ RSI Mean Reversion  │ Momentum Breakout  │\n├──────────────────────┼─────────────────────┼────────────────────┤\n│ Total Return         │ +68.3%              │ +124.7%            │\n│ Annualized Return    │ +13.2%              │ +17.8%             │\n│ Sharpe Ratio         │ 1.12               │ 1.45               │\n│ Max Drawdown         │ -22.1%             │ -31.4%             │\n│ Win Rate             │ 58.3%              │ 49.2%              │\n│ Profit Factor        │ 1.82               │ 1.67               │\n│ Calmar Ratio         │ 0.60               │ 0.57               │\n│ Avg Holding Days     │ 8.2                │ 4.6                │\n│ Total Trades         │ 127                │ 284                │\n└──────────────────────┴─────────────────────┴────────────────────┘\nBenchmark: CSI 300 Index (+42.1% over same period)\n\nReading of the results (methodological comparison, not a recommendation):\n- RSI Mean Reversion: lower drawdown and higher win rate, lower total return — the relevant question for research is whether it survives cost assumptions at its trade count\n- Momentum Breakout: higher total return with roughly 2x the trades, deeper drawdown — its edge is highly sensitive to turnover and cost settings\n\n本表仅为两套规则在同一口径下的回测结果对照，用于说明「指标如何读、成本如何改变结论」，\n不构成任何投资建议、标的推荐或买卖决策依据。\n\n\nA-share markets are subject to significant regulatory and liquidity risks.\n```\n\n## Strategy Templates Library\n\n| Strategy Type | Best For | Timeframe | Markets | 典型失效场景 | A股落地难点 | 回测必设过滤 |\n|--------------|----------|-----------|---------|------------|------------|---|\n| Momentum | Trending markets | Daily/Weekly | All | 急转弯行情（风格切换） | T+1 导致信号次日才可执行 | 剔除上市不足 N 日、剔除一字涨停、次日开盘成交 |\n| Mean Reversion | Range-bound markets | Intraday/Daily | All | 单边下跌（越跌越买） | 涨跌停无法成交、T+1 | 剔除停牌、跌停不可买入、T+1 顺延卖出 |\n| Breakout | Volatile markets | Intraday/Daily | All | 假突破密集期 | 涨停排队难以建仓 | 涨停不可追入、需判断封板可成交性 |\n| Pairs Trading | Market-neutral | Daily | US/HK | 协整关系破裂 | 做空腿难以实现 | 标注仅做多腿变体、滚动协整检验 |\n| Machine Learning | Alpha discovery | Daily | All |  regime 变化、特征漂移 | 可解释性与留痕要求高 | 特征 point-in-time、可解释性留痕 |\n| Event-Driven | Corporate actions | Daily | A-share/US | 事件被提前price-in | 事件数据 point-in-time 难保证 | 事件可得时点校验、避免事后回填 |\n\n## Best Practices\n\n1. **Always use out-of-sample testing** — split data 70/30 or use walk-forward\n2. **Account for transaction costs** — A-share commission + stamp tax ≈ 0.15% per trade\n3. **Include slippage** — assume 0.05-0.1% for liquid stocks, higher for illiquid\n4. **Diversify across uncorrelated strategies** — don't rely on one strategy\n5. **Stress test for A-share specifics** — T+1 trading, limit-up/limit-down, suspension risks\n6. **Validate with paper trading** — run live for 1-3 months before real capital\n7. **Beware of overfitting** — fewer parameters = more robust strategy\n\n8. **报告成本口径与换手率** — 无换手与成本假设的绩效表不可采信\n9. **固定「可获得时点」** — 因子与另类数据必须按 point-in-time 取用，避免事后回填\n\n**举例说明第 8 条（为什么必须先报成本）：** 两个策略毛年化同为 15%，A 换手 5 倍、B 换手 20 倍。按 A 股单边约 0.15% 计，A 的成本拖累约 1.5%、B 约 6%。净额分别为 13.5% 与 9%——**毛收益相同，净收益差 4.5 个百分点**。只看毛收益会把 B 误判为同样优秀。\n\n**举例说明第 9 条（point-in-time 失真）：** 用某行业景气指数构建因子，数据供应商在每月 20 日发布上月数值，但接口返回的是「发布日」而非「所属月份」。若按发布日期对齐，等于提前 20 天知道了当月数值，回测夏普从真实的 0.6 虚增到 1.4。**修法**：为每个数据字段记录「可获得时点」，回测中只允许使用该时点之前已发布的版本。\n\n**举例说明第 2 条（交易成本）为何致命：** 某日频策略年换手 20 倍，单边成本按 0.15% 计，年化成本约 6%。若策略毛年化超额为 8%，扣费后仅剩 2%，再计入滑点后大概率归零。因此**高换手策略必须先算成本再算收益**。\n\n**举例说明第 5 条（A股特性）：** 某策略在 2015 年 6-8 月期间发出减仓信号，但持仓标的中 40% 处于停牌状态，实际无法卖出。回测若假设全部成交，会把最大回撤从真实的 -45% 写成 -28%，严重低估风险。\n\n**举例说明第 6 条（模拟盘）：** 正式投入资金前，建议先做 1-3 个月模拟或小额实盘，重点验证的不是收益，而是\"信号能否按回测假设成交\"——实盘中的成交价、可成交量、停牌与临停，往往与回测假设差距最大。\n\n## Changelog / 变更记录\n\n| 版本 | 日期 | 变更摘要 |\n|------|------|---------|\n| 5.0.3 | 2026-10-09 | 移除 Example 2 中与「不提供投资建议」边界冲突的 Recommendation 段落（按风险偏好推荐策略），改为口径对照式的结论读法说明（SDI-4） |\n| 5.0.2 | 2026-10-09 | 修复 Example 1 的市场口径不一致：A 股示例改用沪深300成分股、标注 A-share 市场并补 T+1/涨停/停牌过滤与成本口径（SDI-4）；修复 MomentumStrategy 中 rankings 为空时的除零缺陷并补返回保护；新增语言与适用市场声明（SQP-3）与数据最小化/执行边界章节；收窄中英文触发词、补充非触发清单与路由判定三步；动态更新至 2026-10-09 并新增回测口径五项披露、另类数据 point-in-time 两条；新增列：A股口径注意点、A股特有因素、回测必设过滤、常见造假/失真手法、实际暴露提示；Step1-3 各补一例（含跨市场简报差异、均值回归趋势过滤量化对照、协整衰减滚动检验）；Best Practices 补 2 条与 2 例；测试用例补 TC005/TC006 |\n| 5.0.1 | 2026-09-14 | 融合阿里点金回测流程与指标体系 |\n\n---\n\n\n\n## Risk Disclaimer\n\nThis skill provides backtesting tools and historical analysis for educational and research purposes only. Backtested results are not indicative of future performance. Real trading involves significant risks including market volatility, liquidity constraints, regulatory changes, and model risk. Always consult with qualified financial advisors before making investment decisions.\n## Appendix G. Alibaba Dianjin Fusion — ai-trading-backtester v5.0.3\n\n> **Source**: Alibaba Dianjin Digital Employee — `investment-advisor` (AI投资顾问) & `quant-researcher` (AI量化研究员)  \n> **Essence**: 策略回测、参数优化、风险控制、绩效评估  \n> **Integrated**: 2026-05-31\n> **Last reviewed**: 2026-10-09\n\n---\n\n### G.1 Core Workflow (Dianjin essence)\n\n```\n策略回测流程：\n1. 策略定义：买入条件+卖出条件+止损条件\n2. 数据准备：历史K线+成交量+因子数据\n3. 回测执行：按时间顺序模拟交易\n4. 绩效计算：收益率+夏普比率+最大回撤\n5. 参数优化：网格搜索/贝叶斯优化\n6. 风险分析：回撤期+胜率+盈亏比\n```\n\n---\n\n### G.2 Backtest Metrics (Dianjin method)\n\n**核心指标体系**：\n\n| 指标 | 计算公式 | 优秀标准 | 及格标准 | 易被操纵的方式 | 交叉验证指标 | 常见造假/失真手法 |\n|------|---------|---------|---------|--------------|------------|---|\n| 年化收益率 | (终值/初值)^(252/交易日)-1 | >20% | >8% | 缩短回测期至强年份 | 分年度收益是否稳定 | 只报强年份区间、或把模拟盘接在回测末尾 |\n| 夏普比率 | (年化收益-无风险利率)/年化波动 | >1.5 | >0.5 | 剔除极端亏损交易日 | 与索提诺、Calmar 同时看 | 剔除极端亏损日、或按周收益算年化波动 |\n| 最大回撤 | max((历史最高-当前)/历史最高) | <15% | <30% | 只报告收盘价回撤 | 回撤持续天数与恢复天数 | 只看收盘价回撤、或用区间收益掩盖路径 |\n| 胜率 | 盈利次数/总次数 | >60% | >45% | 用极短止盈拉高胜率 | 盈亏比是否同步下降 | 把未平仓浮盈计为已实现盈利 |\n| 盈亏比 | 平均盈利/平均亏损 | >2.0 | >1.5 | 放宽止损拉高盈亏比 | 最大回撤是否同步恶化 | 把止损位外移后不重算胜率 |\n| 索提诺比率 | (年化收益-无风险利率)/下行波动 | >2.0 | >1.0 | 下行波动口径自行定义 | 与最大回撤交叉核对 | 自行定义下行波动门槛以美化结果 |\n| 换手率 | 年双边成交额/平均权益 | 视策略 | 视策略 | 常常干脆不报告 | 与净收益同时报告 | 只报单边成交额，或干脆不报告 |\n\n**回测报告模板（Dianjin风格）**：\n\n```\n【策略回测报告】均线突破策略（5日+20日）\n\n一、回测参数\n- 标的：沪深300指数 (000300.SH)\n- 周期：2019-01-01 至 2026-05-31\n- 频率：日线\n- 初始资金：100万\n- 交易成本：单边0.1%（佣金0.03%+印花税0.07%）\n\n二、绩效指标\n✅ 年化收益率：18.5%（优秀）\n✅ 夏普比率：1.62（优秀）\n❌ 最大回撤：-28.3%（不及格，应<15%）\n⚠️ 胜率：52.3%（及格）\n⚠️ 盈亏比：1.85（及格）\n\n三、分年度表现\n| 年份 | 收益率 | 最大回撤 | 夏普比率 |\n|------|--------|----------|----------|\n| 2019 | +32.5% | -12.3% | 2.1 |\n| 2020 | +28.7% | -15.8% | 1.8 |\n| 2021 | -8.2% | -22.5% | -0.3 |\n| 2022 | -15.3% | -28.3% | -0.8 |\n| 2023 | +22.1% | -10.5% | 1.5 |\n| 2024 | +12.8% | -8.7% | 1.2 |\n| 2025 | +25.6% | -9.2% | 1.9 |\n\n四、问题诊断\n❌ 2022年回撤-28.3%（策略在熊市表现差）\n❌ 胜率仅52.3%（信号质量不高）\n⚠️ 交易成本年化-3.2%（高频交易成本高）\n\n五、改进建议\n1. 增加趋势过滤（仅在MA60向上时开仓）\n2. 优化止损（当前-8%止损太宽，改为-5%）\n3. 降低交易频率（当前年均交易45次，降至20次以下）\n```\n\n---\n\n### G.3 Parameter Optimization (Dianjin essence)\n\n**参数优化方法**：\n\n```\n方法1：网格搜索（Grid Search）\n  - 优点：简单，保证找到全局最优\n  - 缺点：计算量大（参数多时指数爆炸）\n  - 适用：参数少（<5个），范围小\n\n方法2：贝叶斯优化（Bayesian Optimization）\n  - 优点：高效，用高斯过程建模目标函数\n  - 缺点：实现复杂，可能陷入局部最优\n  - 适用：参数多（>5个），计算资源有限\n\n方法3：遗传算法（Genetic Algorithm）\n  - 优点：全局搜索能力强，适合复杂目标\n  - 缺点：收敛慢，参数调优难\n  - 适用：非线性、多峰目标函数\n```\n\n**过拟合风险警示（Dianjin重点）**：\n\n```\n⚠️ 过拟合信号：\n1. 样本内绩效远优于样本外（差距>50%）\n2. 参数极度敏感（微调参数导致绩效剧变）\n3. 交易次数过少（<20次，统计不显著）\n4. 最大回撤发生在样本末端（未来函数嫌疑）\n\n✅ 防过拟合措施：\n1. 样本外测试（保留最近1-2年数据不参训）\n2. 滚动窗口验证（Walk-forward，每N个月重新优化）\n3. 参数稳定性检验（参数在合理范围内波动，绩效不剧变）\n4. 经济逻辑检验（策略要有合理解释，不能纯数据挖掘）\n```\n\n---\n\n### G.4 Risk Control & Position Management (Dianjin method)\n\n**仓位管理模型**：\n\n```\n固定比例法（最简单）：\n  - 单一策略：股票仓位≤30%\n  - 组合策略：总仓位≤80%\n\n凯利公式（Kelly Criterion）：\n  仓位 = (胜率 × 盈亏比 - 败率) / 盈亏比\n  例：胜率55%，盈亏比2.0 → 仓位 = (0.55×2-0.45)/2 = 32.5%\n\nATR仓位法（波动率调整）：\n  仓位 = 账户资金 × 风险系数 / (ATR × 合约乘数)\n  例：账户100万，风险系数0.02，ATR=2元，合约乘数100\n  → 仓位 = 100万 × 0.02 / (2×100) = 100股（约占总资金2%）\n```\n\n**凯利公式的实操提醒：** 上例算出 32.5% 仓位，但凯利公式对胜率与盈亏比的估计误差极为敏感——若实际胜率是 50% 而非 55%，最优仓位会大幅下降。实务中普遍采用**半凯利或四分之一凯利**（上例取 16% 或 8%），以避免在参数高估时过度下注。\n\n**ATR 仓位法举例（跨标的比较）：**\n\n| 标的 | ATR | 单笔风险预算 2% 时的股数 | 占总资金 | 实际暴露提示 |\n|------|-----|----------------------|---------|---|\n| 高波动个股（ATR=2元，价格20元） | 2.0 | 100股 | 约2%名义，实际暴露高 | 名义仓位低但日内波动大，需按波动贡献复核 |\n| 低波动蓝筹（ATR=0.3元，价格20元） | 0.3 | 667股 | 约13%名义 | 名义仓位高但波动贡献可控，符合风险预算设计 |\n\n同一风险预算下，低波动标的自然获得更高名义仓位，这正是波动率调整的目的：**让每笔交易的风险贡献相当，而不是让每笔交易的金额相当**。\n\n---\n\n### G.5 Test Case (Dianjin quality)\n\n**Test Case: 策略回测+优化**\n\n```\nInput: \"回测均线突破策略（5日+20日）在沪深300的表现，2019-2026\"\n\nExpected Output:\n1. 回测参数（标的/周期/成本）\n2. 绩效指标表（年化收益/夏普/最大回撤/胜率/盈亏比）\n3. 分年度表现\n4. 问题诊断（回撤过大/胜率过低）\n5. 改进建议（增加过滤/优化止损）\n\nQuality Check:\n- ✅ 指标计算准确（公式正确）\n- ✅ 问题诊断客观（不回避缺陷）\n- ✅ 改进建议可行（有实操价值）\n- ✅ 风险提示（过拟合风险）\n\nAdditional Cases:\n- TC002: \"策略回测夏普 1.9，但交易次数只有 18 次\" → 判定统计不显著，要求延长样本或降低参数自由度\n- TC003: \"回测中未设置涨跌停过滤\" → 判定存在可交易性缺陷，要求补过滤后重跑并对比差异\n- TC004: \"样本外夏普 0.5，样本内 1.8\" → 判定过拟合，给出缩减参数与简化规则的改法\n- TC005: \"策略回测用当日收盘价成交\" → 判定存在未来函数，要求改为次日开盘或均价成交并重跑对比\n- TC006: \"A股策略示例中标的写成 AAPL/TSLA 并标注 US Equity\" → 判定市场口径不一致，要求改为沪深300成分股并补 T+1、涨停、停牌过滤\n```\n\n---\n\n**End of Dianjin Fusion Content — ai-trading-backtester v5.0.3**\n\nFile v5.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn74e704j3ygjcygnpf02rdvd185js13\",\n  \"slug\": \"ai-trading-backtester\",\n  \"version\": \"5.0.3\",\n  \"publishedAt\": 1791525637899\n}\n\nFile v5.0.3:skill-card.md\n\n## Description:\n\nGuides the design of Python trading-strategy backtests and interpretation of historical performance across A-share, Hong Kong, and US equity markets.\n\nThis skill is for research and development only.\n\n## Publisher:\n\n[gechengling](https://clawhub.ai/user/gechengling)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nQuantitative analysts and retail traders use this skill to draft backtesting code and compare historical strategy performance, costs, and risk assumptions. Users run and verify the generated code themselves; the skill does not execute backtests or place trades.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Sensitive account details, trading records, credentials, or proprietary strategy parameters could be exposed in prompts or saved outputs.\n\nMitigation: Use placeholders or anonymized examples; review generated code and reports for sensitive details before saving them.\n\nRisk: Unverified code or unrealistic market, cost, and regulatory assumptions could make historical performance misleading or costly to apply.\n\nMitigation: Independently test generated code, data timing, execution constraints, fees, and current market rules before using results with real capital.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/gechengling/skills/ai-trading-backtester)\n\n## Skill Output:\n\n**Output Type(s):** [Markdown, Code, Guidance]\n\n**Output Format:** [Markdown with Python code blocks and performance tables]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Example performance figures are illustrative, not verified backtest results.]\n\n## Skill Version(s):\n\n5.0.3 (source: skill frontmatter and server-resolved release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v5.0.2: 3 files, 19087 bytes\n\nFiles: skill-card.md (2418b), SKILL.md (39260b), _meta.json (140b)\n\nFile v5.0.2:SKILL.md\n\n---\nname: \"AI Trading Strategy Backtester\"\ndescription: \"AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywords: trading backtest, quantitative strategy, algorithmic trading, Python backtesting, backtrader, vectorbt, trading strategy, momentum, mean reversion, pairs trading, A-share strategy, financial data, technical indicators.\"\nversion: \"5.0.2\"\n---\n\n# AI Trading Strategy Backtester\n\n## Overview\n\nAn AI-powered quantitative trading strategy design and backtesting assistant that helps you transform trading ideas into fully-coded, backtested strategies. It guides you through strategy design (mean reversion, momentum, breakout, pairs trading, ML-based), implements them in Python (backtrader, vectorbt, pandas), evaluates performance across historical data for A-share, HK, and US markets, and produces risk-adjusted performance reports.\n\n## Market & Regulatory Context (as of 2026-10-09)\n\n| 事项 | 对回测的直接影响 |\n|------|----------------|\n| **程序化交易管理要求** | 高频类策略需自行计入报备、流速与异常交易约束，回测中不能假设\"无限报单\" |\n| **A股 T+1 与涨跌幅限制** | 当日买入不可卖出、涨跌停无法成交，回测必须对不可成交信号做剔除或顺延处理 |\n| **停牌与流动性** | 停牌期间的\"信号\"不可成交；小市值标的需按实际成交量限制下单规模 |\n| **交易成本口径** | 佣金、印花税、滑点合计常被低估，年换手率高时成本可吞掉全部超额收益 |\n| **数据复权与幸存者偏差** | 使用不复权价格或仅含现存标的历史，会系统性高估策略表现 |\n\n**新动态（截至 2026-10-09）：**\n- **程序化交易监管常态化**：境内市场对程序化交易的报备、交易行为监测与异常交易认定持续细化，高频与日内回转类策略的合规成本上升。回测时应把\"报单频率上限\"\"撤单率约束\"纳入假设，而非只追求收益最大化。\n- **AI 选股与因子挖掘的合规关注上升**：以大模型或机器学习生成交易信号时，监管与机构风控普遍要求可解释、可复现、留痕，纯黑箱信号在实盘落地时面临额外审核成本。\n- **数据要素与另类数据应用扩展**：产业、舆情、供应链等另类数据被更广泛用于因子构建，但数据可得性的时点（point-in-time）问题更突出，回测中须严格避免引入未来信息。\n- 以上为公开信息综述，**具体规则、费率与执行口径以交易所、中国证监会及券商官方最新发布为准**。\n- **回测口径本身成为关注点**：机构内部评审 increasingly 要求回测报告披露「数据复权方式、样本区间、成本口径、可成交性过滤、样本外划分方式」五项，缺项即视为不可采信。建议把五项写进回测报告模板的固定开头。\n- **另类数据的 point-in-time 问题被单独提示**：产业、舆情、供应链类数据常见「事后回填」，直接用于回测会引入未来信息。可行做法是为每类数据记录「可获得时点」，并在回测中只允许使用该时点之前已经存在的数据版本。\n- 以上新增条目为公开信息综述，**具体规则、费率与执行口径以官方最新发布为准**。\n\n---\n\n## 语言与适用市场声明（Language & Markets）\n\n- **语言**：英文术语（Metrics、Sharpe、Drawdown、Walk-forward 等）保留原文，中文用于解释与结论——这是量化领域通用做法，便于与代码、公式和第三方工具对齐，属显式设计。\n- **支持市场**：A 股（沪深）、中国香港市场、美股。三个市场的**交易规则差异是回测结论的前提**，不可混用：\n  - A 股：T+1、涨跌停限制、停牌、卖出印花税、做空渠道有限；\n  - 中国香港市场：T+0、无涨跌停、交易成本与结算周期不同；\n  - 美股：T+0、可做空、税费与结算规则另行适用。\n- **口径优先**：任何回测示例都必须明确标注市场；**同一段代码在不同市场下的结论不可直接套用**。\n- 涉及中国香港、中国澳门、中国台湾及境外市场的具体监管要求，本技能仅提供通用回测方法，规则细节以当地监管与交易所口径为准。\n\n---\n\n## 数据最小化与执行边界（Data Minimization & Execution Boundary）\n\n**数据最小化前置声明（使用本技能前请先执行）**\n\n1. 不要粘贴实盘账户信息、持仓明细、真实成交记录；讨论时用脱敏后的结构或虚构标的。\n2. 数据文件路径、数据库地址、行情接口密钥一律用占位符，不写入提示词。\n3. 涉及的策略参数、因子逻辑如属机构未公开成果，只描述结构不给具体数值。\n4. 本技能不运行回测、不安装依赖、不读取本地行情文件、不发起任何网络请求；所有代码需你在自己的环境中执行。\n5. 生成的代码与报告如需落盘，须先预览确认无凭据与内部路径残留，再自行保存。\n\n**代码块性质与执行边界**\n\n| 内容 | 性质 | 谁来执行 |\n|------|------|---------|\n| backtrader / statsmodels 等示例 | 可运行脚手架，需本地安装依赖 | 使用者在自己的环境中运行，本技能不执行 |\n| 绩效指标表中的目标值与示例数字 | 参考区间与示意值，非承诺 | 使用者用自身回测结果替换 |\n| 成本、税率、费率数字 | 公开口径示例，随时变化 | 使用者以交易所与券商最新口径为准 |\n| 压力测试情景与参数 | 方法论示例 | 使用者按自身标的与时间调整 |\n\n**硬边界**：不执行回测、不安装依赖、不读写本地文件、不发起网络请求、不提供投资建议、不代为下单。\n\n---\n\n\n\n## Triggers\n\n**English Triggers:** backtest this trading strategy in Python, momentum strategy template for A-share, mean reversion with RSI and Bollinger, cointegrated pairs trading example, backtest performance metrics and Sharpe, walk-forward parameter optimization, transaction cost and slippage setup\n\n**English Non-Triggers:** stock picking or buy/sell recommendations, price prediction for a specific symbol, general Python or pandas help, options pricing theory, fundamental valuation, portfolio marketing content\n\n**中文触发词（须落在策略回测任务上才触发）：** 量化策略怎么回测 / 动量策略代码怎么写 / 均值回归参数怎么调 / 配对交易协整怎么检验 / 回测绩效指标怎么算 / 参数优化怎么防过拟合 / A股T+1和涨跌停怎么在回测里处理\n\n**不触发清单：** 个股买卖建议与标的推荐、行情预测、通用编程问题、期权定价、基本面估值、营销文案\n\n**路由判定三步**：① 是否已有（或正在设计）一条**可编码的交易规则**？② 诉求是否为把它回测、评估或优化？③ 前两步均为是才启用本技能；若只是想知道买什么，转投研或选股类技能。\n\n## Workflow\n\n\n### Step 1: Define the Strategy Brief\n\nCollect the trading idea:\n- **Strategy type**: Momentum, mean reversion, breakout, pairs trading, ML-based, event-driven\n- **Market**: A-share (sh/sz), HK stock (hk), US equity (us)\n- **Timeframe**: Intraday (1m/5m/15m), daily, weekly, monthly\n- **Assets**: Single stock, ETF, index, portfolio\n- **Entry/Exit signals**: Technical indicators, price patterns, fundamental signals, ML predictions\n- **Position sizing**: Fixed, Kelly criterion, risk-parity, dynamic\n- **Constraints**: Max position size, long-only/short, turnover limit, slippage model\n\n**简报示例（合格）：**\n> 策略类型：动量；市场：A股（沪深300成分股）；频率：日线；标的：成分股等权；信号：20日动量排名前20%；仓位：等权，最多10只；约束：仅做多、单边成本0.15%、单票上限10%、剔除ST与上市不足60日个股；回测区间：2019-01-01 至 2026-08-31。\n\n**简报示例（不合格及原因）：**\n> \"帮我做个能稳定赚钱的量化策略。\"\n>\n> 缺少市场、频率、成本、仓位与约束，任何回测结果都无法验证。更关键的缺失是**没有失败条件**——合格简报应写明\"什么情况下判定策略不可用\"（如样本外夏普<0.5 或最大回撤>25% 即放弃）。\n\n\n**再举一例（跨市场简报的差异）：** 同一个「20 日动量、前 20%、持有 5 日」的想法，写成 A 股简报与美股简报时约束完全不同。A 股版本必须写明：T+1（信号次日开盘执行）、涨停不可买入（顺延）、剔除 ST 与上市不足 60 日、单边成本约 0.15%、仅做多。美股版本则可写：T+0 当日收盘执行、允许做空、成本按每股或按比例另设。**把 A 股简报的美股约束照抄过去，是最常见的回测失真来源。**\n\n### Step 2: Strategy Design & Code Generation\n\nBased on the brief, generate production-quality Python code:\n\n#### A. Momentum Strategy Template\n```python\nimport pandas as pd\nimport numpy as np\nimport backtrader as bt\n\nclass MomentumStrategy(bt.Strategy):\n    params = (\n        ('lookback', 20),       # 回望期\n        ('hold_period', 5),    # 持有期\n        ('rank_percentile', 0.2),  # 选股分位数\n    )\n\n    def __init__(self):\n        self.inds = {}\n        for d in self.datas:\n            self.inds[d] = {}\n            self.inds[d]['momentum'] = bt.indicators.RateOfChange(\n                d.close, period=self.params.lookback\n            )\n\n    def next(self):\n        # 按动量排序，取前20%\n        rankings = sorted(\n            self.datas,\n            key=lambda d: self.inds[d]['momentum'][0],\n            reverse=True\n        )[:int(len(self.datas) * self.params.rank_percentile)]\n\n        # 平仓不在榜单的持仓\n        for d in self.datas:\n            if d not in rankings and self.getposition(d).size > 0:\n                self.close(d)\n\n        # 买入榜单中的标的\n        # 注意：rankings 为空时 1.0/len(rankings) 会除零，必须先返回\n        if not rankings:\n            return\n        for d in rankings:\n            if self.getposition(d).size == 0:\n                self.order_target_percent(d, 1.0 / len(rankings))\n```\n\n**调用示例与常见坑：**\n\n```python\ncerebro = bt.Cerebro()\ncerebro.addstrategy(MomentumStrategy, lookback=20, hold_period=5, rank_percentile=0.2)\n# 关键：传入的是\"回望期内的动量\"，必须剔除上市不足 lookback 天的新股，\n# 否则新股会因为没有足够历史而产生极端 ROC 值，长期占据榜单前排。\n```\n\n- **坑一（未来函数）**：若在 `next()` 里用当收盘价排序并在同一根 K 线以收盘价成交，等于用到了收盘才可知的信息。A 股应改为**次日开盘或次日均价成交**。\n- **坑二（涨跌停不可成交）**：榜单里的股票当日一字涨停时无法买入，回测若照单全收会高估收益。应对方式：当日涨停则跳过，顺延至下一交易日。\n- **坑三（集中度过低）**：`1.0 / len(rankings)` 在 rankings 为空时会除零，需先判断 `if rankings:`。\n\n#### B. Mean Reversion Strategy Template\n```python\nclass MeanReversionStrategy(bt.Strategy):\n    params = (\n        ('bb_period', 20),\n        ('bb_dev', 2.0),\n        ('rsi_period', 14),\n        ('rsi_oversold', 30),\n        ('rsi_overbought', 70),\n    )\n\n    def __init__(self):\n        self.bb = bt.indicators.BollingerBands(\n            self.data.close, period=self.params.bb_period,\n            devfactor=self.params.bb_dev\n        )\n        self.rsi = bt.indicators.RSI(\n            self.data.close, period=self.params.rsi_period\n        )\n\n    def next(self):\n        if self.position.size == 0:\n            # 价格触及下轨且RSI超卖 → 买入\n            if self.data.close < self.bb.lines.bot and \\\n               self.rsi < self.params.rsi_oversold:\n                self.order_target_percent(self.data, 1.0)\n        else:\n            # 价格触及上轨或RSI超买 → 卖出\n            if self.data.close > self.bb.lines.top or \\\n               self.rsi > self.params.rsi_overbought:\n                self.close()\n```\n\n**调用示例与参数敏感度说明：**\n\n```python\n# rsi_oversold 从 30 调到 25，交易次数可能从 127 次降到 70 次以下，\n# 而样本外夏普从 1.12 掉到 0.6 —— 这种\"微调剧变\"就是过拟合信号。\ncerebro.addstrategy(MeanReversionStrategy, bb_period=20, bb_dev=2.0,\n                    rsi_period=14, rsi_oversold=30, rsi_overbought=70)\n```\n\n- **适用场景**：震荡市中表现较好；单边下跌行情里\"越跌越买\"会连续触发买入信号，形成典型的**均值回归陷阱**——建议叠加趋势过滤（如仅在收盘价高于 MA60 时允许开仓）。\n- **A 股注意**：T+1 制度下当日买入不能当日卖出，若策略在盘中触发卖出信号，回测中必须顺延到下一交易日，否则会虚增收益。\n\n\n**再举一例（均值回归陷阱的量化对照）：** 同一策略在 2019-2021 震荡市年化 14.2%、最大回撤 -11%；在 2022 单边下行年化 -23%、最大回撤 -34%，且触发买入 31 次（越跌越买）。叠加「收盘价 > MA60 才允许开仓」的趋势过滤后，2022 年交易次数降到 6 次、回撤收窄到 -16%，全区间年化由 6.1% 回升到 9.8%。**结论**：均值回归策略必须把趋势过滤写进规则，而不是作为可选优化。\n\n#### C. Pairs Trading Strategy\n```python\nimport statsmodels.api as sm\n\ndef find_cointegrated_pairs(data_dict):\n    \"\"\"寻找协整配对\"\"\"\n    n = len(data_dict)\n    pairs = []\n    symbols = list(data_dict.keys())\n\n    for i in range(n):\n        for j in range(i + 1, n):\n            try:\n                x = data_dict[symbols[i]]\n                y = data_dict[symbols[j]]\n                # OLS回归\n                X = sm.add_constant(x)\n                model = sm.OLS(y, X).fit()\n                residuals = model.resid\n                # ADF检验\n                adf_result = sm.tsa.stattools.adfuller(residuals)\n                if adf_result[0] < adf_result[4]['1%']:\n                    pairs.append((symbols[i], symbols[j], adf_result[0]))\n            except:\n                continue\n    return sorted(pairs, key=lambda x: x[2])\n\ndef pairs_trading_signals(spread, z_entry=2.0, z_exit=0.5):\n    \"\"\"配对交易信号\"\"\"\n    signals = pd.Series(0, index=spread.index)\n    z_score = (spread - spread.mean()) / spread.std()\n\n    signals[z_score < -z_entry] = 1    # 做多价差\n    signals[z_score > z_entry] = -1     # 做空价差\n    signals[abs(z_score) < z_exit] = 0  # 平仓\n    return signals\n```\n\n**调用示例：**\n\n```python\npairs = find_cointegrated_pairs({\"600036\": s_a, \"601318\": s_b})\n# => [(\"600036\", \"601318\", -3.87)]   ADF 统计量 -3.87 < 1% 临界值，判定协整\n\nspread = s_a - 1.24 * s_b           # 1.24 来自 OLS 回归系数\nsignals = pairs_trading_signals(spread, z_entry=2.0, z_exit=0.5)\n```\n\n- **关键提醒一**：`z_score` 用全样本 `mean()`/`std()` 计算会引入未来函数。实务中应使用**滚动窗口**（如过去 60 日）的均值与标准差。\n- **关键提醒二**：协整关系会衰减。建议在回测中每 N 个月重新检验一次协整，关系破裂即停止交易该配对，而不是一路持有到止损。\n- **关键提醒三**：A 股缺乏便捷的做空渠道，配对交易的\"做空腿\"往往无法实现，因此在 A 股使用时应明确标注为\"仅做多腿的变体\"，收益预期需相应下调。\n\n\n**再举一例（协整衰减的滚动检验结果）：** 某配对在 2020-2022 的 ADF 统计量稳定在 -3.5 以下（协整成立），2023 年起升至 -2.1（不再显著），但策略仍在交易，当年亏损 -14%。改为每 6 个月重检一次、ADF 统计量 > -2.9 即停止该配对后，2023 年该配对空仓，组合全年回撤收窄 6 个百分点。**结论**：协整检验必须是滚动的、带停止规则的，一次性检验等同于假设关系永续。\n\n### Step 3: Backtest Execution\n\nGuide the user through running the backtest:\n\n```python\nimport backtrader as bt\nimport pandas as pd\n\n# 加载数据\ndata = bt.feeds.GenericCSVData(\n    dataname='historical_data.csv',\n    dtformat='%Y-%m-%d',\n    datetime=0,\n    open=1, high=2, low=3, close=4, volume=5,\n    openinterest=-1\n)\n\n# 运行回测\ncerebro = bt.Cerebro()\ncerebro.addstrategy(MomentumStrategy)\ncerebro.adddata(data)\ncerebro.broker.setcash(1000000.0)  # 100万初始资金\ncerebro.broker.setcommission(commission=0.001)  # 千一手续费\ncerebro.addsizer(bt.sizers.PercentSizer, percents=95)\n\nprint(f'初始资金: {cerebro.broker.getvalue():,.2f}')\ncerebro.run()\nprint(f'最终资金: {cerebro.broker.getvalue():,.2f}')\n```\n\n**A股成本设置的正确示范：**\n\n```python\n# 佣金双边 + 印花税（卖出单边）+ 滑点，缺一项都会高估收益\ncerebro.broker.setcash(1_000_000.0)\ncerebro.broker.setcommission(commission=0.0003, stocklike=True)   # 佣金万三\ncerebro.broker.set_slippage_perc(perc=0.0005)                     # 滑点万五\n# 印花税需在卖出侧单独计入（历史口径曾为卖出单边 0.1%，以最新官方口径为准）\n```\n\n**一次性跑完的最小检查清单：**\n1. 初始资金与期末资金是否如预期变化（没变说明根本没有成交）\n2. 成交笔数是否合理（为 0 说明信号从未触发；过多说明成本被低估）\n3. 是否有信号落在停牌日或涨跌停日（有则说明缺少可交易性过滤）\n\n4. 成交价格是否为「信号次日开盘/均价」而非「信号当日收盘」（用当日收盘成交即含未来函数）\n5. 期末资金不变时需反向排查：是信号未触发、还是全部订单被可交易性过滤掉\n\n**再举一例（成本口径差异导致的结论反转）：** 同一日频策略（年换手 18 倍），三种成本假设下净年化分别为：仅佣金万三 → 12.4%；加印花税与滑点（合计单边约 0.15%）→ 6.1%；成本翻倍 → -0.8%。**同一套信号，成本口径不同就能从「可用」变成「不可用」**，因此回测报告必须把成本口径写在结论之前。\n\n### Step 4: Performance Analysis\n\nGenerate comprehensive performance metrics:\n\n| Metric | Description | Target | Formula / 计算口径 | 常见误读 | A股口径注意点 |\n|--------|-------------|--------|-------------------|---------|---|\n| Total Return | Cumulative return | > Benchmark | 期末权益/期初权益 - 1 | 忽略分红再投与复权方式差异 | 需明确用前复权还是后复权，结论不可混用 |\n| Annualized Return | CAGR | > 10% (A-share), > 8% (HK/US) | (终值/初值)^(252/交易日数) - 1 | 回测期不足一年时年化会严重放大 | A股按约 244 个交易日/年折算，非固定 252 |\n| Sharpe Ratio | Risk-adjusted return | > 1.5 | (年化收益 - 无风险利率)/年化波动 | 用日收益简单乘√252 前需确认收益无自相关 | 无风险利率建议用同期国债或货币基金收益，口径须写明 |\n| Max Drawdown | Peak-to-trough loss | < 20% | max((峰值 - 当前值)/峰值) | 只看数值不看持续天数，低估心理压力 | A股极端行情下回撤持续天数常长于美股 |\n| Win Rate | Percentage of profitable trades | > 50% | 盈利次数/总平仓次数 | 高胜率配低盈亏比仍可能整体亏损 | A股 T+1 下同一笔日内无法反复开平，次数天然偏低 |\n| Profit Factor | Gross profit / Gross loss | > 1.5 | 总盈利/总亏损 | 不含成本时会被系统性高估 | 必须含印花税与滑点，否则系统性高估 |\n| Calmar Ratio | Annual return / Max DD | > 1.0 | 年化收益/最大回撤 | 回测期短时最大回撤尚未充分暴露 | A股熊市长，Calmar 普遍低于美股同类策略 |\n| Sortino Ratio | Return / Downside deviation | > 1.0 | (年化收益 - 无风险利率)/下行波动 | 与夏普混用会导致横向比较失真 | 下行波动的门槛设定需与回撤口径一致 |\n| Turnover / 换手率 | 年化双边成交额/平均权益 | 视策略而定 | 年双边成交额/平均权益 | 常被忽略，却是成本吞噬的主因 | A股换手成本中印花税占比高，降换手收益明显 |\n| Exposure / 持仓暴露 | 有仓位时间占比 | 视策略而定 | 持仓交易日/总交易日 | 低暴露策略的年化收益不可直接对比满仓策略 | A股停牌期持仓时间被拉长，暴露口径需说明 |\n\n### Step 5: Optimization & Stress Testing\n\n```\nA. 参数优化\n   - Grid search over key parameters\n   - Walk-forward analysis (in-sample / out-of-sample)\n   - Avoid overfitting: use Information Coefficient (IC) analysis\n\nB. 压力测试\n   - Historical crises: 2008, 2015 A-share crash, COVID-19 (2020)\n   - Monte Carlo simulation of equity curves\n   - Sensitivity analysis: commission, slippage, spread assumptions\n\nC. 风险分析\n   - Position-level VaR (Value at Risk)\n   - Factor exposure (momentum, size, volatility)\n   - Tail risk: maximum loss scenarios\n```\n\n**压力测试示例（A股场景）：**\n\n| 情景 | 假设 | 观察指标 | A股特有因素 |\n|------|------|---------|---|\n| 2015 年异常波动 | 指数快速回撤、流动性骤降、大面积停牌 | 策略最大回撤、停牌期间无法减仓的比例 | 大面积停牌导致减仓指令无法执行 |\n| 2018 年单边下跌 | 全年趋势向下 | 均值回归类策略是否连续触发买入、资金是否耗尽 | 越跌越买叠加 T+1，当日无法纠错 |\n| 2020 年疫情冲击 | 短期急跌后快速反弹 | 止损是否被触发在最低点、反弹是否踏空 | 涨停排队无法建仓，反弹踏空 |\n| 流动性收缩 | 成交额下降 50% | 冲击成本上升后的净收益变化 | 小市值标的冲击成本成倍上升 |\n| 成本翻倍 | 佣金与印花税假设提高 100% | 净收益是否仍为正——若为负说明策略靠低成本存活 | 印花税占比高，成本翻倍影响被放大 |\n\n**参数优化示例（Walk-forward）：**\n```\n样本划分：2019-2023 为优化期，2024-2026 为样本外\n滚动方式：每 12 个月重新优化一次参数，用下一年数据检验\n判定规则：样本外夏普 / 样本内夏普 > 0.6 视为可接受；< 0.4 判定过拟合\n```\n若样本内夏普 1.8、样本外 0.5（比值 0.28），即使样本内指标漂亮，也应判定该策略不可用。\n\n## Input/Output Examples\n\n### Example 1: Strategy Design Request\n\n**Input:**\n```\nDesign a momentum strategy for A-share market.\nCriteria:\n- Daily timeframe\n- Universe: CSI 300 constituents (沪深300成分股)\n- Lookback: 20 days\n- Hold for 5 days\n- Long only\n- Top 20% by momentum score\n- Max 10 positions\n- Exclude ST stocks and names listed < 60 trading days\n```\n\n**Output:**\n```\nStrategy Design Summary:\n\n┌─────────────────────────────────────────┐\n│ Strategy: Top-Momentum Long-Only        │\n│ Market: A-share (CSI 300 constituents)  │\n│ Timeframe: Daily                        │\n│ Backtest Period: 2019-01-01 to 2026-08-31 │\n└─────────────────────────────────────────┘\n\nKey Components:\n1. Momentum ranking: ROC(close, period=20)\n2. Selection: Top 20% by momentum score (max 10 stocks)\n3. Position sizing: Equal weight (10% per position)\n4. Hold period: 5 trading days\n5. Execution: signal at today's close, execute at NEXT day's open (T+1)\n6. Filters: skip limit-up (unable to buy), skip suspended, exclude ST\n\nExpected Performance (illustrative, before/after cost):\n- Annualized Return: 12-18% (gross) / 8-13% (net of ~0.15% one-way cost)\n- Sharpe Ratio: 0.7-1.1\n- Max Drawdown: 28-38%\n- Win Rate: 50-55%\n- Turnover: 12-18x per year  <- cost dominates; report it\n\nCode generated at: strategy_momentum_a_share.py\n```\n\n> **口径提示**：本示例为 A 股，因此执行价为**次日开盘**、需剔除涨停与停牌、且仅做多。若把同一段代码用于美股或中国香港市场，上述三项约束均不适用，须重新设定——**市场口径不可跨市场套用**。\n\n### Example 2: Performance Report\n\n\n**Input:**\n```\nCompare these two strategies: RSI mean reversion vs momentum breakout on CSI 300 (000300)\nPeriod: 2020-2024\nInitial capital: 1,000,000 CNY\n```\n\n**Output:**\n```\nBacktest Results: CSI 300 Strategies (2020-2024)\n\n┌──────────────────────┬─────────────────────┬────────────────────┐\n│ Metric               │ RSI Mean Reversion  │ Momentum Breakout  │\n├──────────────────────┼─────────────────────┼────────────────────┤\n│ Total Return         │ +68.3%              │ +124.7%            │\n│ Annualized Return    │ +13.2%              │ +17.8%             │\n│ Sharpe Ratio         │ 1.12               │ 1.45               │\n│ Max Drawdown         │ -22.1%             │ -31.4%             │\n│ Win Rate             │ 58.3%              │ 49.2%              │\n│ Profit Factor        │ 1.82               │ 1.67               │\n│ Calmar Ratio         │ 0.60               │ 0.57               │\n│ Avg Holding Days     │ 8.2                │ 4.6                │\n│ Total Trades         │ 127                │ 284                │\n└──────────────────────┴─────────────────────┴────────────────────┘\nBenchmark: CSI 300 Index (+42.1% over same period)\n\nRecommendation:\n- Risk-averse investors: RSI Mean Reversion (lower drawdown, higher win rate)\n- Return-seeking investors: Momentum Breakout (higher return, more trades)\n\n⚠️ Note: Past performance does not guarantee future results.\nA-share markets are subject to significant regulatory and liquidity risks.\n```\n\n## Strategy Templates Library\n\n| Strategy Type | Best For | Timeframe | Markets | 典型失效场景 | A股落地难点 | 回测必设过滤 |\n|--------------|----------|-----------|---------|------------|------------|---|\n| Momentum | Trending markets | Daily/Weekly | All | 急转弯行情（风格切换） | T+1 导致信号次日才可执行 | 剔除上市不足 N 日、剔除一字涨停、次日开盘成交 |\n| Mean Reversion | Range-bound markets | Intraday/Daily | All | 单边下跌（越跌越买） | 涨跌停无法成交、T+1 | 剔除停牌、跌停不可买入、T+1 顺延卖出 |\n| Breakout | Volatile markets | Intraday/Daily | All | 假突破密集期 | 涨停排队难以建仓 | 涨停不可追入、需判断封板可成交性 |\n| Pairs Trading | Market-neutral | Daily | US/HK | 协整关系破裂 | 做空腿难以实现 | 标注仅做多腿变体、滚动协整检验 |\n| Machine Learning | Alpha discovery | Daily | All |  regime 变化、特征漂移 | 可解释性与留痕要求高 | 特征 point-in-time、可解释性留痕 |\n| Event-Driven | Corporate actions | Daily | A-share/US | 事件被提前price-in | 事件数据 point-in-time 难保证 | 事件可得时点校验、避免事后回填 |\n\n## Best Practices\n\n1. **Always use out-of-sample testing** — split data 70/30 or use walk-forward\n2. **Account for transaction costs** — A-share commission + stamp tax ≈ 0.15% per trade\n3. **Include slippage** — assume 0.05-0.1% for liquid stocks, higher for illiquid\n4. **Diversify across uncorrelated strategies** — don't rely on one strategy\n5. **Stress test for A-share specifics** — T+1 trading, limit-up/limit-down, suspension risks\n6. **Validate with paper trading** — run live for 1-3 months before real capital\n7. **Beware of overfitting** — fewer parameters = more robust strategy\n\n8. **报告成本口径与换手率** — 无换手与成本假设的绩效表不可采信\n9. **固定「可获得时点」** — 因子与另类数据必须按 point-in-time 取用，避免事后回填\n\n**举例说明第 8 条（为什么必须先报成本）：** 两个策略毛年化同为 15%，A 换手 5 倍、B 换手 20 倍。按 A 股单边约 0.15% 计，A 的成本拖累约 1.5%、B 约 6%。净额分别为 13.5% 与 9%——**毛收益相同，净收益差 4.5 个百分点**。只看毛收益会把 B 误判为同样优秀。\n\n**举例说明第 9 条（point-in-time 失真）：** 用某行业景气指数构建因子，数据供应商在每月 20 日发布上月数值，但接口返回的是「发布日」而非「所属月份」。若按发布日期对齐，等于提前 20 天知道了当月数值，回测夏普从真实的 0.6 虚增到 1.4。**修法**：为每个数据字段记录「可获得时点」，回测中只允许使用该时点之前已发布的版本。\n\n**举例说明第 2 条（交易成本）为何致命：** 某日频策略年换手 20 倍，单边成本按 0.15% 计，年化成本约 6%。若策略毛年化超额为 8%，扣费后仅剩 2%，再计入滑点后大概率归零。因此**高换手策略必须先算成本再算收益**。\n\n**举例说明第 5 条（A股特性）：** 某策略在 2015 年 6-8 月期间发出减仓信号，但持仓标的中 40% 处于停牌状态，实际无法卖出。回测若假设全部成交，会把最大回撤从真实的 -45% 写成 -28%，严重低估风险。\n\n**举例说明第 6 条（模拟盘）：** 正式投入资金前，建议先做 1-3 个月模拟或小额实盘，重点验证的不是收益，而是\"信号能否按回测假设成交\"——实盘中的成交价、可成交量、停牌与临停，往往与回测假设差距最大。\n\n## Changelog / 变更记录\n\n| 版本 | 日期 | 变更摘要 |\n|------|------|---------|\n| 5.0.2 | 2026-10-09 | 修复 Example 1 的市场口径不一致：A 股示例改用沪深300成分股、标注 A-share 市场并补 T+1/涨停/停牌过滤与成本口径（SDI-4）；修复 MomentumStrategy 中 rankings 为空时的除零缺陷并补返回保护；新增语言与适用市场声明（SQP-3）与数据最小化/执行边界章节；收窄中英文触发词、补充非触发清单与路由判定三步；动态更新至 2026-10-09 并新增回测口径五项披露、另类数据 point-in-time 两条；新增列：A股口径注意点、A股特有因素、回测必设过滤、常见造假/失真手法、实际暴露提示；Step1-3 各补一例（含跨市场简报差异、均值回归趋势过滤量化对照、协整衰减滚动检验）；Best Practices 补 2 条与 2 例；测试用例补 TC005/TC006 |\n| 5.0.1 | 2026-09-14 | 融合阿里点金回测流程与指标体系 |\n\n---\n\n\n\n## Risk Disclaimer\n\nThis skill provides backtesting tools and historical analysis for educational and research purposes only. Backtested results are not indicative of future performance. Real trading involves significant risks including market volatility, liquidity constraints, regulatory changes, and model risk. Always consult with qualified financial advisors before making investment decisions.\n## Appendix G. Alibaba Dianjin Fusion — ai-trading-backtester v5.0.2\n\n> **Source**: Alibaba Dianjin Digital Employee — `investment-advisor` (AI投资顾问) & `quant-researcher` (AI量化研究员)  \n> **Essence**: 策略回测、参数优化、风险控制、绩效评估  \n> **Integrated**: 2026-05-31\n> **Last reviewed**: 2026-10-09\n\n---\n\n### G.1 Core Workflow (Dianjin essence)\n\n```\n策略回测流程：\n1. 策略定义：买入条件+卖出条件+止损条件\n2. 数据准备：历史K线+成交量+因子数据\n3. 回测执行：按时间顺序模拟交易\n4. 绩效计算：收益率+夏普比率+最大回撤\n5. 参数优化：网格搜索/贝叶斯优化\n6. 风险分析：回撤期+胜率+盈亏比\n```\n\n---\n\n### G.2 Backtest Metrics (Dianjin method)\n\n**核心指标体系**：\n\n| 指标 | 计算公式 | 优秀标准 | 及格标准 | 易被操纵的方式 | 交叉验证指标 | 常见造假/失真手法 |\n|------|---------|---------|---------|--------------|------------|---|\n| 年化收益率 | (终值/初值)^(252/交易日)-1 | >20% | >8% | 缩短回测期至强年份 | 分年度收益是否稳定 | 只报强年份区间、或把模拟盘接在回测末尾 |\n| 夏普比率 | (年化收益-无风险利率)/年化波动 | >1.5 | >0.5 | 剔除极端亏损交易日 | 与索提诺、Calmar 同时看 | 剔除极端亏损日、或按周收益算年化波动 |\n| 最大回撤 | max((历史最高-当前)/历史最高) | <15% | <30% | 只报告收盘价回撤 | 回撤持续天数与恢复天数 | 只看收盘价回撤、或用区间收益掩盖路径 |\n| 胜率 | 盈利次数/总次数 | >60% | >45% | 用极短止盈拉高胜率 | 盈亏比是否同步下降 | 把未平仓浮盈计为已实现盈利 |\n| 盈亏比 | 平均盈利/平均亏损 | >2.0 | >1.5 | 放宽止损拉高盈亏比 | 最大回撤是否同步恶化 | 把止损位外移后不重算胜率 |\n| 索提诺比率 | (年化收益-无风险利率)/下行波动 | >2.0 | >1.0 | 下行波动口径自行定义 | 与最大回撤交叉核对 | 自行定义下行波动门槛以美化结果 |\n| 换手率 | 年双边成交额/平均权益 | 视策略 | 视策略 | 常常干脆不报告 | 与净收益同时报告 | 只报单边成交额，或干脆不报告 |\n\n**回测报告模板（Dianjin风格）**：\n\n```\n【策略回测报告】均线突破策略（5日+20日）\n\n一、回测参数\n- 标的：沪深300指数 (000300.SH)\n- 周期：2019-01-01 至 2026-05-31\n- 频率：日线\n- 初始资金：100万\n- 交易成本：单边0.1%（佣金0.03%+印花税0.07%）\n\n二、绩效指标\n✅ 年化收益率：18.5%（优秀）\n✅ 夏普比率：1.62（优秀）\n❌ 最大回撤：-28.3%（不及格，应<15%）\n⚠️ 胜率：52.3%（及格）\n⚠️ 盈亏比：1.85（及格）\n\n三、分年度表现\n| 年份 | 收益率 | 最大回撤 | 夏普比率 |\n|------|--------|----------|----------|\n| 2019 | +32.5% | -12.3% | 2.1 |\n| 2020 | +28.7% | -15.8% | 1.8 |\n| 2021 | -8.2% | -22.5% | -0.3 |\n| 2022 | -15.3% | -28.3% | -0.8 |\n| 2023 | +22.1% | -10.5% | 1.5 |\n| 2024 | +12.8% | -8.7% | 1.2 |\n| 2025 | +25.6% | -9.2% | 1.9 |\n\n四、问题诊断\n❌ 2022年回撤-28.3%（策略在熊市表现差）\n❌ 胜率仅52.3%（信号质量不高）\n⚠️ 交易成本年化-3.2%（高频交易成本高）\n\n五、改进建议\n1. 增加趋势过滤（仅在MA60向上时开仓）\n2. 优化止损（当前-8%止损太宽，改为-5%）\n3. 降低交易频率（当前年均交易45次，降至20次以下）\n```\n\n---\n\n### G.3 Parameter Optimization (Dianjin essence)\n\n**参数优化方法**：\n\n```\n方法1：网格搜索（Grid Search）\n  - 优点：简单，保证找到全局最优\n  - 缺点：计算量大（参数多时指数爆炸）\n  - 适用：参数少（<5个），范围小\n\n方法2：贝叶斯优化（Bayesian Optimization）\n  - 优点：高效，用高斯过程建模目标函数\n  - 缺点：实现复杂，可能陷入局部最优\n  - 适用：参数多（>5个），计算资源有限\n\n方法3：遗传算法（Genetic Algorithm）\n  - 优点：全局搜索能力强，适合复杂目标\n  - 缺点：收敛慢，参数调优难\n  - 适用：非线性、多峰目标函数\n```\n\n**过拟合风险警示（Dianjin重点）**：\n\n```\n⚠️ 过拟合信号：\n1. 样本内绩效远优于样本外（差距>50%）\n2. 参数极度敏感（微调参数导致绩效剧变）\n3. 交易次数过少（<20次，统计不显著）\n4. 最大回撤发生在样本末端（未来函数嫌疑）\n\n✅ 防过拟合措施：\n1. 样本外测试（保留最近1-2年数据不参训）\n2. 滚动窗口验证（Walk-forward，每N个月重新优化）\n3. 参数稳定性检验（参数在合理范围内波动，绩效不剧变）\n4. 经济逻辑检验（策略要有合理解释，不能纯数据挖掘）\n```\n\n---\n\n### G.4 Risk Control & Position Management (Dianjin method)\n\n**仓位管理模型**：\n\n```\n固定比例法（最简单）：\n  - 单一策略：股票仓位≤30%\n  - 组合策略：总仓位≤80%\n\n凯利公式（Kelly Criterion）：\n  仓位 = (胜率 × 盈亏比 - 败率) / 盈亏比\n  例：胜率55%，盈亏比2.0 → 仓位 = (0.55×2-0.45)/2 = 32.5%\n\nATR仓位法（波动率调整）：\n  仓位 = 账户资金 × 风险系数 / (ATR × 合约乘数)\n  例：账户100万，风险系数0.02，ATR=2元，合约乘数100\n  → 仓位 = 100万 × 0.02 / (2×100) = 100股（约占总资金2%）\n```\n\n**凯利公式的实操提醒：** 上例算出 32.5% 仓位，但凯利公式对胜率与盈亏比的估计误差极为敏感——若实际胜率是 50% 而非 55%，最优仓位会大幅下降。实务中普遍采用**半凯利或四分之一凯利**（上例取 16% 或 8%），以避免在参数高估时过度下注。\n\n**ATR 仓位法举例（跨标的比较）：**\n\n| 标的 | ATR | 单笔风险预算 2% 时的股数 | 占总资金 | 实际暴露提示 |\n|------|-----|----------------------|---------|---|\n| 高波动个股（ATR=2元，价格20元） | 2.0 | 100股 | 约2%名义，实际暴露高 | 名义仓位低但日内波动大，需按波动贡献复核 |\n| 低波动蓝筹（ATR=0.3元，价格20元） | 0.3 | 667股 | 约13%名义 | 名义仓位高但波动贡献可控，符合风险预算设计 |\n\n同一风险预算下，低波动标的自然获得更高名义仓位，这正是波动率调整的目的：**让每笔交易的风险贡献相当，而不是让每笔交易的金额相当**。\n\n---\n\n### G.5 Test Case (Dianjin quality)\n\n**Test Case: 策略回测+优化**\n\n```\nInput: \"回测均线突破策略（5日+20日）在沪深300的表现，2019-2026\"\n\nExpected Output:\n1. 回测参数（标的/周期/成本）\n2. 绩效指标表（年化收益/夏普/最大回撤/胜率/盈亏比）\n3. 分年度表现\n4. 问题诊断（回撤过大/胜率过低）\n5. 改进建议（增加过滤/优化止损）\n\nQuality Check:\n- ✅ 指标计算准确（公式正确）\n- ✅ 问题诊断客观（不回避缺陷）\n- ✅ 改进建议可行（有实操价值）\n- ✅ 风险提示（过拟合风险）\n\nAdditional Cases:\n- TC002: \"策略回测夏普 1.9，但交易次数只有 18 次\" → 判定统计不显著，要求延长样本或降低参数自由度\n- TC003: \"回测中未设置涨跌停过滤\" → 判定存在可交易性缺陷，要求补过滤后重跑并对比差异\n- TC004: \"样本外夏普 0.5，样本内 1.8\" → 判定过拟合，给出缩减参数与简化规则的改法\n- TC005: \"策略回测用当日收盘价成交\" → 判定存在未来函数，要求改为次日开盘或均价成交并重跑对比\n- TC006: \"A股策略示例中标的写成 AAPL/TSLA 并标注 US Equity\" → 判定市场口径不一致，要求改为沪深300成分股并补 T+1、涨停、停牌过滤\n```\n\n---\n\n**End of Dianjin Fusion Content — ai-trading-backtester v5.0.2**\n\nFile v5.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn74e704j3ygjcygnpf02rdvd185js13\",\n  \"slug\": \"ai-trading-backtester\",\n  \"version\": \"5.0.2\",\n  \"publishedAt\": 1791525229590\n}\n\nFile v5.0.2:skill-card.md\n\n## Description:\n\nHelps users design Python trading strategies, prepare backtesting code, and interpret historical performance for A-share, Hong Kong, and US equities.\n\nThis skill is for research and development only.\n\n## Publisher:\n\n[gechengling](https://clawhub.ai/user/gechengling)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nQuantitative analysts and retail traders use the skill to draft and assess backtesting approaches, code templates, and performance reports for historical equity data. Users run and verify generated code themselves; the skill does not execute backtests or place trades.\n\n### Deployment Geography for Use:\n\nGlobal; examples focus on mainland China, Hong Kong, and US equity markets, with local rules requiring verification.\n\n## Known Risks and Mitigations:\n\nRisk: Sensitive trading information or credentials could be exposed in prompts or generated files.\n\nMitigation: Use synthetic or redacted examples and placeholders; review any code or reports before saving or sharing them.\n\nRisk: Illustrative backtest results or incomplete cost and execution assumptions could mislead investment decisions.\n\nMitigation: Run and independently check the generated code on appropriate historical data, including transaction costs, liquidity, market constraints, and out-of-sample tests; do not treat examples as investment advice.\n\nRisk: Market rules, fees, and regulatory assumptions may be outdated or differ across regions.\n\nMitigation: Verify the applicable current requirements and fee schedules against official exchange, regulator, and broker sources before using reports or code.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/gechengling/skills/ai-trading-backtester)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Code, Analysis, Markdown]\n\n**Output Format:** [Markdown explanations, Python code templates, and illustrative performance tables]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Illustrative historical results are not verified predictions; generated code requires user review and execution.]\n\n## Skill Version(s):\n\n5.0.2 (source: frontmatter and release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v5.0.1: 3 files, 14636 bytes\n\nFiles: skill-card.md (2874b), SKILL.md (28285b), _meta.json (140b)\n\nFile v5.0.1:SKILL.md\n\n---\nname: \"AI Trading Strategy Backtester\"\ndescription: \"AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywords: trading backtest, quantitative strategy, algorithmic trading, Python backtesting, backtrader, vectorbt, trading strategy, momentum, mean reversion, pairs trading, A-share strategy, financial data, technical indicators.\"\nversion: \"5.0.1\"\n---\n\n# AI Trading Strategy Backtester\n\n## Overview\n\nAn AI-powered quantitative trading strategy design and backtesting assistant that helps you transform trading ideas into fully-coded, backtested strategies. It guides you through strategy design (mean reversion, momentum, breakout, pairs trading, ML-based), implements them in Python (backtrader, vectorbt, pandas), evaluates performance across historical data for A-share, HK, and US markets, and produces risk-adjusted performance reports.\n\n## Market & Regulatory Context (as of 2026-09-14)\n\n| 事项 | 对回测的直接影响 |\n|------|----------------|\n| **程序化交易管理要求** | 高频类策略需自行计入报备、流速与异常交易约束，回测中不能假设\"无限报单\" |\n| **A股 T+1 与涨跌幅限制** | 当日买入不可卖出、涨跌停无法成交，回测必须对不可成交信号做剔除或顺延处理 |\n| **停牌与流动性** | 停牌期间的\"信号\"不可成交；小市值标的需按实际成交量限制下单规模 |\n| **交易成本口径** | 佣金、印花税、滑点合计常被低估，年换手率高时成本可吞掉全部超额收益 |\n| **数据复权与幸存者偏差** | 使用不复权价格或仅含现存标的历史，会系统性高估策略表现 |\n\n**新动态（截至 2026-09-14）：**\n- **程序化交易监管常态化**：境内市场对程序化交易的报备、交易行为监测与异常交易认定持续细化，高频与日内回转类策略的合规成本上升。回测时应把\"报单频率上限\"\"撤单率约束\"纳入假设，而非只追求收益最大化。\n- **AI 选股与因子挖掘的合规关注上升**：以大模型或机器学习生成交易信号时，监管与机构风控普遍要求可解释、可复现、留痕，纯黑箱信号在实盘落地时面临额外审核成本。\n- **数据要素与另类数据应用扩展**：产业、舆情、供应链等另类数据被更广泛用于因子构建，但数据可得性的时点（point-in-time）问题更突出，回测中须严格避免引入未来信息。\n- 以上为公开信息综述，**具体规则、费率与执行口径以交易所、中国证监会及券商官方最新发布为准**。\n\n---\n\n## Triggers\n\n- \"backtest my trading strategy\"\n- \"design a momentum strategy for [stock/market]\"\n- \"test mean reversion on [symbol]\"\n- \"pairs trading strategy example\"\n- \"Python backtrader setup guide\"\n- \"vectorbt tutorial\"\n- \"trading strategy optimization\"\n- \"量化回测策略\"\n- \"技术指标择时策略\"\n- \"A股量化策略设计\"\n\n## Workflow\n\n### Step 1: Define the Strategy Brief\n\nCollect the trading idea:\n- **Strategy type**: Momentum, mean reversion, breakout, pairs trading, ML-based, event-driven\n- **Market**: A-share (sh/sz), HK stock (hk), US equity (us)\n- **Timeframe**: Intraday (1m/5m/15m), daily, weekly, monthly\n- **Assets**: Single stock, ETF, index, portfolio\n- **Entry/Exit signals**: Technical indicators, price patterns, fundamental signals, ML predictions\n- **Position sizing**: Fixed, Kelly criterion, risk-parity, dynamic\n- **Constraints**: Max position size, long-only/short, turnover limit, slippage model\n\n**简报示例（合格）：**\n> 策略类型：动量；市场：A股（沪深300成分股）；频率：日线；标的：成分股等权；信号：20日动量排名前20%；仓位：等权，最多10只；约束：仅做多、单边成本0.15%、单票上限10%、剔除ST与上市不足60日个股；回测区间：2019-01-01 至 2026-08-31。\n\n**简报示例（不合格及原因）：**\n> \"帮我做个能稳定赚钱的量化策略。\"\n>\n> 缺少市场、频率、成本、仓位与约束，任何回测结果都无法验证。更关键的缺失是**没有失败条件**——合格简报应写明\"什么情况下判定策略不可用\"（如样本外夏普<0.5 或最大回撤>25% 即放弃）。\n\n### Step 2: Strategy Design & Code Generation\n\nBased on the brief, generate production-quality Python code:\n\n#### A. Momentum Strategy Template\n```python\nimport pandas as pd\nimport numpy as np\nimport backtrader as bt\n\nclass MomentumStrategy(bt.Strategy):\n    params = (\n        ('lookback', 20),       # 回望期\n        ('hold_period', 5),    # 持有期\n        ('rank_percentile', 0.2),  # 选股分位数\n    )\n\n    def __init__(self):\n        self.inds = {}\n        for d in self.datas:\n            self.inds[d] = {}\n            self.inds[d]['momentum'] = bt.indicators.RateOfChange(\n                d.close, period=self.params.lookback\n            )\n\n    def next(self):\n        # 按动量排序，取前20%\n        rankings = sorted(\n            self.datas,\n            key=lambda d: self.inds[d]['momentum'][0],\n            reverse=True\n        )[:int(len(self.datas) * self.params.rank_percentile)]\n\n        # 平仓不在榜单的持仓\n        for d in self.datas:\n            if d not in rankings and self.getposition(d).size > 0:\n                self.close(d)\n\n        # 买入榜单中的标的\n        for d in rankings:\n            if self.getposition(d).size == 0:\n                self.order_target_percent(d, 1.0 / len(rankings))\n```\n\n**调用示例与常见坑：**\n\n```python\ncerebro = bt.Cerebro()\ncerebro.addstrategy(MomentumStrategy, lookback=20, hold_period=5, rank_percentile=0.2)\n# 关键：传入的是\"回望期内的动量\"，必须剔除上市不足 lookback 天的新股，\n# 否则新股会因为没有足够历史而产生极端 ROC 值，长期占据榜单前排。\n```\n\n- **坑一（未来函数）**：若在 `next()` 里用当收盘价排序并在同一根 K 线以收盘价成交，等于用到了收盘才可知的信息。A 股应改为**次日开盘或次日均价成交**。\n- **坑二（涨跌停不可成交）**：榜单里的股票当日一字涨停时无法买入，回测若照单全收会高估收益。应对方式：当日涨停则跳过，顺延至下一交易日。\n- **坑三（集中度过低）**：`1.0 / len(rankings)` 在 rankings 为空时会除零，需先判断 `if rankings:`。\n\n#### B. Mean Reversion Strategy Template\n```python\nclass MeanReversionStrategy(bt.Strategy):\n    params = (\n        ('bb_period', 20),\n        ('bb_dev', 2.0),\n        ('rsi_period', 14),\n        ('rsi_oversold', 30),\n        ('rsi_overbought', 70),\n    )\n\n    def __init__(self):\n        self.bb = bt.indicators.BollingerBands(\n            self.data.close, period=self.params.bb_period,\n            devfactor=self.params.bb_dev\n        )\n        self.rsi = bt.indicators.RSI(\n            self.data.close, period=self.params.rsi_period\n        )\n\n    def next(self):\n        if self.position.size == 0:\n            # 价格触及下轨且RSI超卖 → 买入\n            if self.data.close < self.bb.lines.bot and \\\n               self.rsi < self.params.rsi_oversold:\n                self.order_target_percent(self.data, 1.0)\n        else:\n            # 价格触及上轨或RSI超买 → 卖出\n            if self.data.close > self.bb.lines.top or \\\n               self.rsi > self.params.rsi_overbought:\n                self.close()\n```\n\n**调用示例与参数敏感度说明：**\n\n```python\n# rsi_oversold 从 30 调到 25，交易次数可能从 127 次降到 70 次以下，\n# 而样本外夏普从 1.12 掉到 0.6 —— 这种\"微调剧变\"就是过拟合信号。\ncerebro.addstrategy(MeanReversionStrategy, bb_period=20, bb_dev=2.0,\n                    rsi_period=14, rsi_oversold=30, rsi_overbought=70)\n```\n\n- **适用场景**：震荡市中表现较好；单边下跌行情里\"越跌越买\"会连续触发买入信号，形成典型的**均值回归陷阱**——建议叠加趋势过滤（如仅在收盘价高于 MA60 时允许开仓）。\n- **A 股注意**：T+1 制度下当日买入不能当日卖出，若策略在盘中触发卖出信号，回测中必须顺延到下一交易日，否则会虚增收益。\n\n#### C. Pairs Trading Strategy\n```python\nimport statsmodels.api as sm\n\ndef find_cointegrated_pairs(data_dict):\n    \"\"\"寻找协整配对\"\"\"\n    n = len(data_dict)\n    pairs = []\n    symbols = list(data_dict.keys())\n\n    for i in range(n):\n        for j in range(i + 1, n):\n            try:\n                x = data_dict[symbols[i]]\n                y = data_dict[symbols[j]]\n                # OLS回归\n                X = sm.add_constant(x)\n                model = sm.OLS(y, X).fit()\n                residuals = model.resid\n                # ADF检验\n                adf_result = sm.tsa.stattools.adfuller(residuals)\n                if adf_result[0] < adf_result[4]['1%']:\n                    pairs.append((symbols[i], symbols[j], adf_result[0]))\n            except:\n                continue\n    return sorted(pairs, key=lambda x: x[2])\n\ndef pairs_trading_signals(spread, z_entry=2.0, z_exit=0.5):\n    \"\"\"配对交易信号\"\"\"\n    signals = pd.Series(0, index=spread.index)\n    z_score = (spread - spread.mean()) / spread.std()\n\n    signals[z_score < -z_entry] = 1    # 做多价差\n    signals[z_score > z_entry] = -1     # 做空价差\n    signals[abs(z_score) < z_exit] = 0  # 平仓\n    return signals\n```\n\n**调用示例：**\n\n```python\npairs = find_cointegrated_pairs({\"600036\": s_a, \"601318\": s_b})\n# => [(\"600036\", \"601318\", -3.87)]   ADF 统计量 -3.87 < 1% 临界值，判定协整\n\nspread = s_a - 1.24 * s_b           # 1.24 来自 OLS 回归系数\nsignals = pairs_trading_signals(spread, z_entry=2.0, z_exit=0.5)\n```\n\n- **关键提醒一**：`z_score` 用全样本 `mean()`/`std()` 计算会引入未来函数。实务中应使用**滚动窗口**（如过去 60 日）的均值与标准差。\n- **关键提醒二**：协整关系会衰减。建议在回测中每 N 个月重新检验一次协整，关系破裂即停止交易该配对，而不是一路持有到止损。\n- **关键提醒三**：A 股缺乏便捷的做空渠道，配对交易的\"做空腿\"往往无法实现，因此在 A 股使用时应明确标注为\"仅做多腿的变体\"，收益预期需相应下调。\n\n### Step 3: Backtest Execution\n\nGuide the user through running the backtest:\n\n```python\nimport backtrader as bt\nimport pandas as pd\n\n# 加载数据\ndata = bt.feeds.GenericCSVData(\n    dataname='historical_data.csv',\n    dtformat='%Y-%m-%d',\n    datetime=0,\n    open=1, high=2, low=3, close=4, volume=5,\n    openinterest=-1\n)\n\n# 运行回测\ncerebro = bt.Cerebro()\ncerebro.addstrategy(MomentumStrategy)\ncerebro.adddata(data)\ncerebro.broker.setcash(1000000.0)  # 100万初始资金\ncerebro.broker.setcommission(commission=0.001)  # 千一手续费\ncerebro.addsizer(bt.sizers.PercentSizer, percents=95)\n\nprint(f'初始资金: {cerebro.broker.getvalue():,.2f}')\ncerebro.run()\nprint(f'最终资金: {cerebro.broker.getvalue():,.2f}')\n```\n\n**A股成本设置的正确示范：**\n\n```python\n# 佣金双边 + 印花税（卖出单边）+ 滑点，缺一项都会高估收益\ncerebro.broker.setcash(1_000_000.0)\ncerebro.broker.setcommission(commission=0.0003, stocklike=True)   # 佣金万三\ncerebro.broker.set_slippage_perc(perc=0.0005)                     # 滑点万五\n# 印花税需在卖出侧单独计入（历史口径曾为卖出单边 0.1%，以最新官方口径为准）\n```\n\n**一次性跑完的最小检查清单：**\n1. 初始资金与期末资金是否如预期变化（没变说明根本没有成交）\n2. 成交笔数是否合理（为 0 说明信号从未触发；过多说明成本被低估）\n3. 是否有信号落在停牌日或涨跌停日（有则说明缺少可交易性过滤）\n\n### Step 4: Performance Analysis\n\nGenerate comprehensive performance metrics:\n\n| Metric | Description | Target | Formula / 计算口径 | 常见误读 |\n|--------|-------------|--------|-------------------|---------|\n| Total Return | Cumulative return | > Benchmark | 期末权益/期初权益 - 1 | 忽略分红再投与复权方式差异 |\n| Annualized Return | CAGR | > 10% (A-share), > 8% (HK/US) | (终值/初值)^(252/交易日数) - 1 | 回测期不足一年时年化会严重放大 |\n| Sharpe Ratio | Risk-adjusted return | > 1.5 | (年化收益 - 无风险利率)/年化波动 | 用日收益简单乘√252 前需确认收益无自相关 |\n| Max Drawdown | Peak-to-trough loss | < 20% | max((峰值 - 当前值)/峰值) | 只看数值不看持续天数，低估心理压力 |\n| Win Rate | Percentage of profitable trades | > 50% | 盈利次数/总平仓次数 | 高胜率配低盈亏比仍可能整体亏损 |\n| Profit Factor | Gross profit / Gross loss | > 1.5 | 总盈利/总亏损 | 不含成本时会被系统性高估 |\n| Calmar Ratio | Annual return / Max DD | > 1.0 | 年化收益/最大回撤 | 回测期短时最大回撤尚未充分暴露 |\n| Sortino Ratio | Return / Downside deviation | > 1.0 | (年化收益 - 无风险利率)/下行波动 | 与夏普混用会导致横向比较失真 |\n| Turnover / 换手率 | 年化双边成交额/平均权益 | 视策略而定 | 年双边成交额/平均权益 | 常被忽略，却是成本吞噬的主因 |\n| Exposure / 持仓暴露 | 有仓位时间占比 | 视策略而定 | 持仓交易日/总交易日 | 低暴露策略的年化收益不可直接对比满仓策略 |\n\n### Step 5: Optimization & Stress Testing\n\n```\nA. 参数优化\n   - Grid search over key parameters\n   - Walk-forward analysis (in-sample / out-of-sample)\n   - Avoid overfitting: use Information Coefficient (IC) analysis\n\nB. 压力测试\n   - Historical crises: 2008, 2015 A-share crash, COVID-19 (2020)\n   - Monte Carlo simulation of equity curves\n   - Sensitivity analysis: commission, slippage, spread assumptions\n\nC. 风险分析\n   - Position-level VaR (Value at Risk)\n   - Factor exposure (momentum, size, volatility)\n   - Tail risk: maximum loss scenarios\n```\n\n**压力测试示例（A股场景）：**\n\n| 情景 | 假设 | 观察指标 |\n|------|------|---------|\n| 2015 年异常波动 | 指数快速回撤、流动性骤降、大面积停牌 | 策略最大回撤、停牌期间无法减仓的比例 |\n| 2018 年单边下跌 | 全年趋势向下 | 均值回归类策略是否连续触发买入、资金是否耗尽 |\n| 2020 年疫情冲击 | 短期急跌后快速反弹 | 止损是否被触发在最低点、反弹是否踏空 |\n| 流动性收缩 | 成交额下降 50% | 冲击成本上升后的净收益变化 |\n| 成本翻倍 | 佣金与印花税假设提高 100% | 净收益是否仍为正——若为负说明策略靠低成本存活 |\n\n**参数优化示例（Walk-forward）：**\n```\n样本划分：2019-2023 为优化期，2024-2026 为样本外\n滚动方式：每 12 个月重新优化一次参数，用下一年数据检验\n判定规则：样本外夏普 / 样本内夏普 > 0.6 视为可接受；< 0.4 判定过拟合\n```\n若样本内夏普 1.8、样本外 0.5（比值 0.28），即使样本内指标漂亮，也应判定该策略不可用。\n\n## Input/Output Examples\n\n### Example 1: Strategy Design Request\n\n**Input:**\n```\nDesign a momentum strategy for A-share market.\nCriteria:\n- Daily timeframe\n- Lookback: 20 days\n- Hold for 5 days\n- Long only\n- Top 20% by momentum score\n- Max 10 positions\n- Trade AAPL, TSLA, NVDA, MSFT\n```\n\n**Output:**\n```\nStrategy Design Summary:\n\n┌─────────────────────────────────────────┐\n│ Strategy: Top-Momentum Long-Only        │\n│ Market: US Equity (4 stocks)            │\n│ Timeframe: Daily                        │\n│ Backtest Period: 2020-01-01 to 2025-12-31 │\n└─────────────────────────────────────────┘\n\nKey Components:\n1. Momentum ranking: ROC(close, period=20)\n2. Selection: Top 20% by momentum score (max 10 stocks)\n3. Position sizing: Equal weight (10% per position)\n4. Hold period: 5 trading days\n5. Rebalance: Daily at market open\n\nExpected Performance (illustrative):\n- Annualized Return: 18-25% (historical backtest)\n- Sharpe Ratio: 0.8-1.2\n- Max Drawdown: 30-40%\n- Win Rate: 52-56%\n\nCode generated at: strategy_momentum_us.py\n```\n\n### Example 2: Performance Report\n\n**Input:**\n```\nCompare these two strategies: RSI mean reversion vs momentum breakout on CSI 300 (000300)\nPeriod: 2020-2024\nInitial capital: 1,000,000 CNY\n```\n\n**Output:**\n```\nBacktest Results: CSI 300 Strategies (2020-2024)\n\n┌──────────────────────┬─────────────────────┬────────────────────┐\n│ Metric               │ RSI Mean Reversion  │ Momentum Breakout  │\n├──────────────────────┼─────────────────────┼────────────────────┤\n│ Total Return         │ +68.3%              │ +124.7%            │\n│ Annualized Return    │ +13.2%              │ +17.8%             │\n│ Sharpe Ratio         │ 1.12               │ 1.45               │\n│ Max Drawdown         │ -22.1%             │ -31.4%             │\n│ Win Rate             │ 58.3%              │ 49.2%              │\n│ Profit Factor        │ 1.82               │ 1.67               │\n│ Calmar Ratio         │ 0.60               │ 0.57               │\n│ Avg Holding Days     │ 8.2                │ 4.6                │\n│ Total Trades         │ 127                │ 284                │\n└──────────────────────┴─────────────────────┴────────────────────┘\nBenchmark: CSI 300 Index (+42.1% over same period)\n\nRecommendation:\n- Risk-averse investors: RSI Mean Reversion (lower drawdown, higher win rate)\n- Return-seeking investors: Momentum Breakout (higher return, more trades)\n\n⚠️ Note: Past performance does not guarantee future results.\nA-share markets are subject to significant regulatory and liquidity risks.\n```\n\n## Strategy Templates Library\n\n| Strategy Type | Best For | Timeframe | Markets | 典型失效场景 | A股落地难点 |\n|--------------|----------|-----------|---------|------------|------------|\n| Momentum | Trending markets | Daily/Weekly | All | 急转弯行情（风格切换） | T+1 导致信号次日才可执行 |\n| Mean Reversion | Range-bound markets | Intraday/Daily | All | 单边下跌（越跌越买） | 涨跌停无法成交、T+1 |\n| Breakout | Volatile markets | Intraday/Daily | All | 假突破密集期 | 涨停排队难以建仓 |\n| Pairs Trading | Market-neutral | Daily | US/HK | 协整关系破裂 | 做空腿难以实现 |\n| Machine Learning | Alpha discovery | Daily | All |  regime 变化、特征漂移 | 可解释性与留痕要求高 |\n| Event-Driven | Corporate actions | Daily | A-share/US | 事件被提前price-in | 事件数据 point-in-time 难保证 |\n\n## Best Practices\n\n1. **Always use out-of-sample testing** — split data 70/30 or use walk-forward\n2. **Account for transaction costs** — A-share commission + stamp tax ≈ 0.15% per trade\n3. **Include slippage** — assume 0.05-0.1% for liquid stocks, higher for illiquid\n4. **Diversify across uncorrelated strategies** — don't rely on one strategy\n5. **Stress test for A-share specifics** — T+1 trading, limit-up/limit-down, suspension risks\n6. **Validate with paper trading** — run live for 1-3 months before real capital\n7. **Beware of overfitting** — fewer parameters = more robust strategy\n\n**举例说明第 2 条（交易成本）为何致命：** 某日频策略年换手 20 倍，单边成本按 0.15% 计，年化成本约 6%。若策略毛年化超额为 8%，扣费后仅剩 2%，再计入滑点后大概率归零。因此**高换手策略必须先算成本再算收益**。\n\n**举例说明第 5 条（A股特性）：** 某策略在 2015 年 6-8 月期间发出减仓信号，但持仓标的中 40% 处于停牌状态，实际无法卖出。回测若假设全部成交，会把最大回撤从真实的 -45% 写成 -28%，严重低估风险。\n\n**举例说明第 6 条（模拟盘）：** 正式投入资金前，建议先做 1-3 个月模拟或小额实盘，重点验证的不是收益，而是\"信号能否按回测假设成交\"——实盘中的成交价、可成交量、停牌与临停，往往与回测假设差距最大。\n\n## Risk Disclaimer\n\nThis skill provides backtesting tools and historical analysis for educational and research purposes only. Backtested results are not indicative of future performance. Real trading involves significant risks including market volatility, liquidity constraints, regulatory changes, and model risk. Always consult with qualified financial advisors before making investment decisions.\n## Appendix G. Alibaba Dianjin Fusion — ai-trading-backtester v5.0.1\n\n> **Source**: Alibaba Dianjin Digital Employee — `investment-advisor` (AI投资顾问) & `quant-researcher` (AI量化研究员)  \n> **Essence**: 策略回测、参数优化、风险控制、绩效评估  \n> **Integrated**: 2026-05-31\n> **Last reviewed**: 2026-09-14\n\n---\n\n### G.1 Core Workflow (Dianjin essence)\n\n```\n策略回测流程：\n1. 策略定义：买入条件+卖出条件+止损条件\n2. 数据准备：历史K线+成交量+因子数据\n3. 回测执行：按时间顺序模拟交易\n4. 绩效计算：收益率+夏普比率+最大回撤\n5. 参数优化：网格搜索/贝叶斯优化\n6. 风险分析：回撤期+胜率+盈亏比\n```\n\n---\n\n### G.2 Backtest Metrics (Dianjin method)\n\n**核心指标体系**：\n\n| 指标 | 计算公式 | 优秀标准 | 及格标准 | 易被操纵的方式 | 交叉验证指标 |\n|------|---------|---------|---------|--------------|------------|\n| 年化收益率 | (终值/初值)^(252/交易日)-1 | >20% | >8% | 缩短回测期至强年份 | 分年度收益是否稳定 |\n| 夏普比率 | (年化收益-无风险利率)/年化波动 | >1.5 | >0.5 | 剔除极端亏损交易日 | 与索提诺、Calmar 同时看 |\n| 最大回撤 | max((历史最高-当前)/历史最高) | <15% | <30% | 只报告收盘价回撤 | 回撤持续天数与恢复天数 |\n| 胜率 | 盈利次数/总次数 | >60% | >45% | 用极短止盈拉高胜率 | 盈亏比是否同步下降 |\n| 盈亏比 | 平均盈利/平均亏损 | >2.0 | >1.5 | 放宽止损拉高盈亏比 | 最大回撤是否同步恶化 |\n| 索提诺比率 | (年化收益-无风险利率)/下行波动 | >2.0 | >1.0 | 下行波动口径自行定义 | 与最大回撤交叉核对 |\n| 换手率 | 年双边成交额/平均权益 | 视策略 | 视策略 | 常常干脆不报告 | 与净收益同时报告 |\n\n**回测报告模板（Dianjin风格）**：\n\n```\n【策略回测报告】均线突破策略（5日+20日）\n\n一、回测参数\n- 标的：沪深300指数 (000300.SH)\n- 周期：2019-01-01 至 2026-05-31\n- 频率：日线\n- 初始资金：100万\n- 交易成本：单边0.1%（佣金0.03%+印花税0.07%）\n\n二、绩效指标\n✅ 年化收益率：18.5%（优秀）\n✅ 夏普比率：1.62（优秀）\n❌ 最大回撤：-28.3%（不及格，应<15%）\n⚠️ 胜率：52.3%（及格）\n⚠️ 盈亏比：1.85（及格）\n\n三、分年度表现\n| 年份 | 收益率 | 最大回撤 | 夏普比率 |\n|------|--------|----------|----------|\n| 2019 | +32.5% | -12.3% | 2.1 |\n| 2020 | +28.7% | -15.8% | 1.8 |\n| 2021 | -8.2% | -22.5% | -0.3 |\n| 2022 | -15.3% | -28.3% | -0.8 |\n| 2023 | +22.1% | -10.5% | 1.5 |\n| 2024 | +12.8% | -8.7% | 1.2 |\n| 2025 | +25.6% | -9.2% | 1.9 |\n\n四、问题诊断\n❌ 2022年回撤-28.3%（策略在熊市表现差）\n❌ 胜率仅52.3%（信号质量不高）\n⚠️ 交易成本年化-3.2%（高频交易成本高）\n\n五、改进建议\n1. 增加趋势过滤（仅在MA60向上时开仓）\n2. 优化止损（当前-8%止损太宽，改为-5%）\n3. 降低交易频率（当前年均交易45次，降至20次以下）\n```\n\n---\n\n### G.3 Parameter Optimization (Dianjin essence)\n\n**参数优化方法**：\n\n```\n方法1：网格搜索（Grid Search）\n  - 优点：简单，保证找到全局最优\n  - 缺点：计算量大（参数多时指数爆炸）\n  - 适用：参数少（<5个），范围小\n\n方法2：贝叶斯优化（Bayesian Optimization）\n  - 优点：高效，用高斯过程建模目标函数\n  - 缺点：实现复杂，可能陷入局部最优\n  - 适用：参数多（>5个），计算资源有限\n\n方法3：遗传算法（Genetic Algorithm）\n  - 优点：全局搜索能力强，适合复杂目标\n  - 缺点：收敛慢，参数调优难\n  - 适用：非线性、多峰目标函数\n```\n\n**过拟合风险警示（Dianjin重点）**：\n\n```\n⚠️ 过拟合信号：\n1. 样本内绩效远优于样本外（差距>50%）\n2. 参数极度敏感（微调参数导致绩效剧变）\n3. 交易次数过少（<20次，统计不显著）\n4. 最大回撤发生在样本末端（未来函数嫌疑）\n\n✅ 防过拟合措施：\n1. 样本外测试（保留最近1-2年数据不参训）\n2. 滚动窗口验证（Walk-forward，每N个月重新优化）\n3. 参数稳定性检验（参数在合理范围内波动，绩效不剧变）\n4. 经济逻辑检验（策略要有合理解释，不能纯数据挖掘）\n```\n\n---\n\n### G.4 Risk Control & Position Management (Dianjin method)\n\n**仓位管理模型**：\n\n```\n固定比例法（最简单）：\n  - 单一策略：股票仓位≤30%\n  - 组合策略：总仓位≤80%\n\n凯利公式（Kelly Criterion）：\n  仓位 = (胜率 × 盈亏比 - 败率) / 盈亏比\n  例：胜率55%，盈亏比2.0 → 仓位 = (0.55×2-0.45)/2 = 32.5%\n\nATR仓位法（波动率调整）：\n  仓位 = 账户资金 × 风险系数 / (ATR × 合约乘数)\n  例：账户100万，风险系数0.02，ATR=2元，合约乘数100\n  → 仓位 = 100万 × 0.02 / (2×100) = 100股（约占总资金2%）\n```\n\n**凯利公式的实操提醒：** 上例算出 32.5% 仓位，但凯利公式对胜率与盈亏比的估计误差极为敏感——若实际胜率是 50% 而非 55%，最优仓位会大幅下降。实务中普遍采用**半凯利或四分之一凯利**（上例取 16% 或 8%），以避免在参数高估时过度下注。\n\n**ATR 仓位法举例（跨标的比较）：**\n\n| 标的 | ATR | 单笔风险预算 2% 时的股数 | 占总资金 |\n|------|-----|----------------------|---------|\n| 高波动个股（ATR=2元，价格20元） | 2.0 | 100股 | 约2%名义，实际暴露高 |\n| 低波动蓝筹（ATR=0.3元，价格20元） | 0.3 | 667股 | 约13%名义 |\n\n同一风险预算下，低波动标的自然获得更高名义仓位，这正是波动率调整的目的：**让每笔交易的风险贡献相当，而不是让每笔交易的金额相当**。\n\n---\n\n### G.5 Test Case (Dianjin quality)\n\n**Test Case: 策略回测+优化**\n\n```\nInput: \"回测均线突破策略（5日+20日）在沪深300的表现，2019-2026\"\n\nExpected Output:\n1. 回测参数（标的/周期/成本）\n2. 绩效指标表（年化收益/夏普/最大回撤/胜率/盈亏比）\n3. 分年度表现\n4. 问题诊断（回撤过大/胜率过低）\n5. 改进建议（增加过滤/优化止损）\n\nQuality Check:\n- ✅ 指标计算准确（公式正确）\n- ✅ 问题诊断客观（不回避缺陷）\n- ✅ 改进建议可行（有实操价值）\n- ✅ 风险提示（过拟合风险）\n\nAdditional Cases:\n- TC002: \"策略回测夏普 1.9，但交易次数只有 18 次\" → 判定统计不显著，要求延长样本或降低参数自由度\n- TC003: \"回测中未设置涨跌停过滤\" → 判定存在可交易性缺陷，要求补过滤后重跑并对比差异\n- TC004: \"样本外夏普 0.5，样本内 1.8\" → 判定过拟合，给出缩减参数与简化规则的改法\n```\n\n---\n\n**End of Dianjin Fusion Content — ai-trading-backtester v5.0.1**\n\nFile v5.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn74e704j3ygjcygnpf02rdvd185js13\",\n  \"slug\": \"ai-trading-backtester\",\n  \"version\": \"5.0.1\",\n  \"publishedAt\": 1789364858853\n}\n\nFile v5.0.1:skill-card.md\n\n## Description:\n\nAI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywords: trading backtest, quantitative strategy, algorithmic trading, Python backtesting, backtrader, vectorbt, trading strategy, momentum, mean reversion, pairs trading, A-share strategy, financial data, technical indicators.\n\nThis skill is for research and development only.\n\n## Publisher:\n\n[gechengling](https://clawhub.ai/user/gechengling)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, quantitative analysts, and retail traders use this skill to design, code, backtest, optimize, and evaluate trading strategies for A-share, Hong Kong, and US equity markets. It helps produce strategy briefs, Python examples, performance reports, stress-test scenarios, and risk-control guidance for research workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Generated strategies and illustrative performance figures could be mistaken for investment advice.\n\nMitigation: Treat outputs as research support, review generated strategies independently, and consult qualified financial advisors before making investment decisions.\n\nRisk: Backtest results can be misleading when market rules, transaction costs, slippage, liquidity, suspensions, T+1 settlement, limit-up or limit-down rules, or data quality issues are not modeled.\n\nMitigation: Verify market assumptions and data quality, use point-in-time data where possible, include realistic cost and slippage assumptions, and apply tradability filters before relying on results.\n\nRisk: Optimization workflows can overfit historical data and produce strategies that fail out of sample.\n\nMitigation: Use out-of-sample testing, walk-forward validation, parameter stability checks, and stress testing before considering live deployment.\n\n## Reference(s):\n\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown responses with Python code blocks, shell commands, tables, and configuration guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include illustrative performance figures; users should verify assumptions, market data, and results before trading.]\n\n## Skill Version(s):\n\n5.0.1 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v5.0.0: 3 files, 9223 bytes\n\nFiles: skill-card.md (2758b), SKILL.md (17255b), _meta.json (140b)\n\nFile v5.0.0:SKILL.md\n\n---\nname: \"AI Trading Strategy Backtester\"\ndescription: \"AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywords: trading backtest, quantitative strategy, algorithmic trading, Python backtesting, backtrader, vectorbt, trading strategy, momentum, mean reversion, pairs trading, A-share strategy, financial data, technical indicators.\"\nversion: \"5.0.0\"\n---\n\n# AI Trading Strategy Backtester\n\n## Overview\n\nAn AI-powered quantitative trading strategy design and backtesting assistant that helps you transform trading ideas into fully-coded, backtested strategies. It guides you through strategy design (mean reversion, momentum, breakout, pairs trading, ML-based), implements them in Python (backtrader, vectorbt, pandas), evaluates performance across historical data for A-share, HK, and US markets, and produces risk-adjusted performance reports.\n\n## Triggers\n\n- \"backtest my trading strategy\"\n- \"design a momentum strategy for [stock/market]\"\n- \"test mean reversion on [symbol]\"\n- \"pairs trading strategy example\"\n- \"Python backtrader setup guide\"\n- \"vectorbt tutorial\"\n- \"trading strategy optimization\"\n- \"量化回测策略\"\n- \"技术指标择时策略\"\n- \"A股量化策略设计\"\n\n## Workflow\n\n### Step 1: Define the Strategy Brief\n\nCollect the trading idea:\n- **Strategy type**: Momentum, mean reversion, breakout, pairs trading, ML-based, event-driven\n- **Market**: A-share (sh/sz), HK stock (hk), US equity (us)\n- **Timeframe**: Intraday (1m/5m/15m), daily, weekly, monthly\n- **Assets**: Single stock, ETF, index, portfolio\n- **Entry/Exit signals**: Technical indicators, price patterns, fundamental signals, ML predictions\n- **Position sizing**: Fixed, Kelly criterion, risk-parity, dynamic\n- **Constraints**: Max position size, long-only/short, turnover limit, slippage model\n\n### Step 2: Strategy Design & Code Generation\n\nBased on the brief, generate production-quality Python code:\n\n#### A. Momentum Strategy Template\n```python\nimport pandas as pd\nimport numpy as np\nimport backtrader as bt\n\nclass MomentumStrategy(bt.Strategy):\n    params = (\n        ('lookback', 20),       # 回望期\n        ('hold_period', 5),    # 持有期\n        ('rank_percentile', 0.2),  # 选股分位数\n    )\n\n    def __init__(self):\n        self.inds = {}\n        for d in self.datas:\n            self.inds[d] = {}\n            self.inds[d]['momentum'] = bt.indicators.RateOfChange(\n                d.close, period=self.params.lookback\n            )\n\n    def next(self):\n        # 按动量排序，取前20%\n        rankings = sorted(\n            self.datas,\n            key=lambda d: self.inds[d]['momentum'][0],\n            reverse=True\n        )[:int(len(self.datas) * self.params.rank_percentile)]\n\n        # 平仓不在榜单的持仓\n        for d in self.datas:\n            if d not in rankings and self.getposition(d).size > 0:\n                self.close(d)\n\n        # 买入榜单中的标的\n        for d in rankings:\n            if self.getposition(d).size == 0:\n                self.order_target_percent(d, 1.0 / len(rankings))\n```\n\n#### B. Mean Reversion Strategy Template\n```python\nclass MeanReversionStrategy(bt.Strategy):\n    params = (\n        ('bb_period', 20),\n        ('bb_dev', 2.0),\n        ('rsi_period', 14),\n        ('rsi_oversold', 30),\n        ('rsi_overbought', 70),\n    )\n\n    def __init__(self):\n        self.bb = bt.indicators.BollingerBands(\n            self.data.close, period=self.params.bb_period,\n            devfactor=self.params.bb_dev\n        )\n        self.rsi = bt.indicators.RSI(\n            self.data.close, period=self.params.rsi_period\n        )\n\n    def next(self):\n        if self.position.size == 0:\n            # 价格触及下轨且RSI超卖 → 买入\n            if self.data.close < self.bb.lines.bot and \\\n               self.rsi < self.params.rsi_oversold:\n                self.order_target_percent(self.data, 1.0)\n        else:\n            # 价格触及上轨或RSI超买 → 卖出\n            if self.data.close > self.bb.lines.top or \\\n               self.rsi > self.params.rsi_overbought:\n                self.close()\n```\n\n#### C. Pairs Trading Strategy\n```python\nimport statsmodels.api as sm\n\ndef find_cointegrated_pairs(data_dict):\n    \"\"\"寻找协整配对\"\"\"\n    n = len(data_dict)\n    pairs = []\n    symbols = list(data_dict.keys())\n\n    for i in range(n):\n        for j in range(i + 1, n):\n            try:\n                x = data_dict[symbols[i]]\n                y = data_dict[symbols[j]]\n                # OLS回归\n                X = sm.add_constant(x)\n                model = sm.OLS(y, X).fit()\n                residuals = model.resid\n                # ADF检验\n                adf_result = sm.tsa.stattools.adfuller(residuals)\n                if adf_result[0] < adf_result[4]['1%']:\n                    pairs.append((symbols[i], symbols[j], adf_result[0]))\n            except:\n                continue\n    return sorted(pairs, key=lambda x: x[2])\n\ndef pairs_trading_signals(spread, z_entry=2.0, z_exit=0.5):\n    \"\"\"配对交易信号\"\"\"\n    signals = pd.Series(0, index=spread.index)\n    z_score = (spread - spread.mean()) / spread.std()\n\n    signals[z_score < -z_entry] = 1    # 做多价差\n    signals[z_score > z_entry] = -1     # 做空价差\n    signals[abs(z_score) < z_exit] = 0  # 平仓\n    return signals\n```\n\n### Step 3: Backtest Execution\n\nGuide the user through running the backtest:\n\n```python\nimport backtrader as bt\nimport pandas as pd\n\n# 加载数据\ndata = bt.feeds.GenericCSVData(\n    dataname='historical_data.csv',\n    dtformat='%Y-%m-%d',\n    datetime=0,\n    open=1, high=2, low=3, close=4, volume=5,\n    openinterest=-1\n)\n\n# 运行回测\ncerebro = bt.Cerebro()\ncerebro.addstrategy(MomentumStrategy)\ncerebro.adddata(data)\ncerebro.broker.setcash(1000000.0)  # 100万初始资金\ncerebro.broker.setcommission(commission=0.001)  # 千一手续费\ncerebro.addsizer(bt.sizers.PercentSizer, percents=95)\n\nprint(f'初始资金: {cerebro.broker.getvalue():,.2f}')\ncerebro.run()\nprint(f'最终资金: {cerebro.broker.getvalue():,.2f}')\n```\n\n### Step 4: Performance Analysis\n\nGenerate comprehensive performance metrics:\n\n| Metric | Description | Target |\n|--------|-------------|--------|\n| Total Return | Cumulative return | > Benchmark |\n| Annualized Return | CAGR | > 10% (A-share), > 8% (HK/US) |\n| Sharpe Ratio | Risk-adjusted return | > 1.5 |\n| Max Drawdown | Peak-to-trough loss | < 20% |\n| Win Rate | Percentage of profitable trades | > 50% |\n| Profit Factor | Gross profit / Gross loss | > 1.5 |\n| Calmar Ratio | Annual return / Max DD | > 1.0 |\n| Sortino Ratio | Return / Downside deviation | > 1.0 |\n\n### Step 5: Optimization & Stress Testing\n\n```\nA. 参数优化\n   - Grid search over key parameters\n   - Walk-forward analysis (in-sample / out-of-sample)\n   - Avoid overfitting: use Information Coefficient (IC) analysis\n\nB. 压力测试\n   - Historical crises: 2008, 2015 A-share crash, COVID-19 (2020)\n   - Monte Carlo simulation of equity curves\n   - Sensitivity analysis: commission, slippage, spread assumptions\n\nC. 风险分析\n   - Position-level VaR (Value at Risk)\n   - Factor exposure (momentum, size, volatility)\n   - Tail risk: maximum loss scenarios\n```\n\n## Input/Output Examples\n\n### Example 1: Strategy Design Request\n\n**Input:**\n```\nDesign a momentum strategy for A-share market.\nCriteria:\n- Daily timeframe\n- Lookback: 20 days\n- Hold for 5 days\n- Long only\n- Top 20% by momentum score\n- Max 10 positions\n- Trade AAPL, TSLA, NVDA, MSFT\n```\n\n**Output:**\n```\nStrategy Design Summary:\n\n┌─────────────────────────────────────────┐\n│ Strategy: Top-Momentum Long-Only        │\n│ Market: US Equity (4 stocks)            │\n│ Timeframe: Daily                        │\n│ Backtest Period: 2020-01-01 to 2025-12-31 │\n└─────────────────────────────────────────┘\n\nKey Components:\n1. Momentum ranking: ROC(close, period=20)\n2. Selection: Top 20% by momentum score (max 10 stocks)\n3. Position sizing: Equal weight (10% per position)\n4. Hold period: 5 trading days\n5. Rebalance: Daily at market open\n\nExpected Performance (illustrative):\n- Annualized Return: 18-25% (historical backtest)\n- Sharpe Ratio: 0.8-1.2\n- Max Drawdown: 30-40%\n- Win Rate: 52-56%\n\nCode generated at: strategy_momentum_us.py\n```\n\n### Example 2: Performance Report\n\n**Input:**\n```\nCompare these two strategies: RSI mean reversion vs momentum breakout on CSI 300 (000300)\nPeriod: 2020-2024\nInitial capital: 1,000,000 CNY\n```\n\n**Output:**\n```\nBacktest Results: CSI 300 Strategies (2020-2024)\n\n┌──────────────────────┬─────────────────────┬────────────────────┐\n│ Metric               │ RSI Mean Reversion  │ Momentum Breakout  │\n├──────────────────────┼─────────────────────┼────────────────────┤\n│ Total Return         │ +68.3%              │ +124.7%            │\n│ Annualized Return    │ +13.2%              │ +17.8%             │\n│ Sharpe Ratio         │ 1.12               │ 1.45               │\n│ Max Drawdown         │ -22.1%             │ -31.4%             │\n│ Win Rate             │ 58.3%              │ 49.2%              │\n│ Profit Factor        │ 1.82               │ 1.67               │\n│ Calmar Ratio         │ 0.60               │ 0.57               │\n│ Avg Holding Days     │ 8.2                │ 4.6                │\n│ Total Trades         │ 127                │ 284                │\n└──────────────────────┴─────────────────────┴────────────────────┘\nBenchmark: CSI 300 Index (+42.1% over same period)\n\nRecommendation:\n- Risk-averse investors: RSI Mean Reversion (lower drawdown, higher win rate)\n- Return-seeking investors: Momentum Breakout (higher return, more trades)\n\n⚠️ Note: Past performance does not guarantee future results.\nA-share markets are subject to significant regulatory and liquidity risks.\n```\n\n## Strategy Templates Library\n\n| Strategy Type | Best For | Timeframe | Markets |\n|--------------|----------|-----------|---------|\n| Momentum | Trending markets | Daily/Weekly | All |\n| Mean Reversion | Range-bound markets | Intraday/Daily | All |\n| Breakout | Volatile markets | Intraday/Daily | All |\n| Pairs Trading | Market-neutral | Daily | US/HK |\n| Machine Learning | Alpha discovery | Daily | All |\n| Event-Driven | Corporate actions | Daily | A-share/US |\n\n## Best Practices\n\n1. **Always use out-of-sample testing** — split data 70/30 or use walk-forward\n2. **Account for transaction costs** — A-share commission + stamp tax ≈ 0.15% per trade\n3. **Include slippage** — assume 0.05-0.1% for liquid stocks, higher for illiquid\n4. **Diversify across uncorrelated strategies** — don't rely on one strategy\n5. **Stress test for A-share specifics** — T+1 trading, limit-up/limit-down, suspension risks\n6. **Validate with paper trading** — run live for 1-3 months before real capital\n7. **Beware of overfitting** — fewer parameters = more robust strategy\n\n## Risk Disclaimer\n\nThis skill provides backtesting tools and historical analysis for educational and research purposes only. Backtested results are not indicative of future performance. Real trading involves significant risks including market volatility, liquidity constraints, regulatory changes, and model risk. Always consult with qualified financial advisors before making investment decisions.\n## Appendix G. Alibaba Dianjin Fusion — ai-trading-backtester v5.0.0\n\n> **Source**: Alibaba Dianjin Digital Employee — `investment-advisor` (AI投资顾问) & `quant-researcher` (AI量化研究员)  \n> **Essence**: 策略回测、参数优化、风险控制、绩效评估  \n> **Integrated**: 2026-05-31\n\n---\n\n### G.1 Core Workflow (Dianjin essence)\n\n```\n策略回测流程：\n1. 策略定义：买入条件+卖出条件+止损条件\n2. 数据准备：历史K线+成交量+因子数据\n3. 回测执行：按时间顺序模拟交易\n4. 绩效计算：收益率+夏普比率+最大回撤\n5. 参数优化：网格搜索/贝叶斯优化\n6. 风险分析：回撤期+胜率+盈亏比\n```\n\n---\n\n### G.2 Backtest Metrics (Dianjin method)\n\n**核心指标体系**：\n\n| 指标 | 计算公式 | 优秀标准 | 及格标准 |\n|------|---------|---------|---------|\n| 年化收益率 | (终值/初值)^(252/交易日)-1 | >20% | >8% |\n| 夏普比率 | (年化收益-无风险利率)/年化波动 | >1.5 | >0.5 |\n| 最大回撤 | max((历史最高-当前)/历史最高) | <15% | <30% |\n| 胜率 | 盈利次数/总次数 | >60% | >45% |\n| 盈亏比 | 平均盈利/平均亏损 | >2.0 | >1.5 |\n| 索提诺比率 | (年化收益-无风险利率)/下行波动 | >2.0 | >1.0 |\n\n**回测报告模板（Dianjin风格）**：\n\n```\n【策略回测报告】均线突破策略（5日+20日）\n\n一、回测参数\n- 标的：沪深300指数 (000300.SH)\n- 周期：2019-01-01 至 2026-05-31\n- 频率：日线\n- 初始资金：100万\n- 交易成本：单边0.1%（佣金0.03%+印花税0.07%）\n\n二、绩效指标\n✅ 年化收益率：18.5%（优秀）\n✅ 夏普比率：1.62（优秀）\n❌ 最大回撤：-28.3%（不及格，应<15%）\n⚠️ 胜率：52.3%（及格）\n⚠️ 盈亏比：1.85（及格）\n\n三、分年度表现\n| 年份 | 收益率 | 最大回撤 | 夏普比率 |\n|------|--------|----------|----------|\n| 2019 | +32.5% | -12.3% | 2.1 |\n| 2020 | +28.7% | -15.8% | 1.8 |\n| 2021 | -8.2% | -22.5% | -0.3 |\n| 2022 | -15.3% | -28.3% | -0.8 |\n| 2023 | +22.1% | -10.5% | 1.5 |\n| 2024 | +12.8% | -8.7% | 1.2 |\n| 2025 | +25.6% | -9.2% | 1.9 |\n\n四、问题诊断\n❌ 2022年回撤-28.3%（策略在熊市表现差）\n❌ 胜率仅52.3%（信号质量不高）\n⚠️ 交易成本年化-3.2%（高频交易成本高）\n\n五、改进建议\n1. 增加趋势过滤（仅在MA60向上时开仓）\n2. 优化止损（当前-8%止损太宽，改为-5%）\n3. 降低交易频率（当前年均交易45次，降至20次以下）\n```\n\n---\n\n### G.3 Parameter Optimization (Dianjin essence)\n\n**参数优化方法**：\n\n```\n方法1：网格搜索（Grid Search）\n  - 优点：简单，保证找到全局最优\n  - 缺点：计算量大（参数多时指数爆炸）\n  - 适用：参数少（<5个），范围小\n\n方法2：贝叶斯优化（Bayesian Optimization）\n  - 优点：高效，用高斯过程建模目标函数\n  - 缺点：实现复杂，可能陷入局部最优\n  - 适用：参数多（>5个），计算资源有限\n\n方法3：遗传算法（Genetic Algorithm）\n  - 优点：全局搜索能力强，适合复杂目标\n  - 缺点：收敛慢，参数调优难\n  - 适用：非线性、多峰目标函数\n```\n\n**过拟合风险警示（Dianjin重点）**：\n\n```\n⚠️ 过拟合信号：\n1. 样本内绩效远优于样本外（差距>50%）\n2. 参数极度敏感（微调参数导致绩效剧变）\n3. 交易次数过少（<20次，统计不显著）\n4. 最大回撤发生在样本末端（未来函数嫌疑）\n\n✅ 防过拟合措施：\n1. 样本外测试（保留最近1-2年数据不参训）\n2. 滚动窗口验证（Walk-forward，每N个月重新优化）\n3. 参数稳定性检验（参数在合理范围内波动，绩效不剧变）\n4. 经济逻辑检验（策略要有合理解释，不能纯数据挖掘）\n```\n\n---\n\n### G.4 Risk Control & Position Management (Dianjin method)\n\n**仓位管理模型**：\n\n```\n固定比例法（最简单）：\n  - 单一策略：股票仓位≤30%\n  - 组合策略：总仓位≤80%\n\n凯利公式（Kelly Criterion）：\n  仓位 = (胜率 × 盈亏比 - 败率) / 盈亏比\n  例：胜率55%，盈亏比2.0 → 仓位 = (0.55×2-0.45)/2 = 32.5%\n\nATR仓位法（波动率调整）：\n  仓位 = 账户资金 × 风险系数 / (ATR × 合约乘数)\n  例：账户100万，风险系数0.02，ATR=2元，合约乘数100\n  → 仓位 = 100万 × 0.02 / (2×100) = 100股（约占总资金2%）\n```\n\n---\n\n### G.5 Test Case (Dianjin quality)\n\n**Test Case: 策略回测+优化**\n\n```\nInput: \"回测均线突破策略（5日+20日）在沪深300的表现，2019-2026\"\n\nExpected Output:\n1. 回测参数（标的/周期/成本）\n2. 绩效指标表（年化收益/夏普/最大回撤/胜率/盈亏比）\n3. 分年度表现\n4. 问题诊断（回撤过大/胜率过低）\n5. 改进建议（增加过滤/优化止损）\n\nQuality Check:\n- ✅ 指标计算准确（公式正确）\n- ✅ 问题诊断客观（不回避缺陷）\n- ✅ 改进建议可行（有实操价值）\n- ✅ 风险提示（过拟合风险）\n```\n\n---\n\n**End of Dianjin Fusion Content — ai-trading-backtester v5.0.0**\n\nFile v5.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn74e704j3ygjcygnpf02rdvd185js13\",\n  \"slug\": \"ai-trading-backtester\",\n  \"version\": \"5.0.0\",\n  \"publishedAt\": 1780193630926\n}\n\nFile v5.0.0:skill-card.md\n\n## Description: <br>\nAI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywords: trading backtest, quantitative strategy, algorithmic trading, Python backtesting, backtrader, vectorbt, trading strategy, momentum, mean reversion, pairs trading, A-share strategy, financial data, technical indicators. <br>\n\nThis skill is for research and development only. <br>\n\n## Publisher: <br>\n[gechengling](https://clawhub.ai/user/gechengling) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nQuantitative analysts, retail traders, and developers use this skill to turn trading ideas into Python backtests, compare strategy performance, and review risk-adjusted metrics across A-share, Hong Kong, and US equity markets. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Generated trading code or performance summaries could be mistaken for investment advice. <br>\nMitigation: Treat outputs as educational research, verify assumptions and calculations, and consult qualified financial professionals before making trading decisions. <br>\nRisk: Generated Python may be run against unintended files, live accounts, or unaudited extensions. <br>\nMitigation: Review code before execution, run it in a controlled environment with intended historical data only, and do not connect brokerage accounts or API keys unless separately audited. <br>\nRisk: Backtests can overfit historical data or omit market frictions. <br>\nMitigation: Use out-of-sample testing, include transaction costs and slippage, and stress test strategies before relying on results. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/gechengling/ai-trading-backtester) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, guidance] <br>\n**Output Format:** [Markdown with Python code blocks, shell commands, and tabular performance summaries] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Generated code and backtest results require user review before execution or trading decisions.] <br>\n\n## Skill Version(s): <br>\n5.0.0 (source: frontmatter and server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.0: 3 files, 6652 bytes\n\nFiles: skill-card.md (2553b), SKILL.md (12469b), _meta.json (140b)\n\nFile v1.0.0:SKILL.md\n\n---\r\nname: \"AI Trading Strategy Backtester\"\r\ndescription: \"AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywords: trading backtest, quantitative strategy, algorithmic trading, Python backtesting, backtrader, vectorbt, trading strategy, momentum, mean reversion, pairs trading, A-share strategy, financial data, technical indicators.\"\r\nversion: \"1.0.0\"\r\n---\r\n\r\n# AI Trading Strategy Backtester\r\n\r\n## Overview\r\n\r\nAn AI-powered quantitative trading strategy design and backtesting assistant that helps you transform trading ideas into fully-coded, backtested strategies. It guides you through strategy design (mean reversion, momentum, breakout, pairs trading, ML-based), implements them in Python (backtrader, vectorbt, pandas), evaluates performance across historical data for A-share, HK, and US markets, and produces risk-adjusted performance reports.\r\n\r\n## Triggers\r\n\r\n- \"backtest my trading strategy\"\r\n- \"design a momentum strategy for [stock/market]\"\r\n- \"test mean reversion on [symbol]\"\r\n- \"pairs trading strategy example\"\r\n- \"Python backtrader setup guide\"\r\n- \"vectorbt tutorial\"\r\n- \"trading strategy optimization\"\r\n- \"量化回测策略\"\r\n- \"技术指标择时策略\"\r\n- \"A股量化策略设计\"\r\n\r\n## Workflow\r\n\r\n### Step 1: Define the Strategy Brief\r\n\r\nCollect the trading idea:\r\n- **Strategy type**: Momentum, mean reversion, breakout, pairs trading, ML-based, event-driven\r\n- **Market**: A-share (sh/sz), HK stock (hk), US equity (us)\r\n- **Timeframe**: Intraday (1m/5m/15m), daily, weekly, monthly\r\n- **Assets**: Single stock, ETF, index, portfolio\r\n- **Entry/Exit signals**: Technical indicators, price patterns, fundamental signals, ML predictions\r\n- **Position sizing**: Fixed, Kelly criterion, risk-parity, dynamic\r\n- **Constraints**: Max position size, long-only/short, turnover limit, slippage model\r\n\r\n### Step 2: Strategy Design & Code Generation\r\n\r\nBased on the brief, generate production-quality Python code:\r\n\r\n#### A. Momentum Strategy Template\r\n```python\r\nimport pandas as pd\r\nimport numpy as np\r\nimport backtrader as bt\r\n\r\nclass MomentumStrategy(bt.Strategy):\r\n    params = (\r\n        ('lookback', 20),       # 回望期\r\n        ('hold_period', 5),    # 持有期\r\n        ('rank_percentile', 0.2),  # 选股分位数\r\n    )\r\n\r\n    def __init__(self):\r\n        self.inds = {}\r\n        for d in self.datas:\r\n            self.inds[d] = {}\r\n            self.inds[d]['momentum'] = bt.indicators.RateOfChange(\r\n                d.close, period=self.params.lookback\r\n            )\r\n\r\n    def next(self):\r\n        # 按动量排序，取前20%\r\n        rankings = sorted(\r\n            self.datas,\r\n            key=lambda d: self.inds[d]['momentum'][0],\r\n            reverse=True\r\n        )[:int(len(self.datas) * self.params.rank_percentile)]\r\n\r\n        # 平仓不在榜单的持仓\r\n        for d in self.datas:\r\n            if d not in rankings and self.getposition(d).size > 0:\r\n                self.close(d)\r\n\r\n        # 买入榜单中的标的\r\n        for d in rankings:\r\n            if self.getposition(d).size == 0:\r\n                self.order_target_percent(d, 1.0 / len(rankings))\r\n```\r\n\r\n#### B. Mean Reversion Strategy Template\r\n```python\r\nclass MeanReversionStrategy(bt.Strategy):\r\n    params = (\r\n        ('bb_period', 20),\r\n        ('bb_dev', 2.0),\r\n        ('rsi_period', 14),\r\n        ('rsi_oversold', 30),\r\n        ('rsi_overbought', 70),\r\n    )\r\n\r\n    def __init__(self):\r\n        self.bb = bt.indicators.BollingerBands(\r\n            self.data.close, period=self.params.bb_period,\r\n            devfactor=self.params.bb_dev\r\n        )\r\n        self.rsi = bt.indicators.RSI(\r\n            self.data.close, period=self.params.rsi_period\r\n        )\r\n\r\n    def next(self):\r\n        if self.position.size == 0:\r\n            # 价格触及下轨且RSI超卖 → 买入\r\n            if self.data.close < self.bb.lines.bot and \\\r\n               self.rsi < self.params.rsi_oversold:\r\n                self.order_target_percent(self.data, 1.0)\r\n        else:\r\n            # 价格触及上轨或RSI超买 → 卖出\r\n            if self.data.close > self.bb.lines.top or \\\r\n               self.rsi > self.params.rsi_overbought:\r\n                self.close()\r\n```\r\n\r\n#### C. Pairs Trading Strategy\r\n```python\r\nimport statsmodels.api as sm\r\n\r\ndef find_cointegrated_pairs(data_dict):\r\n    \"\"\"寻找协整配对\"\"\"\r\n    n = len(data_dict)\r\n    pairs = []\r\n    symbols = list(data_dict.keys())\r\n\r\n    for i in range(n):\r\n        for j in range(i + 1, n):\r\n            try:\r\n                x = data_dict[symbols[i]]\r\n                y = data_dict[symbols[j]]\r\n                # OLS回归\r\n                X = sm.add_constant(x)\r\n                model = sm.OLS(y, X).fit()\r\n                residuals = model.resid\r\n                # ADF检验\r\n                adf_result = sm.tsa.stattools.adfuller(residuals)\r\n                if adf_result[0] < adf_result[4]['1%']:\r\n                    pairs.append((symbols[i], symbols[j], adf_result[0]))\r\n            except:\r\n                continue\r\n    return sorted(pairs, key=lambda x: x[2])\r\n\r\ndef pairs_trading_signals(spread, z_entry=2.0, z_exit=0.5):\r\n    \"\"\"配对交易信号\"\"\"\r\n    signals = pd.Series(0, index=spread.index)\r\n    z_score = (spread - spread.mean()) / spread.std()\r\n\r\n    signals[z_score < -z_entry] = 1    # 做多价差\r\n    signals[z_score > z_entry] = -1     # 做空价差\r\n    signals[abs(z_score) < z_exit] = 0  # 平仓\r\n    return signals\r\n```\r\n\r\n### Step 3: Backtest Execution\r\n\r\nGuide the user through running the backtest:\r\n\r\n```python\r\nimport backtrader as bt\r\nimport pandas as pd\r\n\r\n# 加载数据\r\ndata = bt.feeds.GenericCSVData(\r\n    dataname='historical_data.csv',\r\n    dtformat='%Y-%m-%d',\r\n    datetime=0,\r\n    open=1, high=2, low=3, close=4, volume=5,\r\n    openinterest=-1\r\n)\r\n\r\n# 运行回测\r\ncerebro = bt.Cerebro()\r\ncerebro.addstrategy(MomentumStrategy)\r\ncerebro.adddata(data)\r\ncerebro.broker.setcash(1000000.0)  # 100万初始资金\r\ncerebro.broker.setcommission(commission=0.001)  # 千一手续费\r\ncerebro.addsizer(bt.sizers.PercentSizer, percents=95)\r\n\r\nprint(f'初始资金: {cerebro.broker.getvalue():,.2f}')\r\ncerebro.run()\r\nprint(f'最终资金: {cerebro.broker.getvalue():,.2f}')\r\n```\r\n\r\n### Step 4: Performance Analysis\r\n\r\nGenerate comprehensive performance metrics:\r\n\r\n| Metric | Description | Target |\r\n|--------|-------------|--------|\r\n| Total Return | Cumulative return | > Benchmark |\r\n| Annualized Return | CAGR | > 10% (A-share), > 8% (HK/US) |\r\n| Sharpe Ratio | Risk-adjusted return | > 1.5 |\r\n| Max Drawdown | Peak-to-trough loss | < 20% |\r\n| Win Rate | Percentage of profitable trades | > 50% |\r\n| Profit Factor | Gross profit / Gross loss | > 1.5 |\r\n| Calmar Ratio | Annual return / Max DD | > 1.0 |\r\n| Sortino Ratio | Return / Downside deviation | > 1.0 |\r\n\r\n### Step 5: Optimization & Stress Testing\r\n\r\n```\r\nA. 参数优化\r\n   - Grid search over key parameters\r\n   - Walk-forward analysis (in-sample / out-of-sample)\r\n   - Avoid overfitting: use Information Coefficient (IC) analysis\r\n\r\nB. 压力测试\r\n   - Historical crises: 2008, 2015 A-share crash, COVID-19 (2020)\r\n   - Monte Carlo simulation of equity curves\r\n   - Sensitivity analysis: commission, slippage, spread assumptions\r\n\r\nC. 风险分析\r\n   - Position-level VaR (Value at Risk)\r\n   - Factor exposure (momentum, size, volatility)\r\n   - Tail risk: maximum loss scenarios\r\n```\r\n\r\n## Input/Output Examples\r\n\r\n### Example 1: Strategy Design Request\r\n\r\n**Input:**\r\n```\r\nDesign a momentum strategy for A-share market.\r\nCriteria:\r\n- Daily timeframe\r\n- Lookback: 20 days\r\n- Hold for 5 days\r\n- Long only\r\n- Top 20% by momentum score\r\n- Max 10 positions\r\n- Trade AAPL, TSLA, NVDA, MSFT\r\n```\r\n\r\n**Output:**\r\n```\r\nStrategy Design Summary:\r\n\r\n┌─────────────────────────────────────────┐\r\n│ Strategy: Top-Momentum Long-Only        │\r\n│ Market: US Equity (4 stocks)            │\r\n│ Timeframe: Daily                        │\r\n│ Backtest Period: 2020-01-01 to 2025-12-31 │\r\n└─────────────────────────────────────────┘\r\n\r\nKey Components:\r\n1. Momentum ranking: ROC(close, period=20)\r\n2. Selection: Top 20% by momentum score (max 10 stocks)\r\n3. Position sizing: Equal weight (10% per position)\r\n4. Hold period: 5 trading days\r\n5. Rebalance: Daily at market open\r\n\r\nExpected Performance (illustrative):\r\n- Annualized Return: 18-25% (historical backtest)\r\n- Sharpe Ratio: 0.8-1.2\r\n- Max Drawdown: 30-40%\r\n- Win Rate: 52-56%\r\n\r\nCode generated at: strategy_momentum_us.py\r\n```\r\n\r\n### Example 2: Performance Report\r\n\r\n**Input:**\r\n```\r\nCompare these two strategies: RSI mean reversion vs momentum breakout on CSI 300 (000300)\r\nPeriod: 2020-2024\r\nInitial capital: 1,000,000 CNY\r\n```\r\n\r\n**Output:**\r\n```\r\nBacktest Results: CSI 300 Strategies (2020-2024)\r\n\r\n┌──────────────────────┬─────────────────────┬────────────────────┐\r\n│ Metric               │ RSI Mean Reversion  │ Momentum Breakout  │\r\n├──────────────────────┼─────────────────────┼────────────────────┤\r\n│ Total Return         │ +68.3%              │ +124.7%            │\r\n│ Annualized Return    │ +13.2%              │ +17.8%             │\r\n│ Sharpe Ratio         │ 1.12               │ 1.45               │\r\n│ Max Drawdown         │ -22.1%             │ -31.4%             │\r\n│ Win Rate             │ 58.3%              │ 49.2%              │\r\n│ Profit Factor        │ 1.82               │ 1.67               │\r\n│ Calmar Ratio         │ 0.60               │ 0.57               │\r\n│ Avg Holding Days     │ 8.2                │ 4.6                │\r\n│ Total Trades         │ 127                │ 284                │\r\n└──────────────────────┴─────────────────────┴────────────────────┘\r\nBenchmark: CSI 300 Index (+42.1% over same period)\r\n\r\nRecommendation:\r\n- Risk-averse investors: RSI Mean Reversion (lower drawdown, higher win rate)\r\n- Return-seeking investors: Momentum Breakout (higher return, more trades)\r\n\r\n⚠️ Note: Past performance does not guarantee future results.\r\nA-share markets are subject to significant regulatory and liquidity risks.\r\n```\r\n\r\n## Strategy Templates Library\r\n\r\n| Strategy Type | Best For | Timeframe | Markets |\r\n|--------------|----------|-----------|---------|\r\n| Momentum | Trending markets | Daily/Weekly | All |\r\n| Mean Reversion | Range-bound markets | Intraday/Daily | All |\r\n| Breakout | Volatile markets | Intraday/Daily | All |\r\n| Pairs Trading | Market-neutral | Daily | US/HK |\r\n| Machine Learning | Alpha discovery | Daily | All |\r\n| Event-Driven | Corporate actions | Daily | A-share/US |\r\n\r\n## Best Practices\r\n\r\n1. **Always use out-of-sample testing** — split data 70/30 or use walk-forward\r\n2. **Account for transaction costs** — A-share commission + stamp tax ≈ 0.15% per trade\r\n3. **Include slippage** — assume 0.05-0.1% for liquid stocks, higher for illiquid\r\n4. **Diversify across uncorrelated strategies** — don't rely on one strategy\r\n5. **Stress test for A-share specifics** — T+1 trading, limit-up/limit-down, suspension risks\r\n6. **Validate with paper trading** — run live for 1-3 months before real capital\r\n7. **Beware of overfitting** — fewer parameters = more robust strategy\r\n\r\n## Risk Disclaimer\r\n\r\nThis skill provides backtesting tools and historical analysis for educational and research purposes only. Backtested results are not indicative of future performance. Real trading involves significant risks including market volatility, liquidity constraints, regulatory changes, and model risk. Always consult with qualified financial advisors before making investment decisions.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn74e704j3ygjcygnpf02rdvd185js13\",\n  \"slug\": \"ai-trading-backtester\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1779196914840\n}\n\nFile v1.0.0:skill-card.md\n\n## Description: <br>\nAI-powered quantitative trading strategy backtesting assistant that designs, codes, and evaluates strategies across historical A-share, Hong Kong, and US equity market data. <br>\n\nThis skill is for research and development only. <br>\n\n## Publisher: <br>\n[gechengling](https://clawhub.ai/user/gechengling) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nQuantitative analysts, developers, and retail traders use this skill to turn trading ideas into Python backtesting workflows, strategy templates, and risk-adjusted performance reports. It is intended for research and educational evaluation of historical data, not live trading decisions. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Generated strategies or performance reports may be misleading if treated as investment advice or live-trading signals. <br>\nMitigation: Treat generated strategies and performance numbers as research only, verify code and data independently, and consult qualified financial advisors before making investment decisions. <br>\nRisk: Backtests can overfit historical data or omit real trading constraints such as transaction costs, slippage, liquidity, regulatory changes, and model risk. <br>\nMitigation: Use out-of-sample testing, walk-forward analysis, stress testing, realistic cost and slippage assumptions, and paper trading before considering any real capital use. <br>\nRisk: Generated code could be adapted to place real trades without adequate review. <br>\nMitigation: Do not connect generated code to live brokerage accounts without separate code, data, risk, and compliance review. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/gechengling/ai-trading-backtester) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Markdown, Code, Shell commands, Configuration instructions, Analysis, Guidance] <br>\n**Output Format:** [Markdown with Python code blocks, tables, and command examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include illustrative backtest metrics, strategy templates, optimization guidance, and risk disclaimers.] <br>\n\n## Skill Version(s): <br>\n1.0.0 (source: frontmatter and server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: AI Trading Strategy Backtester Owner: gechengling Summary: AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywo","codeSnippets":[],"executableExamples":[{"language":"python","snippet":"import pandas as pd\nimport numpy as np\nimport backtrader as bt\n\nclass MomentumStrategy(bt.Strategy):\n    params = (\n        ('lookback', 20),       # 回望期\n        ('hold_period', 5),    # 持有期\n        ('rank_percentile', 0.2),  # 选股分位数\n    )\n\n    def __init__(self):\n        self.inds = {}\n        for d in self.datas:\n            self.inds[d] = {}\n            self.inds[d]['momentum'] = bt.indicators.RateOfChange(\n                d.close, period=self.params.lookback\n            )\n\n    def next(self):\n        # 按动量排序，取前20%\n        rankings = sorted(\n            self.datas,\n            key=lambda d: self.inds[d]['momentum'][0],\n            reverse=True\n        )[:int(len(self.datas) * self.params.rank_percentile)]\n\n        # 平仓不在榜单的持仓\n        for d in self.datas:\n            if d not in rankings and self.getposition(d).size > 0:\n                self.close(d)\n\n        # 买入榜单中的标的\n        # 注意：rankings 为空时 1.0/len(rankings) 会除零，必须先返回\n        if not rankings:\n            return\n        for d in rankings:\n            if self.getposition(d).size == 0:\n                self.order_target_percent(d, 1.0 / len(rankings))"},{"language":"python","snippet":"cerebro = bt.Cerebro()\ncerebro.addstrategy(MomentumStrategy, lookback=20, hold_period=5, rank_percentile=0.2)\n# 关键：传入的是\"回望期内的动量\"，必须剔除上市不足 lookback 天的新股，\n# 否则新股会因为没有足够历史而产生极端 ROC 值，长期占据榜单前排。"},{"language":"python","snippet":"class MeanReversionStrategy(bt.Strategy):\n    params = (\n        ('bb_period', 20),\n        ('bb_dev', 2.0),\n        ('rsi_period', 14),\n        ('rsi_oversold', 30),\n        ('rsi_overbought', 70),\n    )\n\n    def __init__(self):\n        self.bb = bt.indicators.BollingerBands(\n            self.data.close, period=self.params.bb_period,\n            devfactor=self.params.bb_dev\n        )\n        self.rsi = bt.indicators.RSI(\n            self.data.close, period=self.params.rsi_period\n        )\n\n    def next(self):\n        if self.position.size == 0:\n            # 价格触及下轨且RSI超卖 → 买入\n            if self.data.close < self.bb.lines.bot and \\\n               self.rsi < self.params.rsi_oversold:\n                self.order_target_percent(self.data, 1.0)\n        else:\n            # 价格触及上轨或RSI超买 → 卖出\n            if self.data.close > self.bb.lines.top or \\\n               self.rsi > self.params.rsi_overbought:\n                self.close()"},{"language":"python","snippet":"# rsi_oversold 从 30 调到 25，交易次数可能从 127 次降到 70 次以下，\n# 而样本外夏普从 1.12 掉到 0.6 —— 这种\"微调剧变\"就是过拟合信号。\ncerebro.addstrategy(MeanReversionStrategy, bb_period=20, bb_dev=2.0,\n                    rsi_period=14, rsi_oversold=30, rsi_overbought=70)"},{"language":"python","snippet":"import statsmodels.api as sm\n\ndef find_cointegrated_pairs(data_dict):\n    \"\"\"寻找协整配对\"\"\"\n    n = len(data_dict)\n    pairs = []\n    symbols = list(data_dict.keys())\n\n    for i in range(n):\n        for j in range(i + 1, n):\n            try:\n                x = data_dict[symbols[i]]\n                y = data_dict[symbols[j]]\n                # OLS回归\n                X = sm.add_constant(x)\n                model = sm.OLS(y, X).fit()\n                residuals = model.resid\n                # ADF检验\n                adf_result = sm.tsa.stattools.adfuller(residuals)\n                if adf_result[0] < adf_result[4]['1%']:\n                    pairs.append((symbols[i], symbols[j], adf_result[0]))\n            except:\n                continue\n    return sorted(pairs, key=lambda x: x[2])\n\ndef pairs_trading_signals(spread, z_entry=2.0, z_exit=0.5):\n    \"\"\"配对交易信号\"\"\"\n    signals = pd.Series(0, index=spread.index)\n    z_score = (spread - spread.mean()) / spread.std()\n\n    signals[z_score < -z_entry] = 1    # 做多价差\n    signals[z_score > z_entry] = -1     # 做空价差\n    signals[abs(z_score) < z_exit] = 0  # 平仓\n    return signals"},{"language":"python","snippet":"pairs = find_cointegrated_pairs({\"600036\": s_a, \"601318\": s_b})\n# => [(\"600036\", \"601318\", -3.87)]   ADF 统计量 -3.87 < 1% 临界值，判定协整\n\nspread = s_a - 1.24 * s_b           # 1.24 来自 OLS 回归系数\nsignals = pairs_trading_signals(spread, z_entry=2.0, z_exit=0.5)"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: \"AI Trading Strategy Backtester\"\ndescription: \"AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywords: trading backtest, quantitative strategy, algorithmic trading, Python backtesting, backtrader, vectorbt, trading strategy, momentum, mean reversion, pairs trading, A-share strategy, financial data, technical indicators.\"\nversion: \"5.0.3\"\n---\n\n# AI Trading Strategy Backtester\n\n## Overview\n\nAn AI-powered quantitative trading strategy design and backtesting assistant that helps you transform trading ideas into fully-coded, backtested strategies. It guides you through strategy design (mean reversion, momentum, breakout, pairs trading, ML-based), implements them in Python (backtrader, vectorbt, pandas), evaluates performance across historical data for A-share, HK, and US markets, and produces risk-adjusted performance reports.\n\n## Market & Regulatory Context (as of 2026-10-09)\n\n| 事项 | 对回测的直接影响 |\n|------|----------------|\n| **程序化交易管理要求** | 高频类策略需自行计入报备、流速与异常交易约束，回测中不能假设\"无限报单\" |\n| **A股 T+1 与涨跌幅限制** | 当日买入不可卖出、涨跌停无法成交，回测必须对不可成交信号做剔除或顺延处理 |\n| **停牌与流动性** | 停牌期间的\"信号\"不可成交；小市值标的需按实际成交量限制下单规模 |\n| **交易成本口径** | 佣金、印花税、滑点合计常被低估，年换手率高时成本可吞掉全部超额收益 |\n| **数据复权与幸存者偏差** | 使用不复权价格或仅含现存标的历史，会系统性高估策略表现 |\n\n**新动态（截至 2026-10-09）：**\n- **程序化交易监管常态化**：境内市场对程序化交易的报备、交易行为监测与异常交易认定持续细化，高频与日内回转类策略的合规成本上升。回测时应把\"报单频率上限\"\"撤单率约束\"纳入假设，而非只追求收益最大化。\n- **AI 选股与因子挖掘的合规关注上升**：以大模型或机器学习生成交易信号时，监管与机构风控普遍要求可解释、可复现、留痕，纯黑箱信号在实盘落地时面临额外审核成本。\n- **数据要素与另类数据应用扩展**：产业、舆情、供应链等另类数据被更广泛用于因子构建，但数据可得性的时点（point-in-time）问题更突出，回测中须严格避免引入未来信息。\n- 以上为公开信息综述，**具体规则、费率与执行口径以交易所、中国证监会及券商官方最新发布为准**。\n- **回测口径本身成为关注点**：机构内部评审 increasingly 要求回测报告披露「数据复权方式、样本区间、成本口径、可成交性过滤、样本外划分方式」五项，缺项即视为不可采信。建议把五项写进回测报告模板的固定开头。\n- **另类数据的 point-in-time 问题被单独提示**：产业、舆情、供应链类数据常见「事后回填」，直接用于回测会引入未来信息。可行做法是为每类数据记录「可获得时点」，并在回测中只允许使用该时点之前已经存在的数据版本。\n- 以上新增条目为公开信息综述，**具体规则、费率与执行口径以官方最新发布为准**。\n\n---\n\n## 语言与适用市场声明（Language & Markets）\n\n- **语言**：英文术语（Metrics、Sharpe、Drawdown、Walk-forward 等）保留原文，中文用于解释与结论——这是量化领域通用做法，便于与代码、公式和第三方工具对齐，属显式设计。\n- **支持市场**：A 股（沪深）、中国香港市场、美股。三个市场的**交易规则差异是回测结论的前提**，不可混用：\n  - A 股：T+1、涨跌停限制、停牌、卖出印花税、做空渠道有限；\n  - 中国香港市场：T+0、无涨跌停、交易成本与结算周期不同；\n  - 美股：T+0、可做空、税费与结算规则另行适用。\n- **口径优先**：任何回测示例都必须明确标注市场；**同一段代码在不同市场下的结论不可直接套用**。\n- 涉及中国香港、中国澳门、中国台湾及境外市场的具体监管要求，本技能仅提供通用回测方法，规则细节以当地监管与交易所口径为准。\n\n---\n\n## 数据最小化与执行边界（Data Minimization & Execution Boundary）\n\n**数据最小化前置声明（使用本技能前请先执行）**\n\n1. 不要粘贴实盘账户信息、持仓明细、真实成交记录；讨论时用脱敏后的结构或虚构标的。\n2. 数据文件路径、数据库地址、行情接口密钥一律用占位符，不写入提示词。\n3. 涉及的策略参数、因子逻辑如属机构未公开成果，只描述结构不给具体数值。\n4. 本技能不运行回测、不安装依赖、不读取本地行情文件、不发起任何网络请求；所有代码需你在自己的环境中执行。\n5. 生成的代码与报告如需落盘，须先预览确认无凭据与内部路径残留，再自行保存。\n\n**代码块性质与执行边界**\n\n| 内容 | 性质 | 谁来执行 |\n|------|------|---------|\n| backtrader / statsmodels 等示例 | 可运行脚手架，需本地安装依赖 | 使用者在自己的环境中运行，本技能不执行 |\n| 绩效指标表中的目标值与示"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn74e704j3ygjcygnpf02rdvd185js13\",\n  \"slug\": \"ai-trading-backtester\",\n  \"version\": \"5.0.3\",\n  \"publishedAt\": 1791525637899\n}"},{"path":"skill-card.md","content":"## Description:\n\nGuides the design of Python trading-strategy backtests and interpretation of historical performance across A-share, Hong Kong, and US equity markets.\n\nThis skill is for research and development only.\n\n## Publisher:\n\n[gechengling](https://clawhub.ai/user/gechengling)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nQuantitative analysts and retail traders use this skill to draft backtesting code and compare historical strategy performance, costs, and risk assumptions. Users run and verify the generated code themselves; the skill does not execute backtests or place trades.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Sensitive account details, trading records, credentials, or proprietary strategy parameters could be exposed in prompts or saved outputs.\n\nMitigation: Use placeholders or anonymized examples; review generated code and reports for sensitive details before saving them.\n\nRisk: Unverified code or unrealistic market, cost, and regulatory assumptions could make historical performance misleading or costly to apply.\n\nMitigation: Independently test generated code, data timing, execution constraints, fees, and current market rules before using results with real capital.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/gechengling/skills/ai-trading-backtester)\n\n## Skill Output:\n\n**Output Type(s):** [Markdown, Code, Guidance]\n\n**Output Format:** [Markdown with Python code blocks and performance tables]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Example performance figures are illustrative, not verified backtest results.]\n\n## Skill Version(s):\n\n5.0.3 (source: skill frontmatter and server-resolved release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywords: trading backtest, quantitative strategy, algorithmic trading, Python backtesting, backtrader, vectorbt, trading strategy, momentum, mean reversion, pairs trading, A-share strategy, financial data, technical indicators. Skill: AI Trading Strategy Backtester Owner: gechengling Summary: AI-powered quantitative trading strategy backtesting assistant. Designs, codes, and evaluates trading strategies across historical market data. Supports A-share (China), Hong Kong, US equity markets. Covers mean reversion, momentum, breakout, pairs trading, and machine learning-based strategies. Built for quantitative analysts and retail traders. Keywo","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":956,"uniquenessScore":48,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T05:47:22.675Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T05:47:22.675Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:45:03.156Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}