【MATLAB】股票(和指数)数据下载--雅虎财经

文章目录

  • 一、构建请求
  • 二、响应解读及整理
    • 2.1 响应
    • 2.2 数据提取和保存
  • 三、通用函数
    • 3.1 函数
    • 3.2 调用示例
  • 四、雅虎财经股票、指数代码
    • 4.1 指数
    • 4.2 股票
  • 五、GUI界面、可执行程序

雅虎2021年就退出中国了,你懂的。

能下载股票等数据的财经网站、软件也很多。我写着玩的。

一、构建请求

去雅虎财经网站,随便选择一个指数,或者搜索一个股票,点击历史数据,即可看到历史数据:

在这里插入图片描述

然后打开浏览器检查,网络选项,清除之前的请求,重新选择感兴趣的日期后加载,即可看到数据请求的api,右键复制curl(bash)格式。
在这里插入图片描述
然后生成对应语言的网络请求即可:https://curlconverter.com/

比如本文的matlab。

当然你也可以自己根据标头、载荷手动构建请求。


以标普500指数为例:

❄️载荷 payload:

period1period2是开始时间和结束时间的时间戳:1970年开始到你选择的日期的秒数。1672012800就是2023年12月26日 16:10:00 UTC。

symbol:指数(或股票)的代号,^GSPC是雅虎财经的代号;标普500指数代号是S&P 500,不同平台可能不同。

interval:间隔,可选择的是:1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max(一年约252个交易日)

并不是所有参数都需要使用的,比如地区、语言应该是不用设置的,这里只是解释一下完整的http请求。

params = {'events' 'capitalGain|div|split''formatted' 'true''includeAdjustedClose' 'true''interval' '1d''period1' '1672012800''period2' '1735222812''symbol' '^GSPC''userYfid' 'true''lang' 'zh-Hant-HK''region' 'HK'
};

❄️cookie:这个不用也行的,反正不用登录就能看。

cookies = {'GUC' 'xxx''A1' 'xxx''A3' 'xxx''A1S' 'xxx''PRF' 'xxx''cmp' 'xxx''gpp' 'xxx''gpp_sid' '8''axids' 'xxx'
};

❄️请求地址uri:

可以看到,这个基本请求地址是包含股票代号的:%5EGSPC(%5E即^),所以不是通用的,后面会根据股票代号构建。

第二行代码就是把params的各个参数连接起来,形成一个完整的uri。

baseURI = 'https://query1.finance.yahoo.com/v8/finance/chart/%5EGSPC';uri = [baseURI '?' char(join(join(params, '='), '&'))];

由 weboptions 对象 options 指定其他 HTTP 请求选项:

用于在 MATLAB 中发送 HTTP 请求时,模拟来自浏览器的请求行为。特别是:设置了详细的请求头(包括 cookies、用户代理、语言等),确保请求看起来像是来自真实用户。

options = weboptions(...'UserAgent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',...'HeaderFields', {'accept' '*/*''accept-language' 'zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7''cookie' char(join(join(cookies, '='), '; '))'origin' 'https://hk.finance.yahoo.com''priority' 'u=1, i''referer' 'https://hk.finance.yahoo.com/quote/%5EGSPC/history/?period1=1672012800&period2=1735222812''sec-ch-ua' '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"''sec-ch-ua-mobile' '?0''sec-ch-ua-platform' '"Windows"''sec-fetch-dest' 'empty''sec-fetch-mode' 'cors''sec-fetch-site' 'same-site'}...
);

读取响应:

response = webread(uri, options);

上面只是curlconverter生成的完整代码,有些参数不是必须的,且matlab还可以使用HTTP Interface创建网络请求。

二、响应解读及整理

2.1 响应

结果在response 中,这是讲的是webread函数返回的结果。

response 是一个结构体,非常好解析,通常最后的元素就是数组或者table。


直接到:response.chart.result,这里就是我们需要的查询数据。

meta:是一些元信息,比如股票代号,币种等等。

timestamp:是时间戳,和具体股票数据一一对应的。时间上是递增的。
indicators :是指标,即价格等数据。
在这里插入图片描述
打开indicators :

quote包含开盘价等数据,adjclose是调整后的收盘价。

调整后的收盘价(Adjusted Closing Price)是股票或指数的收盘价经过股息、股票分割、配股等因素调整后的价格。

