揭秘Vibe-Trading影子账户代码生成:规则如何变成可回测的SignalEngine
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
Vibe-Trading 的Shadow Account(影子账户)是一个从个人交割单自动提炼交易策略、并一键生成可回测SignalEngine信号的开源 AI 交易智能体功能。它把散落在你交易记录里的盈利习惯,变成 3-5 条"人话规则",再自动生成一份能直接跑回测的信号引擎代码——全程无需手写策略代码。
一、整体链路:从交割单到信号引擎,只需四步
影子账户的核心思路可以概括为一条流水线(见 agent/src/shadow-account/SKILL.md 中的工作流定义):
- 提炼规则:
extract_shadow_strategy解析你的交割单,聚类出盈利回合的共性画像 - 生成代码:codegen 模块把规则渲染成
signal_engine.py+config.json - 回测验证:多市场(A股/港股/美股/加密)并跑回测
- 差值归因:算出"影子 PnL"与"真实 PnL"的差距,定位你的情绪单
对新手来说最有价值的地方在于:你不需要懂任何回测框架,系统替你完成了"规则 → 代码 → 回测"的全部转换。
二、规则提炼:聚类算法如何读懂你的盈利习惯
规则提炼的入口是 agent/src/shadow_account/extractor.py,其内部流程为:
- FIFO 配对:先把交割单中的买卖配成完整的"回合交易"
- 盈利过滤:只保留盈利回合(少于 5 笔会直接报错,拒绝编造)
- 特征工程:为每笔盈利交易计算持仓天数、收益率、入场时刻、市场,并附带买入日之前的 RSI14 与 5 日涨幅(严格 as-of 取值,杜绝未来函数)
- KMeans 自动聚类(k 在 2-5 间按轮廓系数自动选择),每个密集簇提炼为一条规则
每条规则是一个不可变的ShadowRule对象(定义见 agent/src/shadow_account/models.py),包含:
| 字段 | 含义 |
|---|---|
human_text | ≤30 字的中文人话描述,如"美股在 9:00-10:00 入场,持有 3-5 天" |
entry_condition | 结构化入场条件(市场、入场小时窗、RSI 区间、5 日涨幅区间) |
holding_days_range | 规则对应的持仓天数区间 |
support_count/coverage_rate | 支撑该规则的盈利交易数与覆盖率 |
数值边界取簇内 p10–p90 分位数,比决策树在小样本下更稳定、更可解释。
三、代码生成:Jinja2 模板如何渲染出 SignalEngine
代码生成是影子账户最巧妙的部分,核心实现在 agent/src/shadow_account/codegen.py:
- 规则扁平化:
_rule_to_context把每条ShadowRule展开为模板可消费的标量字段(entry_hour_min/max、hold_days、entry_rsi14_min/max等) - 模板渲染:用 Jinja2 加载 agent/src/shadow_account/templates/signal_engine.py.j2,把规则列表以安全的 Python 字面量写入
RULES常量 - 产出运行目录:
write_run_dir写出code/signal_engine.py+config.json,交给回测引擎执行
生成的SignalEngine类实现了标准的generate(data_map)接口:对每个标的,先按代码后缀推断市场(.SH→A股、.HK→港股、-USDT→加密、纯字母→美股),匹配第一条市场吻合的规则,然后逐 bar 检查入场条件——RSI 区间、5 日涨幅区间(缺失键自动跳过),全部通过则入场并持有规则指定的天数。生成的代码头部带有 "auto-generated; do not hand-edit" 声明,保证可重复生成。
值得一提的是细节设计:日线数据通常盖一个统一的时间戳,因此"入场小时窗"只在日内数据上生效,避免日线回测被无意义地全部拒绝。
四、安全校验:为什么生成的代码可以放心执行
LLM 时代的代码生成最怕注入风险,codegen 为此做了三道静态检查(validate_generated):
ast.parse必须成功,排除语法错误- 模块中必须定义
class SignalEngine SignalEngine必须带有generate方法且接受data_map参数
任何一条失败都会在写盘前抛出ValueError。数值渲染同样严格:非有限浮点(NaN/Inf)直接拒绝,所有字面量先过ast.literal_eval往返验证。相关安全测试见 agent/tests/test_shadow_codegen_security.py。
五、回测与归因:影子账户如何量化你的"情绪成本"
agent/src/shadow_account/backtester.py 负责驱动回测:按结算货币把四个市场拆成资金池(CNY / HKD / USD 共享池),逐池调用回测引擎,再解析metrics.json与净值曲线。
最有冲击力的是差值归因(纯算术实现,可审计、可复现),把"影子 vs 真实"的 PnL 差拆解为五类:
noise_trades_pnl:不命中任何规则的交易累计盈亏——你的情绪单early_exit_pnl:盈利单提前离场少赚的部分late_exit_pnl:亏损单拖得太久多亏的部分overtrading_pnl:超出规则频率的过度交易missed_signals_pnl:残差项
配套的反事实 Top 5 会列出 5 笔"最该做没做 / 最不该做却做了"的交易,最终渲染成 HTML/PDF 报告(见 agent/src/shadow_account/reporter.py)。
六、上手使用与关键文件导航
快速上手:上传交割单 → 在对话中说"提炼我的策略"或"我的打法回测一下",系统会自动触发影子账户工作流,向你确认规则,然后输出回测矩阵与差值归因报告。注意红线:样本不足(盈利回合 < 5)会直接报错,且所有输出仅为研究用途,不对接任何下单通道。
关键文件一览:
- 数据契约:agent/src/shadow_account/models.py
- 规则提炼:agent/src/shadow_account/extractor.py
- 代码生成:agent/src/shadow_account/codegen.py
- 信号引擎模板:agent/src/shadow_account/templates/signal_engine.py.j2
- 回测与归因:agent/src/shadow_account/backtester.py
- 今日信号扫描:agent/src/shadow_account/scanner.py
- 技能文档:agent/src/skills/shadow-account/SKILL.md
影子账户的真正价值,不是给你一个"必赚公式",而是把你自己的盈利习惯物化成一份可回测、可量化、可反思的 SignalEngine——让你第一次看清:如果不被情绪干扰,你本可以做得多好。
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考