个人 A 股日频量化交易系统:阶段性研究报告(2026-05 ~ 2026-07)

ydredx 37 分钟阅读 44 次阅读
个人 A 股日频量化交易系统:阶段性研究报告(2026-05 ~ 2026-07) 封面

个人 A 股日频量化交易系统:阶段性研究报告

报告期: 2026-05-27(设计定稿)— 2026-07-15 | 版本: v2.0 | 撰写: ydxred


摘要

本报告完整记录一套个人开发者构建的 A 股日频量化交易系统在约 7 周开发运行期(2026-05-27 至 2026-07-15)内的设计、实现与实证结果。系统覆盖数据工程(1,090 万行后复权日线 + 复权因子 + PIT 财务面板)、机器学习流水线(LightGBM 月度 walk-forward,47 特征,purge/embargo 防泄漏)、组合构建(防御/激进复合双袖 + 均线择时 + 碎单死区)、含 A 股制度细节的回测引擎(T+1、涨跌停、停牌、退市强平、按复权因子折算的整手粒度)、以及跨 Linux/Windows 双机的实盘执行链路(submit-then-verify 裁定链 + 四层守护自愈)。

主要发现:(1) 主策略在修复引擎级仿真偏差后的最公允口径(无偏引擎、仅沪深主板可交易票池、5bp 滑点)下,2.2 年累计超额 +4.5pp(年化约 +2pp,Sharpe 1.03,最大回撤 -16.0%)——存在薄的正期望,但 t≈0.5 远未达统计显著;(2) 报告期内发现并修复 3 个改写结论的引擎保真度缺陷,其中 hfq×整手偏差潜伏 46 天,使全部纸面账户持仓分布系统性偏离,教训被制度化为”不可变前向快照”;(3) 净收益的头号敌人被反复证实是换手×成本而非选股能力(模型 alpha 健康但被摩擦吞噬),V6 结构改造将年化双边换手从 22.9× 降至 14.8× 并使主板口径超额转正;(4) 系统当前处于”阶段 0 成熟、阶段 2 建成待资金”状态,开闸硬阻塞是资金规模(2,508 元 vs 最低可行约 10 万元)。


1. 引言

1.1 背景与目标

系统的既定目标是为个人投资者建立”研究回测 → 纸面验证 → 渐进式上真金白银”的完整闭环(README 定位语)。区别于机构系统,散户约束被显式写入设计文档(DESIGN.md v1.1):

约束取值影响
计算资源单台云服务器 8 核 / 15G排除高频/全内存方案,日频决策
数据预算Tushare Pro 5000 积分(¥500/年)数据面板化组织以省调用量(§3.3)
券商通道中泰同花顺(无 QMT 权限)执行被迫走 GUI 自动化(§7)
资金规模实盘账户 2,508 元一手门槛使开闸=空转(§8.5)
人力单人 + AI 辅助一切防线必须自动化

设计七原则中最具个性的两条:“AI 做减法而非做加法——LLM 用于避雷,不用于预测涨跌”离线 Sample 数据源保证全链路可在无网环境验证(几何布朗运动模拟 22 只代表性 A 股,含 ~2% 停牌、~5% ST)。

1.2 三阶段上线路线与当前位置

ADR 首条:SimBroker(纸面)→ NotifyBroker(半自动推送)→ QMTBroker(全自动),“策略未验证不上自动,每阶段有可观察的退出条件”。现实修正:QMT 的 20 万门槛不满足,插入阶段 2:easytrader + 同花顺 GUI 自动化(Windows 执行机 aguwin)——初始诉求”不依赖 Windows”让位于券商现实。

当前位置:阶段 0 为运行主力(10 个并行纸面账户);阶段 2 链路完整建成,2026-06-12 完成系统史上唯一一笔真实成交(000419.SZ 100 股 @4.87)的端到端验证后,总闸 auto_trade_enabled 持续关闭。

1.3 报告结构

§2 总体设计;§3 数据工程;§4 机器学习方法论;§5 策略与组合构建;§6 回测引擎与成本建模;§7 执行链路与可靠性工程;§8 实验与结果;§9 事故史与工程教训;§10 讨论;§11 结论与路线图。


2. 系统总体设计

2.1 架构总览

架构图

图 1:系统总体架构。研究与执行分离在两台机器上,跨机通信只有一条最小权限的 PG 反向隧道(Windows 端以 agu_executor 角色连回,只能读 signals/app_settings、写 orders/executor_health)。

2.2 部署形态

agu 上 9 个 systemd 服务(api / scheduler / agu-pg-tunnel / cloudflared / openresty / grafana / postgresql / forex-tunnel / daban-live)+ 2 个 timer(watchdog 每 2 分钟、backup 每日 03:30)。对外入口链:Cloudflare Tunnel → OpenResty(会话登录 + 限流与失败封禁 + 服务指纹隐藏)→ 三路分发(API / Grafana / 静态 Vue)。API/PG/Grafana 全部只监听本机回环地址。密钥全部在 .env(0600),YAML 零密钥。

