第三章:品种选择——相关性分析、流动性筛选与合约匹配
品种选择,说白了就是找对象。找对了,日子过得红红火火;找错了,天天吵架还亏钱。我在做跨品种对冲的早期,就吃过这个亏——选了相关性看起来不错的两个品种,结果实盘跑起来,对冲效果一塌糊涂。
这一章,我带你系统梳理品种选择的四个核心维度。嗯,每一个都是我踩过坑之后总结出来的。
3.1 相关性分析:Pearson与Spearman
相关性是跨品种对冲的基石。两个品种如果走势毫无关系,那还谈什么对冲?
Pearson相关系数是最常用的。它衡量的是线性关系。公式很简单:
ρ = Cov(X, Y) / (σX * σY)
取值范围在[-1, 1]之间。绝对值越接近1,线性相关性越强。
但这里有个坑——Pearson对异常值非常敏感。我在项目中遇到过,因为某一天的黑天鹅事件,两个品种的Pearson系数直接从0.85掉到了0.3。你想想看,这能信吗?
所以,我建议同时使用Spearman秩相关系数。它不关心具体数值,只关心排名顺序。公式是:
ρs = 1 - (6 * Σdi²) / (n * (n² - 1))
其中di是排名差。Spearman对异常值不敏感,更能反映真实的趋势关系。
我的经验法则:
- Pearson > 0.7 且 Spearman > 0.6:可以放心配对
- Pearson 0.5-0.7 且 Spearman 0.4-0.6:需要谨慎,建议做协整检验
- Pearson < 0.5:基本不用考虑
代码实现其实很简单。用pandas几行就搞定:
import pandas as pd
import numpy as np
# 假设df包含两个品种的日收益率
pearson_corr = df['asset_a'].corr(df['asset_b'], method='pearson')
spearman_corr = df['asset_a'].corr(df['asset_b'], method='spearman')
print(f"Pearson: {pearson_corr:.4f}")
print(f"Spearman: {spearman_corr:.4f}")
为什么会这样?因为收益率序列往往存在尖峰厚尾特征,Pearson容易被极端值带偏。Spearman用排名,相当于给数据做了一次非参数变换,稳健得多。
3.2 流动性筛选:别被盘口骗了
流动性是实战中最容易被忽视的环节。很多人在回测时觉得没问题,一上实盘就傻眼——滑点吃掉所有利润。
我个人习惯用三个指标来评估流动性:
- 日均成交量:至少是策略单量的20倍以上
- 买卖价差:越小越好,一般不超过0.1%
- 订单簿深度:看前五档挂单量是否充足
我曾经在某个商品期货上吃过亏。回测时日均成交量有10万手,觉得够了。结果实盘那天,主力合约换月,成交量骤降到2万手。我的单子一进去,直接把价格推了两个tick。嗯,那笔交易亏得很惨。
避坑指南:不要只看最近30天的平均流动性。要检查流动性在极端行情下的表现。比如2020年3月,很多品种的流动性骤降50%以上。如果你的策略在这种环境下还要频繁交易,基本就是送钱。
3.3 合约月份匹配:远月近月大不同
跨品种对冲,合约月份必须匹配。这个道理很简单,但执行起来有很多细节。
举个例子,你想做螺纹钢和热卷的对冲。螺纹钢主力是RB2401,热卷主力是HC2401。看起来都是2401合约,没问题吧?
但你要注意,两个品种的交割规则不同。螺纹钢是每月交割,热卷也是每月交割,但它们的持仓集中度、交割库分布都不一样。这会导致临近交割月时,两个合约的基差走势出现背离。
我建议的做法是:
- 优先选择相同到期月份的合约
- 如果流动性不足,可以错开一个月,但要加入展期成本的考量
- 避免在交割月前两周内开新仓
代码里怎么处理?很简单,用合约代码的后两位来匹配:
def match_contracts(contract_a, contract_b):
"""匹配相同月份的合约"""
month_a = contract_a[-2:] # 取后两位,如'01'
month_b = contract_b[-2:]
if month_a == month_b:
return True
else:
print(f"合约月份不匹配: {contract_a} vs {contract_b}")
return False
3.4 跨市场品种配对:别只看代码
跨市场配对是最有挑战性的。比如你想做新加坡A50和国内沪深300的对冲。两个市场,两个品种,交易时间、交易规则、汇率风险全都不一样。
我做过一个跨市场的配对——伦敦铜和沪铜。你以为它们走势应该高度一致?其实不然。因为两个市场的参与者结构不同,定价逻辑也有差异。伦敦铜更受全球宏观因素影响,沪铜则受国内政策影响更大。
跨市场配对要注意几个点:
- 交易时间重叠:最好选择交易时间有重叠的品种,否则对冲效果会打折扣
- 汇率风险:如果涉及不同币种,一定要把汇率波动纳入模型
- 手续费差异:不同市场的手续费结构差异很大,直接影响策略收益
一个小技巧:在做跨市场配对之前,先把两个品种的价格统一到同一个计价单位下。比如沪铜是元/吨,伦敦铜是美元/吨。换算成人民币后,再计算价差。这一步很多人会忽略,但恰恰是最容易出问题的地方。
知识体系总览
下面这张图,是我梳理的品种选择核心逻辑。你可以把它当作一个检查清单,每次选品种时对照着看一遍。
你看,这四个维度其实是层层递进的。相关性帮你找到潜在的对冲对象,流动性确保你能顺利进出,合约月份匹配避免基差风险,跨市场配对则打开了更广阔的空间。
最后说一句,品种选择没有标准答案。不同策略、不同资金量、不同风险偏好,适合的品种都不一样。我的建议是:先用历史数据跑一遍相关性矩阵,筛选出候选品种,然后逐一检查流动性和合约细节。这个过程虽然繁琐,但值得花时间。