Python 测试 efinance 库中所有函数
下面的代码测试了 efinance
库中的所有函数。
在函数调用位置的上方是数据样例,数据样例的整理和输出由函数 print_cols_and_raw
控制。
import efinance as ef
import time
import socket
import pandas as pd
def print_cols_and_raw(obj):
cols = []
raw = []
if isinstance(obj, pd.DataFrame):
cols = obj.columns.to_list()
if len(obj) > 0:
raw = obj.loc[0].to_list()
else:
raw = []
elif isinstance(obj, pd.Series):
cols = obj.index.to_list()
raw = obj.to_list()
elif isinstance(obj, list):
print(obj)
else:
print(type(obj))
print(f"Columns:\n{cols}")
print(f"Top Row:\n{raw}")
def test_stock_method():
"""
股票
"""
df = pd.DataFrame()
# """
# 获取沪深市场的全部股票报告期信息(按日期降序排列)
# ['报告日期', '季报名称']
# ['2024-09-30', '2024年 三季报']
# """
# df = ef.stock.get_all_report_dates()
# """
# 获取沪深市场股票某一季度的表现情况
# 可以通过函数 ``efinance.stock.get_all_report_dates`` 来获取可选日期
# ['股票代码', '股票简称', '公告日期', '营业收入', '营业收入同比增长', '营业收入季度环比', '净利润', '净利润同比增长', '净利润季度环比', '每股收益', '每股净资产', '净资产收益率', '销售毛利率', '每股经营现金流量']
# ['301585', '蓝宇股份', '2024-11-28 00:00:00', np.float64(357979324.66), np.float64(27.8407836308), np.float64(nan), np.float64(82098449.94), np.float64(17.1187892692), np.float64(nan), np.float64(1.37), np.float64(8.585769403833), np.float64(17.32), np.float64(38.4109982666), np.float64(1.1962635775)]
# """
# df = ef.stock.get_all_company_performance() # 默认为最新季度,亦可指定季度
# """
# 获取单只股票基本信息
# ['股票代码', '股票名称', '净利润', '总市值', '流通市值', '所处行业', '市盈率(动)', '市净率', 'ROE', '毛利率', '净利率', '板块编号']
# ['600519', '贵州茅台', 60827552118.51, 1939569403200.0, 1939569403200.0, '酿酒行业', 23.91, 8.16, 26.09, 91.5313752514, 52.188674418699996, 'BK0477']
# """
# stock_code = "600519"
# sr = ef.stock.get_base_info(stock_code) # pd.Series
# """
# 获取多只股票基本信息
# ['股票代码', '股票名称', '净利润', '总市值', '流通市值', '所处行业', '市盈率(动)', '市净率', 'ROE', '毛利率', '净利率', '板块编号']
# ['300750', '宁德时代', 36001073800.0, 1157275019826.98, 1025630829875.73, '电池', 24.11, 4.88, 17.73, 28.1850329314, 14.952341442700002, 'BK1033']
# """
# stock_code = ["600519", "300750"]
# df = ef.stock.get_base_info(stock_code) # pd.DataFrame
# """
# 获取股票所属板块
# ['股票名称', '股票代码', '板块代码', '板块名称', '板块涨幅']
# ['贵州茅台', '600519', 'BK0477', '酿酒行业', 2.01]
# """
# stock_code = "600519"
# df = ef.stock.get_belong_board(stock_code)
# """
# 获取指定日期区间的龙虎榜详情数据
# ['股票代码', '股票名称', '上榜日期', '解读', '收盘价', '涨跌幅', '换手率', '龙虎榜净买额', '龙虎榜买入额', '龙虎榜卖出额', '龙虎榜成交额', '市场总成交额', '净买额占总成交比', '成交额占总成交比', '流通市值', '上榜原因']
# ['000564', '供销大集', '2024-11-28', '主力做T,成功率36.34%', np.float64(3.03), np.float64(10.1818), np.float64(6.4665), np.float64(-54157897.66), np.float64(258160902.68), np.float64(312318800.34), np.float64(570479703.02), np.float64(2653709265.0), np.float64(-2.040837644662), np.float64(21.497445501815), np.float64(43138533039.51), '日涨幅偏离值达到7%的前5只证券']
# """
# df = ef.stock.get_daily_billboard() # 默认值: 最新一个榜单公开日
# """
# 获取股票最新交易日成交明细
# ['股票名称', '股票代码', '时间', '昨收', '成交价', '成交量', '单数']
# ['贵州茅台', '600519', '09:15:05', 1518.0, 1518.0, 3, 0]
# """
# stock_code = "600519"
# df = ef.stock.get_deal_detail(stock_code)
# """
# 获取单只股票历史单子流入流出数据
# ['股票名称', '股票代码', '日期', '主力净流入', '小单净流入', '中单净流入', '大单净流入', '超大单净流入', '主力净流入占比', '小单流入净占比', '中单流入净占比', '大单流入净占比', '超大单流入净占比', '收盘价', '涨跌幅']
# ['宁德时代', '300750', '2024-06-04', np.float64(7314432.0), np.float64(-110107600.0), np.float64(102793168.0), np.float64(41020880.0), np.float64(-33706448.0), np.float64(0.2), np.float64(-3.03), np.float64(2.82), np.float64(1.13), np.float64(-0.93), np.float64(205.97), np.float64(1.71)]
# """
# df = ef.stock.get_history_bill("300750")
# """
# 获取单只股票最新交易日的日内分钟级单子流入流出数据
# ['股票名称', '股票代码', '时间', '主力净流入', '小单净流入', '中单净流入', '大单净流入', '超大单净流入']
# ['宁德时代', '300750', '2024-11-29 09:31', np.float64(6700595.0), np.float64(-4821024.0), np.float64(-1879570.0), np.float64(9207963.0), np.float64(-2507368.0)]
# """
# df = ef.stock.get_today_bill("300750")
# """
# 获取沪深A股市场最新公开的股东数目变化情况 也可获取指定报告期的股东数目变化情况
# ['股票代码', '股票名称', '股东人数', '股东人数增减', '较上期变化百分比', '股东户数统计截止日', '户均持股市值', '户均持股数量', '总市值', '总股本', '公告日期']
# ['601061', '中信金属', 86078, -8.970928818435, -8483.0, '2024-11-20 00:00:00', 463370.431469133, 56925.1144310974, 39886000000.0, 4900000000.0, '2024-11-29 00:00:00']
# """
# df = ef.stock.get_latest_holder_number()
# """
# 获取企业 IPO 审核状态
# ['发行人全称', '审核状态', '注册地', '证监会行业', '保荐机构', '会计师事务所', '更新日期', '受理日期', '拟上市地点']
# ['汉朔科技股份有限公司', '注册生效', '浙江', '计算机、通信和其他电子设备制造业', '中国国际金融股份有限公司', '毕马威华振会计师事务所(特殊普通合伙)', '2024-11-28 00:00:00', '2023-06-28 00:00:00', '创业板']
# """
# df = ef.stock.get_latest_ipo_info()
# """
# 获取沪深市场多只股票的实时涨幅情况
# ['代码', '名称', '涨跌幅', '最新价', '最高', '最低', '今开', '涨跌额', '换手率', '量比', '动态市盈率', '成交量', '成交额', '昨日收盘', '总市值', '流通市值', '市场类型', '行情ID', '更新时间', '最新交易日']
# ['600519', '贵州茅台', 1.29, 1537.62, 1555.0, 1513.21, 1517.0, 19.62, 0.21, 1.41, 23.82, 26197, 4019152839.0, 1518.0, 1931554861236, 1931554861236, '沪A', '1.600519', '2024-11-29 13:36:50', '2024-11-29']
# """
# stock_code = ['600519' ,'300750']
# df = ef.stock.get_latest_quote(stock_code)
# """
# 获取指数成分股信息
# ['指数代码', '指数名称', '股票代码', '股票名称', '股票权重']
# ['000001', '上证指数', '600519', '贵州茅台', np.float64(3.74)]
# """
# stock_code = "000001"
# df = ef.stock.get_members(stock_code)
# """
# 获取股票历史日 K 线数据
# ['股票名称', '股票代码', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']
# ['贵州茅台', '600519', '2024-01-02', np.float64(1684.12), np.float64(1654.13), np.float64(1687.31), np.float64(1647.22), np.int64(32156), np.float64(5440082548.0), np.float64(2.37), np.float64(-2.42), np.float64(-40.99), np.float64(0.26)]
# """
# stock_code = "600519"
# df = ef.stock.get_quote_history(
# stock_codes=stock_code, beg="20240101", end="20241231"
# )
# """
# 获取非 A 股的股票 K 线数据(支持输入股票名称以及代码)
# ['股票名称', '股票代码', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']
# ['苹果', 'AAPL', '2024-01-02', np.float64(186.16), np.float64(184.65), np.float64(187.45), np.float64(182.895), np.int64(82488674), np.float64(15330141952.0), np.float64(2.38), np.float64(-3.6), np.float64(-6.89), np.float64(0.53)]
# """
# stock_code = "AAPL"
# df = ef.stock.get_quote_history(
# stock_codes=stock_code, beg="20240101", end="20241231"
# )
# """
# 获取 ETF K 线数据
# ['股票名称', '股票代码', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']
# ['中概互联网ETF', '513050', '2024-01-02', np.float64(0.948), np.float64(0.935), np.float64(0.957), np.float64(0.934), np.int64(5521957), np.float64(520712773.0), np.float64(2.45), np.float64(-0.43), np.float64(-0.004), np.float64(1.68)]
# """
# etf_code = "513050"
# df = ef.stock.get_quote_history(
# stock_codes=etf_code, beg="20240101", end="20241231"
# )
# """
# 获取单只股票 5 分钟 K 线数据
# ['股票名称', '股票代码', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']
# ['贵州茅台', '600519', '2024-10-17 09:35', np.float64(1537.0), np.float64(1528.0), np.float64(1537.66), np.float64(1522.6), np.int64(2779), np.float64(425437958.0), np.float64(0.99), np.float64(0.36), np.float64(5.5), np.float64(0.02)]
# """
# stock_code = "600519"
# frequency = 5
# df = ef.stock.get_quote_history(
# stock_code, klt=frequency, beg="20240101", end="20241231"
# )
# """
# 获取沪深市场股票最新行情快照
# ['代码', '名称', '时间', '涨跌额', '涨跌幅', '最新价', '昨收', '今开', '开盘', '最高', '最低', '均价', '涨停价', '跌停价', '换手率', '成交量', '成交额', '卖1价', '卖2价', '卖3价', '卖4价', '卖5价', '买1价', '买2价', '买3价', '买4价', '买5价', '卖1数量', '卖2数量', '卖3数量', '卖4数量', '卖5数量', '买1数量', '买2数量', '买3数量', '买4数量', '买5数量']
# ['600519', '贵州茅台', '13:46:44', -7.7, -0.51, 1512.3, 1520.0, 1510.86, 1510.86, 1517.86, 1510.81, 1513.48, 1672.0, 1368.0, 0.08, 9592.0, 1451717920.0, 1512.44, 1512.55, 1513.0, 1513.44, 1513.45, 1512.29, 1512.22, 1512.21, 1512.2, 1512.19, 3.0, 1.0, 1.0, 1.0, 4.0, 2.0, 3.0, 52.0, 3.0, 1.0]
# """
# stock_code = "600519"
# df = ef.stock.get_quote_snapshot(stock_code)
"""
沪深市场 A 股最新状况
['股票代码', '股票名称', '涨跌幅', '最新价', '最高', '最低', '今开', '涨跌额', '换手率', '量比', '动态市盈率', '成交量', '成交额', '昨日收盘', '总市值', '流通市值', '行情ID', '市场类型', '更新时间', '最新交易日']
['920128', 'N胜业', 481.8, 53.06, 60.0, 52.0, 52.0, 43.94, np.float64(63.79), '-', 84.1, 109083, 616112646.5, 9.12, 4164679400, 907326000, '0.920128', '深A', '2024-11-29 10:55:24', '2024-11-29']
"""
df = ef.stock.get_realtime_quotes()
# """
# 获取单只股票最新交易日的日内分钟级单子流入流出数据
# ['股票名称', '股票代码', '时间', '主力净流入', '小单净流入', '中单净流入', '大单净流入', '超大单净流入']
# ['贵州茅台', '600519', '2024-12-05 09:31', -3247741.0, 0.0, 3247741.0, -535767.0, -2711974.0]
# """
# stock_code = "600519"
# df = ef.stock.get_today_bill(stock_code)
# """
# 获取沪深市场指定股票前十大股东信息
# ['股票代码', '更新日期', '股东代码', '股东名称', '持股数', '持股比例', '增减', '变动率']
# ['600519', '2024-11-18', 80010298, '中国贵州茅台酒厂(集团)有限责任公司', '6.792亿', '54.07%', '不变', '--']
# """
# stock_code = "600519"
# df = ef.stock.get_top10_stock_holder_info(stock_code)
return df
def test_fund_method():
"""
基金
"""
df = pd.DataFrame()
# """
# 获取基金的一些基本信息
# ['基金代码', '基金简称', '成立日期', '涨跌幅', '最新净值', '基金公司', '净值更新日期', '简介']
# ['012322', '东财云计算增强C', '2021-08-11', -1.35, 1.0298, '东财基金', '2024-12-04', '--']
# """
# df = ef.fund.get_base_info("012322")
# """
# 多只基金信息
# ['基金代码', '基金简称', '成立日期', '涨跌幅', '最新净值', '基金公司', '净值更新日期', '简介']
# ['005827', '易方达蓝筹精选混合', '2018-09-05', np.float64(-1.48), np.float64(1.7558), '易方达基金', '2024-11-28', '明星消费基金经理另一力作,A+H股同步布局,价值投资典范,适合长期持有。']
# """
# df = ef.fund.get_base_info(["161725", "005827"])
# """
# 获取天天基金网公开的全部公墓基金名单
# ['基金代码', '基金简称']
# ['006401', '先锋量化优选混合A']
# """
# df = ef.fund.get_fund_codes()
# """
# 获取指定基金行业分布信息
# ['基金代码', '行业名称', '持仓比例', '公布日期', '市值']
# ['012322', '信息传输、软件和信息技术服务业', 66.36, '2024-09-30', 30829.428224]
# """
# df = ef.fund.get_industry_distribution("012322")
# """
# 获取基金持仓占比数据
# ['基金代码', '股票代码', '股票简称', '持仓占比', '较上期变化', '公开日期']
# ['012322', '002230', '科大讯飞', 7.54, -1.64, '2024-09-30']
# """
# df = ef.fund.get_invest_position("012322")
# """
# 根据基金代码获取其全部 pdf 报告
# """
# ef.fund.get_pdf_reports("012322", 12, "efinance/analysis/")
# """
# 获取基金阶段涨跌幅度
# ['基金代码', '收益率', '同类平均', '同类排行', '同类总数', '时间段']
# ['012322', 0.38, 0.87, 2307, 3223, '近一周']
# """
# df = ef.fund.get_period_change("012322")
# """
# 获取历史上更新持仓情况的日期列表
# ['2024-09-30', '2024-06-30', '2024-03-31', '2023-12-31', '2023-09-30', '2023-06-30', '2023-03-31', '2022-12-31', '2022-09-30', '2022-06-30', '2022-03-31', '2021-12-31']
# """
# df = ef.fund.get_public_dates("012322")
# """
# 获取基金历史净值信息
# ['日期', '单位净值', '累计净值', '涨跌幅']
# ['2024-11-28', np.float64(0.8483), np.float64(2.5644), -1.07]
# """
# df = ef.fund.get_quote_history("161725")
# """
# 获取多个基金历史净值信息
# ['日期', '单位净值', '累计净值', '涨跌幅']
# ['2024-12-04', 1.0298, 1.0298, -1.35]
# """
# dict = ef.fund.get_quote_history_multi(["012322", "161725"])
# df = dict["012322"]
# """
# 获取基金实时估算涨跌幅度
# ['基金代码', '基金名称', '最新净值', '最新净值公开日期', '估算时间', '估算涨跌幅']
# ['161725', '招商中证白酒指数(LOF)A', 2.5667, '2024-12-04', None, None]
# """
# df = ef.fund.get_realtime_increase_rate("161725")
# """
# 获取指定基金不同类型占比信息
# ['基金代码', '股票比重', '债券比重', '现金比重', '总规模(亿元)', '其他比重']
# ['161725', 92.95, 2.81, 3.21, 538.2221, 1.03]
# """
# df = ef.fund.get_types_percentage("161725")
# """
# 获取某基金的基金经理信息
# ['基金代码', '基金经理任职日期', '基金公司', '基金经理', '基金种类', '基金规模', '当前日期']
# ['161725', '2015-05-27', '招商基金', '侯昊', '指数型-股票', '418.52亿元(截止至:2024-09-30)', '2024-12-05']
# """
# df = ef.fund.get_fund_manager("161725")
return df
def test_bond_method():
"""
债券
"""
df = pd.DataFrame()
# """
# 全部可转债信息
# ['债券代码', '债券名称', '正股代码', '正股名称', '债券评级', '申购日期', '发行规模(亿)', '网上发行中签率(%)', '上市日期', '到期日期', '期限(年)', '利率说明']
# ['118051', '皓元转债', '688131', '皓元医药', 'AA-', '2024-11-28 00:00:00', np.float64(8.2235), np.float64(0.00341), None, '2030-11-28 00:00:00', '6', '第一年0.20%、第二年0.40%、 第三年0.80%、第四年1.20%、第五年1.60%、第六年2.00%。']
# """
# df = ef.bond.get_all_base_info()
# """
# 获取单只或多只债券基本信息
# ['债券代码', '债券名称', '正股代码', '正股名称', '债券评级', '申购日期', '发行规模(亿)', '网上发行中签率(%)', '上市日期', '到期日期', '期限(年)', '利率说明']
# ['118051', '皓元转债', '688131', '皓元医药', 'AA-', '2024-11-28 00:00:00', 8.2235, 0.00341, None, '2030-11-28 00:00:00', 6, '第一年0.20%、第二年0.40%、第三年0.80%、第四年1.20%、第五年1.60%、第六年2.00%。']
# """
# df = ef.bond.get_base_info("118051")
# """
# 获取债券最新交易日成交明细
# ['债券名称', '债券代码', '时间', '昨收', '成交价', '成交量', '单数']
# ['远信转债', '123246', '09:15:00', 235.88, 232.0, 5, 0]
# """
# df = ef.bond.get_deal_detail("123246")
# """
# 获取单支债券的历史单子流入流出数据
# ['债券名称', '债券代码', '日期', '主力净流入', '小单净流入', '中单净流入', '大单净流入', '超大单净流入', '主力净流入占比', '小单流入净占比', '中单流入净占比', '大单流入净占比', '超大单流入净占比', '收盘价', '涨跌幅']
# ['远信转债', '123246', '2024-09-03', 8852701.0, -7913763.0, -938938.0, -229944.0, 9082645.0, 53.58, -47.9, -5.68, -1.39, 54.97, 157.3, 57.3]
# """
# df = ef.bond.get_history_bill("123246")
# """
# 指定可转债 K 线数据
# ['债券名称', '债券代码', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']
# ['万讯转债', '123112', '2021-04-23', np.float64(105.01), np.float64(101.8), np.float64(106.0), np.float64(101.8), np.int64(496810), np.float64(512939072.0), np.float64(4.2), np.float64(1.8), np.float64(1.8), np.float64(219.36)]
# """
# bond_code = "123112"
# df = ef.bond.get_quote_history(bond_code)
# """
# 可转债整体行情
# ['债券代码', '债券名称', '涨跌幅', '最新价', '最高', '最低', '今开', '涨跌额', '换手率', '量比', '动态市盈率', '成交量', '成交额', '昨日收盘', '总市值', '流通市值', '行情ID', '市场类型', '更新时间', '最新交易日']
# ['123246', '远信转债', 10.96, 252.428, 255.4, 225.62, 227.479, 24.938, np.float64(175.34), 8.52, '-', 502292, 1221002232.158, np.float64(227.49), np.int64(723122919), np.int64(723122919), '0.123246', '深A', '2024-11-29 11:20:33', '2024-11-29']
# """
# df = ef.bond.get_realtime_quotes()
# """
# 获取单只债券最新交易日的日内分钟级单子流入流出数据
# ['债券名称', '债券代码', '时间', '主力净流入', '小单净流入', '中单净流入', '大单净流入', '超大单净流入']
# ['远信转债', '123246', '2024-12-05 09:31', 745288.0, -1012093.0, 266806.0, 745288.0, 0.0]
# """
# df = ef.bond.get_today_bill("123246")
return df
def test_futures_method():
"""
期货
"""
df = pd.DataFrame()
# """
# 获取交易所期货基本信息
# ['期货代码', '期货名称', '行情ID', '市场类型']
# ['bbs', '胶合板次主连', '114.bbs', '大商所']
# """
# df = ef.futures.get_futures_base_info()
# """
# 获取期货最新行情
# ['期货代码', '期货名称', '涨跌幅', '最新价', '最高', '最低', '今开', '涨跌额', '换手率', '量比', '动态市盈率', '成交量', '成交额', '昨日收盘', '总市值', '流通市值', '行情ID', '市场类型', '更新时间', '最新交易日']
# ['bbs', '胶合板次主连', 4.85, 153.55, 153.75, 142.25, 153.75, 7.1, '-', '-', '-', 3, 224775.0, 146.45, '-', '-', '114.bbs', '大商所', '2024-11-29 11:27:18', '2024-11-28']
# """
# df = ef.futures.get_realtime_quotes()
# """
# 获取单个期货的日 K 线数据
# ['期货名称', '期货代码', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']
# ['胶合板次主连', 'bbs', '2018-10-11', np.float64(103.65), np.float64(103.65), np.float64(103.65), np.float64(103.65), np.int64(1), np.float64(51825.0), np.float64(0.0), np.float64(0.0), np.float64(0.0), np.float64(0.0)]
# """
# quote_id = "114.bbs" # 行情ID
# df = ef.futures.get_quote_history(quote_id)
# """
# 获取多个期货的日 K 线数据
# ['期货名称', '期货代码', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']
# ['沪金主连', 'aum', '2008-07-16', np.float64(212.88), np.float64(213.93), np.float64(213.93), np.float64(212.75), np.int64(8793), np.float64(0.0), np.float64(0.0), np.float64(0.0), np.float64(0.0), np.float64(0.0)]
# """
# quote_ids = ["113.aum", "114.bbs"] # 行情ID
# quote_res = ef.futures.get_quote_history(quote_ids) # Return: {id1: DataFrame1, id2: DataFrame2}
# df = quote_res[quote_ids[0]]
# """
# 获取期货最新交易日成交明细
# ['期货名称', '期货代码', '时间', '昨收', '成交价', '成交量', '单数']
# ['胶合板次主连', 'bbs', '11:24:04', 158.5, 158.5, 1, 0]
# """
# df = ef.futures.get_deal_detail("114.bbs")
return df
def main():
with socket.socket():
start_time = time.time()
df = test_stock_method()
# df = test_fund_method()
# df = test_bond_method()
# df = test_futures_method()
end_time = time.time()
print_cols_and_raw(df)
# print(df)
seconds_processed = end_time - start_time
print(f"Program Processed {seconds_processed:.2f} Seconds.")
if __name__ == "__main__":
main()