仓库≠生产的治理:两台生产机均为非 git 平铺部署,靠 deploy.sh 单向白名单推送 + 反向漂移闸(线上比仓库新则中止推送,逼先回填)——该护栏源于一次真实事故:线上 agu_executor v1.2.1 曾被旧仓库版本静默覆盖;06-05 至 07-10 间仓库曾落后线上 35 天(07-10 单提交回填 7,586 行)。

2.3 规模指标(2026-07-15 实测)

维度数值
git29 提交 / main 单分支(初始提交 181 文件 20,835 行)
parquet~1.1GB:daily_hfq 10.90M 行×5,765 只(2016 起,含 241 只退市)、adj_factor 10.60M 行、daily_basic 10.19M 行、fina_indicator 37.9 万行×41 报告期
PostgreSQL11 表 67MB,orders 159,756 行(57 账户)
调度22 个 APScheduler 任务,499 次运行成功率 98.8%
测试25 文件 182 个,2026-07-15 实跑全绿
文档docs/ 6 份 1,375 行 + ROADMAP 决策日志 + audit/ 五轮审计档案

3. 数据工程

3.1 数据源与 fail-fast

DataSource 抽象下两个实现:SampleSource(离线 GBM 模拟)与 TushareSource(454 行)。工厂 make_data_source 为 fail-fast:type=tushare 无 token 直接 raise,不存在静默退回模拟数据的路径(05-30 审计曾误判后纠正)。残留风险是部署漏配:config.yaml 至今写 type: sample,线上全靠 .env ASHARE_DATA_SOURCE__TYPE=tushare 覆盖,无运行时硬校验(P2 遗留)。另一硬防线:北交所标的整体剔除——其历史数据由新三板协议转让价拼接,实测存在 +2000 倍量级的物理不可能单日跳变。

3.2 采集侧四层防护(06-04 事故的直接产物)

  1. 令牌桶限频 200 次/分钟(线程安全);
  2. 单调用指数退避 max_retries=3, backoff=2.0;
  3. 逐票容错 + 失败集多轮自补齐(fetch_retry_rounds=2)——“否则一只票抽风让整天 5,500 只全废,见 2026-06-04 事故”(代码注释原文);
  4. 失败比例熔断:失败票 > max(20, 30%) 时抛错让任务失败并告警,“而非把几乎全空的残缺数据当成功落盘”。

字段富化 _enrich_flags 按交易日批量回源真实字段:涨跌停价(pro.stk_limit 分板块/ST/注册制真实价,转比例以兼容复权尺度)、换手率(daily_basic)、ST 区间(namechange 推半开区间,只信 start_date 不信有残留的 end_date)、停牌(suspend_d 且仅对 volume==0 行)。数据契约 15 列,落盘前校验 OHLC 不变量与 ±60% 跨行跳变告警。

3.3 存储全景

存储组织规模覆盖更新
daily_hfq每标的一 parquet, zstd10.90M 行 / 581MB / 5,765 只2016-01→每日 16:30 滚动 7 天 upsert
daily (raw)同上4.35M 行 / 245MB2023-01→仅定向刷新(持仓∪近 5 日信号标的,~510 只/日)
adj_factor按年 10 文件10.60M 行 / 22MB2017-01→07-15 全量回填后每日增量(1 调用/日)
fundamental/daily_basic按年 10 文件10.19M 行2017-01→每日增量
fundamental/fina_indicator按报告期 41 文件37.9 万行 / 29 列2016Q1→2026Q1⚠ 无调度刷新(全部 mtime 停在 05-30,本次摸底新发现)
index_daily / index_weight / index_pool按指数000300/000905;权重 5.7 万行月末快照2016/2017→每日/120 天回看窗增量

面板化组织的动机(代码注释):daily_basic 按 trade_date 一次拉全市场约 5,000 行、fina_indicator 按 period 一次拉约 7,000 行——建 8-10 年面板只需”天数+季度数”次调用而非”股票数×季度数”次,这是 5000 积分预算下的关键设计。

PostgreSQL 侧 11 表分工:orders(15.98 万行,含幂等唯一键 account+signal_id+symbol+side+trade_date——“真钱系统最关键的约束,防崩溃重启重复下单”)、equity_curves(1.37 万行)、signals(191 行,研究↔执行契约)、equity_snapshots(20 行,不可变前向快照)、app_settings(8 键运行时配置)、executor_health(执行端心跳)等。

