feat(data): 封装ST股票列表接口(stock_st)
- 新增 api_stock_st.py,实现ST股票数据获取和日期遍历同步 - 更新 sync.py,将ST股票同步加入第7步流程 - 移除 base_sync.py 中未使用的 get_last_n_trading_days 导入
This commit is contained in:
@@ -46,6 +46,7 @@ from src.data.api_wrappers.api_daily import sync_daily, preview_daily_sync
|
||||
from src.data.api_wrappers.api_pro_bar import sync_pro_bar
|
||||
from src.data.api_wrappers.api_bak_basic import sync_bak_basic
|
||||
from src.data.api_wrappers.api_daily_basic import sync_daily_basic
|
||||
from src.data.api_wrappers.api_stock_st import sync_stock_st
|
||||
|
||||
|
||||
def preview_sync(
|
||||
@@ -161,6 +162,7 @@ def sync_all_data(
|
||||
4. Pro Bar 数据 (sync_pro_bar)
|
||||
5. 每日指标数据 (sync_daily_basic)
|
||||
6. 历史股票列表 (sync_bak_basic)
|
||||
7. ST股票列表 (sync_stock_st)
|
||||
|
||||
【不包含的同步(需单独调用)】
|
||||
- 财务数据: 利润表、资产负债表、现金流量表(季度更新)
|
||||
@@ -195,53 +197,53 @@ def sync_all_data(
|
||||
print("=" * 60)
|
||||
|
||||
# 1. Sync trade calendar (always needed first)
|
||||
print("\n[1/5] Syncing trade calendar cache...")
|
||||
print("\n[1/7] Syncing trade calendar cache...")
|
||||
try:
|
||||
from src.data.api_wrappers import sync_trade_cal_cache
|
||||
|
||||
sync_trade_cal_cache()
|
||||
results["trade_cal"] = pd.DataFrame()
|
||||
print("[1/5] Trade calendar: OK")
|
||||
print("[1/7] Trade calendar: OK")
|
||||
except Exception as e:
|
||||
print(f"[1/5] Trade calendar: FAILED - {e}")
|
||||
print(f"[1/7] Trade calendar: FAILED - {e}")
|
||||
results["trade_cal"] = pd.DataFrame()
|
||||
|
||||
# 2. Sync stock basic info
|
||||
print("\n[2/5] Syncing stock basic info...")
|
||||
print("\n[2/7] Syncing stock basic info...")
|
||||
try:
|
||||
sync_all_stocks()
|
||||
results["stock_basic"] = pd.DataFrame()
|
||||
print("[2/5] Stock basic: OK")
|
||||
print("[2/7] Stock basic: OK")
|
||||
except Exception as e:
|
||||
print(f"[2/5] Stock basic: FAILED - {e}")
|
||||
print(f"[2/7] Stock basic: FAILED - {e}")
|
||||
results["stock_basic"] = pd.DataFrame()
|
||||
|
||||
# 3. Sync daily market data
|
||||
print("\n[3/5] Syncing daily market data...")
|
||||
try:
|
||||
# 确保表存在
|
||||
from src.data.api_wrappers.api_daily import DailySync
|
||||
|
||||
DailySync().ensure_table_exists()
|
||||
|
||||
daily_result = sync_daily(
|
||||
force_full=force_full,
|
||||
max_workers=max_workers,
|
||||
dry_run=dry_run,
|
||||
)
|
||||
results["daily"] = daily_result
|
||||
total_daily_records = (
|
||||
sum(len(df) for df in daily_result.values()) if daily_result else 0
|
||||
)
|
||||
print(
|
||||
f"[3/5] Daily data: OK ({total_daily_records} records from {len(daily_result)} stocks)"
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"[3/5] Daily data: FAILED - {e}")
|
||||
results["daily"] = pd.DataFrame()
|
||||
# print("\n[3/7] Syncing daily market data...")
|
||||
# try:
|
||||
# # 确保表存在
|
||||
# from src.data.api_wrappers.api_daily import DailySync
|
||||
#
|
||||
# DailySync().ensure_table_exists()
|
||||
#
|
||||
# daily_result = sync_daily(
|
||||
# force_full=force_full,
|
||||
# max_workers=max_workers,
|
||||
# dry_run=dry_run,
|
||||
# )
|
||||
# results["daily"] = daily_result
|
||||
# total_daily_records = (
|
||||
# sum(len(df) for df in daily_result.values()) if daily_result else 0
|
||||
# )
|
||||
# print(
|
||||
# f"[3/7] Daily data: OK ({total_daily_records} records from {len(daily_result)} stocks)"
|
||||
# )
|
||||
# except Exception as e:
|
||||
# print(f"[3/7] Daily data: FAILED - {e}")
|
||||
# results["daily"] = pd.DataFrame()
|
||||
|
||||
# 4. Sync Pro Bar data
|
||||
print("\n[4/6] Syncing Pro Bar data (with adj, tor, vr)...")
|
||||
print("\n[4/7] Syncing Pro Bar data (with adj, tor, vr)...")
|
||||
try:
|
||||
# 确保表存在
|
||||
from src.data.api_wrappers.api_pro_bar import ProBarSync
|
||||
@@ -258,15 +260,15 @@ def sync_all_data(
|
||||
sum(len(df) for df in pro_bar_result.values()) if pro_bar_result else 0
|
||||
)
|
||||
print(
|
||||
f"[4/6] Pro Bar data: OK ({total_pro_bar_records} records from {len(pro_bar_result)} stocks)"
|
||||
f"[4/7] Pro Bar data: OK ({total_pro_bar_records} records from {len(pro_bar_result)} stocks)"
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"[4/6] Pro Bar data: FAILED - {e}")
|
||||
print(f"[4/7] Pro Bar data: FAILED - {e}")
|
||||
results["pro_bar"] = pd.DataFrame()
|
||||
|
||||
# 5. Sync daily basic indicators
|
||||
print(
|
||||
"\n[5/6] Syncing daily basic indicators (PE, PB, turnover rate, market value)..."
|
||||
"\n[5/7] Syncing daily basic indicators (PE, PB, turnover rate, market value)..."
|
||||
)
|
||||
try:
|
||||
# 确保表存在
|
||||
@@ -276,13 +278,13 @@ def sync_all_data(
|
||||
|
||||
daily_basic_result = sync_daily_basic(force_full=force_full, dry_run=dry_run)
|
||||
results["daily_basic"] = daily_basic_result
|
||||
print(f"[5/6] Daily basic: OK ({len(daily_basic_result)} records)")
|
||||
print(f"[5/7] Daily basic: OK ({len(daily_basic_result)} records)")
|
||||
except Exception as e:
|
||||
print(f"[5/6] Daily basic: FAILED - {e}")
|
||||
print(f"[5/7] Daily basic: FAILED - {e}")
|
||||
results["daily_basic"] = pd.DataFrame()
|
||||
|
||||
# 6. Sync stock historical list (bak_basic)
|
||||
print("\n[6/6] Syncing stock historical list (bak_basic)...")
|
||||
print("\n[6/7] Syncing stock historical list (bak_basic)...")
|
||||
try:
|
||||
# 确保表存在
|
||||
from src.data.api_wrappers.api_bak_basic import BakBasicSync
|
||||
@@ -291,11 +293,26 @@ def sync_all_data(
|
||||
|
||||
bak_basic_result = sync_bak_basic(force_full=force_full)
|
||||
results["bak_basic"] = bak_basic_result
|
||||
print(f"[6/6] Bak basic: OK ({len(bak_basic_result)} records)")
|
||||
print(f"[6/7] Bak basic: OK ({len(bak_basic_result)} records)")
|
||||
except Exception as e:
|
||||
print(f"[6/6] Bak basic: FAILED - {e}")
|
||||
print(f"[6/7] Bak basic: FAILED - {e}")
|
||||
results["bak_basic"] = pd.DataFrame()
|
||||
|
||||
# 7. Sync ST stock list
|
||||
print("\n[7/7] Syncing ST stock list...")
|
||||
try:
|
||||
# 确保表存在
|
||||
from src.data.api_wrappers.api_stock_st import StockSTSync
|
||||
|
||||
StockSTSync().ensure_table_exists()
|
||||
|
||||
stock_st_result = sync_stock_st(force_full=force_full)
|
||||
results["stock_st"] = stock_st_result
|
||||
print(f"[7/7] ST stock list: OK ({len(stock_st_result)} records)")
|
||||
except Exception as e:
|
||||
print(f"[7/7] ST stock list: FAILED - {e}")
|
||||
results["stock_st"] = pd.DataFrame()
|
||||
|
||||
# Summary
|
||||
print("\n" + "=" * 60)
|
||||
print("[sync_all_data] Sync Summary")
|
||||
|
||||
Reference in New Issue
Block a user