import time
import akshare as ak
import pandas as pd
stock_codes = ak.stock_zh_a_spot_em()['代码']
data_frames = []
count = 0
for stock_code in stock_codes:
try:
stock_data = ak.stock_zh_a_hist(
symbol=stock_code, period="daily", start_date="20240605", end_date='20240607', adjust="hfq")
data_frames.append(stock_data)
except Exception as e:
print(f"Error fetching data for {stock_code}: {e}")
if count % 10 == 0:
time.sleep(0.5)
count += 1
# 合并所有股票数据
all_stock_data = pd.concat(data_frames)
all_stock_data.to_csv('./stockdata.csv', sep=',', index=False)
股票数据复权
1.为何要复权:由于股票存在配股、分拆、合并和发放股息等事件,会导致股价出现较大的缺口。 若使用不复权的价格处理数据、计算各种指标,将会导致它们失去连续性,且使用不复权价格计算收益也会出现错误。 为了保证数据连贯性,常通过前复权和后复权对价格序列进行调整。
2.前复权:保持当前价格不变,将历史价格进行增减,从而使股价连续。 前复权用来看盘非常方便,能一眼看出股价的历史走势,叠加各种技术指标也比较顺畅,是各种行情软件默认的复权方式。 这种方法虽然很常见,但也有两个缺陷需要注意。
2.1 为了保证当前价格不变,每次股票除权除息,均需要重新调整历史价格,因此其历史价格是时变的。 这会导致在不同时点看到的历史前复权价可能出现差异。
2.2 对于有持续分红的公司来说,前复权价可能出现负值。
3.后复权:保证历史价格不变,在每次股票权益事件发生后,调整当前的股票价格。 后复权价格和真实股票价格可能差别较大,不适合用来看盘。 其优点在于,可以被看作投资者的长期财富增长曲线,反映投资者的真实收益率情况。
4.在量化投资研究中普遍采用后复权数据。