alphafeed 0.1.0.dev0__tar.gz → 0.1.0.dev2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- alphafeed-0.1.0.dev2/PKG-INFO +214 -0
- alphafeed-0.1.0.dev2/README.md +187 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/_cache.py +4 -1
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/models.py +59 -32
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/resources/instruments.py +25 -21
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/resources/quotes.py +3 -4
- alphafeed-0.1.0.dev2/alphafeed.egg-info/PKG-INFO +214 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/pyproject.toml +1 -1
- alphafeed-0.1.0.dev0/PKG-INFO +0 -175
- alphafeed-0.1.0.dev0/README.md +0 -148
- alphafeed-0.1.0.dev0/alphafeed.egg-info/PKG-INFO +0 -175
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/__init__.py +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/__version__.py +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/_base_client.py +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/_batch.py +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/_exceptions.py +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/_types.py +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/client.py +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/resources/__init__.py +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/resources/_base.py +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/resources/depth.py +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/resources/klines.py +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed/utils.py +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed.egg-info/SOURCES.txt +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed.egg-info/dependency_links.txt +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed.egg-info/requires.txt +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/alphafeed.egg-info/top_level.txt +0 -0
- {alphafeed-0.1.0.dev0 → alphafeed-0.1.0.dev2}/setup.cfg +0 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: alphafeed
|
|
3
|
+
Version: 0.1.0.dev2
|
|
4
|
+
Summary: AlphaFeed Python SDK
|
|
5
|
+
Author: AlphaFeed
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Documentation, https://docs.alphafeed.org
|
|
8
|
+
Keywords: finance,stock,market-data,quant,kline,alphafeed,a-share,us-stock,hk-stock,real-time-quotes
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
|
+
Classifier: Topic :: Office/Business :: Financial :: Investment
|
|
20
|
+
Classifier: Typing :: Typed
|
|
21
|
+
Requires-Python: >=3.9
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
Requires-Dist: httpx>=0.25.0
|
|
24
|
+
Requires-Dist: typing-extensions>=4.0.0
|
|
25
|
+
Requires-Dist: pandas>=1.5.0
|
|
26
|
+
Requires-Dist: tqdm>=4.60.0
|
|
27
|
+
|
|
28
|
+
# AlphaFeed Python SDK
|
|
29
|
+
|
|
30
|
+
AlphaFeed Python SDK 是 AlphaFeed 金融市场数据 API 的 Python 客户端,支持 A 股、ETF、美股、港股。
|
|
31
|
+
|
|
32
|
+
> **完整文档**:<https://docs.alphafeed.org>
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 安装
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pip install alphafeed
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
SDK 支持 Python 3.9+,推荐 3.10 或更高版本。内置 pandas 和 tqdm 支持。
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 初始化
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
from alphafeed import AlphaFeed
|
|
50
|
+
|
|
51
|
+
af = AlphaFeed(api_key="your-api-key")
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
也支持环境变量:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
export ALPHAFEED_API_KEY="your-api-key"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
from alphafeed import AlphaFeed
|
|
62
|
+
af = AlphaFeed() # 自动读取 ALPHAFEED_API_KEY
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 标的代码格式
|
|
68
|
+
|
|
69
|
+
| 示例 | 说明 |
|
|
70
|
+
|------|------|
|
|
71
|
+
| `600519.SH` | 上交所 |
|
|
72
|
+
| `000001.SZ` | 深交所 |
|
|
73
|
+
| `AAPL.US` | 美股 |
|
|
74
|
+
| `00700.HK` | 港股 |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 基础用法
|
|
79
|
+
|
|
80
|
+
### K 线获取
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
from alphafeed import AlphaFeed
|
|
84
|
+
|
|
85
|
+
af = AlphaFeed(api_key="your-api-key")
|
|
86
|
+
|
|
87
|
+
# 日 K 线,返回 DataFrame
|
|
88
|
+
df = af.klines.get("600519.SH", period="1d", count=5, to_dataframe=True)
|
|
89
|
+
print(df[["trade_date", "open", "high", "low", "close", "volume"]])
|
|
90
|
+
# trade_date open high low close volume
|
|
91
|
+
# 0 2026-06-02 1306.00 1326.36 1301.00 1307.22 36362
|
|
92
|
+
# 1 2026-06-03 1304.00 1304.00 1276.00 1281.91 52477
|
|
93
|
+
# 2 2026-06-04 1278.99 1288.99 1266.69 1268.00 33506
|
|
94
|
+
# 3 2026-06-05 1278.00 1283.00 1267.74 1272.86 31304
|
|
95
|
+
# 4 2026-06-08 1272.00 1278.00 1260.00 1262.98 30828
|
|
96
|
+
|
|
97
|
+
# 比例前复权(默认)/ 比例后复权 / 差值前复权 / 差值后复权 / 不复权
|
|
98
|
+
df = af.klines.get("600519.SH", adjust="forward", to_dataframe=True)
|
|
99
|
+
df = af.klines.get("600519.SH", adjust="backward", to_dataframe=True)
|
|
100
|
+
df = af.klines.get("600519.SH", adjust="forward_additive", to_dataframe=True)
|
|
101
|
+
df = af.klines.get("600519.SH", adjust="backward_additive", to_dataframe=True)
|
|
102
|
+
df = af.klines.get("600519.SH", adjust="none", to_dataframe=True)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**批量获取**:多只标的一次拉取:
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
symbols = ["600519.SH", "000001.SZ", "601318.SH"]
|
|
109
|
+
dfs = af.klines.batch(symbols, period="1d", count=5, to_dataframe=True, show_progress=True)
|
|
110
|
+
# dfs 是 dict: {"600519.SH": DataFrame, "000001.SZ": DataFrame, ...}
|
|
111
|
+
print(dfs["600519.SH"][["trade_date", "close"]])
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 日内分时
|
|
115
|
+
|
|
116
|
+
```python
|
|
117
|
+
# 当日 1 分钟线
|
|
118
|
+
df = af.klines.intraday("600519.SH", to_dataframe=True)
|
|
119
|
+
print(df[["trade_time", "close", "volume"]].tail())
|
|
120
|
+
# trade_time close volume
|
|
121
|
+
# 236 2026-06-08 14:56:00 1263.00 191
|
|
122
|
+
# 237 2026-06-08 14:57:00 1262.99 126
|
|
123
|
+
# 238 2026-06-08 14:58:00 1263.00 6
|
|
124
|
+
# 239 2026-06-08 14:59:00 1263.00 0
|
|
125
|
+
# 240 2026-06-08 15:00:00 1262.98 254
|
|
126
|
+
|
|
127
|
+
# 5 分钟线
|
|
128
|
+
df = af.klines.intraday("600519.SH", period="5m", to_dataframe=True)
|
|
129
|
+
|
|
130
|
+
# 批量日内分时
|
|
131
|
+
dfs = af.klines.intraday_batch(["600519.SH", "000001.SZ"], to_dataframe=True)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 实时行情
|
|
135
|
+
|
|
136
|
+
**按标的代码查询**
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
df = af.quotes.get(symbols=["600519.SH", "000001.SZ"], to_dataframe=True)
|
|
140
|
+
print(df[["symbol", "last_price", "volume", "ext.name", "ext.change_pct"]])
|
|
141
|
+
# symbol last_price volume ext.name ext.change_pct
|
|
142
|
+
# 0 000001.SZ 11.03 1090926 平安银行 0.004554
|
|
143
|
+
# 1 600519.SH 1262.98 30828 贵州茅台 -0.007762
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**按标的池查询(全量行情)**
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
# 全部 A 股实时行情
|
|
150
|
+
df = af.quotes.get(universes="CN_Stock", to_dataframe=True)
|
|
151
|
+
print(f"共 {len(df)} 只标的")
|
|
152
|
+
|
|
153
|
+
# 全部 ETF 行情
|
|
154
|
+
df = af.quotes.get(universes="CN_ETF", to_dataframe=True)
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
支持的标的池:`CN_Stock`(A股)、`US_Stock`(美股)、`HK_Stock`(港股)、`CN_ETF`(ETF)
|
|
158
|
+
|
|
159
|
+
### 五档盘口
|
|
160
|
+
|
|
161
|
+
```python
|
|
162
|
+
depth = af.depth.get("600519.SH")
|
|
163
|
+
print(f"标的: {depth['symbol']}, 地区: {depth['region']}")
|
|
164
|
+
print(f"买盘价: {depth['bid_prices']}") # [1262.98, 1262.65, ...]
|
|
165
|
+
print(f"买盘量: {depth['bid_volumes']}") # [2, 1, ...]
|
|
166
|
+
print(f"卖盘价: {depth['ask_prices']}") # [1262.99, 1263.0, ...]
|
|
167
|
+
print(f"卖盘量: {depth['ask_volumes']}") # [7, 44, ...]
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 标的信息
|
|
171
|
+
|
|
172
|
+
```python
|
|
173
|
+
# 单个标的
|
|
174
|
+
inst = af.instruments.get("600519.SH")
|
|
175
|
+
print(f"{inst['symbol']}: {inst['name']} ({inst['exchange']}, {inst['type']})")
|
|
176
|
+
# 600519.SH: 贵州茅台 (SH, stock)
|
|
177
|
+
print(f"上市日期: {inst['ext']['listing_date']}")
|
|
178
|
+
# 上市日期: 2001-08-27
|
|
179
|
+
|
|
180
|
+
# 批量查询
|
|
181
|
+
insts = af.instruments.batch(["600519.SH", "000001.SZ", "00700.HK"])
|
|
182
|
+
for i in insts:
|
|
183
|
+
print(f"{i['symbol']}: {i['name']} ({i['region']})")
|
|
184
|
+
# 600519.SH: 贵州茅台 (CN)
|
|
185
|
+
# 000001.SZ: 平安银行 (CN)
|
|
186
|
+
# 00700.HK: 腾讯控股 (HK)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### 复权因子
|
|
190
|
+
|
|
191
|
+
```python
|
|
192
|
+
df = af.klines.ex_factors(["600519.SH", "000001.SZ"], to_dataframe=True)
|
|
193
|
+
print(df[["symbol", "trade_date", "ex_factor"]].tail())
|
|
194
|
+
# symbol trade_date ex_factor
|
|
195
|
+
# 52 000001.SZ 2023-06-14 1.024369
|
|
196
|
+
# 53 000001.SZ 2024-06-14 1.071428
|
|
197
|
+
# 54 000001.SZ 2024-10-10 1.021872
|
|
198
|
+
# 55 000001.SZ 2025-06-12 1.031331
|
|
199
|
+
# 56 000001.SZ 2025-10-15 1.021505
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 更多文档
|
|
205
|
+
|
|
206
|
+
- [Python SDK 快速开始](https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart)
|
|
207
|
+
- [使用示例](https://docs.alphafeed.org/zh-Hans/sdk/python-examples)
|
|
208
|
+
- [REST API 说明](https://docs.alphafeed.org/zh-Hans/api-reference/introduction)
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## License
|
|
213
|
+
|
|
214
|
+
MIT
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# AlphaFeed Python SDK
|
|
2
|
+
|
|
3
|
+
AlphaFeed Python SDK 是 AlphaFeed 金融市场数据 API 的 Python 客户端,支持 A 股、ETF、美股、港股。
|
|
4
|
+
|
|
5
|
+
> **完整文档**:<https://docs.alphafeed.org>
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 安装
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pip install alphafeed
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
SDK 支持 Python 3.9+,推荐 3.10 或更高版本。内置 pandas 和 tqdm 支持。
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 初始化
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
from alphafeed import AlphaFeed
|
|
23
|
+
|
|
24
|
+
af = AlphaFeed(api_key="your-api-key")
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
也支持环境变量:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
export ALPHAFEED_API_KEY="your-api-key"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
from alphafeed import AlphaFeed
|
|
35
|
+
af = AlphaFeed() # 自动读取 ALPHAFEED_API_KEY
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 标的代码格式
|
|
41
|
+
|
|
42
|
+
| 示例 | 说明 |
|
|
43
|
+
|------|------|
|
|
44
|
+
| `600519.SH` | 上交所 |
|
|
45
|
+
| `000001.SZ` | 深交所 |
|
|
46
|
+
| `AAPL.US` | 美股 |
|
|
47
|
+
| `00700.HK` | 港股 |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 基础用法
|
|
52
|
+
|
|
53
|
+
### K 线获取
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
from alphafeed import AlphaFeed
|
|
57
|
+
|
|
58
|
+
af = AlphaFeed(api_key="your-api-key")
|
|
59
|
+
|
|
60
|
+
# 日 K 线,返回 DataFrame
|
|
61
|
+
df = af.klines.get("600519.SH", period="1d", count=5, to_dataframe=True)
|
|
62
|
+
print(df[["trade_date", "open", "high", "low", "close", "volume"]])
|
|
63
|
+
# trade_date open high low close volume
|
|
64
|
+
# 0 2026-06-02 1306.00 1326.36 1301.00 1307.22 36362
|
|
65
|
+
# 1 2026-06-03 1304.00 1304.00 1276.00 1281.91 52477
|
|
66
|
+
# 2 2026-06-04 1278.99 1288.99 1266.69 1268.00 33506
|
|
67
|
+
# 3 2026-06-05 1278.00 1283.00 1267.74 1272.86 31304
|
|
68
|
+
# 4 2026-06-08 1272.00 1278.00 1260.00 1262.98 30828
|
|
69
|
+
|
|
70
|
+
# 比例前复权(默认)/ 比例后复权 / 差值前复权 / 差值后复权 / 不复权
|
|
71
|
+
df = af.klines.get("600519.SH", adjust="forward", to_dataframe=True)
|
|
72
|
+
df = af.klines.get("600519.SH", adjust="backward", to_dataframe=True)
|
|
73
|
+
df = af.klines.get("600519.SH", adjust="forward_additive", to_dataframe=True)
|
|
74
|
+
df = af.klines.get("600519.SH", adjust="backward_additive", to_dataframe=True)
|
|
75
|
+
df = af.klines.get("600519.SH", adjust="none", to_dataframe=True)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**批量获取**:多只标的一次拉取:
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
symbols = ["600519.SH", "000001.SZ", "601318.SH"]
|
|
82
|
+
dfs = af.klines.batch(symbols, period="1d", count=5, to_dataframe=True, show_progress=True)
|
|
83
|
+
# dfs 是 dict: {"600519.SH": DataFrame, "000001.SZ": DataFrame, ...}
|
|
84
|
+
print(dfs["600519.SH"][["trade_date", "close"]])
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 日内分时
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
# 当日 1 分钟线
|
|
91
|
+
df = af.klines.intraday("600519.SH", to_dataframe=True)
|
|
92
|
+
print(df[["trade_time", "close", "volume"]].tail())
|
|
93
|
+
# trade_time close volume
|
|
94
|
+
# 236 2026-06-08 14:56:00 1263.00 191
|
|
95
|
+
# 237 2026-06-08 14:57:00 1262.99 126
|
|
96
|
+
# 238 2026-06-08 14:58:00 1263.00 6
|
|
97
|
+
# 239 2026-06-08 14:59:00 1263.00 0
|
|
98
|
+
# 240 2026-06-08 15:00:00 1262.98 254
|
|
99
|
+
|
|
100
|
+
# 5 分钟线
|
|
101
|
+
df = af.klines.intraday("600519.SH", period="5m", to_dataframe=True)
|
|
102
|
+
|
|
103
|
+
# 批量日内分时
|
|
104
|
+
dfs = af.klines.intraday_batch(["600519.SH", "000001.SZ"], to_dataframe=True)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 实时行情
|
|
108
|
+
|
|
109
|
+
**按标的代码查询**
|
|
110
|
+
|
|
111
|
+
```python
|
|
112
|
+
df = af.quotes.get(symbols=["600519.SH", "000001.SZ"], to_dataframe=True)
|
|
113
|
+
print(df[["symbol", "last_price", "volume", "ext.name", "ext.change_pct"]])
|
|
114
|
+
# symbol last_price volume ext.name ext.change_pct
|
|
115
|
+
# 0 000001.SZ 11.03 1090926 平安银行 0.004554
|
|
116
|
+
# 1 600519.SH 1262.98 30828 贵州茅台 -0.007762
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**按标的池查询(全量行情)**
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
# 全部 A 股实时行情
|
|
123
|
+
df = af.quotes.get(universes="CN_Stock", to_dataframe=True)
|
|
124
|
+
print(f"共 {len(df)} 只标的")
|
|
125
|
+
|
|
126
|
+
# 全部 ETF 行情
|
|
127
|
+
df = af.quotes.get(universes="CN_ETF", to_dataframe=True)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
支持的标的池:`CN_Stock`(A股)、`US_Stock`(美股)、`HK_Stock`(港股)、`CN_ETF`(ETF)
|
|
131
|
+
|
|
132
|
+
### 五档盘口
|
|
133
|
+
|
|
134
|
+
```python
|
|
135
|
+
depth = af.depth.get("600519.SH")
|
|
136
|
+
print(f"标的: {depth['symbol']}, 地区: {depth['region']}")
|
|
137
|
+
print(f"买盘价: {depth['bid_prices']}") # [1262.98, 1262.65, ...]
|
|
138
|
+
print(f"买盘量: {depth['bid_volumes']}") # [2, 1, ...]
|
|
139
|
+
print(f"卖盘价: {depth['ask_prices']}") # [1262.99, 1263.0, ...]
|
|
140
|
+
print(f"卖盘量: {depth['ask_volumes']}") # [7, 44, ...]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 标的信息
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
# 单个标的
|
|
147
|
+
inst = af.instruments.get("600519.SH")
|
|
148
|
+
print(f"{inst['symbol']}: {inst['name']} ({inst['exchange']}, {inst['type']})")
|
|
149
|
+
# 600519.SH: 贵州茅台 (SH, stock)
|
|
150
|
+
print(f"上市日期: {inst['ext']['listing_date']}")
|
|
151
|
+
# 上市日期: 2001-08-27
|
|
152
|
+
|
|
153
|
+
# 批量查询
|
|
154
|
+
insts = af.instruments.batch(["600519.SH", "000001.SZ", "00700.HK"])
|
|
155
|
+
for i in insts:
|
|
156
|
+
print(f"{i['symbol']}: {i['name']} ({i['region']})")
|
|
157
|
+
# 600519.SH: 贵州茅台 (CN)
|
|
158
|
+
# 000001.SZ: 平安银行 (CN)
|
|
159
|
+
# 00700.HK: 腾讯控股 (HK)
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 复权因子
|
|
163
|
+
|
|
164
|
+
```python
|
|
165
|
+
df = af.klines.ex_factors(["600519.SH", "000001.SZ"], to_dataframe=True)
|
|
166
|
+
print(df[["symbol", "trade_date", "ex_factor"]].tail())
|
|
167
|
+
# symbol trade_date ex_factor
|
|
168
|
+
# 52 000001.SZ 2023-06-14 1.024369
|
|
169
|
+
# 53 000001.SZ 2024-06-14 1.071428
|
|
170
|
+
# 54 000001.SZ 2024-10-10 1.021872
|
|
171
|
+
# 55 000001.SZ 2025-06-12 1.031331
|
|
172
|
+
# 56 000001.SZ 2025-10-15 1.021505
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## 更多文档
|
|
178
|
+
|
|
179
|
+
- [Python SDK 快速开始](https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart)
|
|
180
|
+
- [使用示例](https://docs.alphafeed.org/zh-Hans/sdk/python-examples)
|
|
181
|
+
- [REST API 说明](https://docs.alphafeed.org/zh-Hans/api-reference/introduction)
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## License
|
|
186
|
+
|
|
187
|
+
MIT
|
|
@@ -80,7 +80,10 @@ class InstrumentNameCache:
|
|
|
80
80
|
try:
|
|
81
81
|
for i in range(0, len(symbols), MAX_BATCH_SIZE):
|
|
82
82
|
chunk = symbols[i : i + MAX_BATCH_SIZE]
|
|
83
|
-
|
|
83
|
+
symbols_str = ",".join(chunk)
|
|
84
|
+
response = client.get(
|
|
85
|
+
"/v1/instruments", params={"symbols": symbols_str}
|
|
86
|
+
)
|
|
84
87
|
names = {
|
|
85
88
|
inst["symbol"]: inst["name"]
|
|
86
89
|
for inst in response.get("data", [])
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: openapi.json
|
|
3
|
+
# timestamp: 2026-06-08T08:16:35+00:00
|
|
4
|
+
|
|
1
5
|
from __future__ import annotations
|
|
2
6
|
|
|
3
7
|
from typing import Any, Dict, List, Literal, TypedDict
|
|
4
8
|
|
|
5
|
-
from typing_extensions import NotRequired
|
|
6
|
-
|
|
7
|
-
Period = Literal["1m", "5m", "15m", "30m", "60m", "1d", "1w", "1M", "1Q", "1Y"]
|
|
9
|
+
from typing_extensions import NotRequired, TypeAlias
|
|
8
10
|
|
|
9
|
-
AdjustType = Literal[
|
|
11
|
+
AdjustType: TypeAlias = Literal[
|
|
12
|
+
"none", "forward", "backward", "forward_additive", "backward_additive"
|
|
13
|
+
]
|
|
10
14
|
|
|
11
15
|
|
|
12
16
|
class CompactKlineData(TypedDict):
|
|
@@ -34,25 +38,18 @@ class ExFactorsResponse(TypedDict):
|
|
|
34
38
|
data: Dict[str, List[ExFactorEntry]]
|
|
35
39
|
|
|
36
40
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
currency: NotRequired[str]
|
|
40
|
-
exchange: str
|
|
41
|
-
instrument_type: Literal[
|
|
42
|
-
"stock", "etf", "index", "bond", "fund", "futures", "options", "other"
|
|
43
|
-
]
|
|
44
|
-
list_date: NotRequired[str]
|
|
45
|
-
name: str
|
|
46
|
-
region: Literal["CN", "US", "HK"]
|
|
47
|
-
symbol: str
|
|
41
|
+
class FinancialsResponse(TypedDict):
|
|
42
|
+
data: Dict[str, List[Dict[str, Any]]]
|
|
48
43
|
|
|
49
44
|
|
|
50
|
-
class
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
45
|
+
class InstrumentExt(TypedDict):
|
|
46
|
+
float_shares: NotRequired[float]
|
|
47
|
+
limit_down: NotRequired[float]
|
|
48
|
+
limit_up: NotRequired[float]
|
|
49
|
+
listing_date: NotRequired[str]
|
|
50
|
+
tick_size: NotRequired[float]
|
|
51
|
+
total_shares: NotRequired[float]
|
|
52
|
+
type: NotRequired[str]
|
|
56
53
|
|
|
57
54
|
|
|
58
55
|
class KlineBatchResponse(TypedDict):
|
|
@@ -73,9 +70,49 @@ class MarketDepth(TypedDict):
|
|
|
73
70
|
timestamp: int
|
|
74
71
|
|
|
75
72
|
|
|
73
|
+
Period: TypeAlias = Literal[
|
|
74
|
+
"1m", "5m", "15m", "30m", "60m", "1d", "1w", "1M", "1Q", "1Y"
|
|
75
|
+
]
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class QuoteExt(TypedDict):
|
|
79
|
+
amplitude: NotRequired[float]
|
|
80
|
+
change_amount: NotRequired[float]
|
|
81
|
+
change_pct: NotRequired[float]
|
|
82
|
+
name: NotRequired[str]
|
|
83
|
+
turnover_rate: NotRequired[float]
|
|
84
|
+
type: NotRequired[str]
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class RateLimitResponse(TypedDict):
|
|
88
|
+
code: int
|
|
89
|
+
message: str
|
|
90
|
+
retry_after_ms: int
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class DepthResponse(TypedDict):
|
|
94
|
+
data: MarketDepth
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class Instrument(TypedDict):
|
|
98
|
+
code: str
|
|
99
|
+
exchange: str
|
|
100
|
+
ext: NotRequired[InstrumentExt]
|
|
101
|
+
name: str
|
|
102
|
+
region: Literal["CN", "US", "HK"]
|
|
103
|
+
symbol: str
|
|
104
|
+
type: Literal[
|
|
105
|
+
"stock", "etf", "index", "bond", "fund", "futures", "options", "other"
|
|
106
|
+
]
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class InstrumentsResponse(TypedDict):
|
|
110
|
+
data: List[Instrument]
|
|
111
|
+
|
|
112
|
+
|
|
76
113
|
class Quote(TypedDict):
|
|
77
114
|
amount: float
|
|
78
|
-
ext: NotRequired[
|
|
115
|
+
ext: NotRequired[QuoteExt]
|
|
79
116
|
high: float
|
|
80
117
|
last_price: float
|
|
81
118
|
low: float
|
|
@@ -89,13 +126,3 @@ class Quote(TypedDict):
|
|
|
89
126
|
|
|
90
127
|
class QuotesResponse(TypedDict):
|
|
91
128
|
data: List[Quote]
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
class RateLimitResponse(TypedDict):
|
|
95
|
-
code: int
|
|
96
|
-
message: str
|
|
97
|
-
retry_after_ms: int
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
class DepthResponse(TypedDict):
|
|
101
|
-
data: MarketDepth
|
|
@@ -16,7 +16,7 @@ class Instruments(SyncResource):
|
|
|
16
16
|
Examples
|
|
17
17
|
--------
|
|
18
18
|
>>> client = AlphaFeed(api_key="your-key")
|
|
19
|
-
>>> inst = client.instruments.get("
|
|
19
|
+
>>> inst = client.instruments.get("600519.SH")
|
|
20
20
|
>>> print(f"{inst['symbol']}: {inst['name']}")
|
|
21
21
|
"""
|
|
22
22
|
|
|
@@ -43,44 +43,46 @@ class Instruments(SyncResource):
|
|
|
43
43
|
If a list is provided, returns a list of Instrument dicts.
|
|
44
44
|
|
|
45
45
|
Each Instrument contains:
|
|
46
|
-
- symbol: Full symbol code (e.g., "
|
|
47
|
-
- code: Exchange-specific code (e.g., "
|
|
48
|
-
- exchange: Exchange code (e.g., "SH")
|
|
49
|
-
- region: Region code (
|
|
50
|
-
- name: Instrument name
|
|
51
|
-
-
|
|
52
|
-
- ext: Market-specific extension data
|
|
46
|
+
- symbol: Full symbol code (e.g., "600519.SH")
|
|
47
|
+
- code: Exchange-specific code (e.g., "600519")
|
|
48
|
+
- exchange: Exchange code (e.g., "SH", "SZ", "HK", "US")
|
|
49
|
+
- region: Region code ("CN", "US", "HK")
|
|
50
|
+
- name: Instrument name (e.g., "贵州茅台")
|
|
51
|
+
- type: Type (stock, etf, index, etc.)
|
|
52
|
+
- ext: Market-specific extension data (listing_date, total_shares, etc.)
|
|
53
53
|
|
|
54
54
|
Examples
|
|
55
55
|
--------
|
|
56
56
|
>>> # Single instrument
|
|
57
|
-
>>> inst = client.instruments.get("
|
|
58
|
-
>>> print(inst['name'])
|
|
57
|
+
>>> inst = client.instruments.get("600519.SH")
|
|
58
|
+
>>> print(f"{inst['name']} ({inst['exchange']})")
|
|
59
|
+
贵州茅台 (SH)
|
|
59
60
|
|
|
60
61
|
>>> # Multiple instruments
|
|
61
|
-
>>> insts = client.instruments.get(["
|
|
62
|
+
>>> insts = client.instruments.get(["600519.SH", "000001.SZ"])
|
|
62
63
|
>>> for i in insts:
|
|
63
64
|
... print(f"{i['symbol']}: {i['name']}")
|
|
65
|
+
600519.SH: 贵州茅台
|
|
66
|
+
000001.SZ: 平安银行
|
|
64
67
|
"""
|
|
65
68
|
if isinstance(symbol, str):
|
|
66
69
|
response = self._client.get("/v1/instruments", params={"symbols": symbol})
|
|
67
70
|
data = response["data"]
|
|
68
71
|
return data[0] if data else {}
|
|
69
72
|
else:
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
symbols_str = ",".join(symbol)
|
|
74
|
+
response = self._client.get(
|
|
75
|
+
"/v1/instruments", params={"symbols": symbols_str}
|
|
72
76
|
)
|
|
73
77
|
return response["data"]
|
|
74
78
|
|
|
75
79
|
def batch(self, symbols: List[str]) -> List["Instrument"]:
|
|
76
80
|
"""Get metadata for multiple instruments.
|
|
77
81
|
|
|
78
|
-
This method uses POST to handle large batches without URL length limits.
|
|
79
|
-
|
|
80
82
|
Parameters
|
|
81
83
|
----------
|
|
82
84
|
symbols : list of str
|
|
83
|
-
List of symbol codes
|
|
85
|
+
List of symbol codes.
|
|
84
86
|
|
|
85
87
|
Returns
|
|
86
88
|
-------
|
|
@@ -89,11 +91,13 @@ class Instruments(SyncResource):
|
|
|
89
91
|
|
|
90
92
|
Examples
|
|
91
93
|
--------
|
|
92
|
-
>>> insts = client.instruments.batch(["
|
|
94
|
+
>>> insts = client.instruments.batch(["600519.SH", "000001.SZ", "00700.HK"])
|
|
93
95
|
>>> for i in insts:
|
|
94
|
-
... print(f"{i['symbol']}: {i['name']}")
|
|
96
|
+
... print(f"{i['symbol']}: {i['name']} ({i['region']})")
|
|
97
|
+
600519.SH: 贵州茅台 (CN)
|
|
98
|
+
000001.SZ: 平安银行 (CN)
|
|
99
|
+
00700.HK: 腾讯控股 (HK)
|
|
95
100
|
"""
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
)
|
|
101
|
+
symbols_str = ",".join(symbols)
|
|
102
|
+
response = self._client.get("/v1/instruments", params={"symbols": symbols_str})
|
|
99
103
|
return response["data"]
|
|
@@ -120,16 +120,15 @@ class Quotes(SyncResource):
|
|
|
120
120
|
Quote data for the requested symbols.
|
|
121
121
|
|
|
122
122
|
Each Quote contains:
|
|
123
|
-
- symbol: Symbol code
|
|
124
|
-
-
|
|
125
|
-
- region: Region code
|
|
123
|
+
- symbol: Symbol code (e.g., "600519.SH")
|
|
124
|
+
- region: Region code ("CN", "US", "HK")
|
|
126
125
|
- last_price: Latest price
|
|
127
126
|
- prev_close: Previous close
|
|
128
127
|
- open, high, low: OHLC prices
|
|
129
128
|
- volume: Trading volume
|
|
130
129
|
- amount: Trading amount
|
|
131
130
|
- timestamp: Quote timestamp (milliseconds)
|
|
132
|
-
- ext:
|
|
131
|
+
- ext: Extension data (name, change_pct, change_amount, amplitude, turnover_rate)
|
|
133
132
|
|
|
134
133
|
Raises
|
|
135
134
|
------
|