搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  Matlab通过Yahoo与Sina获取历史与实时股票数据[faruto版本].rar
资料下载链接地址: https://bbs.pinggu.org/a-1489460.html
本附件包括:
  • urlread_General.m
  • urlreadwrite_General.m
  • urlwrite_General.m
  • YahooData.m
  • 1.jpg
  • 2.jpg
  • SinaData.m
  • SinaYahooDataTest.m
  • SinaYahooDataTest.pdf
  • MT_candle.m
附件大小:
136.84 KB   举报本内容
以前做的一些东西。和大家分享~~
原帖地址:
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版本]





    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

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

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

GMT+8, 2025-12-25 03:58