更新ios
This commit is contained in:
68
app.py
68
app.py
@@ -6277,36 +6277,48 @@ def get_watchlist_mini_charts():
|
|||||||
'change_pct': float(change_pct) if change_pct else 0
|
'change_pct': float(change_pct) if change_pct else 0
|
||||||
})
|
})
|
||||||
|
|
||||||
# ========== 2. 批量查询最近20天日K线数据 ==========
|
# ========== 2. 批量查询最近20天日K线数据(从 MySQL ea_trade 表)==========
|
||||||
kline_start = today - timedelta(days=40) # 多查一些天,确保有20个交易日
|
# 提取纯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 = {}
|
kline_map = {}
|
||||||
for row in kline_result:
|
with engine.connect() as conn:
|
||||||
code, date, open_p, high, low, close = row
|
kline_query = text("""
|
||||||
if code not in kline_map:
|
SELECT
|
||||||
kline_map[code] = []
|
SECCODE,
|
||||||
if len(kline_map[code]) < 20:
|
TRADEDATE,
|
||||||
kline_map[code].append({
|
F003N as open_price,
|
||||||
'open': float(open_p) if open_p else 0,
|
F005N as high,
|
||||||
'high': float(high) if high else 0,
|
F006N as low,
|
||||||
'low': float(low) if low else 0,
|
F007N as close
|
||||||
'close': float(close) if close else 0
|
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数据,使其按时间正序
|
# 反转日K数据,使其按时间正序
|
||||||
for code in kline_map:
|
for code in kline_map:
|
||||||
|
|||||||
Reference in New Issue
Block a user