基金的选择方法及MATLAB实现
Posted 洲洲的摸鱼日常
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基金的选择方法及MATLAB实现相关的知识,希望对你有一定的参考价值。
[摘要]本文根据《小狗钱钱》提出的基金选取标准,进行适当的扩充,并利用MATLAB结合Tushare平台进行基金或者指数的分析。本文只提供分析方法,并不构成基金选取的建议,股市有风险,入市需谨慎。 本文的分析基于以下基金的选择标准:基金一旦选择,就长期持有且尽可能少的操作。
说明
数据来源
Tushare大数据开放社区。数据内容将扩大到包含股票、基金、期货、债券、外汇、行业大数据,同时包括了数字货币行情等区块链数据的全数据品类的金融大数据平台,为各类金融投资和研究人员提供适用的数据和工具。并提供python和Matlab的接口,便于研究者运用和处理数据。
笔者Tushare ID:407591
非常感谢Tushare社区为作为学生的我提供免费的数据接口和教程。
参考
周期.霍华德·马斯克著:刘建位译.北京:中信出版社,2019.2
Tushare的MATLAB使用方式。通过Matlab SDK 获取数据
小狗钱钱.博多·舍费尔著:王钟欣,余茜译.2002-2
【半佛】基金怕他不来,又怕他乱来.机智的半佛仙人.
编程环境
MATLAB2020b,只要2016b以上版本即可。
数据的选取
为了验证《小狗钱钱》中的基金选取原则,应当对尽可能多的基金或者指数数据进行选择验证。但是为了避免计算太复杂,本文选取几种常用的指数数据用于验证上述标准和方法的可行性,包括’上证指数’,‘商业指数’,‘地产指数’,‘上证50’,‘沪深300’,‘中证500’,‘深证成指’,‘中小100’,‘创业板指’,'深圳创新’等指数。
数据的导入
数据的导入可以参考文章股票市场周期波动分析的MATLAB实现(1)和Tushare社区的教程利用MATLAB获取数据,因此本文中不再赘述。
选择标准
在《小狗钱钱》一书中,作者借陶穆太太之口说出了基金选取的三个原则:1,基金成立的时间要长;2,尽量选择跨国股票,以降低风险;3,考虑十年的年终获利。可以将上述原则分别阐述为:
- 尽量选择基金运行时间长的,尽量保证跨越牛熊,这样可以确保基金的成功并不只是由于牛市的原因;以A股为例,就是尽量选择在20140101之前成立的基金;
- 基金的选择应该尽量降低风险,例如在选择多只基金时尽量不选择同一行业的、同一公司的;可以利用回归分析中的相似性分析来获取到两个基金的相似性:数值越接近1,两个基金或者指数越正相关;数值越接近0,则两个基金的相似性更低;数值为负数时,则两个基金为负相关。在进行基金选择时,尽量选择相关性尽量低的。
- 基金的收益率应当越高越好。
上述选择是基于一个基础假设:基金一旦选择,就长期持有且尽可能少的操作。根据【半佛】基金怕他不来,又怕他乱来中的结论,基金持有的时间长的相对于短的往往收益更长。因此本文的分析也基于这一假设。
考虑基金的购买往往在线上平台而非银行购买,因此可以在平台上看到每日的盈亏,而每日的盈亏过高或者基金长期低迷会影响投资者的情绪导致频繁操作或者撤回,因此需要添加机条选择标准:
- 在同等收益率的前提下,基金每日盈亏的方差应该尽量的小;
- 在同等收益率的前提下,基金的回调率应该尽量的低,基金的回调时间应该尽量的短;这样可以避免长时间的低迷或者短时间回调太严重导致的情绪的波动。
MATLAB实现
收益率
收益率可以根据文章股票市场周期波动分析的MATLAB实现(1)中的代码来实现,分为以下步骤:
- 对数据进行对数运算,
log_data=log(szdata);
- 对已经求对数的数据进行线性拟合
[p_log,S_log] = polyfit(x,log_data,1);%线性拟合
[y_log_fit,~] = polyval(p_log,x,S_log);%拟合直线
- 基于拟合的斜率,可以求得年平均收益
nianhua=exp(rihua*250)-1;
相似性分析
相似性的分析可以利用MATLAB中的corrcoef函数进行求解,其求解表达式为:
C=corrcoef(data1,data2);
而基金的公司和基金的持仓数据,可以利用Tushare接口中的公募基金列表和公募基金持仓数据来获取。
同样的,基金的成立时间也可以在上述数据中获取。
回调
- 获取基金或者指数的最低点和最高点。其中period为峰值和谷值设置的阶段,代码的第一部分是直接求解的峰值和谷值,第二部分是对峰值和谷值进行修剪和增添,以确保峰值和谷值交替出现;
for i=period+1:1:length(data)-period
[zhi_min_pre,num_min_pre]=min(data(i-period:i));
[zhi_min_post,num_min_post]=min(data(i:i+period));
[zhi_max_pre,num_max_pre]=max(data(i-period:i));
[zhi_max_post,num_max_post]=max(data(i:i+period));
%当前数字的前period位中的极值和后period位的极值是一致的话,那该数字为当前极值
if zhi_min_pre==zhi_min_post && (num_min_pre+i-period-1)==(num_min_post+i-1)
j=j+1;
min_cou(1,j)=i;
min_cou(2,j)=zhi_min_pre;
end
if zhi_max_pre==zhi_max_post && (num_max_pre+i-period-1)==(num_max_post+i-1)
k=k+1;
max_cou(1,k)=i;
max_cou(2,k)=zhi_max_pre;
end
end
k=size(max_cou,2);
for i=1:size(min_cou,2)-1
a=min_cou(1,i);
b=min_cou(1,i+1);
[zhi,pos]=max(data(a:b));
max_cou(1,k+i)=pos+a-1;
max_cou(2,k+i)=zhi;
end
m_temp=unique(max_cou','rows','sorted');
max_cou=m_temp';
k=size(min_cou,2);
for i=1:size(max_cou,2)-1
a=max_cou(1,i);
b=max_cou(1,i+1);
[zhi,pos]=min(data(a:b));
min_cou(1,k+i)=pos+a-1;
min_cou(2,k+i)=zhi;
end
m_temp=unique(min_cou','rows','sorted');
min_cou=m_temp';
- 获取峰值以及谷值后,求解回调时间和回调率
huitiaotime(i)=min_cou(1,i)-max_cou(1,i);
huitiaolv(i)=(max_cou(2,i)-min_cou(2,i))/max_cou(2,i);
结果
利用MATLAB对上述选择的指数进行求解,可以得到如下结果:
在对大量的基金数据进行求解后,即可根据制定的标准进行基金的选择。
!!!本文只提供一种可参考的方法,不构成投资建议。
以上是关于基金的选择方法及MATLAB实现的主要内容,如果未能解决你的问题,请参考以下文章