JOURNAL / 量化交易

个人回测平台的搭建指南(三)

个人回测平台的搭建指南(三) 封面
本文目录
  1. 个人回测平台的搭建指南(三):使用虚拟资金完成一次 ETF 回测测试
    1. 一、这次测试要验证什么
    2. 二、当前使用的回测规则
    3. 三、回测参数设置
    4. 四、完整测试流程
      1. 4.1 获取标的行情数据
      2. 4.2 计算技术指标
      3. 4.3 生成技术信号
    5. 五、运行模拟回测
      1. 5.1 配置回测参数
      2. 5.2 系统如何逐日回测
      3. 5.3 查看回测结果
    6. 六、将回测结果交给 AI 做二次分析
    7. 七、结果分析
      1. 7.1 510300:收益为正,但策略质量一般
      2. 7.2 588170:表现更好,但不能过度乐观
    8. 八、这次测试暴露的问题
      1. 8.1 需要加入买入持有基准
      2. 8.2 需要保存每次回测记录
      3. 8.3 需要更真实的交易假设
      4. 8.4 需要降低震荡行情中的误触发
    9. 九、交易日志的作用
    10. 十、结论

个人回测平台的搭建指南(三):使用虚拟资金完成一次 ETF 回测测试

上一篇,我们已经搭建了回测平台的雏形,并在功能上已经形成了一个完整闭环流程。在本章我们将使用虚拟资金通过一个简单的 etf 策略来进行系统的测试。

回测的意义不是证明某个策略一定赚钱,而是检查这套规则在历史行情中是否能形成完整闭环:什么时候买入、什么时候卖出、资金如何变化、手续费和滑点是否计入、最大回撤是否可接受,以及策略是否存在频繁交易的问题。

本文只讨论系统测试和策略验证,不构成任何投资建议。

一、这次测试要验证什么

本次回测主要验证四件事:

  1. 策略能否根据历史日 K 自动生成买卖点。
  2. 虚拟资金、持仓数量、手续费和滑点是否能正确计算。
  3. 收益率、最大回撤、胜率、交易次数等指标是否能反映策略表现。
  4. 策略是否具备进入“准实盘观察”的价值。

当前系统仍然定位为个人辅助决策工具,不是自动交易系统。回测结果只能说明策略在历史数据上的表现,不能直接推导出未来收益。

二、当前使用的回测规则

当前平台默认使用的是 ETF_TREND,也就是 ETF 趋势策略。

买入条件大致如下:

技术评分 >= 70
收盘价 > MA20
MA5 > MA10 或 MA10 > MA20
RSI14 在 42 到 72 之间
当前没有持仓

卖出条件满足任意一个即可:

收盘价 < MA10
或 收盘价 < MA20
或 RSI14 < 40

这套规则本质上是一个趋势跟随策略:当 ETF 价格站上中期均线,短期趋势开始转强,并且 RSI 没有明显过热时买入;当价格跌破趋势支撑或动能转弱时退出。

需要注意的是,这不是高频策略,也不是盘口撮合策略。当前回测基于日 K 数据运行,交易价格按收盘价加减滑点进行模拟。

三、回测参数设置

本次回测使用虚拟资金,不涉及真实下单。

参数 数值 说明
初始资金 10000 本次模拟投入资金
仓位比例 0.95 单次买入最多使用 95% 现金
手续费 0.0003 按成交额计算
滑点 0.0005 用来模拟实际成交偏差
最小交易单位 100 买入数量按 100 份取整
策略类型 ETF_TREND ETF 趋势策略

如果只是做小资金测试,也可以把初始资金设置为 1000 元。但要注意,ETF 有最小交易单位限制,资金过小可能导致可买数量不足,回测结果会更容易受到取整影响。

四、完整测试流程

4.1 获取标的行情数据

这次先用两个 ETF 做测试:

代码 标的 用途
510300 沪深300ETF 宽基 ETF 测试
588170 科创类 ETF 波动更高的主题 ETF 测试

先以 510300 为例,获取从 2024 年 1 月 1 日到当前日期的历史日 K 数据。

image

为了避免数据源本身出错,我又打开同花顺进行价格比对,主要检查最新交易日、收盘价和走势是否一致。

image

这一步很重要。回测系统里最容易被忽略的不是策略,而是数据质量。如果行情数据缺失、日期错位、价格异常,后面所有指标和收益结果都会失真。

4.2 计算技术指标

行情数据确认后,进入 K 线详情页计算指标。

当前系统会生成这些指标:

MA5
MA10
MA20
MA60
RSI14
ATR14
成交量均线
量比
5 日涨跌幅
距离 MA20 偏离度

