【Time Series】获取股票数据代码实战

一、简介

        "时间序列+金融"是一个很有"钱"景的话题,若想开始DeepLearning+TimeSeries+Stock,首先得拿到数据。本文提供了一种股票数据获取的源代码。

二、代码

        1、首先,将要获取数据的股票按照图中xlsx的格式整理,sheet名设置为"stock_names"。如下图:

        2、然后直接运行下列代码,配置好输入(stock_names.xlsx)和输出路径,就可以实现数据获取。

import os
import baostock as bs
import pandas as pd
from datetime import datetime
from datetime import timedelta# 自定义的日期解析函数,仅保留日期部分
def custom_date_parser(x):return datetime.strptime(x, '%Y-%m-%d %H:%M:%S').date()class stock_data():def __init__(self):self.params = self.init_baostock()def init_baostock(self):# 计算MACD / KDJ / RSI 的params 参数设置# 12,26,9# 6,12,24# 9,3,3# params = []# with open('configs/input_params.txt', 'r') as f:#     code_list = f.readlines()#     for index, item in enumerate(code_list):#         item = item.strip()#         item = item.split(',')#         params += [int(i) for i in item]#     return paramsparams = [12,26,9,6,12,24,9,3,3]return paramsdef get_stock_basedata(self,code,start_date,end_date):"""open/high/low/close/volume/MACD/KDJ"""lg = bs.login()#将时间去除时分秒start_date = (pd.to_datetime(start_date) + timedelta(days=1)).strftime("%Y-%m-%d")end_date = (pd.to_datetime(end_date) + timedelta(days=1)).strftime("%Y-%m-%d")rs = bs.query_history_k_data_plus(code,"date,code,open,high,low,close,preclose,volume,amount,turn",start_date=start_date, end_date=end_date, frequency="d",adjustflag='2')  # 注意adjustflag取前复权data_list = []while (rs.error_code == '0') & rs.next():data_list.append(rs.get_row_data())self.stock_pd = pd.DataFrame(data_list, columns=rs.fields)self.stock_pd[['open', 'high', 'low', 'close', 'volume']] = self.stock_pd[['open', 'high', 'low', 'close', 'volume']].astype('float64')self.stock_pd = self.stock_pd.rename(columns={'date': 'datetime'})self.stock_pd.index = pd.DatetimeIndex(self.stock_pd['datetime'])# Step2: 利用Pandas 计算MACD / KDJ / RSIshort_ema = self.stock_pd['close'].ewm(span=self.params[0]).mean()long_ema = self.stock_pd['close'].ewm(span=self.params[1]).mean()self.stock_pd.loc[:, 'DIFF'] = short_ema - long_emaself.stock_pd.loc[:, 'DEA'] = self.stock_pd['DIFF'].ewm(span=self.params[2]).mean()self.stock_pd.loc[:, 'MACD'] = 2 * (self.stock_pd['DIFF'] - self.stock_pd['DEA'])low_list = self.stock_pd['low'].rolling(9, min_periods=9).min()low_list.fillna(value=self.stock_pd['low'].expanding().min(), inplace=True)high_list = self.stock_pd['high'].rolling(9, min_periods=9).max()high_list.fillna(value=self.stock_pd['high'].expanding().max(), inplace=True)rsv = (self.stock_pd['close'] - low_list) / (high_list - low_list) * 100self.stock_pd['k'] = pd.DataFrame(rsv).ewm(com=2).mean()self.stock_pd['d'] = self.stock_pd['k'].ewm(com=2).mean()self.stock_pd['j'] = 3 * self.stock_pd['k'] - 2 * self.stock_pd['d']return self.stock_pddef get_data_workflow(input_stock_names,output_stock_datas):#1.获取csv下所有股票的数据并保留在文件夹下stock_class = stock_data()stocks_df = pd.read_excel(input_stock_names,sheet_name='stock_names',parse_dates=['起始时间','终止时间'],date_parser=custom_date_parser)#2.获取数据for _,code,start_date,end_date,stock_name in stocks_df.itertuples():tmp_stock_pds = stock_class.get_stock_basedata(code,start_date,end_date)# 3.保存写入数据tmp_stock_pds.to_excel(os.path.join(output_stock_datas, stock_name + '.xlsx'), index=False)if __name__ == '__main__':get_data_workflow(input_stock_names='input_datas/stock_names.xlsx',output_stock_datas='output_datas/stock_datas')

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

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

