黄金阶梯策略详解
策略概述
黄金阶梯策略是一种改进版的 SAR(抛物线)趋势跟踪策略,通过引入波动均值(vol_ma)和 ATR 动态调整机制,对传统 SAR 算法进行优化,实现更灵敏的趋势识别和止损设置。
核心代码位于 E:\钱龙\py\量化策略\黄金阶梯终稿.py,函数入口为 calculategoldenladder(df)。
策略原理
1. 改进版 SAR 抛物线算法
传统 SAR 算法使用最高价和最低价的极值来追踪趋势,黄金阶梯策略在此基础上引入波动均值(vol_ma)作为动态边界:
# 计算波动均值
ranges = np.zeros(length)
for i in range(1, length):
ranges[i] = max(high[i], close[i-1]) - min(low[i], close[i-1])
vol_ma = pd.Series(ranges).rolling(window=ma_period, min_periods=1).mean().values
波动均值计算的是每日振幅(当日最高价与前日收盘价的最大值 减去 当日最低价与前日收盘价的最小值)的移动平均,反映市场的真实波动水平。
2. 趋势跟踪与 ATR 动态止损
策略在 SAR 的基础上,使用 vol_ma 作为动态边界:
- 做多趋势:SAR 起点 = 最低价 - volma * volmult,SAR 向上追踪
- 做空趋势:SAR 起点 = 最高价 + volma * volmult,SAR 向下追踪
加速因子(AF)随趋势强化而递增,实现趋势加速跟踪:
if high[i] > last_ep_high: # 创出新高
ep_high = high[i]
af = min(last_af + af_step, af_max) # AF 递增,上限 af_max
else:
af = last_af # AF 保持不变
sar = last_sar + af * (ep_high - last_sar) # SAR 向上推进
核心参数
| 参数 | 默认值 | 说明 |
|---|---|---|
af_step | 0.10 | 加速因子步长,每次创新高/新低时增加的量 |
af_max | 0.15 | 加速因子最大值,限制 SAR 最大推进速度 |
ma_period | 20 | 波动均值计算周期(交易日) |
vol_mult | 1.0 | 波动倍数,控制 SAR 与价格的偏移量 |
做多/做空转换逻辑
策略维护一个 trend 状态变量(1.0 表示做多,-1.0 表示做空):
做多转做空(多头止损)
if trend == 1.0:
if close[i] < last_sar: # 收盘价跌破 SAR 线
trend = -1.0 # 转为做空
sar = high[i] + vol_ma[i] * vol_mult # 做空起点
af, ep_low = af_step, low[i] # 重置 AF 和极值
做空转做多(空头止损)
else: # trend == -1.0
if close[i] > last_sar: # 收盘价突破 SAR 线
trend = 1.0 # 转为做多
sar = low[i] - vol_ma[i] * vol_mult # 做多起点
af, ep_high = af_step, high[i] # 重置 AF 和极值
买卖信号生成规则
信号基于 SAR 支撑/压力线的消失来识别:
买入信号 - 压力线消失
if res_line[i] > 0 and res_line[i+1] == 0:
signals[i+1] = 1 # 买入信号
- 前一日存在压力线(做空状态)
- 当日压力线消失(转为做多)
- 表示空头趋势结束,多头趋势开始
卖出信号 - 支撑线消失
elif sup_line[i] > 0 and sup_line[i+1] == 0:
signals[i+1] = -1 # 卖出信号
- 前一日存在支撑线(做多状态)
- 当日支撑线消失(转为做空)
- 表示多头趋势结束,空头趋势开始
交易记录
策略记录每笔交易的买入/卖出日期、价格和收益率:
active_trade = {'buy_date': dates[i+1], 'buy_price': close[i+1]}
# ... 卖出时:
active_trade.update({
'sell_date': dates[i+1],
'sell_price': close[i+1],
'profit_rate': (close[i+1] - active_trade['buy_price']) / active_trade['buy_price']
})
绩效统计
策略自动计算以下绩效指标:
| 指标 | 说明 |
|---|---|
| 总交易次数 | 完成的买卖交易笔数 |
| 总收益率 | 所有交易收益率之和 |
| 平均收益率 | 单笔交易平均收益率 |
| 胜率 | 盈利交易占比 |
| 单笔最高收益 | 最佳单笔交易收益率 |
| 单笔最大亏损 | 最差单笔交易收益率 |
策略特点
- 趋势跟踪:在趋势明确时快速跟随,在震荡市中减少假信号
- 动态止损:基于波动率动态调整止损线,适应不同市场环境
- 双向交易:支持做多和做空双向操作
- 参数可调:核心参数可针对不同品种和周期优化
相关文件清单
Python 实现
| 文件 | 路径 | 说明 |
|---|---|---|
黄金阶梯.py | E:\钱龙\py\量化策略\黄金阶梯.py | 基础版本实现 |
黄金阶梯终稿.py | E:\钱龙\py\量化策略\黄金阶梯终稿.py | 最终版(含绩效统计) |
黄金阶梯终稿统计.py | E:\钱龙\py\量化策略\黄金阶梯终稿统计.py | 统计回测版本 |
黄金阶梯终稿统计元宝.py | E:\钱龙\py\量化策略\黄金阶梯终稿统计元宝.py | 元宝大模型生成版 |
黄金阶梯绘图版.py | E:\钱龙\py\量化策略\黄金阶梯绘图版.py | 可视化版本,绘制 SAR 线和信号 |
Dart 手机版
| 文件 | 路径 | 说明 |
|---|---|---|
手机黄金阶梯glodenladderutils.dart | E:\钱龙\py\量化策略\手机黄金阶梯glodenladderutils.dart | 手机端 Dart 实现 |
依赖工具
| 文件 | 路径 | 说明 |
|---|---|---|
method_all.py | E:\钱龙\py\method_all.py | MySQL 查询、数据获取工具 |
tool.py | E:\钱龙\py\tool.py | 数据库连接等基础工具 |