安装
pip install alphafeed
支持 Python 3.9+,推荐 3.10 或更高版本。内置 pandas 和 tqdm 支持。
初始化
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key")
export ALPHAFEED_API_KEY="your-api-key"
from alphafeed import AlphaFeed
af = AlphaFeed() # 自动读取 ALPHAFEED_API_KEY
标的代码格式
标的代码统一使用{代码}.{交易所后缀} 格式:
| 后缀 | 交易所 | 示例 |
|---|---|---|
.SH | 上海证券交易所 | 600519.SH |
.SZ | 深圳证券交易所 | 000001.SZ |
.BJ | 北京证券交易所 | 920047.BJ |
.US | 美股 | AAPL.US |
.HK | 港股 | 00700.HK |
获取日K线
支持周期:1d(日)、1w(周)、1M(月)、1Q(季)、1Y(年)
df = af.klines.get("600519.SH", period="1d", count=5, to_dataframe=True)
print(df[["symbol", "name", "trade_date", "open", "high", "low", "close", "volume"]])
symbol name trade_date open high low close volume
600519.SH 贵州茅台 2026-06-12 1271.18 1295.00 1265.01 1291.91 50495
600519.SH 贵州茅台 2026-06-15 1292.70 1292.70 1270.10 1271.10 41586
600519.SH 贵州茅台 2026-06-16 1267.01 1267.88 1255.00 1255.67 34970
600519.SH 贵州茅台 2026-06-17 1258.00 1259.77 1238.56 1240.00 44803
600519.SH 贵州茅台 2026-06-18 1235.00 1238.87 1211.22 1215.00 57472
获取分钟K线
支持周期:1m(1分钟)、5m(5分钟)、15m(15分钟)、30m(30分钟)、60m(60分钟)
df = af.klines.get("600519.SH", period="5m", count=5, to_dataframe=True)
print(df[["symbol", "name", "trade_time", "open", "high", "low", "close", "volume"]])
symbol name trade_time open high low close volume
600519.SH 贵州茅台 2026-06-18 14:40:00 1214.44 1215.82 1212.26 1215.82 1151
600519.SH 贵州茅台 2026-06-18 14:45:00 1215.02 1217.00 1215.00 1216.99 997
600519.SH 贵州茅台 2026-06-18 14:50:00 1216.52 1217.39 1215.99 1217.38 827
600519.SH 贵州茅台 2026-06-18 14:55:00 1217.40 1228.37 1217.40 1222.55 2355
600519.SH 贵州茅台 2026-06-18 15:00:00 1223.02 1223.99 1215.00 1215.00 2324
复权方式
K 线接口支持adjust 参数:
| 值 | 说明 |
|---|---|
forward | 前复权 - 比例复权(默认) |
backward | 后复权 - 比例复权 |
forward_additive | 前复权 - 差值复权 |
backward_additive | 后复权 - 差值复权 |
none | 不复权 |
df = af.klines.get("600519.SH", adjust="none", to_dataframe=True) # 不复权
df = af.klines.get("600519.SH", adjust="forward", to_dataframe=True) # 前复权-比例(默认)
df = af.klines.get("600519.SH", adjust="backward", to_dataframe=True) # 后复权-比例
df = af.klines.get("600519.SH", adjust="forward_additive", to_dataframe=True) # 前复权-差值
df = af.klines.get("600519.SH", adjust="backward_additive", to_dataframe=True) # 后复权-差值
时间区间查询
通过start_time 和 end_time 指定时间范围(毫秒时间戳),配合 count 控制返回条数。
指定日期区间
import datetime
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key")
start = int(datetime.datetime(2026, 6, 1).timestamp() * 1000)
end = int(datetime.datetime(2026, 6, 20).timestamp() * 1000)
df = af.klines.get("000001.SZ", period="1d", start_time=start, end_time=end, to_dataframe=True)
print(f"2026-06-01 ~ 2026-06-20 共 {len(df)} 个交易日")
print(df[["trade_date", "open", "close", "volume"]].tail(5).to_string(index=False))
2026-06-01 ~ 2026-06-20 共 14 个交易日
trade_date open close volume
2026-06-12 11.00 11.24 2032355
2026-06-15 11.21 11.06 1541305
2026-06-16 11.05 10.94 942708
2026-06-17 10.97 10.78 965828
2026-06-18 10.74 10.52 1426893
获取某日期之前的 N 根 K 线
使用end_time + count 组合,获取截止到某个时间点的最近 N 根 K 线:
import datetime
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key")
end = int(datetime.datetime(2026, 6, 15).timestamp() * 1000)
df = af.klines.get("600519.SH", period="1d", count=5, end_time=end, to_dataframe=True)
print(df[["trade_date", "open", "high", "low", "close", "volume"]].to_string(index=False))
trade_date open high low close volume
2026-06-09 1262.99 1263.00 1252.55 1256.00 27860
2026-06-10 1252.08 1282.00 1250.21 1275.88 39244
2026-06-11 1272.12 1282.88 1266.91 1279.00 25352
2026-06-12 1271.18 1295.00 1265.01 1291.91 50495
2026-06-15 1292.70 1292.70 1270.10 1271.10 41586
分钟级时间区间
对分钟 K 线同样适用,适合截取盘中某一时段的数据:import datetime
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key")
start = int(datetime.datetime(2026, 6, 23, 9, 30).timestamp() * 1000)
end = int(datetime.datetime(2026, 6, 23, 10, 0).timestamp() * 1000)
df = af.klines.get("000001.SZ", period="5m", start_time=start, end_time=end, to_dataframe=True)
print(df[["trade_time", "open", "high", "low", "close", "volume"]].to_string(index=False))
trade_time open high low close volume
2026-06-23 09:35:00 10.65 10.83 10.63 10.81 143966
2026-06-23 09:40:00 10.82 10.87 10.81 10.84 83205
2026-06-23 09:45:00 10.85 10.88 10.81 10.87 86994
2026-06-23 09:50:00 10.88 10.90 10.87 10.88 95711
2026-06-23 09:55:00 10.88 10.91 10.86 10.88 70423
2026-06-23 10:00:00 10.89 10.90 10.85 10.85 32324
批量获取K线
一次请求获取多只标的的K线数据:symbols = ["600519.SH", "000001.SZ"]
dfs = af.klines.batch(symbols, period="1d", count=3, to_dataframe=True, show_progress=True)
for sym, df in dfs.items():
print(f"--- {sym} ({df['name'].iloc[0]}) ---")
print(df[["trade_date", "open", "close", "volume"]].to_string(index=False))
--- 600519.SH (贵州茅台) ---
trade_date open close volume
2026-06-16 1267.01 1255.67 34970
2026-06-17 1258.00 1240.00 44803
2026-06-18 1235.00 1215.00 57472
--- 000001.SZ (平安银行) ---
trade_date open close volume
2026-06-16 11.05 10.94 942708
2026-06-17 10.97 10.78 965828
2026-06-18 10.74 10.52 1426893
批量 + 时间区间
klines.batch 同样支持 start_time 和 end_time:
import datetime
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key")
start = int(datetime.datetime(2026, 6, 16).timestamp() * 1000)
end = int(datetime.datetime(2026, 6, 20).timestamp() * 1000)
dfs = af.klines.batch(["600519.SH", "000001.SZ"], period="1d", start_time=start, end_time=end, to_dataframe=True)
for sym, df in dfs.items():
print(f"--- {sym} ({df['name'].iloc[0]}) ---")
print(df[["trade_date", "close", "volume"]].to_string(index=False))
--- 600519.SH (贵州茅台) ---
trade_date close volume
2026-06-16 1255.67 34970
2026-06-17 1240.00 44803
2026-06-18 1215.00 57472
--- 000001.SZ (平安银行) ---
trade_date close volume
2026-06-16 10.94 942708
2026-06-17 10.78 965828
2026-06-18 10.52 1426893
获取实时行情
按标的代码查询
df = af.quotes.get(symbols=["600519.SH", "000001.SZ"], to_dataframe=True)
print(df[["symbol", "last_price", "prev_close", "volume", "ext.name", "ext.change_pct"]])
symbol last_price prev_close volume ext.name ext.change_pct
000001.SZ 10.52 10.78 1426893 平安银行 -0.024119
600519.SH 1215.00 1240.00 57472 贵州茅台 -0.020161
按标的池查询(全量行情)
支持的标的池:| 标的池 ID | 说明 |
|---|---|
CN_Stock | A 股(沪深京) |
CN_ETF | ETF |
US_Stock | 美股 |
HK_Stock | 港股 |
df = af.quotes.get(universes=["CN_Stock"], to_dataframe=True)
print(df)
symbol region ... ext.amplitude ext.turnover_rate
0 920985.BJ CN ... 0.043893 0.015161
1 002414.SZ CN ... 0.027106 0.015167
2 600589.SH CN ... 0.047852 0.076141
3 688543.SH CN ... 0.043046 0.052545
4 300988.SZ CN ... 0.044633 0.043186
... ... ... ... ... ...
5496 002546.SZ CN ... 0.022026 0.014857
5497 920363.BJ CN ... 0.038917 0.027170
5498 688590.SH CN ... 0.033557 0.051160
5499 001317.SZ CN ... 0.053210 0.043987
5500 300731.SZ CN ... 0.080393 0.090136
[5501 rows x 18 columns]
获取日内分时
单只标的
支持周期:1m(默认)、5m、15m、30m、60m
df = af.klines.intraday("600519.SH", count=5, to_dataframe=True)
print(df[["symbol", "name", "trade_time", "close", "volume"]])
symbol name trade_time close volume
600519.SH 贵州茅台 2026-06-18 14:56:00 1223.50 273
600519.SH 贵州茅台 2026-06-18 14:57:00 1223.88 261
600519.SH 贵州茅台 2026-06-18 14:58:00 1223.26 2
600519.SH 贵州茅台 2026-06-18 14:59:00 1223.26 0
600519.SH 贵州茅台 2026-06-18 15:00:00 1215.00 1788
批量日内分时
dfs = af.klines.intraday_batch(["600519.SH", "000001.SZ"], to_dataframe=True)
for sym, df in dfs.items():
print(f"{sym}: {len(df)} 条分钟线")
获取标的信息
insts = af.instruments.get(["600519.SH", "000001.SZ"])
for i in insts:
print(f"{i['symbol']:>10s} {i['name']:<6s} 交易所={i['exchange']} 类型={i['type']} 上市={i['ext'].get('listing_date','')}")
600519.SH 贵州茅台 交易所=SH 类型=stock 上市=2001-08-27
000001.SZ 平安银行 交易所=SZ 类型=stock 上市=1991-04-03
获取除权因子
df = af.klines.ex_factors(["600519.SH"], to_dataframe=True)
print(df[["symbol", "trade_date", "ex_factor"]].tail(5))
symbol trade_date ex_factor
600519.SH 2023-12-20 1.011540
600519.SH 2024-06-19 1.020716
600519.SH 2024-12-20 1.015637
600519.SH 2025-06-26 1.019649
600519.SH 2025-12-19 1.017003
获取五档盘口
单只标的
depth = af.depth.get("600519.SH")
print(f"标的: {depth['symbol']} 地区: {depth['region']}")
for i in range(5):
bid = f"买{i+1}: {depth['bid_prices'][i]:>10.2f} x {depth['bid_volumes'][i]}"
ask = f"卖{i+1}: {depth['ask_prices'][i]:>10.2f} x {depth['ask_volumes'][i]}"
print(f" {bid} | {ask}")
标的: 600519.SH 地区: CN
买1: 1215.00 x 123 | 卖1: 1215.28 x 1
买2: 1214.95 x 2 | 卖2: 1215.96 x 1
买3: 1214.88 x 1 | 卖3: 1216.00 x 2
买4: 1214.48 x 1 | 卖4: 1218.00 x 1
买5: 1214.40 x 1 | 卖5: 1218.89 x 1
批量盘口
result = af.depth.batch(["000001.SZ", "600000.SH"])
for sym, depth in result.items():
print(f"--- {sym} ---")
for i in range(5):
bid = f"买{i+1}: {depth['bid_prices'][i]:>8.2f} x {depth['bid_volumes'][i]:<6}"
ask = f"卖{i+1}: {depth['ask_prices'][i]:>8.2f} x {depth['ask_volumes'][i]}"
print(f" {bid} | {ask}")
--- 000001.SZ ---
买1: 10.52 x 19374 | 卖1: 10.53 x 2
买2: 10.51 x 16237 | 卖2: 10.54 x 430
买3: 10.50 x 28122 | 卖3: 10.55 x 75
买4: 10.49 x 4656 | 卖4: 10.56 x 2771
买5: 10.48 x 3764 | 卖5: 10.57 x 2566
--- 600000.SH ---
买1: 9.08 x 4661 | 卖1: 9.09 x 7087
买2: 9.07 x 5576 | 卖2: 9.10 x 1052
买3: 9.06 x 6301 | 卖3: 9.11 x 2108
买4: 9.05 x 10340 | 卖4: 9.12 x 1537
买5: 9.04 x 1074 | 卖5: 9.13 x 3112