获取所有的股票历史数据

量化分析第一步就是要获取数据,这里采用AK-share提供的数据,并且缓存到本地,通过pandas自带的保存为h5文件:

import akshare as ak
import pandas as pd


def save_h5_data(key, data):
    # 转换非数值列为字符串类型
    with pd.HDFStore(f"datasets/{key}.h5", 'w') as store:
        store.put(key, data)


def read_h5_data(key):
    with pd.HDFStore(f"datasets/{key}.h5", 'r') as store:
        return store[key]


def get_data(symbol):
    stock_zh_a_daily_df = ak.stock_zh_a_daily(symbol, adjust="qfq")
    save_h5_data(symbol, stock_zh_a_daily_df)


def init_load():
    stock_dict = {}
    stock_zh_a_spot_df = read_h5_data('all')
    for i in range(len(stock_zh_a_spot_df)):
        series = stock_zh_a_spot_df.loc[i]  # Directly access the row with iloc
        stock_code = series['代码']  # Access the '代码' column directly
        stock_name = series['名称']  # Access the '名称' column directly
        if str(stock_code).startswith("sh60") \
                or str(stock_code).startswith("sz00") \
                or str(stock_code).startswith("sz30"):
            stock_dict[str(stock_code)] = str(stock_name)
    total = len(stock_dict)
    for index, code in enumerate(stock_dict):
        name = stock_dict[code]
        print(f"start to get data from {code}, name is {name}, {index}/{total}")
        get_data(code)


if __name__ == "__main__":

    init_load()