策略思路:动量 + 波动率
- 动量(RSI):用相对强弱指数判断市场是 “过热” 还是 “过冷”,RSI>55 时认为趋势向上,RSI<45 时认为趋势向下。
- 波动率(ATR):用平均真实波幅衡量市场波动大小,只有当波动放大时才入场,避免在 “死水一潭” 的行情里浪费手续费。
我的核心交易逻辑很简单:
当 RSI>55 且 ATR 突破阈值时,开多仓;
当 RSI<45 且 ATR 突破阈值时,开空仓;
出现反向信号或触发止损 / 止盈时,立即平仓。
后续测试其他品类将其他品类换成石油
调整过程:从黄金到原油,一步步修改策略
-
合约标的修改
最开始的代码是针对黄金(AU)主力合约写的,我需要把它改成原油(SC)。
在initialize函数里,把context.gold_underlying = 'AU’改成了context.crude_underlying = ‘SC’。
在_preload_daily_history函数里,把数据获取的合约代码从"AU_DOMINANT.SHF"改成了"SC_DOMINANT.SHF"。 -
数据加载与清洗
为了让回测更准确,我专门写了数据加载函数_load_crude_oil_history:
用panda_data.get_market_data从行情服务器拉取原油主力合约在回测区间(2025.03.10-2026.03.06)内的日线收盘价。
把日期格式从YYYY-MM-DD改成YYYYMMDD,方便后续计算。
去掉了收盘价为 NaN 的行,得到一个干净、按时间排序的价格序列。
3.交互式参数调整
在 PandaAI 的策略编辑器里,我可以很方便地修改策略参数:
仓位大小:把默认的动态仓位改成了每次固定交易 24 手(根据资金和风险承受力调整)。
RSI 周期:保持了默认的 14 天,这是最经典的设置。
阈值:把 RSI 的开仓阈值设为 55(多头)和 45(空头),过滤掉一些假信号。
回测结果:有惊喜,也有教训
核心数据
总收益:21.35%
年化收益:22.23%
最大回撤:-31.81%
夏普比率:0.5002
结果反思
从收益概览图可以看到,策略在大部分时间里是跑输基准(原油本身的走势)的,尤其是在 2025 年下半年到 2026 年初,出现了超过 30% 的最大回撤,这让我意识到:
这套策略在趋势行情里表现不错,但在震荡行情里会频繁止损,导致回撤过大。
夏普比率只有 0.5,说明风险调整后的收益并不理想,需要进一步优化风控。