3.4 PIT 正确性与幸存者偏差

  • 财报对齐merge_asof(direction='backward', allow_exact_matches=False) 对齐 ann_date——披露当日不可用、T+1 生效;同日多期披露/重述保留报告期最新(重述 ann_date 更晚自动覆盖)。fina_indicator vip 只有 ann_date 无 f_ann_date,是该数据源固有精度上限。
  • 幸存者偏差include_delisted=True,L/D/P 三态全并入训练与回测(fetch 实拉 5,534 只);存储层正则专门兼容退市过渡代码(TS0018.SH 类)。
  • 指数成分 PIT:交易日 T 用 trade_date≤T 最近一期月末快照。
  • 已知瑕疵:purge/embargo 用日历日 pd.Timedelta(days=20) 而 label horizon 是 20 个交易日——20 日历日≈14 交易日,残余约 6 个交易日标签重叠(审计已记录,未改,方向是欠保守)。

3.5 每日数据管道

架构图

图 2:每日管道时序。依赖顺序靠 cron 间隔约定而非显式 DAG;跨机依赖为 T 日信号 → T+1 执行 → T+1 对账的闭环。


4. 机器学习方法论

4.1 概念分层(系统自述,MODELS.md)

TrainedBook (.pkl) = walk-forward 训练的”打分器”集合(按月一段 LightGBM),只给截面分数;② Strategy(代码) = 分数→目标持仓的规则层;③ MarketTimingSignal = 时间序列维度砍 beta;④ 失灵防线 = 健康度→仓位乘数 + 月度重训闸门。系统 2026-06 实证结论:“模型 alpha 健康,净收益主要被换手/调仓频率/择时摩擦决定”——这句话是贯穿后续全部结构改造的主线。

4.2 训练配置(pkl 反序列化实测,非文档转述)

说明
标签未来 20 交易日收益,截面前 30%=1 / 后 30%=0 / 中间 40% 丢弃binary + AUC
训练窗trailing 12 个月,每月末重拟合一段_tm12 后缀
purge20 日历日(≈14 交易日,见 §3.4 瑕疵)防 forward-return 泄漏
embargo推理时 pick() 叠加 label_horizon 天防”窗尾模型预测已含信息的未来”
训练票池trailing-60 日 ADV≥3,000 万的 PIT 流动池(_3e7 后缀),剔 ST/停牌/次新”在哪个票池有 alpha 就在哪训练”
LightGBMlr=0.05, num_leaves=63, ff=0.9, bagging=0.8/5, min_leaf=50, 200 轮早停 30验证集=每窗时序后 10%
价格口径全部 hfq(“改复权口径必须重训”)

现役 book(agu,07-08 重训晋升):26 窗,覆盖 2024-04→2026-05,平均 valid AUC 0.585。⚠ 文档漂移:MODELS.md 仍写”96 窗过 2018 熊市”,但 retrain_start=2023-01-01 使现役 book 已无熊市窗——训练履历与现役参数的坐标系差异需读者注意。

walk-forward AUC

图 3:现役 book 的 26 窗 valid AUC 序列。均值 0.585,但波动带 0.39~0.71——单窗塌方(2024-11 的 0.39、2026-01 的 0.48)依赖重训闸门与健康度分档兜底,AUC 是一个约 6 周滞后的慢指标。

4.3 特征体系(47 维)

A. 价量 11 维(hfq 因果滚动):f_ret_{1,5,10,20}、f_mom_{20,60}、f_vol_{20,60}、f_amihud_20、f_close_to_ma{5,20}。 B. 估值/规模/换手 9 维(daily_basic 日频快照,天然 PIT):ff_ep_ttm/ff_bp/ff_sp_ttm(比率取倒数,负值→NaN 交给 GBM 当缺失,避免 PE 非线性尾部)、ff_dv_ttm、ff_log_mv/ff_log_circ_mv、ff_turnover{,_f}、ff_vol_ratio。 C. 财务 26 维 + report_age(fina_indicator 季频,merge_asof PIT):盈利 5 + 利润率 3 + 偿债 5 + 营运 2 + 成长 6 + 单季 5 + ff_report_age(距最近财报公告天数)。缺失一律保留 NaN 由 LightGBM 原生处理。

feature importance

图 4:现役 book 平均 gain 占比 Top-15。头部由”披露节奏/微观结构/规模/波动”主导而非经典价值因子。ff_report_age 以 ~18% 居首是一个未决疑点——07-11 审计怀疑其”利用披露节奏与数据覆盖差而非真基本面信号”;消融模型(剔除后 26 窗 AUC 0.5846→0.5797,未塌陷)已训出,但”是否切换”的决策尚未落档。

4.4 月度重训:五道闸门 + 原子晋升

