parent
175173de0f
commit
fbcb54d23f
@ -0,0 +1,120 @@
|
|||||||
|
# AmazingData Adapter 接口调用关系
|
||||||
|
|
||||||
|
## 一、核心适配器接口 (DataSourceAdapter 实现)
|
||||||
|
|
||||||
|
| 序号 | 公共接口 | 同步方法 | SDK 调用 | 说明 |
|
||||||
|
|------|----------|----------|----------|------|
|
||||||
|
| 1 | `connect` | - | `_market_data.login()` | 连接数据源 |
|
||||||
|
| 2 | `close` | - | - | 关闭连接 |
|
||||||
|
| 3 | `subscribe_ticks` | - | - | 订阅实时Tick |
|
||||||
|
| 4 | `fetch_klines` | `_fetch_klines_sync` | `_market_data.query_kline()` | 获取K线数据 |
|
||||||
|
| 5 | `fetch_symbols` | `_fetch_symbols_sync` | `_base_data.get_code_list()`<br>`_base_data.get_code_info()`<br>`_base_data.get_future_code_list()`<br>`_base_data.get_future_info()` | 获取标的列表 |
|
||||||
|
| 6 | `fetch_trading_calendar` | `_fetch_calendar_sync` | `_base_data.get_calendar()` | 获取交易日历 |
|
||||||
|
| 7 | `health_check` | - | `_market_data.is_login()` | 健康检查 |
|
||||||
|
|
||||||
|
## 二、数据获取接口 (基础数据)
|
||||||
|
|
||||||
|
| 序号 | 公共接口 | 同步方法 | SDK 调用 | 说明 |
|
||||||
|
|------|----------|----------|----------|------|
|
||||||
|
| 8 | `get_adj_factor` | - | `_base_data.get_adj_factor()` | 获取复权因子 |
|
||||||
|
| 9 | `get_backward_factor` | - | `_base_data.get_backward_factor()` | 获取后复权因子 |
|
||||||
|
| 10 | `get_code_info` | - | `_base_data.get_code_info()` | 获取代码信息 |
|
||||||
|
| 11 | `get_trading_calendar` | - | `_base_data.get_calendar()` | 获取交易日历(通用) |
|
||||||
|
|
||||||
|
## 三、数据获取接口 (财务/股东数据)
|
||||||
|
|
||||||
|
| 序号 | 公共接口 | 同步方法 | SDK 调用 | 说明 |
|
||||||
|
|------|----------|----------|----------|------|
|
||||||
|
| 12 | `get_balance_sheet` | - | `_info_data.get_balance_sheet()` | 资产负债表 |
|
||||||
|
| 13 | `get_cash_flow` | - | `_info_data.get_cash_flow()` | 现金流量表 |
|
||||||
|
| 14 | `get_income_statement` | - | `_info_data.get_income_statement()` | 利润表 |
|
||||||
|
| 15 | `get_profit_express` | - | `_info_data.get_profit_express()` | 业绩预告 |
|
||||||
|
| 16 | `get_profit_notice` | - | `_info_data.get_profit_notice()` | 业绩快报 |
|
||||||
|
| 17 | `get_top10_shareholders` | - | `_info_data.get_share_holder()` | 前十大股东 |
|
||||||
|
| 18 | `get_shareholder_count` | - | `_info_data.get_holder_num()` | 股东户数 |
|
||||||
|
| 19 | `get_equity_structure` | - | `_info_data.get_equity_structure()` | 股本结构 |
|
||||||
|
|
||||||
|
## 四、数据获取接口 (市场数据)
|
||||||
|
|
||||||
|
| 序号 | 公共接口 | 同步方法 | SDK 调用 | 说明 |
|
||||||
|
|------|----------|----------|----------|------|
|
||||||
|
| 20 | `get_snapshot` | - | `_market_data.query_kline()` | 获取快照数据 |
|
||||||
|
| 21 | `get_index_constituents` | - | `_info_data.get_index_constituent()` | 指数成分股 |
|
||||||
|
| 22 | `get_index_weights` | - | `_info_data.get_index_weight()` | 指数权重 |
|
||||||
|
| 23 | `get_margin_summary` | - | `_info_data.get_margin_summary()` | 融资融券汇总 |
|
||||||
|
| 24 | `get_margin_detail` | - | `_info_data.get_margin_detail()` | 融资融券明细 |
|
||||||
|
| 25 | `get_longhu_bang` | - | `_info_data.get_long_hu_bang()` | 龙虎榜 |
|
||||||
|
| 26 | `get_block_trading` | - | `_info_data.get_block_trading()` | 大宗交易 |
|
||||||
|
|
||||||
|
## 五、数据获取接口 (基金/可转债)
|
||||||
|
|
||||||
|
| 序号 | 公共接口 | 同步方法 | SDK 调用 | 说明 |
|
||||||
|
|------|----------|----------|----------|------|
|
||||||
|
| 27 | `get_etf_pcf` | - | `_base_data.get_etf_pcf()` | ETF申购赎回清单 |
|
||||||
|
| 28 | `get_fund_share` | - | `_info_data.get_fund_share()` | 基金份额 |
|
||||||
|
| 29 | `get_kzz_issuance` | - | `_info_data.get_kzz_issuance()` | 可转债发行 |
|
||||||
|
|
||||||
|
## 六、新增分表数据接口
|
||||||
|
|
||||||
|
| 序号 | 公共接口 | 同步方法 | SDK 调用 | 说明 |
|
||||||
|
|------|----------|----------|----------|------|
|
||||||
|
| 30 | `fetch_kline_base` | `_fetch_kline_base_sync` | `_market_data.query_kline()` | 获取基础K线数据 |
|
||||||
|
| 31 | `fetch_kline_quote` | `_fetch_kline_quote_sync` | `_market_data.query_kline()`<br>`_base_data.get_code_info()` | 获取行情指标数据 |
|
||||||
|
| 32 | `fetch_kline_finance` | `_fetch_kline_finance_sync` | `_market_data.query_kline()`<br>`_info_data.get_equity_structure()` | 获取财务数据 |
|
||||||
|
| 33 | `fetch_stock_basic_info` | `_fetch_stock_basic_info_sync` | `_base_data.get_code_list()`<br>`_base_data.get_code_info()`<br>`_info_data.get_equity_structure()` | 获取股票基础信息 |
|
||||||
|
|
||||||
|
## 七、组合调用详细说明
|
||||||
|
|
||||||
|
### 7.1 多次调用同一接口的方法
|
||||||
|
|
||||||
|
| 方法 | SDK 调用次数 | 调用详情 |
|
||||||
|
|------|-------------|----------|
|
||||||
|
| `fetch_symbols` (stock) | 2次 | 1. `get_code_list()`<br>2. `get_code_info()` |
|
||||||
|
| `fetch_symbols` (futures) | 2次 | 1. `get_future_code_list()`<br>2. `get_future_info()` |
|
||||||
|
| `fetch_kline_quote` | 2次 | 1. `query_kline()` - 获取K线<br>2. `get_code_info()` - 获取涨跌停价 |
|
||||||
|
| `fetch_kline_finance` | 2次 | 1. `get_equity_structure()` - 获取股本<br>2. `query_kline()` - 获取价格计算市值 |
|
||||||
|
| `fetch_stock_basic_info` | 3次 | 1. `get_code_list()` - 获取代码列表<br>2. `get_code_info()` - 获取名称<br>3. `get_equity_structure()` - 获取上市日期 |
|
||||||
|
|
||||||
|
### 7.2 调用链示例
|
||||||
|
|
||||||
|
```
|
||||||
|
fetch_stock_basic_info (async)
|
||||||
|
└── _fetch_stock_basic_info_sync (sync)
|
||||||
|
├── _base_data.get_code_list() [第1次SDK调用]
|
||||||
|
├── _base_data.get_code_info() [第2次SDK调用]
|
||||||
|
└── _info_data.get_equity_structure() [第3次SDK调用, 循环每个股票]
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
fetch_kline_quote (async)
|
||||||
|
└── _fetch_kline_quote_sync (sync)
|
||||||
|
├── _market_data.query_kline() [第1次SDK调用, 扩展日期范围]
|
||||||
|
└── _base_data.get_code_info() [第2次SDK调用, 获取涨跌停价]
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
fetch_kline_finance (async)
|
||||||
|
└── _fetch_kline_finance_sync (sync)
|
||||||
|
├── _info_data.get_equity_structure() [第1次SDK调用]
|
||||||
|
└── _market_data.query_kline() [第2次SDK调用]
|
||||||
|
```
|
||||||
|
|
||||||
|
## 八、SDK 对象汇总
|
||||||
|
|
||||||
|
| SDK 对象 | 说明 | 主要方法 |
|
||||||
|
|----------|------|----------|
|
||||||
|
| `_market_data` | 市场数据 | `login()`, `query_kline()`, `is_login()` |
|
||||||
|
| `_base_data` | 基础数据 | `get_code_list()`, `get_code_info()`, `get_calendar()`, `get_adj_factor()`, `get_future_code_list()`, `get_etf_pcf()` |
|
||||||
|
| `_info_data` | 信息数据 | `get_equity_structure()`, `get_share_holder()`, `get_income_statement()`, `get_balance_sheet()`, `get_cash_flow()`, `get_profit_express()`, `get_profit_notice()`, `get_holder_num()`, `get_margin_summary()`, `get_margin_detail()`, `get_long_hu_bang()`, `get_block_trading()`, `get_index_constituent()`, `get_index_weight()`, `get_fund_share()`, `get_kzz_issuance()` |
|
||||||
|
|
||||||
|
## 九、接口统计
|
||||||
|
|
||||||
|
| 类别 | 接口数量 |
|
||||||
|
|------|----------|
|
||||||
|
| 核心适配器接口 | 7 |
|
||||||
|
| 基础数据接口 | 4 |
|
||||||
|
| 财务/股东数据接口 | 8 |
|
||||||
|
| 市场数据接口 | 7 |
|
||||||
|
| 基金/可转债接口 | 3 |
|
||||||
|
| 新增分表数据接口 | 4 |
|
||||||
|
| **总计** | **33** |
|
||||||
@ -0,0 +1,123 @@
|
|||||||
|
# get_history_stock_status 接口实现
|
||||||
|
|
||||||
|
## 接口说明
|
||||||
|
|
||||||
|
`get_history_stock_status` 是 AmazingData SDK 提供的历史股票状态查询接口,用于获取股票的历史涨停/跌停价、ST状态、停牌状态等信息。
|
||||||
|
|
||||||
|
## 实现位置
|
||||||
|
|
||||||
|
### 1. 内部接口层
|
||||||
|
**文件**: `app/adapters/internal_data_service.py`
|
||||||
|
|
||||||
|
```python
|
||||||
|
class _InfoDataInternal:
|
||||||
|
def get_history_stock_status(
|
||||||
|
self,
|
||||||
|
code_list: List[str],
|
||||||
|
local_path: str,
|
||||||
|
is_local: bool,
|
||||||
|
begin_date: Optional[int] = None,
|
||||||
|
end_date: Optional[int] = None
|
||||||
|
) -> Dict[str, pd.DataFrame]:
|
||||||
|
"""获取历史股票状态数据
|
||||||
|
|
||||||
|
包含字段:
|
||||||
|
- TRADE_DATE: 交易日期
|
||||||
|
- UP_LIMIT: 涨停价
|
||||||
|
- DOWN_LIMIT: 跌停价
|
||||||
|
- MAX_UP_DOWN: 最大涨跌幅限制
|
||||||
|
- IS_ST: 是否ST
|
||||||
|
- IS_SUSPEND: 是否停牌
|
||||||
|
"""
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 对外接口层
|
||||||
|
**文件**: `app/adapters/amazingdata_adapter.py`
|
||||||
|
|
||||||
|
```python
|
||||||
|
class AmazingDataAdapter(DataSourceAdapter):
|
||||||
|
async def get_history_stock_status(
|
||||||
|
self,
|
||||||
|
codes: List[str],
|
||||||
|
start_date: Optional[str] = None,
|
||||||
|
end_date: Optional[str] = None,
|
||||||
|
is_local: Optional[bool] = None
|
||||||
|
) -> Dict[str, pd.DataFrame]:
|
||||||
|
"""获取历史股票状态数据"""
|
||||||
|
```
|
||||||
|
|
||||||
|
## 返回字段说明
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
|--------|------|------|
|
||||||
|
| TRADE_DATE | int | 交易日期 (YYYYMMDD) |
|
||||||
|
| UP_LIMIT | float | 涨停价 |
|
||||||
|
| DOWN_LIMIT | float | 跌停价 |
|
||||||
|
| MAX_UP_DOWN | float | 最大涨跌幅限制(%) |
|
||||||
|
| IS_ST | bool/int | 是否ST股 |
|
||||||
|
| IS_SUSPEND | bool/int | 是否停牌 |
|
||||||
|
|
||||||
|
## 使用示例
|
||||||
|
|
||||||
|
```python
|
||||||
|
from app.adapters.amazingdata_adapter import AmazingDataAdapter
|
||||||
|
|
||||||
|
adapter = AmazingDataAdapter()
|
||||||
|
await adapter.connect({
|
||||||
|
"username": "your_username",
|
||||||
|
"password": "your_password",
|
||||||
|
"host": "your_host",
|
||||||
|
"port": 8600
|
||||||
|
})
|
||||||
|
|
||||||
|
# 获取股票历史状态
|
||||||
|
result = await adapter.get_history_stock_status(
|
||||||
|
codes=["000001.SZ", "600519.SH"],
|
||||||
|
start_date="20240301",
|
||||||
|
end_date="20240310"
|
||||||
|
)
|
||||||
|
|
||||||
|
# 处理结果
|
||||||
|
for symbol, df in result.items():
|
||||||
|
print(f"股票: {symbol}")
|
||||||
|
print(df[["TRADE_DATE", "UP_LIMIT", "DOWN_LIMIT", "IS_ST"]])
|
||||||
|
```
|
||||||
|
|
||||||
|
## 调用链
|
||||||
|
|
||||||
|
```
|
||||||
|
AmazingDataAdapter.get_history_stock_status (async)
|
||||||
|
└── _InfoDataInternal.get_history_stock_status (sync)
|
||||||
|
└── SDK: _info_data.get_history_stock_status()
|
||||||
|
```
|
||||||
|
|
||||||
|
## SDK 调用统计
|
||||||
|
|
||||||
|
| 层次 | 调用次数 | 说明 |
|
||||||
|
|------|----------|------|
|
||||||
|
| 对外接口 | 1 | async 包装 |
|
||||||
|
| 内部接口 | 1 | 错误处理 |
|
||||||
|
| SDK | 1 | 实际数据获取 |
|
||||||
|
|
||||||
|
**总计**: 1 次 SDK 调用(单次查询)
|
||||||
|
|
||||||
|
## 应用场景
|
||||||
|
|
||||||
|
1. **涨跌停分析** - 获取历史涨停/跌停价格
|
||||||
|
2. **ST股票跟踪** - 监控股票ST状态变化
|
||||||
|
3. **停牌监控** - 获取股票停牌状态
|
||||||
|
4. **策略回测** - 基于历史涨跌停限制进行回测
|
||||||
|
|
||||||
|
## 与其他接口的关系
|
||||||
|
|
||||||
|
| 接口 | 用途 | 区别 |
|
||||||
|
|------|------|------|
|
||||||
|
| `get_history_stock_status` | 获取历史状态(涨停/跌停/ST/停牌) | 返回每日状态数据 |
|
||||||
|
| `get_code_info` | 获取当前代码信息 | 返回最新静态信息 |
|
||||||
|
| `fetch_klines` | 获取K线数据 | 包含涨跌停判断逻辑 |
|
||||||
|
|
||||||
|
## 文档更新
|
||||||
|
|
||||||
|
以下文档已更新:
|
||||||
|
- `INTERNAL_INTERFACES.md` - 内部接口层文档
|
||||||
|
- `AMAZINGDATA_ADAPTER_INTERFACES_V3.md` - 接口调用关系文档
|
||||||
@ -0,0 +1,148 @@
|
|||||||
|
# 内部接口层文档
|
||||||
|
|
||||||
|
## 架构设计
|
||||||
|
|
||||||
|
```
|
||||||
|
对外接口 (AmazingDataAdapter)
|
||||||
|
│
|
||||||
|
├── 内部接口层 (InternalDataService)
|
||||||
|
│ ├── _MarketDataInternal (市场数据)
|
||||||
|
│ ├── _BaseDataInternal (基础数据)
|
||||||
|
│ └── _InfoDataInternal (信息数据)
|
||||||
|
│
|
||||||
|
└── AmazingData SDK
|
||||||
|
├── _market_data
|
||||||
|
├── _base_data
|
||||||
|
└── _info_data
|
||||||
|
```
|
||||||
|
|
||||||
|
## 设计原则
|
||||||
|
|
||||||
|
1. **对外接口不直接调用 SDK** - 所有 SDK 调用都通过内部接口层
|
||||||
|
2. **统一错误处理** - 内部接口层统一处理 SDK 异常
|
||||||
|
3. **日志记录** - 内部接口层统一记录调用日志
|
||||||
|
4. **便于测试** - 可以 mock 内部接口进行单元测试
|
||||||
|
|
||||||
|
## 内部接口类
|
||||||
|
|
||||||
|
### _MarketDataInternal
|
||||||
|
|
||||||
|
封装 `_market_data` SDK 对象的方法:
|
||||||
|
|
||||||
|
| 方法 | SDK 方法 | 说明 |
|
||||||
|
|------|----------|------|
|
||||||
|
| `login()` | `_market_data.login()` | 登录 |
|
||||||
|
| `is_login()` | `_market_data.is_login()` | 检查登录状态 |
|
||||||
|
| `query_kline()` | `_market_data.query_kline()` | 查询K线 |
|
||||||
|
| `query_snapshot()` | `_market_data.query_snapshot()` | 查询快照 |
|
||||||
|
|
||||||
|
### _BaseDataInternal
|
||||||
|
|
||||||
|
封装 `_base_data` SDK 对象的方法:
|
||||||
|
|
||||||
|
| 方法 | SDK 方法 | 说明 |
|
||||||
|
|------|----------|------|
|
||||||
|
| `get_code_list()` | `_base_data.get_code_list()` | 获取股票代码列表 |
|
||||||
|
| `get_future_code_list()` | `_base_data.get_future_code_list()` | 获取期货代码列表 |
|
||||||
|
| `get_code_info()` | `_base_data.get_code_info()` | 获取代码信息 |
|
||||||
|
| `get_calendar()` | `_base_data.get_calendar()` | 获取交易日历 |
|
||||||
|
| `get_adj_factor()` | `_base_data.get_adj_factor()` | 获取复权因子 |
|
||||||
|
| `get_backward_factor()` | `_base_data.get_backward_factor()` | 获取后复权因子 |
|
||||||
|
| `get_etf_pcf()` | `_base_data.get_etf_pcf()` | 获取ETF申赎数据 |
|
||||||
|
| `get_hist_code_list()` | `_base_data.get_hist_code_list()` | 获取历史代码列表 |
|
||||||
|
|
||||||
|
### _InfoDataInternal
|
||||||
|
|
||||||
|
封装 `_info_data` SDK 对象的方法:
|
||||||
|
|
||||||
|
| 方法 | SDK 方法 | 说明 |
|
||||||
|
|------|----------|------|
|
||||||
|
| `get_equity_structure()` | `_info_data.get_equity_structure()` | 股本结构 |
|
||||||
|
| `get_share_holder()` | `_info_data.get_share_holder()` | 股东数据 |
|
||||||
|
| `get_holder_num()` | `_info_data.get_holder_num()` | 股东户数 |
|
||||||
|
| `get_income()` | `_info_data.get_income()` | 利润表 |
|
||||||
|
| `get_balance_sheet()` | `_info_data.get_balance_sheet()` | 资产负债表 |
|
||||||
|
| `get_cash_flow()` | `_info_data.get_cash_flow()` | 现金流量表 |
|
||||||
|
| `get_profit_express()` | `_info_data.get_profit_express()` | 业绩预告 |
|
||||||
|
| `get_profit_notice()` | `_info_data.get_profit_notice()` | 业绩快报 |
|
||||||
|
| `get_margin_summary()` | `_info_data.get_margin_summary()` | 融资融券汇总 |
|
||||||
|
| `get_margin_detail()` | `_info_data.get_margin_detail()` | 融资融券明细 |
|
||||||
|
| `get_long_hu_bang()` | `_info_data.get_long_hu_bang()` | 龙虎榜 |
|
||||||
|
| `get_block_trading()` | `_info_data.get_block_trading()` | 大宗交易 |
|
||||||
|
| `get_index_constituent()` | `_info_data.get_index_constituent()` | 指数成分股 |
|
||||||
|
| `get_index_weight()` | `_info_data.get_index_weight()` | 指数权重 |
|
||||||
|
| `get_fund_share()` | `_info_data.get_fund_share()` | 基金份额 |
|
||||||
|
| `get_kzz_issuance()` | `_info_data.get_kzz_issuance()` | 可转债发行 |
|
||||||
|
| `get_history_stock_status()` | `_info_data.get_history_stock_status()` | 历史股票状态(涨停/跌停/ST/停牌) |
|
||||||
|
|
||||||
|
## 使用方式
|
||||||
|
|
||||||
|
### 在 AmazingDataAdapter 中
|
||||||
|
|
||||||
|
```python
|
||||||
|
class AmazingDataAdapter(DataSourceAdapter):
|
||||||
|
def __init__(self):
|
||||||
|
# ... 其他初始化 ...
|
||||||
|
self._internal: Optional[InternalDataService] = None
|
||||||
|
|
||||||
|
async def connect(self, config: dict) -> None:
|
||||||
|
# ... 登录和初始化 SDK ...
|
||||||
|
|
||||||
|
# 初始化内部数据服务层
|
||||||
|
self._internal = InternalDataService(self)
|
||||||
|
|
||||||
|
def _fetch_klines_sync(self, ...):
|
||||||
|
# 使用内部接口,而不是直接调用 SDK
|
||||||
|
kline_dict = self._internal.market.query_kline(...)
|
||||||
|
code_info = self._internal.base.get_code_info(...)
|
||||||
|
equity = self._internal.info.get_equity_structure(...)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 错误处理
|
||||||
|
|
||||||
|
内部接口统一处理 SDK 异常,返回空数据或默认值:
|
||||||
|
|
||||||
|
```python
|
||||||
|
class _BaseDataInternal:
|
||||||
|
def get_code_info(self, security_type: str) -> pd.DataFrame:
|
||||||
|
try:
|
||||||
|
return self._base_data.get_code_info(security_type=security_type)
|
||||||
|
except Exception as e:
|
||||||
|
error(f"[_BaseDataInternal] Get code info failed: {e}")
|
||||||
|
return pd.DataFrame() # 返回空数据而不是抛出异常
|
||||||
|
```
|
||||||
|
|
||||||
|
## 文件结构
|
||||||
|
|
||||||
|
```
|
||||||
|
app/adapters/
|
||||||
|
├── __init__.py
|
||||||
|
├── base.py # 适配器基类
|
||||||
|
├── amazingdata_adapter.py # 对外适配器(使用内部接口)
|
||||||
|
└── internal_data_service.py # 内部接口层
|
||||||
|
```
|
||||||
|
|
||||||
|
## 迁移说明
|
||||||
|
|
||||||
|
### 之前的调用方式(已废弃)
|
||||||
|
```python
|
||||||
|
# 直接调用 SDK
|
||||||
|
code_info = self._base_data.get_code_info(security_type=...)
|
||||||
|
kline = self._market_data.query_kline(...)
|
||||||
|
equity = self._info_data.get_equity_structure(...)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 现在的调用方式
|
||||||
|
```python
|
||||||
|
# 通过内部接口调用
|
||||||
|
code_info = self._internal.base.get_code_info(security_type=...)
|
||||||
|
kline = self._internal.market.query_kline(...)
|
||||||
|
equity = self._internal.info.get_equity_structure(...)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 优势
|
||||||
|
|
||||||
|
1. **解耦** - 对外接口与 SDK 解耦,便于更换数据源
|
||||||
|
2. **可测试性** - 可以 mock 内部接口进行单元测试
|
||||||
|
3. **错误处理** - 统一的错误处理和日志记录
|
||||||
|
4. **扩展性** - 可以在内部接口层添加缓存、限流等功能
|
||||||
Binary file not shown.
Binary file not shown.
@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""自动替换 SDK 调用为内部接口调用"""
|
||||||
|
|
||||||
|
replacements = [
|
||||||
|
# _base_data 调用
|
||||||
|
("self._base_data.get_code_info(", "self._internal.base.get_code_info("),
|
||||||
|
("self._base_data.get_code_list(", "self._internal.base.get_code_list("),
|
||||||
|
("self._base_data.get_future_code_list(", "self._internal.base.get_future_code_list("),
|
||||||
|
("self._base_data.get_calendar(", "self._internal.base.get_calendar("),
|
||||||
|
("self._base_data.get_adj_factor(", "self._internal.base.get_adj_factor("),
|
||||||
|
("self._base_data.get_backward_factor(", "self._internal.base.get_backward_factor("),
|
||||||
|
("self._base_data.get_etf_pcf(", "self._internal.base.get_etf_pcf("),
|
||||||
|
("self._base_data.get_hist_code_list(", "self._internal.base.get_hist_code_list("),
|
||||||
|
|
||||||
|
# _market_data 调用
|
||||||
|
("self._market_data.query_kline(", "self._internal.market.query_kline("),
|
||||||
|
("self._market_data.query_snapshot(", "self._internal.market.query_snapshot("),
|
||||||
|
|
||||||
|
# _info_data 调用
|
||||||
|
("self._info_data.get_equity_structure(", "self._internal.info.get_equity_structure("),
|
||||||
|
("self._info_data.get_share_holder(", "self._internal.info.get_share_holder("),
|
||||||
|
("self._info_data.get_holder_num(", "self._internal.info.get_holder_num("),
|
||||||
|
("self._info_data.get_income(", "self._internal.info.get_income("),
|
||||||
|
("self._info_data.get_balance_sheet(", "self._internal.info.get_balance_sheet("),
|
||||||
|
("self._info_data.get_cash_flow(", "self._internal.info.get_cash_flow("),
|
||||||
|
("self._info_data.get_profit_express(", "self._internal.info.get_profit_express("),
|
||||||
|
("self._info_data.get_profit_notice(", "self._internal.info.get_profit_notice("),
|
||||||
|
("self._info_data.get_margin_summary(", "self._internal.info.get_margin_summary("),
|
||||||
|
("self._info_data.get_margin_detail(", "self._internal.info.get_margin_detail("),
|
||||||
|
("self._info_data.get_long_hu_bang(", "self._internal.info.get_long_hu_bang("),
|
||||||
|
("self._info_data.get_block_trading(", "self._internal.info.get_block_trading("),
|
||||||
|
("self._info_data.get_index_constituent(", "self._internal.info.get_index_constituent("),
|
||||||
|
("self._info_data.get_index_weight(", "self._internal.info.get_index_weight("),
|
||||||
|
("self._info_data.get_fund_share(", "self._internal.info.get_fund_share("),
|
||||||
|
("self._info_data.get_kzz_issuance(", "self._internal.info.get_kzz_issuance("),
|
||||||
|
]
|
||||||
|
|
||||||
|
def main():
|
||||||
|
with open('app/adapters/amazingdata_adapter.py', 'r', encoding='utf-8') as f:
|
||||||
|
content = f.read()
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
for old, new in replacements:
|
||||||
|
if old in content:
|
||||||
|
occurrences = content.count(old)
|
||||||
|
content = content.replace(old, new)
|
||||||
|
count += occurrences
|
||||||
|
print(f"Replaced {occurrences} occurrence(s): {old} -> {new}")
|
||||||
|
|
||||||
|
with open('app/adapters/amazingdata_adapter.py', 'w', encoding='utf-8') as f:
|
||||||
|
f.write(content)
|
||||||
|
|
||||||
|
print(f"\nTotal replacements: {count}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Loading…
Reference in new issue