90 lines
3.0 KiB
Python
90 lines
3.0 KiB
Python
import os
|
|
import re
|
|
import akshare as ak
|
|
import pandas as pd
|
|
from loguru import logger
|
|
|
|
# index_hist_df = ak.index_zh_a_hist(
|
|
# symbol="000001", # 指数代码,如上证指数
|
|
# period="daily", # K线周期: daily(日K)
|
|
# start_date="19700101", # 开始日期
|
|
# end_date="22220101", # 结束日期
|
|
# )
|
|
|
|
|
|
def get_all_stock_index():
|
|
index_choice = ["沪深重要指数", "上证系列指数", "深证系列指数", "中证系列指数"]
|
|
index_df_list = []
|
|
for source in index_choice:
|
|
logger.info(f"正在获取 {source}...")
|
|
index_df = ak.stock_zh_index_spot_em(symbol=source)
|
|
index_df["symbol"] = source
|
|
index_df_list.append(index_df)
|
|
logger.info(f"{source}: {index_df.shape[0]}")
|
|
df = pd.concat(index_df_list)
|
|
return df
|
|
|
|
|
|
def get_index_fund_info():
|
|
# 读取指数数据和基金数据
|
|
index_df = pd.read_csv(
|
|
"/Users/aszer/Documents/vscode/etf/data/index_all_stock.csv",
|
|
encoding="utf-8-sig",
|
|
)
|
|
fund_df = pd.read_csv(
|
|
"/Users/aszer/Documents/vscode/etf/data/fund_info.csv", encoding="utf-8-sig"
|
|
)
|
|
|
|
# 构建指数名称集合去重,加快后续匹配
|
|
index_name_set = set(index_df["名称"].astype(str).unique())
|
|
|
|
# 对每个基金名称,查找其是否包含某一指数名称,允许多对多匹配
|
|
records = []
|
|
for fund_idx, fund_row in fund_df.iterrows():
|
|
fund_name = str(fund_row["基金名称"])
|
|
fund_code = str(fund_row["基金代码"])
|
|
funf_fee = fund_row["手续费"]
|
|
matched_index_list = [
|
|
idx_name
|
|
for idx_name in index_name_set
|
|
if idx_name.lower() in fund_name.lower()
|
|
]
|
|
for idx_name in matched_index_list:
|
|
# 找到指数的相关代码
|
|
index_row = index_df[index_df["名称"] == idx_name]
|
|
index_code = None
|
|
if not index_row.empty:
|
|
index_code = str(index_row.iloc[0]["代码"])
|
|
records.append(
|
|
{
|
|
"指数代码": index_code,
|
|
"指数名称": idx_name,
|
|
"基金代码": fund_code,
|
|
"基金名称": fund_name,
|
|
"手续费": funf_fee,
|
|
}
|
|
)
|
|
index_fund_df = pd.DataFrame(records)
|
|
index_fund_df = index_fund_df.sort_values("指数代码").reset_index(drop=True)
|
|
return index_fund_df
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# df = get_all_stock_index()
|
|
# df.to_csv("index_all_stock.csv", index=False, encoding="utf-8-sig")
|
|
|
|
# res = ak.fund_etf_spot_em()
|
|
# print(res)
|
|
|
|
# df = get_index_fund_info()
|
|
# df.to_csv("index_fund_info.csv", index=False, encoding="utf-8-sig")
|
|
|
|
import akshare as ak
|
|
import pandas as pd
|
|
|
|
for symbol in ["NVDA", "AAPL", "MSFT", "AMZN", "TSLA", "META", "GOOGL"]:
|
|
stock_us_daily_df = ak.stock_us_daily(symbol=symbol, adjust="qfq")
|
|
stock_us_daily_df.to_csv(
|
|
f"{symbol}_stock_us_daily.csv", index=False, encoding="utf-8-sig"
|
|
)
|