动机:TrainedBook 越过训练末日后永远返回最后一个子模型——walk-forward 的按月重拟合只发生在训练期内,不是线上重训;不重训则模型单调陈旧。retrain_job(每月 8 日 02:00,子进程隔离内存)读旧模型自身 cfg 忠实复现,闸门:①特征 schema 完全一致;②候选窗数≥12;③前沿确有前移(否则=本月数据不足的良性跳过);④候选近 6 窗 AUC ≥ max(0.51, 旧模型−0.03);⑤最新单窗 AUC≥0.50 硬下限(曾有单窗 0.485 被 6 窗均值掩盖混过闸门 4 的审计案例)。晋升=备份 .prev → 写 .candidate → os.replace 原子覆盖;推理侧每任务重新 load 无需重启。结果以 —result-json 文件为准(06-08 曾因 stdout 管道丢失把成功重训误报 failed)。

4.5 模型健康度 → 仓位乘数

第一道失灵防线(06-11 上线,当日模型正处 decaying):healthy(最新窗≥0.55 且近 6 窗均≥0.53)→×1.00;decaying(≥0.50)→×0.65;collapsed(<0.50)→×0.30 只留防御底仓。发布到 app_settings 供执行端缩减买入预算;fail-open(读不到→×1.0 不阻断)。与重训闸门的分工:“健康度管敢押多少(慢指标),重训闸门管换不换模型,第二信号源规则袖是 collapsed 时顶得上的备胎”。当前值:healthy ×1.0(auc_latest 0.620)。


5. 策略与组合构建

5.1 策略族谱

策略机制依赖 .pkl定位账户
ml_2sleeve复合双袖(§5.3)生产信号源live_paper(全A)/ live_paper_mb(主板)
ml_2sleeve_j同袖结构+松绑择时+权重 40/60A/B:择时松紧live_paper_2sj
ml_2sleeve_tp基线+止盈 20%+移动止损 10%A/B:离场规则live_paper_2tp
ml_lgbm纯防御单袖对照live_paper_fund_a
index_enhancew∝w_idx·exp(tilt·z),reb20✓(csi500enh)独立线;tilt 已置 0(§8.6)live_paper_csi500
smallcap5 因子等权规则(刻意无 ML:小盘易过拟合)独立线live_paper_smallcap
rule_div_qualitydv+ep+low_vol 等权第二信号源候选(与 ML 相关性实测 0.463)live_paper_rule_div
etf_rotation双动量 + 绝对动量避险切国债 ETF2 万小资金产品线live_paper_etf
daban涨停接力 ML(20bp 滑点+冲击模型)已冻结;研究移交 daban_lablive_paper_daban(停)

5.2 MLStrategy 规则层细节

每个交易日 on_bar:
  exposure = timing.exposure(today)            # 择时缩放, ≤1e-6 判 risk-off 清仓
  if 到调仓日:
      score = book.pick(today).predict(feats)  # embargo 后最近窗
      pool  = PIT 流动池(ADV≥门槛, 剔ST/停牌/次新)
      picks = rank_and_pick(score, K, rank_buffer, max_entry_runup)
      # rank_buffer: 已持仓在 top-(K+buffer) 内不卖(防边界抖动换手)
      # 反追涨: 当日涨幅≥7%的"新票"剔除(T+1 开盘追高的逆向选择), 已持仓不强卖
      target = 等权 × target_total_weight × exposure
  每日: 组合级止损/止盈/移动止损检查(优先于调仓)

已知短板(ROADMAP S1,最高优先技术债):仓位构建纯等权,无协方差/风险预算——“分散了持仓没分散风险”;计划以 ~120 行纯 scipy 重写 HRP。

5.3 复合双袖与 V6 结构改造

架构图

图 5:复合双袖合成。星号项为 2026-07-15 V6 改造:激进袖调仓 5→10 天 + 碎单死区 0.5% 净值。改造依据为 7 变体消融实验(§8.3);动机是观察期监控自 06-03 上线首日即坐实的头号风险——年化双边换手 27.6×~28.4×,主板口径 5bp 滑点下超额为负。

择时参数史体现同一主线:稳健王定稿二值 floor0.6(8 年全周期实证:连续模式慢牛长期欠仓踏空,二值”趋势一上来就满仓吃 beta”);J 变体源于 06-05 归因——“杀死进攻的不是权重而是择时”(调权重上行捕获死卡 37%,松绑择时立刻跳到 43-46%)。


6. 回测引擎与成本建模

6.1 时序契约与防未来机制

事件驱动日频引擎(325 行),契约:T 日策略产单 → T+1 开盘价撮合(收盘价只用于估值)→ mark-to-market → settle_day_end(T+1 买入解锁,T+2 可卖)。防未来三机制:①history = 按 trade_date 升序的连续前缀切片(预算行号 O(1),注释标注 ~100× 加速);②full_bars 仅 initialize 期间可用,之后置 None——“防止策略在 on_bar 偷看未来”;③退市强平先于当日估值。生产信号链与回测同源:signal_job 就是滚动重跑引擎取末日 pending_orders——消除了”回测一套、实盘另一套”的口径分裂。

6.2 A 股制度细节

