fix(api_pro_bar): 使用 Tushare 原始字段名
删除 turnover_rate/volume_ratio 到 tor/vr 的不必要重命名, 直接使用 Tushare API 返回的原始字段名。
This commit is contained in:
@@ -167,11 +167,57 @@ if "date" in data.columns:
|
||||
- 格式:`{code}.{exchange}`,如 `000001.SZ`、`600000.SH`
|
||||
- 确保返回的 DataFrame 包含 `ts_code` 列
|
||||
|
||||
### 4.5 令牌桶限速要求
|
||||
### 4.5 字段名规范(重要)
|
||||
|
||||
**必须使用 Tushare API 返回的原始字段名,禁止进行不必要的重命名。**
|
||||
|
||||
这是为了确保:
|
||||
- 代码可读性:使用 API 文档中的标准字段名
|
||||
- 维护简单性:避免因字段名映射导致的混淆和错误
|
||||
- 数据一致性:数据库字段名与 API 返回字段名保持一致
|
||||
|
||||
**禁止做法**(以下代码是不允许的):
|
||||
```python
|
||||
# 错误:将 Tushare 的原始字段名改为自定义名称
|
||||
column_mapping = {
|
||||
"turnover_rate": "tor", # 不要这样做
|
||||
"volume_ratio": "vr", # 不要这样做
|
||||
}
|
||||
data = data.rename(columns=column_mapping)
|
||||
```
|
||||
|
||||
**正确做法**(直接使用原始字段名):
|
||||
```python
|
||||
# 正确:保留 Tushare 返回的原始字段名
|
||||
# Tushare 返回 'turnover_rate',就直接使用 'turnover_rate'
|
||||
# Tushare 返回 'volume_ratio',就直接使用 'volume_ratio'
|
||||
|
||||
# 表结构定义应使用原始字段名
|
||||
TABLE_SCHEMA = {
|
||||
"ts_code": "VARCHAR(16) NOT NULL",
|
||||
"trade_date": "DATE NOT NULL",
|
||||
"turnover_rate": "DOUBLE", # 使用原始字段名
|
||||
"volume_ratio": "DOUBLE", # 使用原始字段名
|
||||
# ... 其他字段
|
||||
}
|
||||
```
|
||||
|
||||
**例外情况**(允许重命名):
|
||||
- 日期字段:如果 API 返回 `date`,应重命名为 `trade_date` 以符合项目规范
|
||||
- 必须重命名的情况:如果两个不同 API 返回相同含义但不同名称的字段,需要统一命名
|
||||
|
||||
**教训**(真实案例):
|
||||
`api_pro_bar.py` 早期版本将 `turnover_rate` 重命名为 `tor`,`volume_ratio` 重命名为 `vr`,
|
||||
导致:
|
||||
1. 代码与 Tushare 文档不一致,增加学习成本
|
||||
2. 数据库字段名与 API 字段名不一致,造成混淆
|
||||
3. 需要额外的数据迁移脚本修复历史数据
|
||||
|
||||
### 4.6 令牌桶限速要求
|
||||
|
||||
所有 API 调用必须通过 `TushareClient`,自动满足令牌桶限速要求。
|
||||
|
||||
#### 4.5.1 基本用法(单线程场景)
|
||||
#### 4.6.1 基本用法(单线程场景)
|
||||
|
||||
```python
|
||||
from src.data.client import TushareClient
|
||||
@@ -198,7 +244,7 @@ def get_{data_type}(...) -> pd.DataFrame:
|
||||
- API 重试逻辑(指数退避)
|
||||
- 配置加载
|
||||
|
||||
#### 4.5.2 多线程/并发场景(重要)
|
||||
#### 4.6.2 多线程/并发场景(重要)
|
||||
|
||||
**问题**: 多线程并发调用时,如果每个线程创建独立的 `TushareClient` 实例,每个实例会有独立的限流器,导致实际并发请求数 = 线程数 × 单个限流器速率,**限流失效**。
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
Fetch A-share stock market data with adjustment factors from Tushare.
|
||||
This interface provides backward-adjusted (后复权) daily market data
|
||||
including all available fields: base price data, turnover rate (tor),
|
||||
volume ratio (vr), and adjustment factors.
|
||||
including all available fields: base price data, turnover rate (turnover_rate),
|
||||
volume ratio (volume_ratio), and adjustment factors.
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
@@ -61,8 +61,8 @@ def get_pro_bar(
|
||||
- pct_chg: Price change percentage
|
||||
- vol: Trading volume (lots)
|
||||
- amount: Trading amount (thousand CNY)
|
||||
- tor: Turnover rate (if factors includes 'tor')
|
||||
- vr: Volume ratio (if factors includes 'vr')
|
||||
- turnover_rate: Turnover rate (if factors includes 'tor')
|
||||
- volume_ratio: Volume ratio (if factors includes 'vr')
|
||||
- adj_factor: Adjustment factor (if adjfactor=True)
|
||||
- ma_X: Moving average price for period X (if ma specified)
|
||||
- ma_v_X: Moving average volume for period X (if ma specified)
|
||||
@@ -123,14 +123,6 @@ def get_pro_bar(
|
||||
if "date" in data.columns:
|
||||
data = data.rename(columns={"date": "trade_date"})
|
||||
|
||||
# Rename columns to match database schema
|
||||
# Tushare API uses 'turnover_rate' and 'volume_ratio', but our DB uses 'tor' and 'vr'
|
||||
column_mapping = {
|
||||
"turnover_rate": "tor",
|
||||
"volume_ratio": "vr",
|
||||
}
|
||||
data = data.rename(columns=column_mapping)
|
||||
|
||||
return data
|
||||
|
||||
|
||||
@@ -138,7 +130,7 @@ class ProBarSync(StockBasedSync):
|
||||
"""Pro Bar 数据批量同步管理器,支持全量/增量同步。
|
||||
|
||||
继承自 StockBasedSync,使用多线程按股票并发获取数据。
|
||||
默认获取全部数据列(tor, vr, adj_factor)。
|
||||
默认获取全部数据列(turnover_rate, volume_ratio, adj_factor)。
|
||||
|
||||
Example:
|
||||
>>> sync = ProBarSync()
|
||||
@@ -162,8 +154,8 @@ class ProBarSync(StockBasedSync):
|
||||
"pct_chg": "DOUBLE",
|
||||
"vol": "DOUBLE",
|
||||
"amount": "DOUBLE",
|
||||
"tor": "DOUBLE",
|
||||
"vr": "DOUBLE",
|
||||
"turnover_rate": "DOUBLE",
|
||||
"volume_ratio": "DOUBLE",
|
||||
"adj_factor": "DOUBLE",
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user