FinBuddy 修复通达信K线增量更新
· FinBuddy
今日进展
- 修复通达信连接时 K 线无增量更新的问题:连接时先调用 refresh_kline 刷新缓存再读取数据
- TDX 获取的 K 线数据同步保存到本地数据库,下次离线也能查看
- 修复 TdxDataSource.fetch_daily_kline 中 open 字段错误读取 close_df 的 bug
关键代码/伪代码
K 线增量更新流程
# 修复前: 直接读取本地数据库,TDX 连接后数据不刷新
# 问题:用户连上通达信后,K 线还是旧的,看不到最新数据
# 修复后: 连接时先刷新缓存,再读取时就能拿到最新数据
CLASS TdxDataSource:
"""通达信数据源 — 直连本地 TDX 客户端"""
ASYNC DEF connect(self):
# 连接本地通达信客户端
self.client = TdxClient()
self.client.connect()
# 新增: 连接后立即刷新自选股 K 线缓存
# 这样用户连上 TDX 后马上能看到最新行情
AWAIT self.refresh_kline()
ASYNC DEF refresh_kline(self):
# 遍历自选股列表,逐个从 TDX 拉取最新 K 线
FOR stock_code IN self.watchlist:
# 从 TDX 服务器拉取最新 K 线数据
kline_data = self.client.get_kline(stock_code)
# 同步保存到本地数据库(离线也能查看)
AWAIT self.db.save_kline(stock_code, kline_data)
ASYNC DEF fetch_daily_kline(self, stock_code, start, end):
# 获取日线 K 线:开/高/低/收/量
# 修复: open 字段错误读取 close_df
# 修复前: open_series = close_df['open'] # BUG!
# 原因:open 和 close 的 DataFrame 结构相同,
# 数据也相近,肉眼很难发现差异
# 修复后:
open_series = open_df['open'] # 从 open_df 读取开盘价
close_series = close_df['close'] # 从 close_df 读取收盘价
RETURN KlineResult(open=open_series, close=close_series)
遇到的问题
- open 字段读取 close_df 的 bug 很隐蔽:因为 open 和 close 的 DataFrame 结构相同,数据也相近,肉眼很难发现差异,只有对比具体数值才能看出
- TDX 连接后缓存刷新需要遍历自选股列表,股票多时耗时较长,需要加进度提示
明日计划
- 优化 TDX 缓存刷新性能:增量更新而非全量拉取
- FinBuddy_Web 端 FinBuddy 路由更新