Files
MoFin/deploy/profile-scripts/refresh_macro_context.py
T
知微 80d59c9331 feat: 统一部署目录——所有运行时文件归入MoFin repo
- deploy/bot/ — XMPP bot核心(xmpp_agent_core + xmpp_zhiwei_bot)
- deploy/profile-scripts/ — cron脚本(price_monitor等)
- 运行时文件已替换为指向MoFin的符号链接
- 改代码只需改MoFin,系统自动生效
2026-07-17 23:12:35 +08:00

77 lines
2.4 KiB
Python

#!/usr/bin/env python3
"""refresh_macro_context.py — 刷新macro_context_log
读取最新market_snapshots + 腾讯实时指数, 写入macro_context_log
让load_macro_context()拿到最新市场偏向, 而不是12天前的数据
每30分钟跑一次(交易日)
"""
import json, sqlite3, sys
from pathlib import Path
from datetime import datetime
from mo_data import get_price
DB = Path("/home/hmo/MoFin/data/mofin.db")
def fetch_index(code, name):
"""从统一入口获取指数行情"""
try:
price, change_pct = get_price(code)
if price is not None:
return {
"price": price,
"change_pct": round(change_pct or 0, 2),
"high": price,
"low": price,
}
return None
except:
return None
def main():
# 采集各指数
indices = {
"上证指数": fetch_index("sh000001", "上证指数"),
"深证成指": fetch_index("sz399001", "深证成指"),
"创业板指": fetch_index("sz399006", "创业板指"),
"恒生指数": fetch_index("szHSI", "恒生指数"),
"国企指数": fetch_index("szHSCEI", "国企指数"),
}
indices = {k: v for k, v in indices.items() if v}
# 计算偏向
sh = indices.get("上证指数", {})
sh_change = sh.get("change_pct", 0) if sh else 0
if sh_change < -1.5:
overall = "bearish"
desc = "大盘偏弱"
elif sh_change > 1.0:
overall = "bullish"
desc = "大盘偏强"
else:
overall = "neutral"
desc = "大盘震荡"
structure = json.dumps({"overall": overall, "description": desc}, ensure_ascii=False)
indices_json = json.dumps(indices, ensure_ascii=False)
# 写入macro_context_log
now = datetime.now()
session = "midday" if now.hour >= 12 else "morning"
ts = now.strftime("%Y-%m-%d %H:%M:%S")
try:
conn = sqlite3.connect(str(DB))
conn.execute("""
INSERT INTO macro_context_log
(data_timestamp, session, has_valid_data, indices, structure, created_at)
VALUES (?, ?, 1, ?, ?, ?)
""", (ts, session, indices_json, structure, ts))
conn.commit()
conn.close()
print(f"[SILENT] macro_context updated: {overall} {desc} {len(indices)} indices")
except Exception as e:
print(f"[SILENT] macro_context write failed: {e}")
if __name__ == "__main__":
main()