You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

269 lines
7.1 KiB

# AmazingData 数据源适配器
基于中国银河证券星耀数智量化平台 SDK 的封装,提供统一、简洁的金融数据获取接口。
## 功能特性
- **简洁的API设计**: 封装复杂的SDK接口提供直观的数据获取方法
- **类型安全**: 使用Python类型注解IDE友好的代码提示
- **灵活的配置**: 支持本地缓存、参数自定义等配置选项
- **全面的数据覆盖**: 支持行情、财务、股本、融资融券等多类金融数据
## 安装依赖
```bash
# 安装 AmazingData SDK (需从银河证券获取)
pip install tgw-1.*.*-py3-none-any.whl
pip install AmazingData-1.*.*-cp3x-none-any.whl
# 安装其他依赖
pip install pandas
```
## 快速开始
```python
from amazing_data_adapter import create_adapter, SecurityType, Period
# 1. 创建适配器
adapter = create_adapter(
username='your_username',
password='your_password',
host='your_host',
port=8080,
local_path='./data_cache/', # 本地缓存路径
use_local_cache=True # 是否使用本地缓存
)
# 2. 连接数据源
if adapter.connect():
# 3. 获取数据
codes = adapter.get_code_list(SecurityType.STOCK_A)
kline = adapter.get_kline(
codes=['000001.SZ'],
start_date='20240101',
end_date='20241231',
period=Period.DAILY
)
# 4. 断开连接
adapter.disconnect()
```
## 功能模块
### 1. 基础数据
| 方法 | 说明 |
|------|------|
| `get_code_list(security_type)` | 获取代码列表 |
| `get_code_info(security_type)` | 获取证券基本信息 |
| `get_trading_calendar(market)` | 获取交易日历 |
| `get_adj_factor(codes)` | 获取单次复权因子 |
| `get_backward_factor(codes)` | 获取后复权因子 |
### 2. 历史行情数据
| 方法 | 说明 |
|------|------|
| `get_kline(codes, start_date, end_date, period)` | 获取K线数据 |
| `get_snapshot(codes, start_date, end_date)` | 获取历史快照 |
**支持的周期 (Period)**:
- `Period.MIN1` - 1分钟
- `Period.MIN5` - 5分钟
- `Period.MIN15` - 15分钟
- `Period.MIN30` - 30分钟
- `Period.MIN60` - 60分钟
- `Period.DAILY` - 日线
- `Period.WEEKLY` - 周线
- `Period.MONTHLY` - 月线
### 3. 财务数据
| 方法 | 说明 |
|------|------|
| `get_balance_sheet(codes, start_date, end_date)` | 资产负债表 |
| `get_cash_flow(codes, start_date, end_date)` | 现金流量表 |
| `get_income_statement(codes, start_date, end_date)` | 利润表 |
| `get_profit_express(codes, start_date, end_date)` | 业绩快报 |
| `get_profit_notice(codes, start_date, end_date)` | 业绩预告 |
### 4. 股东股本数据
| 方法 | 说明 |
|------|------|
| `get_top10_shareholders(codes, start_date, end_date)` | 十大股东 |
| `get_shareholder_count(codes, start_date, end_date)` | 股东户数 |
| `get_equity_structure(codes, start_date, end_date)` | 股本结构 |
### 5. 融资融券数据
| 方法 | 说明 |
|------|------|
| `get_margin_summary(start_date, end_date)` | 融资融券汇总 |
| `get_margin_detail(codes, start_date, end_date)` | 个股融资融券明细 |
### 6. 交易异动数据
| 方法 | 说明 |
|------|------|
| `get_longhu_bang(codes, start_date, end_date)` | 龙虎榜数据 |
| `get_block_trading(codes, start_date, end_date)` | 大宗交易 |
### 7. 指数数据
| 方法 | 说明 |
|------|------|
| `get_index_constituents(codes)` | 指数成分股 |
| `get_index_weights(codes, start_date, end_date)` | 成分股权重 |
**支持的指数**:
- `000016.SH` - 上证50
- `000300.SH` - 沪深300
- `000905.SH` - 中证500
- `000906.SH` - 中证800
- `000852.SH` - 中证1000
### 8. ETF数据
| 方法 | 说明 |
|------|------|
| `get_etf_pcf(codes)` | ETF申赎数据 |
| `get_fund_share(codes, start_date, end_date)` | 基金份额 |
### 9. 可转债数据
| 方法 | 说明 |
|------|------|
| `get_kzz_issuance(codes)` | 可转债发行数据 |
## 证券类型枚举
```python
from amazing_data_adapter import SecurityType
SecurityType.STOCK_A # 沪深A股
SecurityType.STOCK_A_SH_SZ # 沪深A股沪深
SecurityType.INDEX_A # 沪深指数
SecurityType.ETF # ETF
SecurityType.FUTURE # 期货
SecurityType.KZZ # 可转债
SecurityType.GLRA # 逆回购
SecurityType.HKT # 港股通
SecurityType.ETF_OP # ETF期权
```
## 使用示例
### 获取历史K线数据
```python
# 获取多只股票日线数据
kline_data = adapter.get_kline(
codes=['000001.SZ', '600000.SH'],
start_date='20240101',
end_date='20241231',
period=Period.DAILY
)
for code, df in kline_data.items():
print(f"{code}: {len(df)} 条数据")
print(df.head())
```
### 获取财务报表
```python
# 获取资产负债表
balance_sheet = adapter.get_balance_sheet(
codes=['000001.SZ', '600000.SH'],
start_date=20240101,
end_date=20241231
)
for code, df in balance_sheet.items():
print(f"\n{code} 资产负债表:")
print(df[['REPORTING_PERIOD', 'TOTAL_ASSETS', 'TOTAL_CUR_ASSETS']])
```
### 获取指数成分股
```python
# 获取沪深300成分股
constituents = adapter.get_index_constituents(['000300.SH'])
df = constituents['000300.SH']
print(f"沪深300成分股数量: {len(df)}")
print(df[['CON_CODE', 'INDATE', 'INDEX_NAME']].head())
```
### 批量数据处理
```python
# 获取所有A股代码
all_codes = adapter.get_code_list(SecurityType.STOCK_A)
# 分批处理避免超时
batch_size = 50
for i in range(0, len(all_codes), batch_size):
batch_codes = all_codes[i:i+batch_size]
data = adapter.get_balance_sheet(batch_codes)
# 处理数据...
```
### 结合复权因子计算真实价格
```python
# 获取K线和复权因子
kline = adapter.get_kline(['000001.SZ'], '20240101', '20241231')
adj_factor = adapter.get_backward_factor(['000001.SZ'])
df = kline['000001.SZ']
# 合并并计算复权价格
df['trade_date'] = df.index.strftime('%Y%m%d').astype(int)
df = df.merge(adj_factor[['000001.SZ']].reset_index(),
left_on='trade_date', right_on='index')
df['adj_close'] = df['close'] * df['000001.SZ']
```
## 数据缓存
适配器支持本地数据缓存,可大幅提升重复查询的速度:
```python
adapter = create_adapter(
username='xxx',
password='xxx',
host='xxx',
port=8080,
local_path='./my_data_cache/', # 缓存目录
use_local_cache=True # 默认启用缓存
)
# 强制从服务器获取最新数据
adapter.get_kline(codes, start_date, end_date, is_local=False)
```
## 注意事项
1. **账号权限**: 使用本适配器需要先向中国银河证券申请开通星耀数智平台权限
2. **日期格式**: 支持多种日期格式:
- `int`: 20240101
- `str`: "2024-01-01" 或 "20240101"
- `date`: datetime.date(2024, 1, 1)
3. **错误处理**: 所有方法在连接断开会抛出 `RuntimeError`,建议在外层做好异常处理
4. **资源释放**: 使用完毕后请调用 `adapter.disconnect()` 断开连接
## 文件说明
- `amazing_data_adapter.py` - 适配器主代码
- `amazing_data_examples.py` - 详细使用示例
- `README.md` - 本文档
## API参考
详细的SDK接口文档请参考银河证券提供的《AmazingData开发手册》。