fix: 4个脚本连环bug(import缺失+解包不匹配+dict/list混用)
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user