diff --git a/app.py b/app.py index 061515a5..7511a7d3 100755 --- a/app.py +++ b/app.py @@ -6277,36 +6277,48 @@ def get_watchlist_mini_charts(): 'change_pct': float(change_pct) if change_pct else 0 }) - # ========== 2. 批量查询最近20天日K线数据 ========== - kline_start = today - timedelta(days=40) # 多查一些天,确保有20个交易日 + # ========== 2. 批量查询最近20天日K线数据(从 MySQL ea_trade 表)========== + # 提取纯6位代码用于 MySQL 查询 + pure_codes = [code.split('.')[0] for code in full_codes] - kline_query = """ - SELECT - code, date, open, high, low, close - FROM stock_daily - WHERE code IN %(codes)s - AND date >= %(start)s - ORDER BY code, date DESC - """ - - kline_result = client.execute(kline_query, { - 'codes': full_codes, - 'start': kline_start - }) - - # 按股票代码分组日K数据(最近20根) kline_map = {} - for row in kline_result: - code, date, open_p, high, low, close = row - if code not in kline_map: - kline_map[code] = [] - if len(kline_map[code]) < 20: - kline_map[code].append({ - 'open': float(open_p) if open_p else 0, - 'high': float(high) if high else 0, - 'low': float(low) if low else 0, - 'close': float(close) if close else 0 - }) + with engine.connect() as conn: + kline_query = text(""" + SELECT + SECCODE, + TRADEDATE, + F003N as open_price, + F005N as high, + F006N as low, + F007N as close + FROM ea_trade + WHERE SECCODE IN :codes + ORDER BY SECCODE, TRADEDATE DESC + """) + + kline_result = conn.execute(kline_query, {'codes': tuple(pure_codes)}).fetchall() + + # 按股票代码分组日K数据(最近20根) + for row in kline_result: + row_dict = row._mapping + code6 = row_dict['SECCODE'] + # 转换为带后缀的代码 + if code6.startswith('6'): + full_code = f"{code6}.SH" + elif code6.startswith(('8', '9', '4')): + full_code = f"{code6}.BJ" + else: + full_code = f"{code6}.SZ" + + if full_code not in kline_map: + kline_map[full_code] = [] + if len(kline_map[full_code]) < 20: + kline_map[full_code].append({ + 'open': float(row_dict['open_price']) if row_dict['open_price'] else 0, + 'high': float(row_dict['high']) if row_dict['high'] else 0, + 'low': float(row_dict['low']) if row_dict['low'] else 0, + 'close': float(row_dict['close']) if row_dict['close'] else 0 + }) # 反转日K数据,使其按时间正序 for code in kline_map: