【摘要】本文主要基于MATLAB结合霍华德·马克斯的《周期》一文实现对上证指数的分析。《周期》一书着重强调了股市周期的存在,而在周期中的买进和卖出位置就决定了投资收益。因而利用现有数据选择股票或者基金以及分析当前所处的周期位置是买卖的重点,基于此本文利用tushare的数据和MATLAB对市场数据进行分析,并建立投资策略。
说明
参考:
周期.霍华德·马斯克著:刘建位译.北京:中信出版社,2019.2
高宏.股票市场周期波动的数学原理及分析方法
Tushare的MATLAB使用方式。通过Matlab SDK 获取数据
数据来源
Tushare大数据开放社区。数据内容将扩大到包含股票、基金、期货、债券、外汇、行业大数据,同时包括了数字货币行情等区块链数据的全数据品类的金融大数据平台,为各类金融投资和研究人员提供适用的数据和工具。并提供python和Matlab的接口,便于研究者运用和处理数据。
笔者Tushare ID:407591
非常感谢Tushare社区为作为学生的我提供免费的数据接口和教程。
编程环境
MATLAB2020b,只要2016b以上版本即可。
数据的选取
《周期》中认为短期的经济周期受到心理、情绪和决策过程的影响,而同时一个公司的经营受到企业管理者的心态和管理方式影响,因此对于公司短期的股价存在较大的不确定性,无法显示出较为良好的周期。基于这个原因,本文的分析主要集中在指数基金和黄金这两类数据,其受到的影响因素相对较少,具有较好的稳定性。
数据导入和处理
文件下载
在利用MATLAB获取Tushare进行数据的获取和处理前,需要下载相关程序包,连接为 Tushare的MATLAB程序包下载和使用说明
下载并解压后,在MATLAB中添加路径即可。
数据导入
如下为建立API与网站通信的方式,其中xxxxx代表的是自己的接口token
token = 'xxxxxxxxxxxxxxxx';
api = pro_api(token);
利用以下代码即可获取上证指数的历史数据,其中第一个输入参数index_daily代表获取的数据类型为指数; ‘ts_code’, '000001.SH’代表数据在股票交易所的代码,000001.SH为上证指数的代码;后面两组数据分别代表获取数据的起始日期和截止日期。
shangzheng_his_day = api.query('index_daily', 'ts_code', '000001.SH', 'start_date', '19910715', 'end_date', '');
如图为获取的上证数据截图,其中包括开盘,收盘,最低价,最高价等数据,本文默认以收盘价作为分析的主要对象。
数据评估
利用plot函数绘制上证指数的价格如下:
在上图中无法较好地评估出上证指数的变化数据,因此笔者选取了时间跨度较为长的黄金价格数据,数据来源为黄金历史价格。
可以从图中看出,数据基本上符号指数增长的趋势。《周期》一书中,认为一国经济的增长至于工作小时总数,与人口增长比例和生产效率基本上成正比,而这些在国家趋于稳定后基本上保持一个较为稳定的状态,因此可以认为一国的经济增长在稳定期后基本上保持指数状态,股市大盘指数和黄金长期而言也会服从指数增长趋势。
所以本文后续以上证指数长期而言服从指数增长为前提进行分析。
数据处理与绘图
因为假设上证指数服从指数趋势,所以绘制上证指数的对数数据代码和图如下:
log_data=log(data);
plot(log_data)
从上图可以看出,前面的数据存在较大的偏差,因此删除前面200组数据。借用高宏博士文中的观点,上证每天的变化量基本上与白噪声吻合,因而对于每天的变化很难预测。
求解最值
利用如下代码求解上证指数的峰值和谷值
for i=101:1:length(log_data)-100
[zhi_min_pre,num_min_pre]=min(log_data(i-100:i));
[zhi_min_post,num_min_post]=min(log_data(i:i+100));
[zhi_max_pre,num_max_pre]=max(log_data(i-100:i));
[zhi_max_post,num_max_post]=max(log_data(i:i+100));
if zhi_min_pre==zhi_min_post && (num_min_pre+i-101)==(num_min_post+i-1)
j=j+1;
num_min(j)=i;
zhi_min(j)=zhi_min_pre;
plot(i,zhi_min_pre,'g*')
end
if zhi_max_pre==zhi_max_post && (num_max_pre+i-101)==(num_max_post+i-1)
k=k+1;
num_max(k)=i;
zhi_max(k)=zhi_max_pre;
plot(i,zhi_max_pre,'r*')
end
end
得到的示意图如下:
如《周期》中所说,由于人们的心理机制影响,往往峰值和估值都会严重偏离均值。
均值拟合
利用MATLAB 中的polyfit函数可以完成线性拟合,代码如下:
x=1:length(log_data);
x=x(:);
[p_log,S_log] = polyfit(x,log_data,1);%线性拟合
[y_log_fit,delta_log] = polyval(p_log,x,S_log);
利用上一节中的最低值和最高值的数据来确定上证指数的分布极值。为了风险较低,可以利用第二或者第三最低值作为选择的标准,最终绘制的图形如下。可以看出上证指数大部分时间是在最高线和最低线之间。
误差分布
在建立回归直线后,分析上证指数沿回归直线的误差分布。从上证指数的误差分布可知,分布基本上服从正态分布。但是从误差分布也能看出来,在0线附近,负值比正值多,符合中国A股市场熊多牛少,熊长牛短的现实。
总结
本文只要介绍了如何利用Tushare和MATLAB 对指数进行简单的分析,会后续制定相关的策略打下基础。
股票市场周期波动分析的MATLAB实现(2)将分析如何对比多种指数或者黄金等确定投资组合。