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

写在前面的话:本文对均值回归理论(即价格与收益会随时间回归至平均水平)进行了详细阐释。同时,提出了一种借助 Python(附具体代码)实现的计算指标与交易策略,其目的在于识别标准普尔 500 指数价格的潜在反转点。该策略将内部杠杆强度(IBS)与修改版的布林带相结合,用以判断买入和卖出的时机。与买入并持有策略相比,在长期投资中,此均值回归策略能够超越市场表现,尤其在交易区间和熊市期间更是如此。此外,还提到可通过加入空头策略进一步提升收益,但也提醒需注意做空的风险。最后,模拟结果显示,即使在大流行期间市场急剧下跌之后,该策略依然能够取得良好的回报。
不可否认,战胜市场是一件非常困难的事情。较为简单的投资方式或许是购入并持有标准普尔 500 指数。购买基金费用极为低廉,股息稳定且持续递增,并且你的投资组合有世界领先经济体的实力作为坚实后盾,故而能带来安全感。
然而,即便是最为赚钱的资产与市场也会历经放缓阶段,标准普尔 500 指数自然也不例外。此外,它还极易受到难以预测的宏观经济与地缘政治事件的影响。虽说无法确切知晓下一次放缓会在何时出现,但从历史模式来看,我们当前大约处于 16 年上升趋势的中段。
尽管今年或许会出现调整,可你的投资组合在短期内或许仍会持续增长。但可以想见,随着我们步入另一个 “区间震荡” 期而非 “趋势” 期,你的投资组合在未来十年内有可能会失去增长的动力。在这一阶段,或许会有更多机会能够更加轻松地跑赢市场。

一、什么是均值回归?
均值回归理论的核心是:随着时间的推移,价格和收益往往会回归均值或平均值。与布林突破类似,均值回归也能让人洞察市场周期,以及人类和算法交易者在努力确定资产真正价值时的心理。由于市场平衡很少能长期保持,这些形式的技术分析可作为从历史模式中学习的工具,并有可能在未来获得收益。
有多种指标可以识别潜在的均线反转,布林线就是其中之一。在本策略中,我们将使用布林线的一种变体。此外,我们还将关注内部杠杠强度(IBS)。IBS 通常用于短期交易决策,它能帮助我们洞察当日收盘价是看涨还是看跌。这是一个简单有效的计算指标:

如果价格收盘价接近日最低点而非日最高点,则其 IBS 值将小于 0.5,值为 0 表示价格收盘于当日最低点。在今天的分析中,我们可以将任何低于 0.6 的 IBS 值视为潜在看跌情绪的信号。在标准普尔 500 指数等稳定资产的均值回归框架内,这表明价格可能很快会再次上涨。
我们的布林带变体将整合近期的历史数据,而不是仅仅集中在某一天,以确定何时可能出现均值反转。该波段将采用 25 天移动平均高价及其与移动平均高价和移动平均低价缩放范围的偏差。

其中

