楼主: faruto
23964 55

[源码分享] Matlab通过Yahoo与Sina获取历史与实时股票数据[faruto版本]   [推广有奖]

学科带头人

10%

还不是VIP/贵宾

-

威望
2
论坛币
2917 个
通用积分
12.4123
学术水平
326 点
热心指数
318 点
信用等级
306 点
经验
115446 点
帖子
672
精华
5
在线时间
1470 小时
注册时间
2008-3-15
最后登录
2022-3-20
毕业学校
北京师范大学

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
以前做的一些东西。和大家分享~~
原帖地址:
Matlab通过Yahoo与Sina获取历史与实时股票数据[faruto版本]
http://www.matlabsky.com/thread-38988-1-1.html

==============================

通过访问Yahoo和Sina的URL进行股票数据的提取,其中部分函数的实现是基于 郑志勇兄弟( ariszheng @http://www.ariszheng.com/) 的相关函数进行修改优化而成。
这部分东西一直想抽时间弄来着,这段有点犯懒。O(∩_∩)O  

历史数据通过YahooData.m函数实现,访问的Yahoo的URL形式为
  1. url2Read=sprintf(...
  2.     'http://ichart.finance.yahoo.com/table.csv?s=%s&a=%s&b=%s&c=%s&d=%s&e=%s&f=%s&g=%s&ignore=.csv', StockName, ms, ds, ys, me, de, ye, Freq);
复制代码


可以获取某一股票的日、周、月 的历史数据。

实时数据通过SinaData.m函数实现,访问的Sina的URL形式为
  1. url2Read=['http://hq.sinajs.cn/list=',StockCode];
复制代码
可以获取某一股票的实时数据,进而再结合timer函数就可以获取某一股票当天的实时行情(这部分懒得弄了)。

测试脚本 SinaYahooDataTest.m
  1. %% SinaYahooDataTest
  2. % by LiYang
  3. % Email:farutoliyang@gmail.com
  4. % 2013/11/26
  5. %% A Little Clean Work
  6. tic;
  7. clear;
  8. clc;
  9. close all;
  10. format compact;
  11. %% 获取历史数据测试

  12. % 历史数据通过Yahoo接口获得 (历史数据为未复权数据,使用时候请注意)
  13. % Yahoo中证券代码为 (上海 .ss 深圳 .sz),例如招商银行,600036.ss

  14. StockName = '600036.ss';
  15. StartDate = today-200;
  16. EndDate = today;
  17. Freq = 'd';
  18. [DataYahoo, Date_datenum, Head]=YahooData(StockName, StartDate, EndDate, Freq);

  19. % K线展示
  20. scrsz = get(0,'ScreenSize');
  21. figure('Position',[scrsz(3)*1/4 scrsz(4)*1/6 scrsz(3)*4/5 scrsz(4)]*3/4);

  22. Open = DataYahoo(:,2);
  23. High = DataYahoo(:,3);
  24. Low = DataYahoo(:,4);
  25. Close = DataYahoo(:,5);
  26. MT_candle(High,Low,Close,Open,[],Date_datenum);
  27. xlim( [0 length(Open)+1] );
  28. title(StockName);
  29. %% 获取实时数据测试
  30. % Sina中证券代码为 (sh. 上海 sz.深圳),例如招商银行sh600036

  31. StockCode='sh600036';
  32. [DataSina, DataCell]=SinaData(StockCode);
  33. DataCell
  34. %% Record Time
  35. toc;
复制代码
运行结果


  1. DataCell =
  2.     '招商银行_sh600036'    '股票名称代码'         
  3.     '2013-11-27'           '日期'                  
  4.     '10:28:22'             '时间'                  
  5.     [          10.8400]    '今开盘'               
  6.     [          10.8300]    '昨收盘'               
  7.     [          10.7800]    '当前价'               
  8.     [          10.8500]    '今最高'               
  9.     [          10.7600]    '今最低'               
  10.     [          10.7700]    '竞买价,即“买一”报价'
  11.     [          10.7800]    '竞卖价,即“卖一”报价'
  12.     [         11165602]    '成交量,单位“股”'   
  13.     [        120618712]    '成交额,单位“元”'   
  14.     [            17119]    '买一量'               
  15.     [          10.7700]    '买一价'               
  16.     [           348053]    '买二量'               
  17.     [          10.7600]    '买二价'               
  18.     [           509400]    '买三量'               
  19.     [          10.7500]    '买三价'               
  20.     [           129800]    '买四量'               
  21.     [          10.7400]    '买四价'               
  22.     [           236600]    '买五量'               
  23.     [          10.7300]    '买五价'               
  24.     [            36790]    '卖一量'               
  25.     [          10.7800]    '卖一价'               
  26.     [            50257]    '卖二量'               
  27.     [          10.7900]    '卖二价'               
  28.     [           158371]    '卖三量'               
  29.     [          10.8000]    '卖三价'               
  30.     [           143496]    '卖四量'               
  31.     [          10.8100]    '卖四价'               
  32.     [            33665]    '卖五量'               
  33.     [          10.8200]    '卖五价'  
复制代码
YahooData.m函数源码
  1. function [Data, Date_datenum, Head]=YahooData(StockName, StartDate, EndDate, Freq)
  2. % by LiYang(faruto) @http://www.matlabsky.com
  3. % 本函数是基于 ariszheng @http://www.ariszheng.com/ 的相关函数进行修改而成
  4. % 用来通过Yahoo获取股票历史数据
  5. % 历史数据通过Yahoo接口获得 (历史数据为未复权数据,使用时候请注意)
  6. %% 输入参数
  7. % StockName 证券代码(上海 .ss 深圳 .sz)
  8. % StartDate, EndDate 时间段的开始日与结束日
  9. % Freq 频率
  10. %% 测试函数
  11. % StockName = '600036.ss';
  12. % StartDate = today-200;
  13. % EndDate = today;
  14. % Freq = 'd';
  15. % [DataYahoo, Date_datenum, Head]=YahooData(StockName, StartDate, EndDate, Freq);

  16. %% 数据时间区间
  17. startdate=StartDate;
  18. enddate=EndDate;
  19. %字符串变化
  20. ms=num2str(str2double(datestr(startdate, 'mm'))-1);
  21. ds=datestr(startdate, 'dd');
  22. ys=datestr(startdate, 'yyyy');
  23. me=num2str(str2double(datestr(enddate, 'mm'))-1);
  24. de=datestr(enddate, 'dd');
  25. ye=datestr(enddate, 'yyyy');

  26. % s: 股票代码 (e.g. 002036.SZ 300072.SZ 600036.SS 等)
  27. % c-a-b: 起始日期年、月、日 (月份的起始索引为0) 2010-5-11 = 2010年6月11日
  28. % f-d-e: 结束日期年、月、日 (月份的起始索引为0) 2010-7-23 = 2010年8月23日
  29. % g: 时间周期。d=每日,w=每周,m=每月,v=只返回除权数据
  30. % 省略所有参数,只制定股票代码时,返回所有历史数据
  31. url2Read=sprintf(...
  32.     'http://ichart.finance.yahoo.com/table.csv?s=%s&a=%s&b=%s&c=%s&d=%s&e=%s&f=%s&g=%s&ignore=.csv', StockName, ms, ds, ys, me, de, ye, Freq);

  33. s=urlread_General(url2Read);

  34. Head = ['Date Open High Low Close Volume AdjClose'];
  35. Result=textscan(s, '%s %s %s %s %s %s %s', 'delimiter', ',');

  36. temp = Result{1,1};
  37. Date_datestr = temp(2:end);
  38. Date_datestr = Date_datestr(end:(-1):1);

  39. temp = Result{1,2};
  40. temp = cellfun(@str2double, temp(2:end));
  41. temp = temp(end:(-1):1);
  42. Open = temp;

  43. temp = Result{1,3};
  44. temp = cellfun(@str2double, temp(2:end));
  45. temp = temp(end:(-1):1);
  46. High = temp;

  47. temp = Result{1,4};
  48. temp = cellfun(@str2double, temp(2:end));
  49. temp = temp(end:(-1):1);
  50. Low = temp;

  51. temp = Result{1,5};
  52. temp = cellfun(@str2double, temp(2:end));
  53. temp = temp(end:(-1):1);
  54. Close = temp;

  55. temp = Result{1,6};
  56. temp = cellfun(@str2double, temp(2:end));
  57. temp = temp(end:(-1):1);
  58. Volume = temp;

  59. temp = Result{1,7};
  60. temp = cellfun(@str2double, temp(2:end));
  61. temp = temp(end:(-1):1);
  62. AdjClose = temp;

  63. Date_datenum = datenum(Date_datestr);
  64. Date_double = str2num( datestr(Date_datenum, 'yyyymmdd') );

  65. Data = [Date_double, Open, High, Low, Close, Volume, AdjClose];

  66. end
复制代码
其中YahooData.m和SinaData.m函数会用到一个 urlread_General.m 读取网页的函数,是重新封装的,matlab的老版本的urlread再读取中文网页时会有乱码,所以这里做了一些处理。

整理所有函数源码打包下载
Matlab通过Yahoo与Sina获取历史与实时股票数据[faruto版本]
Matlab通过Yahoo与Sina获取历史与实时股票数据[faruto版本].rar (136.84 KB) 本附件包括:
  • urlread_General.m
  • urlreadwrite_General.m
  • urlwrite_General.m
  • YahooData.m
  • 1.jpg
  • 2.jpg
  • SinaData.m
  • SinaYahooDataTest.m
  • SinaYahooDataTest.pdf
  • MT_candle.m



二维码

扫码加我 拉你入群

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

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

关键词:MATLAB atlab matla YAHOO 股票数据 历史

已有 8 人评分经验 威望 论坛币 学术水平 热心指数 信用等级 收起 理由
accumulation + 100 + 1 + 1 + 1 精彩帖子
zl89 + 40 精彩帖子
狂热的爱好者 + 3 精彩帖子
wwqqer + 5 + 5 + 5 对论坛有贡献
我的素质低 + 100 F老师又发福利啦~~
slrosssss + 5 + 5 + 5 + 5 给力
admin + 1 精彩帖子
fantuanxiaot + 50 + 20 精彩帖子

总评分: 经验 + 290  威望 + 1  论坛币 + 25  学术水平 + 11  热心指数 + 14  信用等级 + 11   查看全部评分

本帖被以下文库推荐

http://weibo.com/faruto
www.matlabsky.com
http://blog.sina.com.cn/faruto
沙发
xuruilong100 发表于 2014-2-18 16:00:18 |只看作者 |坛友微信交流群
应该加上将数据导入数据库的部分
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 3 精彩帖子

总评分: 论坛币 + 3   查看全部评分

使用道具

藤椅
faruto 发表于 2014-2-19 01:51:52 |只看作者 |坛友微信交流群
xuruilong100 发表于 2014-2-18 16:00
应该加上将数据导入数据库的部分
恩有道理~
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 8 精彩帖子

总评分: 论坛币 + 8   查看全部评分

http://weibo.com/faruto
www.matlabsky.com
http://blog.sina.com.cn/faruto

使用道具

板凳
sherry黄施 在职认证  发表于 2014-2-26 16:04:44 |只看作者 |坛友微信交流群
好东西,谢谢分享,请问将数据导入数据库的部分该怎么弄呢
已有 1 人评分经验 论坛币 收起 理由
fantuanxiaot + 5 + 2 精彩帖子

总评分: 经验 + 5  论坛币 + 2   查看全部评分

使用道具

报纸
faruto 发表于 2014-2-27 10:34:14 |只看作者 |坛友微信交流群
感谢大家支持~
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 6 精彩帖子

总评分: 论坛币 + 6   查看全部评分

http://weibo.com/faruto
www.matlabsky.com
http://blog.sina.com.cn/faruto

使用道具

地板
bruder 发表于 2014-3-4 11:19:18 |只看作者 |坛友微信交流群
faruto真实神人啊。职业投资者还是业务玩玩的?
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 2 精彩帖子

总评分: 论坛币 + 2   查看全部评分

使用道具

7
faruto 发表于 2014-3-4 11:57:47 |只看作者 |坛友微信交流群
bruder 发表于 2014-3-4 11:19
faruto真实神人啊。职业投资者还是业务玩玩的?
O(∩_∩)O
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 6 精彩帖子

总评分: 论坛币 + 6   查看全部评分

http://weibo.com/faruto
www.matlabsky.com
http://blog.sina.com.cn/faruto

使用道具

8
wise_leaf 发表于 2014-3-30 15:52:29 |只看作者 |坛友微信交流群
下载下来学习学习
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 2 精彩帖子

总评分: 论坛币 + 2   查看全部评分

使用道具

9
finamathcomp 发表于 2014-4-13 17:47:34 |只看作者 |坛友微信交流群
楼主神人!
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 1 精彩帖子

总评分: 论坛币 + 1   查看全部评分

使用道具

10
faruto 发表于 2014-4-13 22:23:16 |只看作者 |坛友微信交流群
finamathcomp 发表于 2014-4-13 17:47
楼主神人!
感谢支持~~
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 8 精彩帖子

总评分: 论坛币 + 8   查看全部评分

http://weibo.com/faruto
www.matlabsky.com
http://blog.sina.com.cn/faruto

使用道具

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

本版微信群
加好友,备注jr
拉您进交流群

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

GMT+8, 2024-4-25 20:02