image

这些指标会保存为每日快照,后续的技术评分、信号生成和回测都会基于这些快照进行。

4.3 生成技术信号

指标计算完成后,点击“生成信号”。系统会根据 ETF 策略规则生成不同类型的技术信号,例如:

BUY_CANDIDATE
WATCH
AVOID
SELL_WARNING

其中 BUY_CANDIDATE 代表该标的进入技术候选状态,后续可以继续做 AI 风险分析或模拟回测。

510300 的最新技术信号如下:

image

从信号结果看,系统当时并不建议直接买入。这个结果并不影响本次测试,因为本篇重点是验证回测链路是否跑通,以及策略在历史区间内的整体表现。

接着我换成 588170,重复获取行情、计算指标和生成信号的流程。

image

可以看到,588170 的技术评分更高,说明它在当前规则下更接近趋势策略的买入条件。

五、运行模拟回测

5.1 配置回测参数

进入:

模拟回测 / Backtest

本次测试参数如下:

策略模式:ETF 趋势策略
初始资金:10000
仓位比例:0.95
手续费:0.0003
滑点:0.0005
最小交易单位:100
开始日期:2025-06-12
结束日期:2026-06-12

这里的手续费和滑点虽然不高,但必须保留。因为一旦交易次数变多,这些看似很小的成本会明显侵蚀收益。

5.2 系统如何逐日回测

点击“运行回测”后,系统会按交易日逐日推进:

读取当天 K 线
读取当天指标快照
计算技术评分
判断是否满足买入条件
判断是否满足卖出条件
计算成交价格、手续费和滑点
更新现金、持仓和总权益
记录资金曲线和买卖明细

当前回测采用的是简化交易模型:

项目 当前处理方式
买入价格 当日收盘价 × (1 + 滑点)
卖出价格 当日收盘价 × (1 - 滑点)
手续费 成交额 × 手续费率
买入数量 按最小交易单位向下取整
持仓方式 当前策略为单标的持仓

这套模型已经能覆盖基础模拟交易,但还不是完全真实的实盘撮合。

5.3 查看回测结果

运行趋势策略后,系统给出了资金曲线、当前持仓和交易明细。

image

image

回测完成后,重点在于如下的这些指标:

指标 观察重点
最终权益 资金最终变成多少
总收益率 整个区间的整体收益
年化收益率 把区间收益折算成年化后的结果
最大回撤 从高点到低点的最大亏损幅度
胜率 盈利交易占已闭合交易的比例
交易次数 是否存在过度交易
资金曲线 收益是否平稳,还是大起大落
买卖记录 具体信号是否合理

这里只看收益率是不够的。收益高但回撤很大,说明策略波动强;胜率低但还能赚钱,说明收益可能依赖少数几笔大盈利;交易次数太多,则可能说明策略在震荡行情里被反复洗出。

六、将回测结果交给 AI 做二次分析

这次我们没有直接依赖系统内置的 LLM 分析,而是把回测结果整理成结构化文本,再手动交给 GPT 做二次分析。

输入模板大致如下:

# ETF 回测结果分析请求

请你以量化交易辅助系统分析师的角度,帮我评估这次 ETF 回测结果。
重点关注策略稳定性、收益来源、回撤风险、交易频率、是否适合进入准实盘观察,以及后续应该补充的风控规则。

## 一、回测基本信息
- 标的代码:510300
- 策略类型:ETF 趋势策略
- 实际回测区间:2025-06-12 至 2026-06-12
- 初始资金:10,000.00
- 仓位比例:0.95
- 手续费率:0.0003
- 滑点率:0.0005
- 最小交易单位:100

## 二、核心绩效
- 最终权益:10,303.76
- 总收益率:3.04%
- 年化收益率:3.04%
- 最大回撤:-11.46%
- 已实现盈亏:+303.76
- 交易记录数:50
- 已闭合交易数:25
- 胜率:24.00%(6 赢 / 19 输)
- 盈亏比:1.16

## 三、风险与交易特征
- 最大回撤日期:2026-04-09
- 最大回撤点总权益:10,094.50
- 最好一笔卖出:2025-07-31,+6.84%,盈亏 +618.62
- 最差一笔卖出:2026-06-05,-2.61%,盈亏 -259.69

这样做的好处是,AI 不只看到一个最终收益率,而是能同时看到收益、回撤、胜率、交易次数和交易明细。分析会更接近真实复盘,而不是只围绕单个指标下结论。

七、结果分析

7.1 510300:收益为正,但策略质量一般

