Python量化1:数据获取

Python量化1:数据获取

介绍

获取A股所有上市公司的代码和名称,以及获取所有股票的当日信息,并对这些信息进行处理和存储,这里将分别介绍几种数据获取方式,

基于AKSHARE获取A股数据

包介绍

  1. akshare:这是一个用于获取金融数据的Python库,提供了上百种数据获取接口,包括股票、基金、期货等金融产品的历史数据和实时数据。在这段代码中,akshare主要用于获取A股上市公司的代码和名称以及股票的当日信息4。
  2. pandas:这是一个非常强大的数据处理库,提供了大量用于数据清洗、转换、分析和可视化的功能。在这段代码中,pandas主要用于读取、处理和保存股票数据。
  3. os:这是一个用于与操作系统进行交互的库,提供了文件和目录操作等功能。在这段代码中,os库主要用于创建文件夹和检查文件是否存在。
  4. datetime 和 pytz:这两个库用于处理日期和时间。在这段代码中,它们主要用于获取当前日期并将其转换为指定的时区(上海时区)。

代码

基于akshare获取数据,然后将其存储到cvs,当然还是推荐直接存储到数据库的毕竟又快又方便整理

import akshare as ak
import pandas as pd
import os
import datetime
import pytz
# 获取A股所有的上市公司的代码和名称
stock_info = ak.stock_info_sh_name_code(symbol="主板A股")
print(stock_info)
# 获取所有股票的当日信息
stock_sh_a_spot_em_df = ak.stock_sh_a_spot_em()
start_date = "20210601"
shanghai_tz = pytz.timezone('Asia/Shanghai')
current_date = datetime.datetime.now(shanghai_tz)
end_date = current_date.strftime('%Y%m%d')
print(end_date)
folder_name = "C:/Users/datasave"
if not os.path.exists(folder_name):
    os.makedirs(folder_name)
    print(f"文件夹 {folder_name} 已创建.")
else:
    print(f"文件夹 {folder_name} 已存在.")
for code in stock_info['证券代码']:
    # 获取该股票的市值和价格
    stock_spot_info = stock_sh_a_spot_em_df[stock_sh_a_spot_em_df['代码'] == code]
    market_cap = float(stock_spot_info['总市值'])
    price = float(stock_spot_info['最新价'])
    # 如果市值大于1000亿或价格大于50,跳过该股票,可以删除
    if market_cap > 1000e8 or price > 45:
        print(f"跳过{code}!")
        continue
    try:
        stock_data = ak.stock_zh_a_daily(symbol='sh'+code, start_date=start_date, end_date=end_date, adjust="hfq")
        stock_data['date'] = stock_data['date'].dt.strftime("%Y-%m-%d")  # convert date to the format "YYYY-MM-DD"
        print(f"获取{code}的数据成功!")
        # 将每个公司的数据单独存为csv
        file_path = os.path.join(folder_name, f"{code}_data.csv")
        if os.path.isfile(file_path):
            existing_data = pd.read_csv(file_path)
            stock_data = pd.concat([existing_data, stock_data]).drop_duplicates()
        stock_data.to_csv(file_path, index=False)
        print(f"{code}的数据已保存为CSV文件!")
    except Exception as e:
        print(f"获取{code}的数据失败,错误信息为:{e}")
``

基于Tushare获取A股数据

Tushare介绍:

Tushare是一个强大的金融数据提供库,它提供了丰富的金融数据,(部分需要捐赠,具体的权限表格)包括:

  1. 股票数据:包括交易数据、投资者结构数据、财务数据等。
  2. 期货数据:包括各种期货的交易数据。
  3. 指数数据:提供主要指数的实时行情和历史行情数据。
  4. 宏观经济数据:包括国内外重要的宏观经济数据。
  5. 新闻事件数据:提供金融新闻和重大事件数据。

Tushare的主要特点有:

  • 免费:Tushare提供部分的数据接口是免费的,但也有一部分高级数据需要付费。
  • 丰富:Tushare提供的数据类型丰富
  • 实时:Tushare可以提供实时的金融数据。

    官网

    从通达信导出数据

    这里请参考我的其他博客

    链接

    具体就我自己的使用体验来说,存在很多问题,首先是历史数据的下载,通达信限制了下载周期,再者我也使用过一些转换软件或者代码程序,依旧存在很多数据转换出错,后续的分析如果涉及到这些数据的清洗会是件比较麻烦的事情,建议还是tushare,这里如果有兴趣可以私聊我询问