3110 0

[程序分享] Hurst指数Matlab代码 [推广有奖]

  • 0关注
  • 1粉丝

已卖:135份资源

大专生

76%

还不是VIP/贵宾

-

威望
0
论坛币
709 个
通用积分
32.0671
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
109 点
帖子
6
精华
0
在线时间
116 小时
注册时间
2016-3-20
最后登录
2024-12-1

楼主
灰骨共蟾蜍4 发表于 2019-4-8 12:33:07 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

分享一下经典R/S分析法和Lo的MRS分析法计算Hurst指数的MATLAB代码。


如果有不对的地方,欢迎大家指正~




R/S
  1. clc;
  2. clear all;

  3. file='%文件路径%\test.xlsx';
  4. rate=xlsread(file,'Sheet1','C3:C3021');

  5. N=length(rate);
  6. stn=3;
  7. edn=floor(N/2); %floor函数表示向下取整
  8. for n=stn:edn
  9.     a=floor(N/n);
  10.     x=zeros(n,1);
  11.     r=zeros(a,1);
  12.     s=zeros(a,1);
  13.     for j=1:a
  14.         m=sum(rate((n*j-(n-1)):(n*j)))/n;
  15.         for k=1:n
  16.             x(k)=sum(rate(n*j-(n-1):n*j-(n-1)+k-1))-k*m;
  17.         end
  18.         r(j)=max(x)-min(x);
  19.         s(j)=std(rate((n*j-(n-1)):(n*j)));
  20.     end
  21.     rs(n-2)=sum(r./s)/a;
  22. end
  23. n=3:floor(N/2);
  24. lgn=log(n);
  25. lgrs=log(rs);
  26. h=polyfit(lgn,lgrs,1);
  27. hurst=num2str(h(1));
  28. s=['hurst指数=' hurst]
  29. plot(lgn,lgrs);
  30. title(s)
  31. xlabel('log(n)');
  32. ylabel('log(R/S)');
复制代码
Lo MRS
  1. clc;
  2. clear all;
  3. % 导入文件
  4. file='C:\Users\Sylvia\Desktop\test.xlsx';
  5. x=xlsread(file,'06-17','C3:C3021');

  6. %计算参数q
  7. N=length(x);
  8. %t=autocorr(x,1);  
  9. %t=t(2);  
  10. %q=((3*N/2)^(1/3))*(2*t/(1-t^2))^(2/3);
  11. %q2 = floor(q); % 向下取整

  12. % 计算Hurst指数
  13. for n=3:floor(N/2)
  14.     q=9;
  15.     a=floor(N/n);
  16.     X=reshape(x(1:a*n),n,a);
  17.     ave=mean(X);
  18.     cumdev=X-ones(n,1)*ave;   
  19.     cumdev=cumsum(cumdev);
  20.     stdev=zeros(1,a);
  21.     % Estimate the standard deviation  
  22.     for j=1:a  
  23.         sq=0;  
  24.         for k=0:q  
  25.             v(k+1)=sum(X(k+1:n,j)'*X(1:n-k,j))/(n-1);  
  26.             if k>0  
  27.                sq=sq+(1-1/(q+1))*v(k+1);  
  28.             end
  29.         end
  30.         stdev(j)=sqrt(v(1)+2*sq);
  31.     end

  32.     % Estiamte the rescaled range
  33.     w=max(cumdev)-min(cumdev);
  34.     rs=w./stdev;
  35.     RS(n-2)=sum(rs)/a;
  36.     %RS=sum/a;
  37. end
  38. n=3:floor(N/2);
  39. lgn=log(n);
  40. lgrs=log(RS);
  41. h=polyfit(lgn,lgrs,1);
  42. hurst=num2str(h(1));
  43. s=['hurst指数=' hurst]
  44. plot(lgn,lgrs);
  45. title(s)
  46. xlabel('log(n)');
  47. ylabel('log(R/S)');
复制代码
关于q的计算方法有两种,
第一种: q = [4(T/100)^(1/4)],其中T是总样本容量;
第二种即代码中给出的,由于q>=0,而我用第二种计算的q小于零,故采用第一种方法,取q=9。
二维码

扫码加我 拉你入群

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

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

关键词:Hurst指数 MRS MATLAB

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-6 03:57