510300 的回测结果是:

指标 结果
最终权益 10,303.76
总收益率 3.04%
最大回撤 -11.46%
交易记录数 50
已闭合交易数 25
胜率 24.00%
盈亏比 1.16

这个结果说明策略最终赚钱了,但质量并不高。

主要问题有三个:

  1. 收益偏薄。 一年回测收益只有 3.04%,很容易被参数、交易成本或市场环境变化抹平。
  2. 交易次数偏多。 一年 50 条交易记录,说明策略在震荡行情中频繁进出。
  3. 胜率偏低。 25 笔闭合交易中只有 6 笔盈利,策略主要依赖少数盈利交易覆盖大量小亏损。

对 510300 来说,这套策略还不适合直接进入实盘。更合理的做法是继续优化过滤条件,比如提高买入阈值、加入趋势确认天数、减少连续买卖、或者增加买入持有基准对比。

7.2 588170:表现更好,但不能过度乐观

588170 的结果明显好于 510300,说明系统能在更强趋势的 ETF 上捕捉到行情。

但这并不代表策略已经稳定。主题 ETF 本身波动更大,趋势行情里收益可能很好,一旦进入震荡或回撤阶段,策略也可能迅速失效。

所以对 588170 的判断更适合是:

可以小仓位准实盘观察,但不适合直接重仓。

如果后续要继续测试,需要增加不同年份、不同市场风格下的回测,尤其要观察下跌和震荡区间里的表现。

八、这次测试暴露的问题

这次测试跑通了完整流程,但也暴露出几个下一阶段必须解决的问题。

8.1 需要加入买入持有基准

当前只看到策略自身收益,还看不到它是否跑赢“买入并持有”。

如果 ETF 本身一年涨了 20%,策略只赚了 3%,那策略就是失败的;如果 ETF 本身下跌,策略还能控制回撤,那才说明它有价值。

下一步应该加入:

ETF 趋势策略收益
ETF 定投策略收益
买入持有收益
超额收益

8.2 需要保存每次回测记录

只看一次回测结果,很难判断策略是否稳定。系统应该保存每次回测的参数、收益、回撤、交易明细和资金曲线,方便后续横向对比。

例如:

同一只 ETF,不同参数对比
不同 ETF,同一策略对比
ETF 趋势策略 vs ETF 定投策略
不同年份区间对比

8.3 需要更真实的交易假设

当前回测已经计入手续费和滑点,但仍然有简化:

没有 T+1 延迟
没有最小佣金
没有涨跌停限制
没有停牌处理
没有成交量约束
没有盘中止损止盈
没有分红除权影响分析

这些不会影响系统第一阶段测试,但如果未来进入准实盘观察,就需要逐步补齐。

8.4 需要降低震荡行情中的误触发

从 510300 的交易记录看,系统在震荡行情中容易频繁买入又快速卖出。这说明买入条件还不够严格,卖出条件也可能过于敏感。

后续可以考虑:

买入前要求连续站上 MA20
买入后设置最短持有天数
卖出信号需要连续确认
加入 ATR 波动过滤
加入成交量放大确认
限制短期内重复买入

九、交易日志的作用

回测只能告诉我们历史表现,交易日志更适合用来观察系统在真实时间推进中的表现。

如果某一天系统给出 BUY_CANDIDATE 或最终交易决策,可以在交易日志中记录:

当天 K 线状态
技术评分
AI 风险分
最终决策
是否执行
执行价格
后续结果

后续再回看这些记录,就能知道自己有没有按计划执行,也能判断系统信号在真实环境下是否有效。

十、结论

本次测试说明,当前平台已经能跑通一套完整的 ETF 回测流程:

获取行情数据
校验行情数据
计算技术指标
生成技术信号
运行模拟回测
输出资金曲线
查看交易明细
交给 AI 做二次分析
记录交易日志用于后续复盘

但从结果看,当前策略还不能直接进入实盘。510300 的收益偏薄、交易次数偏多、胜率偏低;588170 表现更好,但更依赖趋势行情和标的波动。

下一阶段的重点不是马上接入自动交易,而是提高策略可信度:

保存历史回测记录
加入买入持有基准对比
增加多 ETF 横向测试
检查不同年份和不同市场环境
优化震荡行情过滤条件
完善准实盘观察面板

只有当策略在不同标的、不同年份和不同市场环境下都能保持相对稳定,才适合进入小资金、低仓位的准实盘观察。

分享个人回测平台的搭建指南(三)

交流与讨论

评论由 Valine / LeanCloud 提供,点击后连接第三方服务。

搜索文章