楼主: wfh仰望星空
16136 15

[MATLAB] [MATLAB代码模板]hurst指数的计算 [推广有奖]

  • 13关注
  • 0粉丝

硕士生

23%

还不是VIP/贵宾

-

威望
0
论坛币
3088 个
通用积分
62.0022
学术水平
17 点
热心指数
19 点
信用等级
15 点
经验
6364 点
帖子
35
精华
0
在线时间
245 小时
注册时间
2015-2-12
最后登录
2022-3-17

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  1. function  [Prices,NumericDates,StartDate,EndDate] = SimpleXlsReader(filename)
  2. [Prices,txtdata] = xlsread(filename);
  3. %Prices,txtdata
  4. flag=length(txtdata)-length(Prices)+1;
  5. NumericDates = flipud(datenum(txtdata(flag:end,1)));
  6. Prices = flipud(Prices(:,1));
  7. StartDate = NumericDates(1);
  8. EndDate   = NumericDates(end);
复制代码


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:matlab代码 Hurst指数 MATLAB matla hurst function

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
accumulation + 100 + 1 + 1 + 1 精彩帖子
niuniuyiwan + 100 + 100 鼓励积极发帖讨论

总评分: 经验 + 200  论坛币 + 100  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

本帖被以下文库推荐

沙发
fantuanxiaot 发表于 2015-7-18 10:23:28 |只看作者 |坛友微信交流群
哥们 这样的代码也好意思发上来???这才是真正的Hurst代码:

程序源码:M文件HurstFactorization.M

  1. function  [FactorMatrix,FactorNum]=HurstFactorization(x)
  2. %hurstFactorization
  3. %code by ariszheng@gmail.com
  4. %2008-10-07
  5. %因子分解, 以4开始以X/4结束
  6. %floor函数表示四舍五入
  7. N=floor(x/4);
  8. %方案数量初始为0
  9. FactorNum=0;
  10. %因子分解, 以4开始以X/4结束
  11. for i=4:N
  12.     %i可以被x整除,即得到一组分解方案
  13.     if mod(x,i)==0
  14.        %方案数量+1
  15.         FactorNum=FactorNum+1;
  16.         %将可行方案存储到FactorMatrix中
  17.         FactorMatrix(FactorNum,:)=[i,x/i];
  18.     end
  19. end
复制代码


函数测试240共有14个分段方案

  1. >>X=240
  2. %调用HurstFactorization函数
  3. >>[FactorMatrix,FactorNum]=HurstFactorization(x)
  4. %分解方案序列
  5. FactorMatrix =
  6.      4    60
  7.      5    48
  8.      6    40
  9.      8    30
  10.     10    24
  11.     12    20
  12.     15    16
  13.     16    15
  14.     20    12
  15.     24    10
  16.     30     8
  17.     40     6
  18.     48     5
  19.     60     4
  20. FactorNum =
  21. 14
复制代码



步骤二:Hurst指数计算

时间序列Hurst指数计算函数:

HurstExponent=HurstCompute(Xtimes)

输入参数:

Xtimes:时间序列数据

输出参数:

HurstExponent:为二元向量,第一元素为时间序列的hurst指数, 第二元素为回归分析常数项。

注释:回归模型

程序源码:M文件HurstCompute.M

  1. function HurstExponent=HurstCompute(Xtimes)
  2. %HurstCompute
  3. %code by ariszheng@gmail.com
  4. %2008-10-07
  5. %example HurstExponent=HurstCompute(rand(1,240))
  6. %输入参数为Xtimes
  7. LengthX=length(Xtimes);
  8. %进行因式分解
  9. [FactorMatrix,FactorNum]=HurstFactorization(LengthX);
  10. %定义LogRS,为方便计算变量的初始一般为0
  11. LogRS=zeros(FactorNum,1);
  12. %定义LogN
  13. LogN=zeros(FactorNum,1);
  14. %分组计算
  15. for i=1:FactorNum
  16.     %根据因式分解方案,将数量进行分组
  17.     %例如 FactorMatrix(i,:)=[8    30]
  18.     %将240个元素的列向量,转换为8X30的矩阵
  19.     dataM=reshape(Xtimes,FactorMatrix(i,:));
  20.     %计算矩阵每列的均值
  21.     MeanM=mean(dataM);
  22.     %执行
  23.     SubM =dataM - repmat( MeanM,FactorMatrix(i,1),1) ;
  24.     RVector=zeros(FactorMatrix(i,2),1);
  25.     SVector=zeros(FactorMatrix(i,2),1);
  26.    %计算(R/S)n的累加
  27.     for j=1:FactorMatrix(i,2)
  28.         %SubVector=zeros(FactorMatrix(i,1),1);
  29.         SubVector=cumsum( SubM(:,j));
  30.         RVector(j)=max(SubVector)-min(SubVector);
  31.         SVector(j)=std( dataM(:,j) );
  32.     End
  33.     %分别计算LogRS、LogN
  34.     LogRS(i)=log( sum( RVector./SVector)/ FactorMatrix(i,2) );
  35.     LogN(i)=log( FactorMatrix(i,1) );
  36. end
  37. %使用最小二乘法进行回归,计算赫斯特指数HurstExponent
  38. HurstExponent=polyfit(LogN,LogRS,1);
  39. 函数测试,M文件test HurstCompute.M
  40. 测试方法生成一组布朗运动序列,计算布朗运动序列对数序列的hurst指数,共测试10次。
  41. %test HurstCompute
  42. %测试10次
  43. testNum=10;
  44. %并将结果存储在result中
  45. result =zeros(testNum,2);
  46. for i=1:testNum
  47.     n=120*i;
  48.     dt=1;
  49.     %生存长度不同的的布朗运动序列
  50.     y=cumsum(dt^0.5.*randn(1,n)); % standard Brownian motion
  51.     %计算每组序列的Hurst值
  52.     result(i,:)=HurstCompute(log(y));
  53. end
  54. %画图
  55. plot(1:testNum,result(:,1),'*')
  56.     测试结果图像:
复制代码



步骤三:移动平均hurst指数计算

使用计算上证指数1991-9-9至2008-10-8上证综指时间序列数据,计算其给定移动平均长度的hurst指数。编写MoveHurst.m函数,其中cyclength为计算周期,用户可根据需求进行修改。

例如计算120个交易日的Husrt指数,使用的数据为[t-119,t]的价格数据即可,移动平均的意思为根据t的向前移动,计算指数的数据[t-119,t]的价格数据同时根据t进行移动。

  1. %MoveHurst
  2. %code by ariszheng  2011-5-3
  3. %读取数据
  4. [Prices, dates] =xlsread('shindex.xls');
  5. %数据长度
  6. DataLength=length(Prices);
  7. cyclength=120;  %计算周期
  8. %数据长度是否大于计算周期,若只有100个数据
  9. %不可能计算出120计算周期的Hurst指数的
  10. if cyclength > DataLength
  11.     plot(1:100,1:100,'r*',1:100,100:-1:1,'ro');
  12.     text(10,50,'Number of data must biger than Cycle Length','FontSize',28);
  13. else
  14.     plot(1:0.1:10,sin(1:0.1:10),'r*',1:0.1:10,-sin(1:0.1:10),'ro');
  15.     logData=log(Prices);
  16.     %将价格数据转换为对数数据
  17.     logData=logData(DataLength:-1:1);
  18.     %计算价格的对数数据对应的每日收益率
  19.     IndexReturn=[0;logData(2:DataLength)-logData(1:DataLength-1)];
  20.     hurstE=zeros(DataLength,1);
  21.     hurstE(1:cyclength-1)=NaN; %前cyclength-1个日的Hurst指数为NaN
  22.     %计算移动的hurst指数
  23.     for i=1:( DataLength-cyclength+1 )
  24.          HurstExponent=HurstCompute(   IndexReturn (i:i+cyclength-1) );
  25.          hurstE(cyclength+i-1)=HurstExponent(1);
  26.     end
  27.   %将数据转换为时间序列,进行时间序列数据的画图
  28.     fts = fints(dates,[hurstE(DataLength:-1:1) logData (DataLength: -1 :1)], {'HurstExponent','logIndex'});
  29.     chartfts(fts);
  30. end
复制代码

已有 5 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
fordevoted + 1 + 1 + 1 精彩帖子
lsniper + 1 + 1 + 1 精彩帖子
xiaoyezi61 + 1 + 1 + 1 精彩帖子
accumulation + 100 + 1 + 1 + 1 精彩帖子
niuniuyiwan + 60 + 60 + 1 + 5 + 1 感谢您的细致查看

总评分: 经验 + 160  论坛币 + 60  学术水平 + 5  热心指数 + 9  信用等级 + 5   查看全部评分

使用道具

藤椅
fantuanxiaot 发表于 2015-7-18 10:27:39 |只看作者 |坛友微信交流群
我已经附上了计算Hurst的Matlab代码。。[By ArisZheng]
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
xddlovejiao1314 + 100 + 100 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 100  论坛币 + 100  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

板凳
xddlovejiao1314 学生认证  发表于 2015-7-18 17:21:26 |只看作者 |坛友微信交流群
fantuanxiaot 发表于 2015-7-18 10:27
我已经附上了计算Hurst的Matlab代码。。
牛B啊。
已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
fantuanxiaot + 50 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 50  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

报纸
fantuanxiaot 发表于 2015-7-18 21:44:49 |只看作者 |坛友微信交流群
xddlovejiao1314 发表于 2015-7-18 17:21
牛B啊。
这是郑老师的代码  附上来了

使用道具

地板
huanh21 发表于 2015-11-19 23:23:09 |只看作者 |坛友微信交流群
很不错的东西

使用道具

7
摇摆的风 发表于 2016-5-2 19:15:02 |只看作者 |坛友微信交流群
先学习一下

使用道具

8
江易哲 发表于 2016-7-13 17:45:31 |只看作者 |坛友微信交流群
fantuanxiaot 发表于 2015-7-18 10:27
我已经附上了计算Hurst的Matlab代码。。
kanbudong 看不懂啊

使用道具

9
crazy11111111 发表于 2016-8-10 21:29:11 |只看作者 |坛友微信交流群
fantuanxiaot 发表于 2015-7-18 10:23
哥们 这样的代码也好意思发上来???这才是真正的Hurst代码:

程序源码:M文件HurstFactorization.M
您好,请问,基于像元hurst计算,您熟悉吗?

使用道具

10
dby19950119 发表于 2017-4-19 22:58:18 |只看作者 |坛友微信交流群
fantuanxiaot 发表于 2015-7-18 10:23
哥们 这样的代码也好意思发上来???这才是真正的Hurst代码:

程序源码:M文件HurstFactorization.M
朋友,想问一下,这个的输入参数是什么啊。。。我现在不知道为什么计算不出来,方便留个qq或者微信交流下么,谢谢了

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 15:58