二、均值反转交易
您可以计算指标:
data['IBS'] = (data['Close'] - data['Low']) / (data['High'] - data['Low'])
data['HL_avg'] = data['High'].rolling(window=25).mean() - data['Low'].rolling(window=25).mean()
data['Band'] = data['High'].rolling(window=25).mean() - (data['HL_avg'] * 2.25)
2.1 要实现以下算法,你需要
- 获取每个股票最近几年的每日蜡烛图价格,确保保留最高价、最低价和收盘价。
- 为简单起见,假设盘后价格与收盘价格相同(但在实际交易中,最好在收盘前买入)。
- 在收盘价高于前一天最高价的任何一天模拟卖出,并计入费用。
- 测试不同的时间框架,以确定该策略的长期表现是否优于资产价格。一旦确定了稳定收益,您就可以根据实时反转信号进行交易了。
2.2 我的基础方法(代码)
import yfinance as yf
import pandas as pd
# Backtesting parameters (adjust as needed)
tickers = ['^GSPC']
periods = ['5y', '10y', '25y']
init_portfolio_value = 1000 # USD
for period in periods:
for ticker in tickers:
try:
data = yf.download(ticker, period=period, progress=False)
# Calculate indicators
data['HL_avg'] = data['High'].rolling(window=25).mean() - data['Low'].rolling(window=25).mean()
data['IBS'] = (data['Close'] - data['Low']) / (data['High'] - data['Low'])
data['Band'] = data['High'].rolling(window=25).mean() - (data['HL_avg'] * 2.25)
except:
continue
# Initialize variables for trading strategy
portfolio_value, portfolio_values = init_portfolio_value, [init_portfolio_value]
trades = {'Entry': [], 'Exit': []}
fees = 0
position = False
entry_price = 0
# Simulate buying and selling using mentioned strategy
for i in range(25, len(data)):
if not position and data['Close'][i] < data['Band'][i] and data['IBS'][i] < 0.6: # Buy
position = True
entry_price = data['Close'][i]
shares = portfolio_values[-1] / entry_price
trades['Entry'].append(data.index[i])
elif position and data['Close'][i] > data['High'][i - 1]: # Sell
position = False
exit_price = data['Close'][i]
sale_value = shares * exit_price
fee = max(.01, round((sale_value / 1000) * .01, 2))
fees += fee
trade_profit = shares * (exit_price - entry_price) - fee
portfolio_value += trade_profit
trades['Exit'].append(data.index[i])
portfolio_values.append(portfolio_value)
mean_reversal_return = portfolio_values[-1] / init_portfolio_value
buy_and_hold_return = data['Close'].iloc[-1] / data['Close'].iloc[0]
print(f'{ticker} made {mean_reversal_return*100:.1f}% return vs. {buy_and_hold_return*100:.1f}% in {period} time')
2.3 成果
^GSPC made 157.7% return vs. 180.6% in 5y time
^GSPC made 226.8% return vs. 275.3% in 10y time
^GSPC made 471.3% return vs. 391.7% in 25y time
在较短的时间框架内,我们似乎主要跟踪市场,有时甚至表现不如市场。出现这种情况的原因是,我们没有参与强劲的看涨期,而是选择在近期的亏损中获取适度收益。

我们的理论认为,今年的牛市反弹只是又一次不可持续的偏离,可能不会持久。从长远来看,资产价格将回归均值,牢记这一点将使我们跑赢大盘。
果然,在 25 年的时间里,我们的策略跑赢了市场 79.6%。

这表明,我们的均值回归方法在交易区间和熊市突破时非常有效,使我们能够在网络公司或房地产泡沫破灭等重大市场衰退期间最大限度地减少缩水。
我们可以通过在相反条件下纳入空头头寸来增强我们的算法,从而可能获得更高的收益(25 年内收益率为 619%,而买入并持有策略的收益率为 414%)。不过,我们必须认识到,做空存在固有风险,因此在考虑对任何特定资产进行做空时,我们都必须谨慎小心。

我们的模拟还暗示了一个事实,即 COVID 的下跌可能并不是这十年中最大的一次。至少对股票而言,从大流行病中恢复过来只花了一年时间,2020 年 3 月发生的事件不足以对整体上升趋势造成任何真正的影响。否则,均值反转在过去 5 年中会更加有效,因为它将应用于一个区间市场!
三、观点回顾
- 均值回归理论:价格和收益有趋势回归到历史平均水平。
- 交易策略:使用 Python 编写的算法,结合 IBS 和自定义的布林带变体,用于识别标准普尔 500 指数的买卖点。
- 长期投资优势:均值回归策略在长期投资中优于买入并持有策略,尤其在市场波动性较高的时期。
- 风险管理:虽然空头策略可能带来更高收益,但也需要更多的风险管理。
- 市场事件对策略的影响:即使在大流行等市场异常事件发生后,该策略仍然能够提供稳定的回报。
本文内容仅仅是技术探讨和学习,并不构成任何投资建议。
转发请注明原作者和出处。
Be First to Comment