制度实现备注
T+1Account 三态:cash / sellable / bought_today,settle 日终解锁超卖/超扣带 1e-6 容差 raise
涨跌停T+1 开盘价==limit 即封板拒单盘中路径日线不可见(daban_lab 因此独立)
停牌显式标记或 volume≤0
退市断更次日按最后收盘价合成 bar 强平,完整过滑点/费用06-15 死仓事故产物
整手lot = max(1, round(100/adj_factor)),清仓允许零股整笔07-15 修复(§6.4)
科创/创业 200+1 股简化为统一 100 倍数自认简化

6.3 成本模型

$$\text{cost} = \underbrace{\max(gross \times 0.00025,\ 5)}{佣金,双边} + \underbrace{gross \times 0.001\ [卖]}{印花税} + \underbrace{gross \times 0.00002}{过户费,双边} + \underbrace{5bp}{滑点} \ (+\ \eta\sigma\sqrt{participation}\ 可选冲击)$$

差异化口径:小盘袖 15bp 滑点;打板 20bp + 冲击 η=1.0/σ=0.05;ETF 免印花过户。已知口径分裂(如实记录):主引擎印花 0.001 vs daban_lab 0.0005(2023-08 减半后的现值)——主引擎对卖出成本高估一倍,方向保守但未注释”故意”;过户费万 0.2 亦是 2022 调降前口径。分边滑点机制已就绪,等待执行差额报表实测值回填——“让回测成本贴实测而非拍脑袋”。

6.4 hfq×整手偏差:发现、修复与验收

根因:引擎在后复权价(中位 94 元 vs 真实 14.8 元)上按常量 100 股取整 → 最小成交金额放大 ~6 倍 → 小权重持仓系统性归零(指增 24% 指数权重买不进),且被归零的恰是高复权因子票(=历史长牛股)。由指增账户 -20pp 超额缺口的定量分解(敞口 -10.4 / 选股 -8.0 / 成本 -1.8)倒查坐实,潜伏 46 天。

修复lot = max(1, round(100/adj\_factor))(换算约定 hfq=raw×factor 经实测验证:000419.SZ 80.22/16.7468=4.7902≈raw 4.79);因子按交易日拉取(1 调用/日)+2017 起全量回填;缺因子回退 100=旧行为 fail-safe。对抗性复审在部署前揪出两个会使修复整体失效的 blocker:①bars 数据契约自带 adj_factor 列但全库为占位假值 1.0——merge 撞名 KeyError 被引擎吞掉、修复静默失效(独立金丝雀同时撞出同一雷);②cap_buy_shares_by_cash 内部残留 100 股网格,先于按票取整执行,小单在撮合层复活归零。两者均修复并固化为引擎级回归测试。

验收(规模无关口径,1,000 万本金指增纯复制):仓位 53.4%→90.8%,年化跟踪误差 13.4%→4.9%,超额 -29.6→-3.3pp(价格指数口径,含息后≈0)。结论改写:无偏引擎下主策略主板口径超额从 -1.6% 变为 +4.19%(“实盘票池无正期望”旧结论作废)。附带发现:100 万本金物理上无法纯复制 CSI500(64.8% 权重的单票目标金额<一手)。

6.5 strict 打板引擎(独立口径)

主引擎物理上吃不到打板利润发生的两个时刻(封板瞬间、隔夜跳空),daban_lab 以 mootdx 5 分钟线 + 诚实成交模型独立回测,三次口径迭代每次推翻上一版成绩:v1 开板即买(幸存者偏差,3 周实盘 -2.6%/笔戳穿)→ v2 回封确认(死于单 bar 路径歧义:85.8% 样本的 OHLC 无法证明”封→开→回封”顺序,全部 alpha 集中其中)→ v3 strict(只认跨 bar 可证明顺序;该口径下 47,877 事件每笔全量净 -0.15%,“暂无可证明正期望——上真钱无限期后移”)。残余乐观假设自认:回封瞬间涨停价满额成交、T+2 顺延按开盘价;根除只能靠盘中 ~20 秒轮询的 ticks 顺序快照积累(07-13 起每日 4-7MB)。

6.6 测试覆盖

182 个测试全绿;引擎相关 7 文件 54 个,覆盖 T+1 锁仓不变量、现金永不为负、涨跌停/停牌拒单、退市强平价格与时点、strict 打板 8 个顺序判定用例、整手修复的引擎级端到端回归护栏(构造带假 adj_factor 列的 bars + factor=16 → 断言 lot=6 且 48 股小单成交不被 100 网格归零)。执行端测试最多(29 个),符合”真钱链路测试密度最高”的直觉。


7. 执行链路与可靠性工程

7.1 dry_run 三级闸门与前置保护

