第六章:进一步修炼 —— 组合投资与风险管理初探
在前几章的探险中,小K已经如同初出茅庐的侠客,学会了单兵作战(单一股票回测)的基本武艺。但当他踏入量化江湖更深处时,前辈的一句话如晨钟暮鼓般在耳边回响:“不要把鸡蛋放在同一个篮子里!”股市犹如汹涌的大海,单一的船只随时可能遭遇风浪;而组合投资就像一支舰队,既能分担风险,又能协同作战,带来更稳健的收益。与此同时,小K逐渐明白,量化投资不仅追求盈利,更重要的是学会驾驭风险的利剑,为每一次出征护航。
一、组合投资基础:构筑你的量化舰队
为什么要选择多只股票?
想象一下,如果你只拥有一只小舟出海,遇上暴风雨时便难以抵御风险。而拥有一支舰队,每艘船之间彼此独立、互相支撑,即使有一艘暂时失去平衡,其它舰船仍可确保整体航行稳定。小K了解到,单只股票可能因行业、市场波动而遭遇暴跌,而多只股票的组合则能在风险分散的同时,降低整体波动性。
相关性与分散化:巧妙配置,稳如泰山
在构建舰队时,选择不同型号、不同用途的舰船能够有效对抗海上的变幻莫测。股票之间的相关性就像舰船之间的协同关系:
- 低相关性:当一艘舰船(股票)遇险时,另一艘若在风平浪静中前行,则能弥补损失。
- 分散化:跨越不同行业和市场的股票,如同组成了多样化的舰队,能够在风暴中降低整体风险。
二、简单组合回测:多舰齐发,检验组合实力
构建多股票回测框架
小K决定将自己那艘单兵作战的小舟升级为一支舰队。他开始在自己的回测框架中同时加载多只股票的数据。以两只股票A和B为例,前辈告诉他:“试着让这两只‘舰船’按照固定比例或者市值权重分配资金,看看组合的整体表现如何。”
下面是一段简化的Python代码示例,帮助大家直观感受如何实现这一过程:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 模拟生成两只股票的历史数据(收盘价)
dates = pd.date_range(start='2020-01-01', periods=200)
np.random.seed(42)
price_A = np.cumprod(1 + np.random.normal(0.001, 0.02, size=200))
price_B = np.cumprod(1 + np.random.normal(0.001, 0.03, size=200))
data = pd.DataFrame({
'A': price_A, 'B': price_B}, index=dates)
# 固定比例配置:各50%
weights = np.array([0.5, 0.5])
portfolio = data.dot(weights)
# 绘制股票与组合的资金曲线
plt.figure(figsize