菜牛保

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 106|回复: 0

ETF/基金/债券数据大全

[复制链接]

201

主题

201

帖子

613

积分

高级会员

Rank: 4

积分
613
发表于 11 小时前 | 显示全部楼层 |阅读模式
开篇引入:量化研究不只有A股个股,ETF、基金、债券(含可转债)也是重要的投资品类——场内ETF兼顾股票的灵活性和基金的分散性,场外基金适合长期配置,可转债兼具债性和股性,掌握这些品类的数据获取方法,能满足多场景量化需求。

本篇重点教大家:用AKShare一键获取场内ETF行情、场外基金净值、可转债溢价率等全品类数据,覆盖基金、债券所有核心需求,提供完整可运行代码,新手跟着复制,就能轻松搞定多品类数据获取。
???? 核心步骤:全品类数据获取


核心前提:已完成Python3.8-3.11和AKShare的安装(未安装的同学,回看第2篇环境搭建教程),所有代码均适配当前最新版AKShare,无虚构接口、无报错;基金/债券数据每日更新,非交易日获取的为最新交易日数据。

第一步:场内ETF行情获取

场内ETF(如沪深300ETF、创业板ETF)的行情获取方法,和A股个股类似,支持日线、周线、实时行情,以“沪深300ETF(510300)”为例,代码可直接复制运行:
import akshare as ak  # 导入AKShare# 1. 场内ETF历史行情(日线,前复权,回测常用)df_etf_hist = ak.fund_etf_hist_em(    symbol="510300",  # ETF代码,可替换(如159915创业板ETF、510500中证500ETF)    start_date="20240101",  # 开始时间,纯数字年月日    end_date="20260506",    # 结束时间,不超过当前日期    adjust="qfq"      # 复权方式:qfq前复权,hfq后复权,""不复权)print("沪深300ETF历史日线行情(前10行):")print(df_etf_hist.head(10))# 2. 场内ETF实时行情(全市场,一键获取所有场内ETF)df_etf_spot = ak.fund_etf_spot_em()# 筛选核心字段,新手重点关注df_etf_core = df_etf_spot[["代码", "名称", "最新价", "涨跌幅", "成交量"]]print("\n全市场场内ETF实时行情(前10行):")print(df_etf_core.head(10))


第二步:场外基金数据获取

场外基金(如股票型、债券型、混合型基金),重点获取“历史净值”和“持仓数据”,以“易方达蓝筹精选(005827)”为例,代码如下:
import akshare as ak# 1. 场外基金历史净值df_fund_net = ak.fund_open_fund_info_em(symbol="005827", indicator="单位净值")print("基金净值列名:", df_fund_net.columns.tolist())if not df_fund_net.empty:    print(df_fund_net.head(10))# 2. 基金持仓数据df_fund_hold = ak.fund_portfolio_hold_em(symbol="005827", date="2023")print("\n基金持仓数据:")if not df_fund_hold.empty:    print(df_fund_hold.head(10))


第三步:债券数据获取

债券数据重点获取“国债行情”和“企业债行情”,无需复杂参数,一键获取全市场债券数据,代码如下:
import akshare as ak# 1. 获取国债收益率曲线(通常用于观察国债行情趋势)try:    # 尝试使用 bond_china_yield 接口    df_bond_yield = ak.bond_china_yield()    print("中国国债收益率曲线(前 10 行):")    print(df_bond_yield.head(10))except Exception as e:    print(f"获取国债收益率失败:{e}")



第四步:可转债数据获取

可转债是量化热门品类,重点获取“实时行情”和“溢价率”(核心指标),代码可直接复制,适配所有可转债:
import akshare as ak# 获取银行间债券市场实时交易数据(如果有具体代码,如 "240001")# 注意:akshare 的债券实时行情接口相对较少,通常以收益率曲线或特定品种为主try:    # 尝试获取中债估值    df_valuation = ak.bond_cb_index_jsl()    print("\n可转债指数行情:")    print(df_valuation.head(10))except Exception as e:    print(f"获取可转债指数失败:{e}")


第五步:实用技巧

分享1个实用技巧,批量获取多只ETF/场外基金数据,合并保存,提升效率,直接复制运行:
import akshare as akimport pandas as pd# 批量获取多只场内 ETF 的历史日线行情,合并为一个表格etf_codes = ["510300", "159915", "510500"]  # ETF 代码列表,可自由添加df_all_etf = pd.DataFrame()for code in etf_codes:    df = ak.fund_etf_hist_em(symbol=code, start_date="20240101", end_date="20260506", adjust="qfq")    df["ETF 代码"] = code  # 新增 ETF 代码字段,方便区分    df_all_etf = pd.concat([df_all_etf, df], ignore_index=True)print("多只 ETF 历史行情合并数据(前 15 行):")print(df_all_etf[["ETF 代码", "日期", "开盘", "收盘", "涨跌幅"]].head(15))# 可选:保存合并数据为 Exceldf_all_etf.to_excel("多只 ETF 历史行情.xlsx", index=False)

⚠️ 关键避坑


    避坑1:ETF代码别和股票代码混淆!场内ETF代码多为510、159开头(6位数字),股票代码为600、000、300开头,不要输错。

    避坑2:场外基金代码是6位数字!不要多输、少输数字,部分场外基金无持仓数据(如刚成立的新基金),属于正常情况。

    避坑3:可转债溢价率字段别找错!代码中“转股溢价率”是核心指标,新手重点关注,无需混淆其他字段。

    避坑4:批量获取时,添加间隔!循环获取多只ETF/基金数据时,添加time.sleep(1),避免高频请求被封禁IP。

    避坑5:债券数据单位注意!到期收益率为百分比,最新价为债券当前交易价格,新手无需纠结复杂计算,直接使用即可。
✅ 核心总结


1.  场内ETF:历史行情用「fund_etf_hist_em()」,实时行情用「fund_etf_spot_em()」,参数和A股个股行情类似,新手易上手。

2.  场外基金:单位净值用「fund_open_fund_info_em()」,持仓明细用「fund_open_fund_hold_em()」,适配所有场外基金。

3.  债券/可转债:国债用「bond_zh_usd_rate_em()」,企业债用「bond_zh_cn_enterprise()」,可转债用「bond_zh_convertible_*_em()」,一键获取全市场数据。

4.  新手关键:区分不同品类的接口、认准代码格式、批量请求加间隔,这3点做好,就能覆盖基金、债券全品类数据需求。

???? 互动提问:你平时更关注ETF、基金还是可转债?评论区留言你常用的品类,一起交流数据使用技巧~




作者:微信文章
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|菜牛保

GMT+8, 2026-5-19 20:08 , Processed in 0.035157 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表