在这里插入图片描述

quote: 成交量、开盘价、最低价、收盘价、最高价
在这里插入图片描述

2.2 数据提取和保存

保存到table里面。

%% 创建tableshort_struct = response.chart.result;% 大小
sz = [length(short_struct.indicators.quote.open) 7];% 列名
varNames = {'日期','开盘','最高','最低','收盘','调整后的收盘价','成交量'};% 数据类型
varTypes = {'datetime','double','double','double','double','double','uint64'};T = table('Size',sz,'VariableTypes',varTypes,'VariableNames',varNames);%% 填充table% 将时间戳转为可读的时间t = datetime(short_struct.timestamp, 'ConvertFrom', 'posixtime', 'Format', 'yyyy-MM-dd');T.("日期") = t;
T.("开盘") = short_struct.indicators.quote.open;
T.("最高") = short_struct.indicators.quote.high;
T.("最低") = short_struct.indicators.quote.low;
T.("收盘") = short_struct.indicators.quote.close;
T.("调整后的收盘价") = short_struct.indicators.adjclose.adjclose;
T.("成交量") = short_struct.indicators.quote.volume;%% 导出到excelwritetable(T,'标普500指数221226_241226.xlsx');

三、通用函数

3.1 函数

function resp = fetch_and_save_stock_data(symbol, start_date, end_date, filename)% fetch_and_save_stock_data 获取股票数据并保存为Excel文件% 输入:%   symbol      - 股票代号(如:'AAPL', '^GSPC'%   start_date  - 开始日期(如:'2024-01-01'%   end_date    - 结束日期(如:'2024-12-31'%   filename    - 保存的Excel文件名(如:'stock_data.xlsx')% 将输入的日期转换为Unix时间戳(秒)start_timestamp = posixtime(datetime(start_date, 'InputFormat', 'yyyy-MM-dd'));end_timestamp = posixtime(datetime(end_date, 'InputFormat', 'yyyy-MM-dd'));% 设置Yahoo Finance请求参数params = {'events' 'capitalGain|div|split''formatted' 'true''includeAdjustedClose', 'true''interval' '1d''period1' num2str(start_timestamp)'period2' num2str(end_timestamp)'symbol' symbol'userYfid' 'true''lang' 'zh-Hant-HK''region' 'HK'};encoded_symbol = urlencode(symbol);baseURI = ['https://query1.finance.yahoo.com/v8/finance/chart/', encoded_symbol];disp(baseURI)uri = [baseURI '?' char(join(join(params, '='), '&'))];% 动态生成 referer URLreferer_url = ['https://hk.finance.yahoo.com/quote/', encoded_symbol, '/history/?period1=', num2str(start_timestamp), '&period2=', num2str(end_timestamp)];options = weboptions(...'UserAgent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',...'HeaderFields', {'accept' '*/*''accept-language' 'zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7''origin' 'https://hk.finance.yahoo.com''priority' 'u=1, i'% 'referer' 'https://hk.finance.yahoo.com/quote/NVDA/history/?period1=1672012800&period2=1735228800''referer' referer_url'sec-ch-ua' '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"''sec-ch-ua-mobile' '?0''sec-ch-ua-platform' '"Windows"''sec-fetch-dest' 'empty''sec-fetch-mode' 'cors''sec-fetch-site' 'same-site' ...}...);% 从Yahoo Finance读取数据response = webread(uri, options);% 解析返回的数据short_struct = response.chart.result;% 创建表格sz = [length(short_struct.indicators.quote.open), 6];varNames = {'日期', '开盘', '最高', '最低', '收盘', '成交量'};varTypes = {'datetime', 'double', 'double', 'double', 'double', 'uint64'};T = table('Size', sz, 'VariableTypes', varTypes, 'VariableNames', varNames);% 填充表格数据t = datetime(short_struct.timestamp, 'ConvertFrom', 'posixtime', 'Format', 'yyyy-MM-dd');T.("日期") = t;T.("开盘") = short_struct.indicators.quote.open;T.("最高") = short_struct.indicators.quote.high;T.("最低") = short_struct.indicators.quote.low;T.("收盘") = short_struct.indicators.quote.close;% T.("调整后的收盘价") = short_struct.indicators.adjclose.adjclose;T.("成交量") = short_struct.indicators.quote.volume;% 保存表格到Excel文件writetable(T, filename);disp(['数据已保存到文件:', filename]);resp = response;
end

3.2 调用示例

clear
clc% 输入股票代号、开始日期、结束日期和保存的文件名
symbol = 'TSLA';  % 特斯拉股票
start_date = '2024-01-01';
end_date = '2024-12-26';
filename = 'TSLA_data_2024.xlsx';out = fetch_and_save_stock_data(symbol, start_date, end_date, filename);

四、雅虎财经股票、指数代码

这些也可以去雅虎财经看,这里列出少数几个。

4.1 指数

指数名称雅虎财经代号
标普500指数^GSPC
纳斯达克综合指数^IXIC
道琼斯工业平均指数^DJI
标普/TSX 综合指数(加拿大)^GSPTSE
欧洲斯托克50指数^STOXX50E
中国沪深300指数000300.SS
香港恒生指数^HSI
德国DAX指数^GDAXI
日经225指数^N225
英国富时100指数^FTSE
澳大利亚S&P/ASX 200指数^AXJO
法国CAC 40指数^FCHI
印度BSE Sensex指数^BSESN
俄罗斯RTS指数^RTSI

4.2 股票

公司名称雅虎财经股票代号
苹果公司 (Apple)AAPL
亚马逊 (Amazon)AMZN
微软公司 (Microsoft)MSFT
谷歌母公司 (Alphabet)GOOGL
特斯拉 (Tesla)TSLA
英伟达 (NVIDIA)NVDA
Facebook (Meta)META
波音 (Boeing)BA
奔驰 (Mercedes-Benz)MBG.DE
可口可乐 (Coca-Cola)KO
强生公司 (Johnson & Johnson)JNJ
迪士尼 (Disney)DIS
赛富时 (Shopify)SHOP
星巴克 (Starbucks)SBUX
美国银行 (Bank of America)BAC
高盛 (Goldman Sachs)GS
英特尔 (Intel)INTC
花旗银行 (Citigroup)C

五、GUI界面、可执行程序

懒得写,这个很简单们就是拉几个框,设置一下回调。

需要的可以付费给你弄个。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 使用UGUI制作卷轴开启关闭效果

视频效果 代码 using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; using DG.Tweening.Core; using DG.Tweening.Plugins.Options;public class JuanZhou : MonoBehaviour {[SerializeField]private …

Bash 脚本教程

注:本文为 “Bash 脚本编写” 相关文章合辑。 BASH 脚本编写教程 as good as well于 2017-08-04 22:04:28 发布 这里有个老 American 写的 BASH 脚本编写教程,非常不错,至少没接触过 BASH 的也能看懂! 建立一个脚本 Linux 中有…

NPM组件包 vant部分版本内嵌挖矿代码

Vant 是一个轻量、可定制的移动端组件库,于 2017 年开源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团队维护 React 版本和支付宝小程序版本。 Vant 2 版本:https://vant-ui.github.io/vant/v2/#/zh-CN/home V…

在基于Centos7的服务器上启用【Gateway】的【Clion Nova】(即 ReSharper C++ 引擎)

1. 检查启动报错日志,目录在 ~/.cache/JetBrains/CLion202x.x.x/log/backend.202x-xx-xx_xxxx.xxxx-err.log 2. 大致可能有两种报错 a. Process terminated. Couldnt find a valid ICU package installed on the system. 这个报错只需要装一下 libicu-devel 包即可…

Spring-Mybatis 2.0

前言: 第一点:过于依赖代码生成器或AI,导致基于mybaits的CRUD通通忘了,所以为了找回遗忘的记忆,有了该系列内容。 第二点:通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能…

Cypress测试框架详解:轻松实现端到端自动化测试

端到端自动化测试工具市场中,Cypress正以其易用性和强大功能,迅速成为开发者和测试人员的首选工具之一。无论是前端开发还是测试,Cypress都能在性能和效率上脱颖而出。 那么,Cypress具体能为端到端测试带来哪些便利?它…

ArrayList 和LinkedList的区别比较

前言 ‌ArrayList和LinkedList的主要区别在于它们的底层数据结构、性能特点以及适用场景。‌ArrayList和LinkedList从名字分析,他们一个是Array(动态数组)的数据结构,一个是Linked(链表)的数据结构&#x…

WebRTC:实现浏览器与移动应用的实时通信

1.技术简介 (Web Real-Time)是一种开放式实时通信技术,旨在使浏览器和移动应用程序通过简单的API即可实现实时音频、视频和数据传输,而无需安装插件或额外软件。它支持网络应用中的点对点通信,例如视频聊天、语音通话…

Microsoft word@【标题样式】应用不生效(主要表现为在导航窗格不显示)

背景 随笔。Microsoft word 2013基础使用,仅做参考和积累。 问题 Microsoft word 2013,对段落标题文字应用【标题样式】不生效(主要表现为在导航窗格不显示)。 图1 图2 观察图1和图2,发现图1的文字在应用【标题一】样…

kafka开机自启失败问题处理

前言:在当今大数据处理领域,Kafka 作为一款高性能、分布式的消息队列系统,发挥着举足轻重的作用。无论是海量数据的实时传输,还是复杂系统间的解耦通信,Kafka 都能轻松应对。然而,在实际部署和运维 Kafka 的…

WPF 绘制过顶点的圆滑曲线 (样条,贝塞尔)

在一个WPF项目中要用到样条曲线,必须过顶点,圆滑后还不能太走样,捣鼓一番,发现里面颇有玄机,于是把我多方抄来改造的方法发出来,方便新手: 如上图,看代码吧: ----------…

国产数据库TiDB从入门到放弃教程

国家层面战略,安全的角度,硬件、软件国产化是趋势,鸿蒙电脑操作系统、鸿蒙手机操作系统…数据库也会慢慢国产化,国产数据库TiDB用起来比OceanBase丝滑,本身没有那么重。 从入门到放弃 1. 介绍1.1 TiDB 的主要特点1.2 T…

基于STM32单片机矿井矿工作业安全监测设计

基于STM32单片机矿井矿工作业安全监测设计 目录 项目开发背景设计实现的功能项目硬件模块组成设计思路系统功能总结使用的模块技术详情介绍总结 1. 项目开发背景 随着矿井矿工作业环境的复杂性和危险性逐渐增加,矿井作业安全问题引起了社会各界的广泛关注。传统的…

单片机与MQTT协议

MQTT 协议简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布 / 订阅(publish/subscribe)模式的 “轻量级” 通讯协议,该协议构建于 TCP/IP 协议上&#xf…

C#中相等比较 == 和 Equal函数 对比

1. 运算符 是一个运算符,用于比较两个值是否相等。对于值类型(如 int、float、double 等), 直接比较两个值是否相同。对于引用类型(如类和数组), 比较两个引用是否指向内存中的同一个对象。 2.…

Java 处理base64文件上传

场景: 在系统内有一个类似于公告的模块,如果里面添加的文章不是选择富文本上传图片的方式,而是选择复制别的文章直接粘贴到系统内的富文本,里面的图片就不会是url,而是图片的base64格式,这样会导致数据库存…

【行业发展报告】2024大数据与智能化行业发展浅析

回首 2024,大数据智能化浪潮汹涌。海量数据宛如繁星,在智能算法的苍穹下汇聚、碰撞,释放出洞察市场与用户的强大能量,精准勾勒出商业新航线。我们精心雕琢技术架构,从数据存储的坚固基石到处理分析的高效引擎&#xff…

项目基本配置

总说 本节主要记录修改配置文件、连接mysql数据库、git连接 一、配置文件的修改 1.1 配置pom.xml 由于我们要连接mysql数据库,需要在pom.xml中添加相关依赖 这里给出一个网站,可以找到各种依赖Maven Repository: Search/Browse/Explore 添加一个my…

【YOLOv3】源码(train.py)

概述 主要模块分析 参数解析与初始化 功能:解析命令行参数,设置训练配置项目经理制定详细的施工计划和资源分配日志记录与监控 功能:初始化日志记录器,配置监控系统项目经理使用监控和记录工具,实时跟踪施工进度和质量…

【Vim Masterclass 笔记02】第3章:Vim 核心知识 + L08:Vim 核心浏览命令 + L09:Vim 核心浏览命令同步练习

文章目录 Section 3:Vim Essentials(Vim 核心知识)S03L08 Essential Navigation Commands1 光标的上下左右移动2 上 / 下翻页3 基于单词前移4 基于单词后移5 重新定位视图中的文本(页面重绘)6 定位到所在行的行首7 光标…