题目背景:
许多金融标的都有其内在的关联,如何从量价数据找到这种关联是一个有趣的
问题。例如在万得的“煤焦钢矿”板块中,有螺纹钢、铁矿石、不锈钢、热轧卷板、
硅铁、焦煤、焦炭、锰硅、线材 9 个品种。这些品种有些是上下游关系,例如一定数量的焦煤焦炭和铁矿石可以生产出螺纹钢等。如何从价格挖掘出不同产品之间的关系一直是投资者感兴趣的问题。请从这些产品的日线价格中找出产品之间潜在的关系。
日线是任何一天的开盘价\收盘价\最高价\最低价所划出的一根中间粗一些,两端细一些的线。日线是每天一根的K线。
问题1:构建算法从日线建立这些品种的线性关系,并对这些线性关系进行建模。
思路提要:首先从题目列出的网址下载相应的数据并做数据整理与预处理,日线数据涉及开盘价\收盘价\最高价\最低价。可以通过简单的相关系数计算以及热力图来初步判断线性关系,然后通过最小二乘、多元线性回归等方法进一步挖掘这些品种之间的线性关系。
数据查看
cor = data.corr(method='pearson')
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5))
sns.set(font_scale=0.8) # 设置字体大小
sns.heatmap(cor,
annot=True, # 显示相关系数的数据
center=0.5, # 居中
fmt='.2f', # 只显示两位小数
linewidth=0.5, # 设置每个单元格的距离
#linecolor='black', # 设置间距线的颜色
vmin=0, vmax=1, # 设置数值最小值和最大值
xticklabels=True, yticklabels=True, # 显示x轴和y轴
square=True, # 每个方格都是正方形
cbar=True, # 绘制颜色条
cmap='summer', # 设置热力图颜色
)
plt.ion() #显示图片
问题 2. 能否找出这些品种的非线性关系?
思路提要:非线性关系可以通过非线性回归/岭回归等回归方式来计算,也可以通过机器学习黑箱模型(如多元LSTM、随机森林等),或者是金融学的Granger因果分析方法。多项式回归是独立x变量和因果y变量之间的非线性关系。当我们分析有一些弯曲的波动数据时,拟合这种类型的回归是必不可少的。
问题 3. 这些关系通常有一定的时效性。能否找出一个判据来确定这些关系存在的窗口期?
思路提要:我们可以初步猜想窗口期可能是3天、5天、7天或者一个月、一个季度,然后对整个时间序列按照猜想的窗口步长划分成一个个小时间窗,然后将其分开计算相关关系,验证猜想是否正确。
问题 4. 通过这些关系构建一个投资组合策略。
思路提要:根据前述的分析,我们可能发现了,一种产品价格上升/下降或引起另一个产品价格下降/上升,那么我们为了平衡投资的收益与风险,需要同时购买保值稳定的和有潜力的,而且最好是互补的(虽然全赚更好但是很有可能全赔,一个赔一个赚这样才比较保险)。
除了用蒙特卡洛模拟进行投资组合求解外,也可以通过python的scipy.optimize库进行最优化求解。
组合投资策略中常用到的概念-夏普比率:Sharpe Ratio),又被称为夏普指数 --- 基金绩效评价标准化指标。夏普比率在现代投资理论的研究表明,风险的大小在决定组合的表现上具有基础性的作用。风险调整后的收益率就是一个可以同时对收益与风险加以考虑的综合指标,长期能够排除风险因素对绩效评估的不利影响。夏普比率就是一个可以同时对收益与风险加以综合考虑的三大经典指标之一。