相关文章

力扣hot100 柱状图中最大的矩形 单调栈

Problem: 84. 柱状图中最大的矩形 文章目录 思路复杂度Code 思路 👨‍🏫 参考地址 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public static int largestRectangleArea(int[] height){Stack&l…

Windows Server 2025 来了

微软于2024年1月26日发布了Windows Server 2025的预览版更新,Windows Server 2025是由您的反馈和您希望拥抱混合、自适应云的愿望驱动的。这是2024年度的首个预览版,版本号为Build 26040。 在Windows Server 2025中,微软引入了多项新安全机制…

旧物回收小程序开发:创新与可持续发展的交汇点

随着社会的发展和人们生活水平的提高,物品的更新换代速度越来越快,这导致了大量的旧物被闲置或丢弃。为了解决这个问题,旧物回收成为了重要的环保行动。而随着移动互联网的普及,旧物回收小程序的开发也成为了新的趋势。本文将探讨…

Redis(九)集群(cluster)

文章目录 概述作用1. redis集群的槽位slot2. redis集群的分片3. 第1,2点的优势:**最大优势,方便扩缩容和数据分派查找**4. slot槽位映射,一般业界有3种解决方案第一种:哈希取余分区第二种:一致性哈希算法分区第三种&am…

【Spring源码分析】循环依赖的底层源码剖析

循环依赖的底层源码剖析 一、预知知识二、循环依赖的底层源码剖析1. Spring 是如何存储半成品Bean的?getEarlyBeanReference 方法的源码分析 2. Spring 是如何解决的循环依赖呢?测试 3. 哪些循环依赖 Spring 是无法解决的呢?Async 引起的循环…

华为配置小型网络WLAN 的基本业务示例

配置小型网络WLAN基本业务示例 组网图形 图1 配置小型网络WLAN基本业务组网图 小型WLAN网络简介配置注意事项组网需求数据规划配置思路操作步骤配置文件 小型WLAN网络简介 本文介绍的WLAN网络是指利用频率为2.4GHz或5GHz的射频信号作为传输介质的无线局域网,相对于有…

Leetcode—1828. 统计一个圆中点的数目【中等】

2024每日刷题&#xff08;一零五&#xff09; Leetcode—1828. 统计一个圆中点的数目 实现代码 class Solution { public:vector<int> countPoints(vector<vector<int>>& points, vector<vector<int>>& queries) {vector<int> a…

LINUX基础培训十九之常见服务dns介绍

前言、本章学习目标 了解dns服务用途掌握dns服务器的配置掌握dns服务的使用 一、DNS服务概述 DNS是域名系统(Domain Name System)的缩写&#xff0c;是因特网的一项核心服务&#xff0c;它作为可以将域名和IP地址相互映射的个分布式数据库&#xff0c;能够使人更方便的访问…

STL-priority_queue

文档 目录 1.关于priority_queued1的定义 2.priority_queue的使用 1.关于priority_queued1的定义 1. 优先队列是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它的第一个元素总是它所包含的元素中最大的。 2. 此上下文类似于堆&#xff0c;在堆中可以随时插入元…

主从数据库MySQL服务重启步骤与注意事项

主从数据库MySQL服务重启步骤与注意事项 实验环境&#xff1a; 172.20.26.34 &#xff08;主应用服务器&#xff09; 172.20.26.26 &#xff08;备应用服务器&#xff09; 172.20.26.37 &#xff08;主库服务器&#xff09; 172.20.26.38 &#xff08;从库服务器&…

Android MediaCodec 简明教程(四):使用 MediaCodec 将视频解码到 Surface,并使用 SurfaceView 播放视频

系列文章目录 Android MediaCodec 简明教程&#xff08;一&#xff09;&#xff1a;使用 MediaCodecList 查询 Codec 信息&#xff0c;并创建 MediaCodec 编解码器Android MediaCodec 简明教程&#xff08;二&#xff09;&#xff1a;使用 MediaCodecInfo.CodecCapabilities 查…

kafka集群搭建需要做的事情

首先&#xff0c;虚拟机克隆好之后的步骤如下&#xff1a; 1. 修改IP、主机名&#xff0c;关闭防火墙&#xff1b;&#xff08;reboot重启&#xff09; 2. 在/etc/hosts文件中进行IP与主机名的映射配置&#xff0c;集群中每天都记得配置&#xff1b; 3. 安装JDK并进行分发&a…