ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于 SignalEngine 契约的量化策略自动生成与回测评估指南 —— Vibe-Trading strategy-generate Skill 全解析

基于 SignalEngine 契约的量化策略自动生成与回测评估指南 —— Vibe-Trading strategy-generate Skill 全解析 金融科技示例工程【免费下载链接】ai_quant_tradeStock AI Trader: 1-stop platform for learning, sim live trading. Covers: stock basics, strategies, LLMs, factor mining, ML/DL/RL, graph nets, HFT, C deploy JoinQuant code. 股票AI操盘手一站式学习、模拟、实盘平台。涵盖股票基础、策略、大模型、因子挖掘、机器学习/深度学习/强化学习、图网络、高频交易、C部署及聚宽代码。项目地址https://gitcode.com/gh_mirrors/ai/ai_quant_trade点击查看免费下载导读本文以 Vibe-Trading 交易技能包中的strategy-generateSkill 为核心完整梳理一套从自然语言需求到可回测量化策略的自动化工作流Agent 如何解析用户意图并写出config.json、如何按照SignalEngine契约编写signal_engine.py、如何调用内置回测引擎、如何依据评审标准判定策略质量并给出可执行的改进建议。读完本文你将掌握跨 A 股、美股、港股、加密货币、期货与外汇的统一策略生成与回测评估方案并能在当前仓库的 strategy-generate 与配套 skillcross-market-strategy、backtest-diagnose、technical-basic中直接落地复用。Skill 定位与整体设计思想strategy-generate的定位是创建、修改、优化量化交易策略并完成回测与评估。它的核心设计思想可以概括为一句话Agent 只需要写两个文件——config.json与code/signal_engine.py数据加载与回测执行全部由引擎内置的backtest工具自动完成。这一约定在 SKILL.md 中反复强调无需编写run_backtest.py无需手动处理行情数据下载与格式转换。这种契约化设计让策略逻辑信号生成与回测基建数据、撮合、资金、绩效彻底解耦既降低 Agent 的出错面也让回测结果具备统一的评审口径。七步工作流Skill 定义的标准工作流如下需求解析Requirements parsing解析用户意图提取标的代码、时间范围与策略逻辑先写出config.json策略设计Strategy design围绕数据 / 信号 / 仓位 / 回测 / 校验 5 个问题完成设计推演策略编码Strategy coding编写code/signal_engine.py严格遵循SignalEngine契约语法检查Syntax check通过 Python AST 解析校验代码语法运行回测Run backtest调用引擎内置的backtest工具无需手写run_backtest.py评估结果Evaluate results读取artifacts/metrics.csv按评审标准判断通过与否迭代修复Iterative fixing结果不佳时用edit_file修改代码 → 重新回测 → 重新评估其中第 4 步的语法检查命令固定为python -c import ast; ast.parse(open(code/signal_engine.py).read()); print(OK)这条命令用 Python 标准库ast对信号引擎源码做语法级校验不依赖任何第三方依赖即可快速拦截缩进、括号、关键字拼写等低级错误是每一轮迭代前的必备关卡。需求解析先写 config.json缺失信息必须追问Skill 要求从用户描述中提取三类关键信息标的代码Instrument codes按下文标的代码规范化规则处理时间范围Time range用户未指定时默认取距今天往前 10 年例如今天是2026-03-18则start_date2016-03-18、end_date2026-03-18策略逻辑Strategy logic入场 / 出场条件与指标参数同时明确了一条纪律关键信息缺失时必须询问用户而非擅自猜测。典型场景包括未指定标的 → 询问要回测哪个标的并可给出若干热门候选策略描述含糊例如帮我做个策略→ 提供 23 个策略方向供用户选择混用多市场但未明确 → 与用户确认数据源执行顺序是强制的先写config.json再写代码且config.json必须放在run_dir根目录。策略设计五问动笔写代码前先推演 5 个问题且设计决策直接体现在代码中无需输出 JSON 设计文档问题关键决策点1. 数据需求只需基础 OHLCV还是需要pe/pb/roe等基本面字段数据频率默认日线市场决定数据源2. 信号逻辑入场条件是什么出场条件是什么方向做多 / 做空 / 多空双向是否有过滤成交量、趋势确认等3. 仓位管理等权分配还是分批加减仓风控止损、最大仓位组合策略选出前 N 名后每只权重 1/N4. 回测参数时间范围、初始资金默认 1,000,000、手续费默认 0.1%5. 校验清单信号一致性无 NaN、仓位检查归一化防杠杆、产物完整性SignalEngine 契约策略文件的核心是定义SignalEngine类并实现generate方法其签名与语义如下class SignalEngine: def generate(self, data_map: Dict[str, pd.DataFrame]) - Dict[str, pd.Series]: Args: data_map: code - DataFrame (columns: open, high, low, close, volume, DatetimeIndex) If config.extra_fields is specified, pe, pb, roe, and similar columns will also be present. Returns: code - signal Series, value range [-1.0, 1.0] 1.0 fully long, 0.5 half position, 0.0 flat, -1.0 fully short Portfolio strategy: selected stocks split weights equally (for example top 10 - each 0.1) Legacy integer signals {-1, 0, 1} remain compatible (treated as -100% / 0% / 100%) 硬性约束Hard constraints信号Series的索引必须与输入DataFrame索引完全对齐包含所有需要的导入numpy、pandas等禁止硬编码日期或股票代码应从config.json读取不得包含if __name__ __main__块纯 pandas / numpy 实现不得引入外部信号库输出纯 Python 代码不要包裹 Markdown 代码围栏信号取值语义为连续仓位1.0表示满仓做多、0.5表示半仓、0.0表示空仓、-1.0表示满仓做空组合策略中入选股票等权拆分如前 10 只每只 0.1。传统整数信号{-1, 0, 1}仍然兼容按 -100% / 0% / 100% 处理。一个可直接对照的参考实现仓库中 cross-market-strategy/example_signal_engine.py 提供了完整可运行的契约实现。它先按市场对标的分组、逐标的计算均线信号再做波动率倒数加权volatility-adjusted weights最终把所有信号 clip 到[-1.0, 1.0]def _market_signal(self, df: pd.DataFrame, params: dict) - pd.Series: close df[close] ma_fast close.rolling(params[ma_fast]).mean() ma_slow close.rolling(params[ma_slow]).mean() sig pd.Series(0.0, indexdf.index) sig[ma_fast ma_slow] 1.0 sig[ma_fast ma_slow] -1.0 return sig def _vol_adjust(self, signals: dict, data_map: dict) - dict: vols {} for code, df in data_map.items(): ret df[close].pct_change().dropna() vols[code] ( ret.rolling(20).std().iloc[-1] if len(ret) 20 else ret.std() ) inv_vols {c: 1.0 / (v 1e-10) for c, v in vols.items()} total_inv sum(inv_vols.values()) adjusted {} n len(signals) for code, sig in signals.items(): weight inv_vols[code] / total_inv * n adjusted[code] (sig * weight).clip(-1.0, 1.0) return adjusted注意_vol_adjust中的1e-10防除零、len(ret) 20的短样本回退、以及最终的.clip(-1.0, 1.0)归一化——这些都是满足契约信号值保持在[-1.0, 1.0]约束的典型工程细节可直接迁移到自定义策略中。质量检查清单Quality Checklist写完signal_engine.py后逐项自检所有导入都已包含numpy、pandas、typing等无未定义变量信号逻辑与策略描述一致边界处理对空数据、回看窗口前历史不足的情况使用fillna(0)或跳过组合策略选出 N 只后每只权重 1/N如前 10 → 每只 0.1未选中的为 0信号值保持在[-1.0, 1.0]区间内标的代码规范化Instrument Code Normalization不同市场的代码书写方式不同config.json中必须使用规范化格式A 股 6 位数字代码自动补后缀600/601/603开头的 →.SH其余 →.SZ美股大写字母 .US如AAPL.USyfinance自动转换港股数字 .HK如700.HKyfinance自动转换加密货币BTC-USDT格式OKX 现货交易对必须用连字符-不能用斜杠/用户可能写BTC/USDT但config.json必须写BTC-USDT市场检测与数据源路由引擎通过代码格式自动判定市场并路由数据源。下表来自 SKILL.md 的市场检测表模式市场source可用额外字段^\d{6}\.(SZ\|SH\|BJ)$A 股tusharepe, pb, pe_ttm, ps_ttm, dv_ttm, total_mv, circ_mv, roe^[A-Z]\.US$美股yfinance-^\d{3,5}\.HK$港股yfinance-^[A-Z]-USDT$加密货币okx-extra_fields选择逻辑只有 A 股tushare支持基本面字段。若策略需要PE/PB/ROE等在config.json.extra_fields中指定DataLoader会自动获取港股、美股、加密货币不支持extra_fields。从源码层面看cross-market-strategy/example_signal_engine.py 中的_MARKET_PATTERNS正则表正是这套检测规则的实现除上述四类外还覆盖^[A-Z]{3}/[A-Z]{3}$外汇、^[A-Z]{6}\.FX$、以及IF2406.CFFEX/ESZ4等期货代码。config.json 完整参数说明Skill 给出的标准配置模板如下{ source: auto, codes: [000001.SZ], start_date: 2016-03-18, end_date: 2026-03-18, interval: 1D, initial_cash: 1000000, commission: 0.001, extra_fields: null, optimizer: null, optimizer_params: {}, engine: daily, validation: null }各参数逐一说明sourceauto推荐按代码格式自动选择/tushare/yfinance/okx/akshare/ccxt。auto支持混合标的例如[000001.SZ, BTC-USDT]会自动路由到tushare与okx期货代码如IF2406.CFFEX、ESZ4与外汇对如EUR/USD同样自动路由intervalK 线周期默认1D。支持1m/5m/15m/30m/1H/4H/1D。分钟级回测的年化因子根据source自动推断A 股 252 个交易日、加密货币 365 个日历日分钟级回测数据量很大建议限制1m不超过 30 天1H不超过 1 年extra_fieldsA 股可用[pe, pb, roe]等其他市场应设为nulloptimizer可选equal_volatility/risk_parity/mean_variance/max_diversification/null默认等权optimizer_params优化器参数如{lookback: 60}mean_variance额外支持{risk_free: 0.0}engine回测引擎默认daily期权策略需设为options要求OptionsSignalEngineinitial_cash初始资金默认 1,000,000commission手续费率默认 0.1%即 0.001validation回测完成后的可选统计验证省略则跳过。示例validation: { monte_carlo: {n_simulations: 1000}, bootstrap: {n_bootstrap: 1000, confidence: 0.95}, walk_forward: {n_windows: 5} }monte_carlo置换检验——打乱交易顺序计算 p 值判断 Sharpe 是否显著优于随机bootstrap对日收益重采样计算 Sharpe 的 95% 置信区间walk_forward将净值曲线切分为 N 段窗口检查表现一致性每个键都是可选的只包含需要的验证项也可以对历史结果单独运行python -m backtest.validation run_dir加密货币注意事项针对 OKX 数据源有专门约定代码格式必须是XXX-USDT大写 连字符如BTC-USDT、ETH-USDTsource必须设为okxextra_fields必须为nullOKX 不支持基本面数据格式DataLoader已将输出规范化为与 A 股完全一致open, high, low, close, volumeDatetimeIndex策略代码无需特殊处理signal_engine.py的写法与 A 股完全相同不要为 OKX 增加额外数据转换逻辑这一约定意味着同一份SignalEngine实现可以无缝跑在 A 股与加密货币上——数据契约的统一是跨市场复用的基础。回测执行与产物调用引擎内置的backtest工具传入run_dir即完成数据加载与回测执行。回测完成后在run_dir下生成标准产物artifacts/metrics.csv绩效指标含trade_count、Sharpe、收益等artifacts/equity.csv净值曲线含equity列以及trades.csv等交易明细诊断时使用评审标准Review Criteria硬门槛Hard Gates任一失败 →passedfalseartifacts/metrics.csv存在且非空artifacts/equity.csv存在且非空exit_code 0回测正常退出equity.csv的equity列不含NaNtrade_count 0零交易 信号 bug计分规则回测成功 产物完整 至少 1 笔交易 →score ≥ 60→passed单纯收益差 / Sharpe 低不应将分数压到 60 以下它们只是优化建议score ≥ 60passedtrue扣分 Bug 类别零交易trade_count0信号逻辑 bug条件可能过严首笔交易过晚首笔交易距回测开始超过 2 年数据过滤 bug 或回看窗口过长资金利用率 50%仓位管理 bug组合大部分时间空仓结束时仍有持仓出场信号时机 bugaction_items 格式评估后如需改进输出action_items格式Change X from A to B或Add X logic in signal_engine.py必须具体到参数值、文件名、函数名至少 2 条示例Change short MA from 5 to 10 days to reduce whipsaw signalsAdd stop-loss: force close when loss exceeds 5%Add volume filter in signal_engine.py: only trigger buy on high volume这套评审标准与 backtest-diagnose 的硬门槛清单metrics/equity 非空、trade_count 0、equity 无 NaN、exit_code 0完全一致说明 strategy-generate 与 backtest-diagnose 共用同一套质量判定体系两个 skill 可衔接使用生成阶段不达标直接进入诊断流程。跨市场策略Cross-Market Strategies当用户要求回测不同市场的标的如[000001.SZ, BTC-USDT]时config.json中source设为autoCompositeEngine自动处理日历对齐、共享资金与各市场规则使用波动率调整权重避免高波动资产加密货币吃掉整个风险预算详细的分市场参数、波动率调整与示例代码见 cross-market-strategy skill。该 skill 强调不同市场的动力学差异极大用同一套参数跑所有市场结果必然不佳。其分市场参数表示例如下A 股 / 加密货币 / 美股 / 外汇参数A 股加密货币美股外汇MA 快线571010MA 慢线20255030RSI 周期14101414波动率回看20142020典型日波动1-2%3-8%1-2%0.3-0.8%波动率调整是跨市场策略的关键环节BTC 日波动约 5%A 股约 1.5%不做调整加密货币会独占全部风险预算。引擎侧会自动处理交易日历对齐信号在各标的自身日历上 shift 后 ffill 到统一日期、市场规则A 股 T1、加密货币资金费、外汇 swap、共享资金池与手续费 / 滑点分发策略只需输出每标的的目标权重。三个实战示例examples.md 给出了三个完整的最小调用序列覆盖 A 股、美股与加密货币三种主流场景。示例 1A 股双均线金叉tushare用户用000001.SZ做双均线金叉策略短期5日长期20日回测2024年load_skill(strategy-generate)→ 获得工作流指引write_file(config.json)→ 配置标的 / 日期 / 参数{source: tushare, codes: [000001.SZ], start_date: 2024-01-01, end_date: 2024-12-31, initial_cash: 1000000, commission: 0.001, extra_fields: null}write_file(code/signal_engine.py)→ 双均线策略代码bash(python -c \import ast; ast.parse(open(code/signal_engine.py).read()); print(OK)\)→ AST 语法检查backtest(run_dir...)→ 执行回测引擎内置read_file(artifacts/metrics.csv)→ 查看结果按评审标准判断如需修复edit_file(code/signal_engine.py, ...)→backtest→read_file示例 2美股 RSI 策略yfinance用户Build RSI strategy on AAPL, buy when RSI30 sell when RSI70, backtest 2024load_skill(strategy-generate)write_file(config.json){source: yfinance, codes: [AAPL.US], start_date: 2024-01-01, end_date: 2024-12-31, initial_cash: 1000000, commission: 0.001, extra_fields: null}write_file(code/signal_engine.py)→ RSI 策略代码AST 检查 →backtest→read_file(artifacts/metrics.csv)如需修复edit_file→backtest→read_file示例 3加密货币趋势策略okx用户BTC-USDT趋势跟踪策略回测2024年load_skill(strategy-generate)write_file(config.json){source: okx, codes: [BTC-USDT], start_date: 2024-01-01, end_date: 2024-12-31, initial_cash: 1000000, commission: 0.001, extra_fields: null}write_file(code/signal_engine.py)→ 趋势策略代码AST 检查 →backtest→read_file(artifacts/metrics.csv)如需修复edit_file→backtest→read_file三个示例共用同一条执行链路差异仅在config.json的source、codes与信号实现——这正是统一数据契约带来的效果。与相关 Skill 的协作生态strategy-generate在 Vibe-Trading 技能包中处于策略生成枢纽位置常与其他 skill 组合使用生成与评估本 skill 负责从零生成策略并跑通回测、给出action_items问题诊断回测失败或异常时由 backtest-diagnose 接手——先读artifacts/metrics.csv、equity.csv、trades.csv与code/signal_engine.py、config.json按错误分类学运行时错误 / 逻辑 bug / 数据错误定位根因并用edit_file做精准修复单次修复后立即重跑最多迭代 3 轮遇数据源侧报错如rate limit、API limit、Tushare 的Information提示则不改代码而是让用户检查 token 或等待配额重置指标实现信号引擎需要成熟技术指标时可直接复用 technical-basic 的三维投票体系趋势 EMA/ADX 均值回归 BB/RSI 量价 OBV/量比其 example_signal_engine.py 是纯 pandas 实现、参数全部可覆写如ema_fast12、ema_slow26、adx_threshold25.0、rsi_overbought70且同样遵循generate(data_map) - {code: signal}契约可作为strategy-generate工作流第 3 步的即插即用实现总结strategy-generate的价值在于把需求解析 → 策略设计 → 契约编码 → 语法校验 → 回测 → 评估 → 迭代修复封装成一条可复制的闭环流水线。Agent 只需维护config.json与signal_engine.py两个文件其余交给内置引擎而[-1.0, 1.0]信号区间、trade_count 0硬门槛、action_items具体化要求等约定保证了策略质量的可量化、可诊断、可迭代。配合跨市场策略的波动率加权、分市场参数以及 backtest-diagnose 的诊断闭环这套 skill 体系足以支撑从单一 A 股标的到多市场组合的完整策略研发流程。赞分享金融科技示例工程【免费下载链接】ai_quant_tradeStock AI Trader: 1-stop platform for learning, sim live trading. Covers: stock basics, strategies, LLMs, factor mining, ML/DL/RL, graph nets, HFT, C deploy JoinQuant code. 股票AI操盘手一站式学习、模拟、实盘平台。涵盖股票基础、策略、大模型、因子挖掘、机器学习/深度学习/强化学习、图网络、高频交易、C部署及聚宽代码。项目地址https://gitcode.com/gh_mirrors/ai/ai_quant_trade点击查看免费下载相关推荐ai_quant_trade 策略生成实战基于 vibe_trading_skills strategy-generate 的跨市场信号引擎与回测工作流ai_quant_trade 策略生成实战基于 vibe_trading_skills strategy generate 的跨市场信号引擎与回测工作流 导读金融科技示例工程ai_quant_trade 分钟级数据分析与回测实战基于 Vibe-Trading minute-analysis Skill 的 VWAP/TWAP 日内指标与 5m 级策略回测ai_quant_trade 分钟级数据分析与回测实战基于 Vibe Trading minute analysis Skill 的 VWAP/TWAP 日内金融科技示例工程QuantDinger Strategy API V2 策略开发指南覆盖回测与实盘的唯一 Python 策略契约QuantDinger Strategy API V2 策略开发指南覆盖回测与实盘的唯一 Python 策略契约 QuantDinger 当前只有一套可执行的后端金融科技人工智能AI 应用AI AgentMCP 服务上一篇NumPy StringDType 深度解析从 NEP 55 提案到可变宽度 UTF-8 字符串数组的落地实现下一篇Grafana Tempo 中的错误聚合实战go.uber.org/multierr 使用与源码解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表