Files
2026-04-29 20:15:43 +08:00

120 lines
3.7 KiB
Python
Executable File

#!/usr/bin/env python3
"""
诊断exchange提取问题:检查数据库中510300.SSE的数据
"""
import sys
import types
# 兼容性模块
print("🔧 [DIAG] 加载vnpy.app兼容性模块...")
vnpy_app_module = types.ModuleType('vnpy.app')
sys.modules['vnpy.app'] = vnpy_app_module
submodules = ['cta_strategy', 'cta_backtester', 'data_manager']
for name in submodules:
full_name = f'vnpy.app.{name}'
submodule = types.ModuleType(full_name)
sys.modules[full_name] = submodule
setattr(vnpy_app_module, name, submodule)
from vnpy_ctastrategy import CtaTemplate, CtaStrategyApp
from vnpy_ctastrategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)
from vnpy.trader.constant import Direction, Offset, Interval, Exchange
sys.modules['vnpy.app.cta_strategy'].CtaTemplate = CtaTemplate
sys.modules['vnpy.app.cta_strategy'].CtaStrategyApp = CtaStrategyApp
vnpy_app_module.CtaTemplate = CtaTemplate
vnpy_app_module.CtaStrategyApp = CtaStrategyApp
from vnpy_ctabacktester import BacktesterEngine
sys.modules['vnpy.app.cta_backtester'].BacktesterEngine = BacktesterEngine
vnpy_app_module.BacktesterEngine = BacktesterEngine
print("✅ [DIAG] vnpy.app兼容性模块加载完成!")
from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.database import get_database
from datetime import datetime
import traceback
def parse_date(date_val):
"""解析日期"""
date_ts = float(date_val)
date_int = int(date_ts)
s = str(date_int)
if len(s) == 8:
year = int(s[:4])
month = int(s[4:6])
day = int(s[6:8])
return datetime(year, month, day)
elif len(s) >= 10:
return datetime.fromtimestamp(date_int)
else:
year = int(s[:4])
month = int(s[4:6])
day = int(s[6:8])
return datetime(year, month, day)
if __name__ == '__main__':
print("\n=== 诊断exchange数据加载问题 ===")
# 测试日期解析
start_ts = 1609459200
end_ts = 1772515200
start_dt = parse_date(start_ts)
end_dt = parse_date(end_ts)
print(f"\n📅 时间范围:")
print(f" start: {start_ts} -> {start_dt}")
print(f" end: {end_ts} -> {end_dt}")
# 连接数据库
db = get_database()
print(f"\n💾 数据库连接成功: {type(db)}")
# 查看所有表
print(f"\n🔍 查看数据库中的bar数据统计:")
# 尝试不同的symbol和exchange组合
test_cases = [
("510300", "SSE"),
("510300.SSE", "SSE"),
("510300", "XSHG"),
("510300.SSE", "XSHG"),
]
for symbol_str, exchange_str in test_cases:
try:
exchange = Exchange(exchange_str)
print(f"\n▶️ 测试: symbol={symbol_str}, exchange={exchange}")
bars = db.load_bar_data(symbol_str, exchange, Interval.DAILY, start_dt, end_dt)
print(f" ✅ 查询成功,共 {len(bars)} 条bar数据")
if len(bars) > 0:
print(f" 第一条: {bars[0].datetime}, close={bars[0].close_price}")
print(f" 最后一条: {bars[-1].datetime}, close={bars[-1].close_price}")
except Exception as e:
print(f" ❌ 查询失败: {e}")
# 尝试获取所有标的信息
print(f"\n🔍 尝试获取所有bar数据统计:")
try:
# vnpy_sqlite 应该有 count_bar_data 方法
if hasattr(db, 'count_bar_data'):
total = db.count_bar_data()
print(f" 数据库总共有 {total} 条bar数据")
except Exception as e:
print(f" 无法获取总数: {e}")
print("\n=== 诊断完成 ===")