弱式有效市场:技术分析失效的边界
聊到市场效率,咱们得先从最基础的一层说起——弱式有效市场。
这个概念,说白了就是一句话:历史价格信息已经全部反映在当前价格里了。你想想看,如果这是真的,那技术分析还有什么用?K线、均线、MACD,这些基于历史价格的技术指标,岂不是都成了马后炮?
我个人刚开始接触量化时,对这个结论是持怀疑态度的。毕竟市面上那么多技术分析大师,靠这个吃饭的人多了去了。但后来我在实盘项目中反复验证,才慢慢理解了这条边界的真正含义。
技术分析的失效边界
弱式有效市场给技术分析划了一条清晰的线:你不能仅靠历史价格预测未来走势。
这不是说技术分析完全没用。我见过很多交易员用技术分析做风控、做入场时机选择,效果不错。但如果你指望靠一个“金叉死叉”就能稳定盈利,那大概率要失望。
核心结论:在弱式有效市场中,任何基于历史价格的技术策略,其预期收益为零(扣除交易成本后为负)。
为什么会这样?因为市场参与者太多了。你看到的K线形态,别人也看到了。你想到的交易策略,别人也想到了。当足够多的人用同样的方法交易时,这个方法的超额收益就会被抹平。
嗯,这里要注意一点:弱式有效不等于价格随机。价格可以有一定的趋势或均值回复特征,但这些特征必须足够微弱,以至于无法覆盖交易成本。
历史价格与未来收益的独立性检验
怎么判断一个市场是不是弱式有效?学术界和业界常用的方法就是做独立性检验。
我习惯用以下几种方法来做验证:
- 自相关检验:检查今天收益率和昨天收益率的相关性
- 游程检验:看价格涨跌序列是否随机
- 方差比检验:比较不同时间尺度下的收益率方差
下面这个Python代码是我在项目中常用的自相关检验方法:
import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import acf, acorr_ljungbox
def weak_form_efficiency_test(price_series, lags=20):
"""
弱式有效市场检验
:param price_series: 价格序列
:param lags: 检验的滞后阶数
"""
# 计算对数收益率
returns = np.log(price_series / price_series.shift(1)).dropna()
# 自相关检验
lb_test = acorr_ljungbox(returns, lags=lags, return_df=True)
# 判断:如果p值都大于0.05,则不能拒绝弱式有效假设
is_efficient = all(lb_test['lb_pvalue'] > 0.05)
return {
'is_weak_form_efficient': is_efficient,
'ljung_box_test': lb_test
}
我曾经用这个代码测试过A股市场的日线数据。结果很有意思——大部分时候,p值都大于0.05,说明日线级别的弱式有效假设成立。但如果你用分钟级数据,情况就完全不同了。
实战经验:不同时间尺度下的市场效率不同。高频数据往往存在更多可预测性,但交易成本也更高。我建议你在做策略时,先跑一遍这个检验,看看你的交易频率是否踩在了有效市场的边界上。
随机游走模型
随机游走模型是弱式有效市场的数学表达。它的核心思想是:价格的变化是不可预测的。
最简单的随机游走模型长这样:
P_t = P_{t-1} + ε_t
其中ε_t是白噪声,均值为0,方差恒定。这个模型意味着,明天的价格等于今天的价格加上一个随机扰动。
但实际金融市场中,纯粹的随机游走很少见。我更喜欢用带漂移项的随机游走:
P_t = P_{t-1} + μ + ε_t
这里的μ代表长期趋势。比如股票市场长期向上,这个μ就是正的。但关键在于,ε_t仍然是不可预测的。
你想想看,如果价格真的服从随机游走,那技术分析确实没什么用。因为任何技术指标给出的信号,本质上都是在试图预测ε_t,而ε_t是随机的。
避坑指南:我曾经犯过一个错误——看到某个策略在回测中表现很好,就以为找到了市场的漏洞。后来发现,那只是随机游走中的一次偶然。记住,回测中的超额收益,有50%的概率是运气。你需要做大量的统计检验,才能确认策略是否真的有效。
下面这张图展示了随机游走模型的核心逻辑:
这张图把弱式有效市场的三个核心概念串起来了。你从中间开始看,往左是技术分析的失效边界,往右是随机游走模型,往下是独立性检验方法。三者相互印证,构成了一个完整的理论框架。
最后说一句,弱式有效市场不是绝对的。不同市场、不同时间段的效率程度不同。我见过一些新兴市场,技术分析在短期内确实有效。但随着市场成熟,这种有效性会逐渐消失。所以,别把理论当教条,把它当工具。
公众号:蓝海数据掘金营,微信deep3321