优先级:CLI 显式 > 本地 config > 面板总闸 auto_trade_enabled——默认关=安全 dry-run,读不到配置也回落 dry-run。前置保护链:实盘读持仓失败即中止(fail-closed,“绝不能当空仓继续——会重复买入/错卖”);信号新鲜度双闸(交易日口径 T+1 主闸 + 自然日 4 天兜底,交易日历由调度端发布、超 5 天判不可信回退);非交易日实盘跳过;健康度乘数缩减预算。

7.2 submit-then-verify 裁定链

架构图

图 6:裁定链。设计原则贯穿注释:“漏单可补,超买不可逆”。该链是 06-10 首单日事故(GUI 返回”已报”但券商全天 0 委托——“easytrader 无异常=已报”假设被实测证伪)的直接产物,06-12 以真实成交完成闭环验证。定价侧同样事故驱动:过期参考价×1.02 曾超出主板”价格笼子”±2% 被交易所拒单 → 改为腾讯实时行情卖一/买一为基准夹逼 + 涨跌停二次兜底。

7.3 aguwin 四层守护自愈链

组件职责关键防线
1agu_health_agent(常驻,v1.2.0)10s 心跳→PG;600s 节流账户读取(防触发防拷贝验证码);持仓整账户替换同步;自动恢复状态机(连续 3 轮确认才动手,最小间隔 1800s+日上限 4 次+恢复后 150s 验证否则锁定等人工)缓存超龄不许”洗绿”;心跳携带宿主机内存+低内存点名 top 进程(07-14 饿死事故产物)
2xiadan_watchdog(2 分钟)进程不在→拉起;在但登出→180s 宽限后重拉执行端持锁跳过;恢复 cap 3 次/30min;launch 退避防登录风暴
3agu_login(常驻)ddddocr 识别 4 位验证码自动登录重试 4 次冷却 120s 防触发账户锁定
4keep_desktopRDP 断开事件→tscon 重定向 console 保活桌面只在会话真断开时动手

加上每周日 04:00 自愈重启(AutoAdminLogon + BootTrigger,07-15 实测断电→满血 10 分钟无人值守),与 agu 侧调度器看门狗(每 2 分钟查心跳、stale>360s 自动 restart+告警,sudoers 仅授权这一条命令)+ 站外 deadman(healthchecks.io,“agu 整机宕由外部独立告警”)构成完整监督塔。互斥协调靠文件锁(xiadan.lock,>180s 视为崩溃残留夺锁)。

7.4 告警体系

六大类(执行端离线/降级、宿主机内存、真实订单回报、信号过期、实盘观察四项、任务失败),通道 wecom_aibot,同 key 1800s 节流+状态翻转才推;观察类至少 6 小时节流。关键防御:真实订单告警只认 live 账户非 dry_run 订单(orders 表大量纸面成交绝不能当真实下单推送),水位机制防重扫。已知盲区(如实记录):失败即时告警白名单只含 4 个关键任务,9 个纸面任务失败只落库不推送。


8. 实验与结果

8.1 纸面账户全景

equity curves

图 7:全部主要纸面账户净值(2024-04 归一,含 CSI300 虚线基准;每日重算回填口径¹)。可见:2sj(松绑择时)持续领先;csi500 指增长期贴底(§8.6 解剖);2024-10 的跳升是全体系吃到的行情 beta。

账户收益SharpeMaxDD账户收益SharpeMaxDD
live_paper+38.8%1.03-13.1%live_paper_csi500+30.9%0.83-13.1%
live_paper_2sj+67.4%1.39-12.5%live_paper_smallcap+45.9%0.90-21.4%
live_paper_2tp+42.9%1.18-13.4%live_paper_rule_div+31.5%0.96-11.2%
live_paper_mb+31.8%0.90-18.1%live_paper_etf(2018 起)+59.6%0.43-22.7%
live_paper_fund_a+11.9%0.39-18.3%同窗 CSI300+33.4%

¹ 2026-07-14 收盘、修复前引擎口径(backtest_runs 实查);07-15 晚起整段重算跳变,07-13/14 前向快照定格旧口径作为对照锚点。

8.2 主策略核心结果(无偏引擎)

主板可交易票池(=实盘信号同池)、5bp 滑点、2024-04→2026-07:

配置换手收益超额SharpeMaxDD订单
V015.6×+37.6%+4.19pp1.02-16.1%1,618
V6(现行)15.3×+37.9%+4.52pp1.03-16.0%1,210

统计判定:+2pp/年 超额,t≈0.5——不足以排除运气;结构与参数均在同一段历史上选出,存在选择偏差。该数字应视为样本内上界,真判定依赖前向快照按年积累。

8.3 换手消融

ablation

