fix: 4个脚本连环bug(import缺失+解包不匹配+dict/list混用)

This commit is contained in:
知微
2026-07-08 19:50:44 +08:00
parent 84a147b6f2
commit db5ce2b305
3 changed files with 62 additions and 28 deletions
+59 -25
View File
@@ -141,33 +141,67 @@ def safe_float(v):
def parse_stock_data(code, fields, is_hk=False):
"""从腾讯 API 字段解析为结构化数据"""
data = {
"code": code,
"name": fields[1] if len(fields) > 1 else code,
"price": safe_float(fields[3]),
"prev_close": safe_float(fields[4]),
"open": safe_float(fields[5]) if not is_hk else None,
"change_pct": safe_float(fields[32]),
"high": safe_float(fields[33]),
"low": safe_float(fields[34]),
"volume": safe_float(fields[6]), # 股数
}
# fields可能是dict(已解析)或list(原始split)
if isinstance(fields, dict):
data = {
"code": code,
"name": fields.get("name", code),
"price": safe_float(fields.get("price", 0)),
"prev_close": safe_float(fields.get("prev_close", 0)),
"open": safe_float(fields.get("open", 0)) if not is_hk else None,
"change_pct": safe_float(fields.get("change_pct", 0)),
"high": safe_float(fields.get("high", 0)),
"low": safe_float(fields.get("low", 0)),
"volume": safe_float(fields.get("volume", 0)),
}
else:
data = {
"code": code,
"name": fields[1] if len(fields) > 1 else code,
"price": safe_float(fields[3]),
"prev_close": safe_float(fields[4]),
"open": safe_float(fields[5]) if not is_hk else None,
"change_pct": safe_float(fields[32]),
"high": safe_float(fields[33]),
"low": safe_float(fields[34]),
"volume": safe_float(fields[6]),
}
# A股特有字段 (index 35+)
if not is_hk and len(fields) > 46:
data["turnover_rate"] = safe_float(fields[38]) # 换手率%
data["pe"] = safe_float(fields[47]) # 市盈率(动)
data["total_market_cap"] = safe_float(fields[44]) # 总市值(亿)
data["circulating_market_cap"] = safe_float(fields[45]) # 流通市值(亿)
data["high_52w"] = safe_float(fields[48]) # 52周高
data["low_52w"] = safe_float(fields[49]) # 52周低
data["amplitude"] = safe_float(fields[43]) # 振幅%
if not is_hk:
if isinstance(fields, dict):
data["turnover_rate"] = safe_float(fields.get("turnover_rate", 0))
data["amplitude"] = safe_float(fields.get("amplitude", 0))
data["pe"] = safe_float(fields.get("pe", 0))
data["market_cap"] = safe_float(fields.get("market_cap", 0))
else:
data["turnover_rate"] = safe_float(fields[38]) if len(fields) > 38 else 0
data["amplitude"] = safe_float(fields[39]) if len(fields) > 39 else 0
data["pe"] = safe_float(fields[39]) if len(fields) > 39 else 0
data["market_cap"] = safe_float(fields[45]) if len(fields) > 45 else 0
# 港股特有
if is_hk:
data["market"] = "HK"
if isinstance(fields, dict):
data["high_52w"] = safe_float(fields.get("high_52w", 0))
data["low_52w"] = safe_float(fields.get("low_52w", 0))
data["amplitude"] = safe_float(fields.get("amplitude", 0))
else:
data["high_52w"] = safe_float(fields[48]) if len(fields) > 48 else 0
data["low_52w"] = safe_float(fields[49]) if len(fields) > 49 else 0
data["amplitude"] = safe_float(fields[43]) if len(fields) > 43 else 0
# 港股特有字段
if is_hk and len(fields) > 70:
# 港股 PE 在 [71] 左右
data["pe"] = safe_float(fields[71])
data["total_market_cap"] = safe_float(fields[69])
data["high_52w"] = safe_float(fields[48])
data["low_52w"] = safe_float(fields[49])
if is_hk:
if isinstance(fields, dict):
data["pe"] = safe_float(fields.get("pe", 0))
data["total_market_cap"] = safe_float(fields.get("total_market_cap", 0))
data["high_52w"] = safe_float(fields.get("high_52w", 0))
data["low_52w"] = safe_float(fields.get("low_52w", 0))
else:
if len(fields) > 70:
data["pe"] = safe_float(fields[71])
data["total_market_cap"] = safe_float(fields[69])
data["high_52w"] = safe_float(fields[48])
data["low_52w"] = safe_float(fields[49])
return data
+1 -1
View File
@@ -60,7 +60,7 @@ def main():
print(f"holding_strategies: 归档{archived}条过期记录 | 剩余活跃{remaining}")
# 2. 检查缺失策略的持仓
decisions = mo_data.read_decisions()
decisions = read_decisions()
decisions_list = decisions.get("decisions", [])
missing = check_missing_strategies(conn, decisions_list)
if missing:
+2 -2
View File
@@ -67,7 +67,7 @@ def evaluate_strategy(s, price):
s_type = s.get("type", "") # 持仓策略/自选策略
if not created or not price:
return "skip", "skip", "skip", "数据不足"
return "skip", "skip", "skip", "数据不足", ""
# 计算运行天数
try:
@@ -198,7 +198,7 @@ def evaluate_strategy(s, price):
def review():
start = time.time()
decisions = mo_data.read_decisions()
decisions = read_decisions()
strategies = decisions.get("decisions", [])
conn = sqlite3.connect(str(DB_PATH))