傲天居士

V1

2022/07/30阅读:39主题:默认主题

宽客必备神器-AKShare

今天给大家推荐一款量化投资工具-AKShare:https://www.akshare.xyz/

AKShare是基于 Python 的财经数据接口库,涵盖股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面、实时和历史行情数据。

本文将在python中调用AKShare,获取A股市场(沪深京)全部股票交易的历史行情数据。首先获取A股市场全部股票代码,使用AKShare的股票(沪深京)实时行情数据接口:akshare.stock_zh_a_spot_em()

去除股票名称为空值的,并萃取出代码和名称两列。然后写一个循环,使用AKShare的股票(沪深京)历史行情数据接口akshare.stock_zh_a_hist()获取全部A股上市的股票历史行情数据。我们新建一个空的DataFrame,每次循环将对应股票代码的历史行情数据添加进去。在循环中使用Try Catch进行异常处理。最终的股票代码整体如下:

### 导包
import akshare as ak
import pandas as pd
import numpy as np
import os

### 设置工作路径
mypath=r"..."
stock_zh_spot_df = ak.stock_zh_a_spot_em() ## 获取实时数据
stock_zh_spot_data=stock_zh_spot_df[stock_zh_spot_df['名称']!=''## 去除名称为空值的数据
codes_names=stock_zh_spot_data[['代码','名称']]

length=len(codes_names)
all_data = pd.DataFrame([])
for i in range(length):
    try:
        data_df = ak.stock_zh_a_hist(symbol=codes_names['代码'][i], period="daily", start_date="20150101", adjust="hfq"## 日度数据,后复权
        data_df['stock_id']=codes_names['代码'][i]
        all_data=all_data.append(data_df)
    except:
        KeyError()


all_data.to_csv(os.path.join(mypath+'\\'+'All_Data.csv'),encoding='utf_8_sig'## 数据导出为csv文件

all_data.to_csv(os.path.join(mypath+'\\'+'All_Data.txt'),sep="\t",index=True) ## 数据导出为txt文件

其中在获取历史行情数据的语句中,我们传入股票代码参数,"daily"表示日度数据,"hfq"表示后复权。之所以选择后复权,是因为股票存在配股、分拆、合并和发放股息等事件,导致股价缺口的出现。为了保证数据连贯性,常通过前复权和后复权对价格序列进行调整。

前复权是指保持当前价格不变,将历史价格进行增减,从而使股价连续。前复权的优点是能一眼看出股价的历史走势,叠加各种技术指标也比较顺畅,是各种行情软件默认的复权方式。然而前复权的缺点也很明显:

  1. 为了保证当前价格不变,每次股票除权除息,均需要重新调整历史价格,因此其历史价格是时变的。 这会导致在不同时点看到的历史前复权价可能出现差异。
  2. 对于有持续分红的公司来说,前复权价可能出现负值。

后复权则是指保证历史价格不变,在每次股票权益事件发生后,调整当前的股票价格。 后复权价格和真实股票价格可能差别较大,不适合用来看盘。后复权的优点在于可以反映投资者的真实收益率情况。因此在量化投资研究中普遍采用后复权数据。

分类:

人工智能

标签:

数据挖掘

作者介绍

傲天居士
V1

微信公众号:进击的王傲天