图 8:7 变体消融(主板,偏差引擎口径;无偏复测 V0 +4.19 / V6 +4.52 见 §8.2)。三个机制发现:激进袖 10 天是甜点(5 天=无谓换手,20 天=信号变馊打回原形);rank_buffer 在主板口径是毒药(V3 -5.8pp);碎单死区稳定小幅增益。V6 使 12 个月滚动窗换手从 28.4× 回落至 ~14.8×(观察期告警将自然静默),订单数 -25% 直接缓解小资金最低佣金磨损。

8.4 择时保费(牛市窗口的系统性现象)

monthly excess

图 9:2025-01 以来月度超额。基准大涨月(灰柱高)主账户超额深负、基准跌月转正——低 beta 签名。同模型同袖结构、仅松绑择时的 2sj 超额 -1.6% vs 主账户 -10.3%(18 个月窗),择时差异解释了几乎全部落后。全窗(含 2024 震荡)主账户仍 +4.5pp 正超额:这是”防回撤设计在单边牛市支付保费”的已知代价,其取舍是尚未显式决策的风险偏好问题——2sj 的 A/B 数据已足够支撑这个决策会议。

8.5 资金规模经济学

capital drag

图 10:V6 结构下年成本磨损 vs 资金规模(最低佣金 5 元驱动的非线性)。2 万元时磨损 ≈26%/年,10 万 ≈5.6%/年,50 万 ≈2.9%/年——对照回测超额 ~2pp/年(绿虚线),策略经济性在约 10 万以下不成立,50 万以上才接近纸面成本结构。这就是”2,508 元开闸=空转”审计结论的定量版本,也是路线图中”补资金先于一切策略优化”的依据。

8.6 指数增强线解剖(模型证伪案例)

live_paper_csi500 相对中证 500 的 -20.2pp 缺口分解(复核闭合):敞口拖累 -10.4pp(引擎整手偏差,已修)+ 选股 -8.0pp(production_csi500enh 成分内 RankIC≈0.004——模型从上线第一天就没有排序能力,且不在月度重训范围)+ 成本 -1.8pp(零 IC 倾斜制造 4.5× 无效换手)。处置:tilt 置 0(纯复制),账户转型为引擎保真度金丝雀(修复后其跟踪误差就是引擎误差的直读表)。这是一个”模型上线后被自家取证降级”的完整案例。

8.7 因子健康监测的统计学教训

07-10 告警”ep 因子 IC 衰减 57%(t=4.0)“经复核为统计幻觉:重叠 IC(20 日 horizon 日度采样)使 t 虚高 √20 倍,校正后 ≈0.9;周度序列连续 6 周回升;体检票池(小盘 ADV≥500 万)与使用方票池(ADV≥3,000 万)口径错配。决策=因子不动;真问题在监控自身——固定全周期基线等于永远在问”因子还像黄金年代吗”。

8.8 对照实验:AI 主观选股(进行中)

作为”量化管道盲区”的对照,2026-07-15 落档一个 AI 基本面选股纸面实验(茅台/伊利/吉比特/公牛/宇通等权,125 交易日判定 vs CSI300)。研究过程的副产品对系统更有价值:尽调淘汰原因中半数是治理型风险(实控人造假前科、资金占用、高位减持、留置调查)——纯数据驱动的量化管道对这类风险结构性失明,未来若做基本面袖需补治理黑名单层。


9. 事故史与工程教训

架构图

图 11:事故时间线。

模式提炼(每条有≥2 个实例支撑):

  1. 单点依赖+静默失败是所有爆雷的公共形态(数据源单点/时间语义单点/执行机资源单点),修复模式收敛为同一套:容错 + 完整性校验 + 把静默失败改成点名告警。
  2. “不信文档只信运行态”的审计方法论反复兑现:07-10 复审刻意”忘记记忆从零读线上代码”,抓出此前所有轮次遗漏的 P0(watchdog 编码 bug)。
  3. 假设必须用真实通道证伪:“easytrader 无异常=已报”在首单日被券商全天 0 委托戳穿;“GUI 弹窗关掉=成功”实测是把单取消了。
  4. 诚实核算贯穿:ETF 线 131%→58% 的五步归因(前视 -24pp/无摩擦 -46pp…);打板三级口径每级推翻上一级;被推翻的结论用删除线留痕而非删除。
  5. 回测保真度缺陷的发现全部靠”纸面与预期的量化偏差”倒查(死仓→退市、alpha 异常集中→bar 歧义、指增缺口→整手),而非代码审读——这意味着纸面前向期本身就是引擎验证期,两者的时钟不能分开计算。

10. 讨论

