作者:老余捞鱼
原创不易,转载请标明出处及原作者。

写在前面的话:我用一个简单的小众指标“Williams %R”,做了一套超实用的买卖策略,在苹果股票上回测出21.48%的收益率,胜率83%!策略+代码都打包送上,代码简单,适合小白上手。
一、什么是 Williams %R ?
很多朋友炒股看KDJ、MACD、RSI,看得头大。我今天介绍的这个叫「Williams %R」,其实比这些还简单。它的作用就一个字:抓“拐点”!
📌 就是告诉你:现在是不是该买了,或者差不多该卖了。
✅指标范围:0到-100
- 高于 -20:有点“贵”了,市场可能过热了(别急着买);
- 低于 -80:便宜了,可能快反弹了(可以考虑买)。

说白了就是:看价格处在过去一段时间的相对位置,判断是不是“超买”或“超卖”。
📊 公式如下(不用死记,代码自动算):
%R = (最近14天的最高价 - 当前收盘价) / (最高价 - 最低价) * -100
二、策略怎么玩?
只需记住两件事,就能让这个策略跑起来👇
🟢 买入信号:指标低于 -80(超卖)
这说明股价被低估了,可能反弹了,考虑进场。
🔴 卖出信号:指标高于 -20(超买)
说明股价已经涨得差不多了,考虑出场。
策略就是这么简单粗暴,不追高,不杀跌,专挑便宜货买、高位货卖。
而除了简单的超买超卖判断,这个指标你还可以拿来:
- 搭配其他指标使用(比如MACD做趋势判断,WR做拐点判断);
- 看趋势强度(-20~-50常出现在上涨趋势);
- 看背离信号(价格创新高但WR没创新高 = 可能反转)。
三、实战回测
我们用 Python 把这个策略跑了一遍,看看2024年它在苹果股票上能不能跑得动。
📅 回测时间:2024年1月1日到11月5日。
💰 初始资金:10,000美元。
📈 回测收益:21.48%。
回测结果一览表:
项目 | 数值 |
---|---|
初始资金 | $10,000 |
最终资产 | $12,147.81 |
总收益 | $2,147.81 |
总交易次数 | 6次 |
盈利次数 | 5次 |
胜率 | 83.33% |
最大单笔盈利 | $950.99 |
最大单笔亏损 | -$163.13 |
📌 交易明细如下:
苹果K线+Williams %R指标图(买卖点标注)

策略交易历史如下表:
Transaction History:
Date Action Price Transaction Cost Cash Position Profit
0 2024-01-03 Buy 184.25 0.18 0.00 54.27 NaN
1 2024-01-18 Sell 188.63 0.19 10237.34 0.00 237.53
2 2024-02-20 Buy 181.56 0.18 0.00 56.38 NaN
3 2024-03-20 Sell 178.67 0.18 10074.03 0.00 -163.13
4 2024-03-26 Buy 169.71 0.17 0.00 59.36 NaN
5 2024-04-11 Sell 175.04 0.18 10390.07 0.00 316.21
6 2024-04-17 Buy 168.00 0.17 0.00 61.84 NaN
7 2024-05-03 Sell 183.38 0.18 11340.89 0.00 950.99
8 2024-07-24 Buy 218.54 0.22 0.00 51.89 NaN
9 2024-08-13 Sell 221.27 0.22 11482.12 0.00 141.45
10 2024-09-16 Buy 216.32 0.22 0.00 53.08 NaN
11 2024-09-19 Sell 228.87 0.23 12147.81 0.00 665.90
12 2024-10-31 Buy 225.91 0.23 0.00 53.77 NaN
避坑指南
在趋势行情中表现最好(如5月苹果大涨);
在震荡市可能频繁打脸(需结合均线过滤)。
可以考虑搭配20日均线,只在均线上方做多。
短线玩家可试试10天周期,会更灵敏。
四、手把手教你写策略代码
用Python只需3步:
下载数据(这里用苹果股票为例):
import yfinance as yf
data = yf.download('AAPL', start='2024-01-01', end='2024-11-05')
计算指标:
data['high_max'] = data['High'].rolling(14).max() # 14天最高价
data['low_min'] = data['Low'].rolling(14).min() # 14天最低价
data['williams_r'] = (data['Close'] - data['high_max']) / (data['high_max'] - data['low_min']) * -100
生成信号:
data['signal'] = np.where(data['williams_r'] < -80, 1, # 买入 np.where(data['williams_r'] > -20, -1, 0)) # 卖出
<-80
时,程序自动标记“买”;>-20
时,标记“卖”。
💡 如果想可视化累计收益的朋友,也可以加上这一段:
df['daily_return'] = df['Close'].pct_change()
df['strategy_return'] = df['daily_return'] * df['Position'].shift(1)
df['cumulative_return'] = (1 + df['strategy_return']).cumprod()
plt.figure(figsize=(14,7))
plt.plot(df['cumulative_return'], label='策略累计收益')
plt.title('Williams %R 策略累计收益曲线')
plt.xlabel('时间')
plt.ylabel('收益')
plt.legend()
plt.grid(True)
plt.show()
五、观点总结
这个策略靠的不是玄学,而是数据和逻辑。只要你会Python、愿意动手,你就能搭出自己的高胜率交易模型。
- Williams %R 简单实用,判断买卖点一目了然。
- 超过 -20 是卖点,低于 -80 是买点。
- 回测胜率83%,年化收益21.48%。
- 策略+可视化代码全给你,直接用不求人。
- 可叠加其他指标使用,效果更稳。
- 一定要先模拟,再实盘!
感谢您阅读到最后,希望这篇文章为您带来了新的启发和实用的知识!如果觉得有帮助,请不吝点赞和分享,您的支持是我持续创作的动力。祝您投资顺利,收益长虹!如果对文中内容有任何疑问,欢迎留言,我会尽快回复!
本文内容仅限技术探讨和学习,不构成任何投资建议。
Be First to Comment