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.
python_market_data_service/xysz/AmazingDataAdapter_接口文档.md

791 lines
17 KiB

# AmazingDataAdapter 接口文档
基于银河证券星耀数智量化平台 SDK 的 Python 适配器接口文档
---
## 目录
1. [快速开始](#快速开始)
2. [枚举类型](#枚举类型)
3. [接口列表](#接口列表)
- [基础数据接口](#基础数据接口)
- [历史行情接口](#历史行情接口)
- [财务数据接口](#财务数据接口)
- [股东股本接口](#股东股本接口)
- [融资融券接口](#融资融券接口)
- [交易异动接口](#交易异动接口)
- [指数数据接口](#指数数据接口)
- [ETF数据接口](#etf数据接口)
- [可转债数据接口](#可转债数据接口)
---
## 快速开始
```python
import asyncio
from app.adapters.amazingdata_adapter import AmazingDataAdapter, SecurityType, Market
async def main():
# 1. 创建适配器
adapter = AmazingDataAdapter()
# 2. 连接数据源
await adapter.connect({
"username": "your_username",
"password": "your_password",
"host": "your_host",
"port": 8600,
"local_path": "./amazing_data_cache/",
"use_local_cache": True
})
# 3. 获取数据
klines = await adapter.fetch_klines(
symbol="000001.SZ",
start="20240101",
end="20241231",
freq="1d"
)
print(f"获取到 {len(klines)} 条K线数据")
# 4. 断开连接
await adapter.close()
asyncio.run(main())
```
---
## 枚举类型
### 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期权 |
### Market - 市场
| 枚举值 | 说明 |
|--------|------|
| `Market.SH` | 上海 |
| `Market.SZ` | 深圳 |
| `Market.BJ` | 北京 |
---
## 接口列表
### 基础数据接口
#### 1. fetch_klines - 获取历史K线
```python
async def fetch_klines(
self,
symbol: str,
start: str,
end: str,
freq: str
) -> List[KLineData]
```
**参数说明:**
| 参数 | 类型 | 说明 |
|------|------|------|
| symbol | str | 标的代码,如 "000001.SZ" |
| start | str | 开始日期,格式 YYYYMMDD |
| end | str | 结束日期,格式 YYYYMMDD |
| freq | str | 周期1m/5m/15m/30m/60m/1d/1w/1M |
**返回数据 (KLineData)**
| 字段 | 类型 | 说明 |
|------|------|------|
| symbol | str | 标的代码 |
| time | int | Unix时间戳 |
| open | float | 开盘价 |
| high | float | 最高价 |
| low | float | 最低价 |
| close | float | 收盘价 |
| volume | int | 成交量 |
| amount | float | 成交金额 |
| trade_date | str | 交易日 (YYYY-MM-DD) |
| is_limit_up | bool | 是否涨停 |
| is_limit_down | bool | 是否跌停 |
| total_market_cap | float | 总市值(元) |
| float_market_cap | float | 流通市值(元) |
| inst_holding_ratio | float | 机构持仓占比(% |
| trading_days | int | 可交易日数 |
---
#### 2. fetch_symbols - 获取标的列表
```python
async def fetch_symbols(
self,
asset_type: str
) -> List[SymbolInfo]
```
**参数说明:**
| 参数 | 类型 | 说明 |
|------|------|------|
| asset_type | str | 资产类型stock/futures |
**返回数据 (SymbolInfo)**
| 字段 | 类型 | 说明 |
|------|------|------|
| symbol_id | str | 标的代码 |
| name | str | 标的名称 |
| exchange | str | 交易所 |
| underlying | str | 期货品种代码 |
| contract_month | str | 合约月份 |
---
#### 3. fetch_trading_calendar - 获取交易日历
```python
async def fetch_trading_calendar(
self,
exchange: str,
start: str,
end: str
) -> List[TradeCalData]
```
**参数说明:**
| 参数 | 类型 | 说明 |
|------|------|------|
| exchange | str | 交易所代码SH/SZ |
| start | str | 开始日期 YYYYMMDD |
| end | str | 结束日期 YYYYMMDD |
---
#### 4. get_code_info - 获取证券基本信息
```python
async def get_code_info(
self,
security_type: SecurityType = SecurityType.STOCK_A
) -> pd.DataFrame
```
**返回字段:**
| 字段 | 说明 |
|------|------|
| symbol | 证券简称 |
| security_status | 产品状态标志 |
| pre_close | 昨收价 |
| high_limited | 涨停价 |
| low_limited | 跌停价 |
| price_tick | 最小价格变动单位 |
---
#### 5. get_trading_calendar - 获取交易日历(列表)
```python
async def get_trading_calendar(
self,
market: Market = Market.SH
) -> List[int]
```
**返回:** 交易日列表,格式 [20240102, 20240103, ...]
---
#### 6. get_adj_factor - 获取单次复权因子
```python
async def get_adj_factor(
self,
codes: List[str],
is_local: Optional[bool] = None
) -> pd.DataFrame
```
**参数说明:**
| 参数 | 类型 | 说明 |
|------|------|------|
| codes | List[str] | 股票代码列表 |
| is_local | bool | 是否使用本地缓存 |
**返回:** DataFrame (index: 日期, columns: 股票代码)
---
#### 7. get_backward_factor - 获取后复权因子
```python
async def get_backward_factor(
self,
codes: List[str],
is_local: Optional[bool] = None
) -> pd.DataFrame
```
---
### 历史行情接口
#### 8. get_snapshot - 获取历史快照
```python
async def get_snapshot(
self,
codes: List[str],
start_date: str,
end_date: str
) -> Dict[str, pd.DataFrame]
```
**说明:** 获取Level-1行情快照数据
---
### 财务数据接口
#### 9. get_balance_sheet - 资产负债表
```python
async def get_balance_sheet(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| TOTAL_ASSETS | 资产总计 |
| TOTAL_CUR_ASSETS | 流动资产合计 |
| TOTAL_NONCUR_ASSETS | 非流动资产合计 |
| TOTAL_LIAB | 负债合计 |
| TOT_SHARE_EQUITY_INCL_MIN_INT | 股东权益合计 |
| CURRENCY_CAP | 货币资金 |
| NOTES_RECEIVABLE | 应收票据 |
| ACCT_RECEIVABLE | 应收账款 |
| INV | 存货 |
---
#### 10. get_cash_flow - 现金流量表
```python
async def get_cash_flow(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| NET_CASH_FLOWS_OPERA_ACT | 经营活动现金流净额 |
| NET_CASH_FLOWS_INV_ACT | 投资活动现金流净额 |
| NET_CASH_FLOWS_FIN_ACT | 筹资活动现金流净额 |
| NET_INCR_CASH_AND_CASH_EQU | 现金及现金等价物净增加额 |
---
#### 11. get_income_statement - 利润表
```python
async def get_income_statement(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| TOT_OPERA_REV | 营业总收入 |
| OPERA_REV | 营业收入 |
| TOT_OPERA_COST | 营业总成本 |
| OPERA_PROFIT | 营业利润 |
| TOTAL_PROFIT | 利润总额 |
| NET_PRO_INCL_MIN_INT_INC | 净利润 |
| BASIC_EPS | 基本每股收益 |
| DILUTED_EPS | 稀释每股收益 |
| RD_EXP | 研发费用 |
---
#### 12. get_profit_express - 业绩快报
```python
async def get_profit_express(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| TOTAL_ASSETS | 总资产 |
| NET_PRO_EXCL_MIN_INT_INC | 净利润 |
| TOT_OPERA_REV | 营业总收入 |
| TOTAL_PROFIT | 利润总额 |
| OPERA_PROFIT | 营业利润 |
| EPS_BASIC | 基本每股收益 |
| ROE_WEIGHTED | 净资产收益率-加权 |
| YOY_GR_NET_PROFIT_PARENT | 同比增长率 |
---
#### 13. get_profit_notice - 业绩预告
```python
async def get_profit_notice(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| P_TYPECODE | 业绩预告类型代码 |
| P_CHANGE_MAX | 预告净利润变动幅度上限 |
| P_CHANGE_MIN | 预告净利润变动幅度下限 |
| NET_PROFIT_MAX | 预告净利润上限(万元) |
| NET_PROFIT_MIN | 预告净利润下限(万元) |
| P_REASON | 业绩变动原因 |
---
### 股东股本接口
#### 14. get_top10_shareholders - 十大股东
```python
async def get_top10_shareholders(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| HOLDER_NAME | 股东名称 |
| HOLDER_QUANTITY | 持股数 |
| HOLDER_PCT | 持股比例(%) |
| HOLDER_HOLDER_CATEGORY | 股东性质(1:个人, 2:公司) |
| FLOAT_QTY | 流通股数量 |
---
#### 15. get_shareholder_count - 股东户数
```python
async def get_shareholder_count(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| HOLDER_TOTAL_NUM | A股、B股、H股、境外股的总户数 |
| HOLDER_NUM | A股股东户数 |
---
#### 16. get_equity_structure - 股本结构
```python
async def get_equity_structure(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| TOT_SHARE | 总股本(万股) |
| FLOAT_SHARE | 流通股(万股) |
| FLOAT_A_SHARE | 流通A股(万股) |
| RESTRICTED_A_SHARE | 限售A股(万股) |
| TOT_RESTRICTED_SHARE | 限售股合计 |
---
### 融资融券接口
#### 17. get_margin_summary - 融资融券汇总
```python
async def get_margin_summary(
self,
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| TRADE_DATE | 交易日期 |
| SUM_BORROW_MONEY_BALANCE | 融资余额(元) |
| SUM_PURCH_WITH_BORROW_MONEY | 融资买入额(元) |
| SUM_REPAYMENT_OF_BORROW_MONEY | 融资偿还额(元) |
| SUM_SEC_LENDING_BALANCE | 融券余额(元) |
| SUM_SALES_OF_BORROWED_SEC | 融券卖出量 |
| SUM_MARGIN_TRADE_BALANCE | 融资融券余额(元) |
---
#### 18. get_margin_detail - 个股融资融券明细
```python
async def get_margin_detail(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| BORROW_MONEY_BALANCE | 融资余额 |
| PURCH_WITH_BORROW_MONEY | 融资买入额 |
| REPAYMENT_OF_BORROW_MONEY | 融资偿还额 |
| SEC_LENDING_BALANCE | 融券余额 |
| SALES_OF_BORROWED_SEC | 融券卖出量 |
---
### 交易异动接口
#### 19. get_longhu_bang - 龙虎榜数据
```python
async def get_longhu_bang(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| TRADE_DATE | 交易日期 |
| REASON_TYPE_NAME | 上榜原因 |
| CHANGE_RANGE | 涨跌幅(%) |
| TRADER_NAME | 营业部名称 |
| BUY_AMOUNT | 买入金额(元) |
| SELL_AMOUNT | 卖出金额(元) |
| FLOW_MARK | 买卖表示(1买入, 2卖出) |
---
#### 20. get_block_trading - 大宗交易
```python
async def get_block_trading(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| TRADE_DATE | 交易日期 |
| B_SHARE_PRICE | 成交价(元) |
| B_SHARE_VOLUME | 成交量(万股) |
| B_SHARE_AMOUNT | 成交金额(万元) |
| B_BUYER_NAME | 买方营业部名称 |
| B_SELLER_NAME | 卖方营业部名称 |
---
### 指数数据接口
#### 21. get_index_constituents - 指数成分股
```python
async def get_index_constituents(
self,
codes: List[str],
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
```
**支持指数:**
| 代码 | 名称 |
|------|------|
| 000016.SH | 上证50 |
| 000300.SH | 沪深300 |
| 000905.SH | 中证500 |
| 000906.SH | 中证800 |
| 000852.SH | 中证1000 |
**返回字段:**
| 字段 | 说明 |
|------|------|
| INDEX_CODE | 指数代码 |
| CON_CODE | 成分股代码 |
| INDATE | 纳入日期 |
| OUTDATE | 剔除日期 |
| INDEX_NAME | 指数名称 |
---
#### 22. get_index_weights - 成分股权重
```python
async def get_index_weights(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
```
**返回字段:**
| 字段 | 说明 |
|------|------|
| INDEX_CODE | 指数代码 |
| CON_CODE | 标的代码 |
| TRADE_DATE | 生效日期 |
| WEIGHT | 权重(%) |
| CLOSE | 收盘价 |
---
### ETF数据接口
#### 23. get_etf_pcf - ETF申赎数据
```python
async def get_etf_pcf(
self,
codes: List[str]
) -> Tuple[pd.DataFrame, Dict[str, pd.DataFrame]]
```
**返回:** (etf_info, etf_constituents)
**etf_info字段**
| 字段 | 说明 |
|------|------|
| creation_redemption_unit | 每个篮子对应的ETF份数 |
| max_cash_ratio | 最大现金替代比例 |
| creation | 是否允许申购 |
| redemption | 是否允许赎回 |
**etf_constituents字段**
| 字段 | 说明 |
|------|------|
| underlying_symbol | 成份证券简称 |
| component_share | 成份证券数量 |
| substitute_flag | 现金替代标志 |
---
#### 24. get_fund_share - 基金份额
```python
async def get_fund_share(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| FUND_SHARE | 基金份额(万份) |
| TOTAL_SHARE | 基金总份额(万份) |
| FLOAT_SHARE | 流通份额(万份) |
| CHANGE_REASON | 份额变动原因 |
---
### 可转债数据接口
#### 25. get_kzz_issuance - 可转债发行数据
```python
async def get_kzz_issuance(
self,
codes: List[str],
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
```
**主要字段:**
| 字段 | 说明 |
|------|------|
| STOCK_CODE | 正股代码 |
| LISTED_DATE | 上市日期 |
| PLAN_SCHEDULE | 方案进度 |
| CLAUSE_INI_CONV_PRICE | 初始转换价格 |
| LIST_ISSUE_SIZE | 发行规模(万元) |
| LIST_ISSUE_QUANTITY | 发行数量(万张) |
| TERM_YEAR | 借款期限(年) |
| COUPON_RATE | 利率(%) |
---
## 使用示例
### 示例1获取股票K线并判断是否涨停
```python
import asyncio
from app.adapters.amazingdata_adapter import AmazingDataAdapter
async def main():
adapter = AmazingDataAdapter()
await adapter.connect({
"username": "xxx", "password": "xxx",
"host": "xxx", "port": 8600
})
# 获取K线
klines = await adapter.fetch_klines("000001.SZ", "20240101", "20241231", "1d")
for k in klines:
print(f"日期: {k.trade_date}, 收盘: {k.close}, "
f"涨停: {k.is_limit_up}, 跌停: {k.is_limit_down}")
await adapter.close()
asyncio.run(main())
```
### 示例2获取财务报表
```python
# 获取资产负债表
balance = await adapter.get_balance_sheet(
codes=["000001.SZ", "600000.SH"],
start_date="20240930",
end_date="20240930"
)
for code, df in balance.items():
print(f"{code} 总资产: {df['TOTAL_ASSETS'].values[0]}")
```
### 示例3获取指数成分股
```python
# 沪深300成分股
constituents = await adapter.get_index_constituents(["000300.SH"])
df = constituents["000300.SH"]
print(f"成分股数量: {len(df)}")
print(df[["CON_CODE", "INDATE"]].head())
```
### 示例4获取龙虎榜数据
```python
longhu = await adapter.get_longhu_bang(
codes=["000001.SZ"],
start_date="20240101",
end_date="20241231"
)
print(longhu[["TRADE_DATE", "REASON_TYPE_NAME", "BUY_AMOUNT", "SELL_AMOUNT"]])
```
---
## 注意事项
1. **连接管理**: 使用前先调用 `connect()`,使用后调用 `close()`
2. **日期格式**: 支持 `YYYYMMDD`、`"YYYY-MM-DD"` 或 `date` 对象
3. **本地缓存**: 默认启用,可设置 `is_local=False` 强制从服务器获取
4. **批量处理**: 大量数据建议分批获取,每批 50-100 个代码
5. **错误处理**: 连接断开会抛出 `RuntimeError`,需做好异常处理
---
**文档版本**: 1.0
**更新日期**: 2024-03-11