10.1 局限性(按严重度)

  1. 前向证据几乎为零:不可变快照 20 行/3 观察日。全部业绩为每日重算回填,策略结构在同段历史上选出——一切收益数字是样本内上界
  2. 超额不显著:t≈0.5,需按年计的前向期区分技巧与运气。
  3. 择时保费未显式定价:牛市落后两位数是设计后果,但取舍从未开会拍板。
  4. 资金规模死锁:经济性在 10 万以下不成立(图 10),当前 2,508 元。
  5. 执行技术天花板:GUI 自动化本质易碎(本报告 §7 的全部防线都是在为这个选择付费);根除靠 miniQMT/XTP,有资金门槛。
  6. 数据缺口:fina_indicator 无调度刷新(8 月硬截止);日线单真源;实时行情单端点;benchmark_value 列从未写入。
  7. 模型层未决项:ff_report_age 头号特征疑似伪信号(消融已训未裁决);现役 book 无熊市窗;单一 LGBM 族 alpha 来源。
  8. 治理型风险盲区:量化管道对造假前科/资金占用/质押类风险失明(§8.8)。

10.2 效度威胁(threats to validity)

内部效度:引擎三次保真度修复说明”仿真正确性”是渐进逼近而非既成事实,不排除仍有未发现偏差(当前已知残余:印花税口径偏保守一倍、退市强平近似、无冲击模型的常规口径)。外部效度:回测窗 2024-04 起仅 2.2 年且以结构性牛市为主,防御设计的价值端(2018/2022 型熊市)在现役 book 与主窗口内均无样本。结论效度:多账户/多变体并行下的”最佳者”(如 2sj)天然带多重比较偏差,任何切换决策都应以前向快照而非回填曲线为准。

10.3 阶段判定

以系统自设的上实盘三前提检验:①纸面前向站住——积累刚开始,未满足;②下单链路+风控验证——已满足(06-12 实测);③最小资金试水校准滑点——被资金规模阻塞。判定:基础设施完备、证据积累期。以 07-15 引擎修复为界:此前的纸面历史是引擎验证期,此后的前向快照才是开闸决策的合格证据。


11. 结论与路线图

结论:这套系统在 7 周内最有价值的产出不是 +4.5pp 的样本内超额,而是三样更持久的东西:一套与实盘同源的可信仿真基座(三次保真度修复 + 182 测试 + 金丝雀验收)、一套把事故转化为结构性防线的工程纪律(五轮审计 + 六类告警 + 双机守护塔)、以及一套允许结论被推翻且留痕的研究文化(strict 口径、删除线、消融实证)。策略本身的 alpha 是薄的、未经前向证明的——但系统已经具备了”用最小代价诚实地发现这一点”的能力,这正是散户量化最稀缺的资产。

路线图(依赖排序):

事项前置/截止
1 个月内fina_indicator 纳入调度8 月中报季硬截止
V6 证伪线验收(orders 收敛到预测)2~3 周
ff_report_age 消融裁决落档noage 模型已就绪
观察重算曲线 vs 旧快照偏离07-15 晚起
资金决策前前向快照积累 ≥3 个月快照制度已运行
择时松紧风险偏好显式决策2sj 18 个月 A/B 数据在桌
HRP 替换等权(S1 技术债)规则袖基线已满 4 周
开闸条件(全部满足)资金≥10 万(理想 20-30 万);前向口径正超额;小额试水实测滑点≤10bp
远期miniQMT/XTP 替换 GUI 自动化资金+券商权限

附录 A:调度任务全清单

工作日:16:30 fetch_data → 17:25 model_health → 17:30 signal → 17:35 signal_push → 18:00 sim_trade → 18:10 paper_trade → 18:11 2sj → 18:12 ie → 18:13 2tp → 18:14 etf+sc → 18:16 mb+fa → 18:18 rule → 18:30 daily_summary;15:40 execution_report。周五 18:40 monitor(因子体检);周六 09:00 compare_report;每月 1 日 etf_forward_report;每月 8 日 02:00 retrain;每分钟 alert+heartbeat。全部任务 misfire_grace=600s、max_instances=1、星期字段强制用名称(06-09 事故防线)。

附录 B:关键运行数据(2026-07-15)

服务全绿(agu 9 服务 + aguwin 8 任务);数据新鲜至 07-14(除 fina_indicator 停 2026Q1);实盘账户现金 2,508.08 元 + 000419.SZ 100 股(券商真实成本 4.92);告警通道 wecom_aibot + 站外 deadman;备份每日 03:30 连续成功、保留 14 天(已知短板:无异地副本)。

附录 C:复现指引

主要分析脚本均已入库:scripts/turnover_ablation.py(换手消融)、scripts/cost_stress.py(滑点阶梯)、scripts/backfill_adj_factor.py(因子回填)、scripts/fund_ablation.py(特征消融)、scripts/claude_picks_track.py(选股实验跟踪);本报告配图生成逻辑见 git 历史(matplotlib,数据源为线上 PG/parquet/pkl)。图表数据截面:2026-07-15。

引用本报告业绩数字时,请注意 §8.1 脚注的口径警告:纸面曲线随每日重算与引擎演进而变,以 equity_snapshots 前向快照口径为准

分享这篇文章

评论 (0)

  • 加载评论中…

发表评论