66962ae190
修复清单: - cron delivery修正:10个job从deliver=origin/all改为local,消除推送错误 - refresh_mtf_cache.py:替换strategy_lifecycle.PORTFOLIO_PATH导入为mofin_db直接读DB - clean_watchlist.py:修复mo_data导入名错误和JSON硬编码路径 - MoFin/scripts/与profile scripts互相补全,双向sync到一致 - price_monitor.py:现金源从portfolio_summary表改为cash_log(Dad确认的现金权威) - 更新watchlist.json加入000850华茂股份
75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
|
"""xiaoguo_sentiment_bridge.py — 小果情感分析数据 → 策略引擎桥接
|
|
|
|
小果情感分析 cron (3da7ad4ff3a6) 每日16:00运行,输出到指定格式。
|
|
本脚本读取小果的输出,格式化为 strategy_lifecycle 可读取的格式,
|
|
写入 /home/hmo/web-dashboard/data/xiaoguo_sentiment.json
|
|
|
|
格式:
|
|
{
|
|
"updated_at": "2026-06-18T16:00:00",
|
|
"stocks": {
|
|
"00700": {
|
|
"name": "腾讯控股",
|
|
"sentiment": "positive" | "negative" | "neutral",
|
|
"confidence": 0.85,
|
|
"keywords": ["游戏", "增长"],
|
|
"summary": "腾讯游戏业务Q2增长超预期",
|
|
"source": "xiaoguo"
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import sys
|
|
from datetime import datetime
|
|
|
|
OUTPUT_PATH = "/home/hmo/web-dashboard/data/xiaoguo_sentiment.json"
|
|
XIAOGUO_INSIGHTS_PATH = "/home/hmo/web-dashboard/data/xiaoguo_insights.json"
|
|
|
|
|
|
def load_xiaoguo_output():
|
|
"""读取小果情感分析的最新输出"""
|
|
try:
|
|
if os.path.exists(XIAOGUO_INSIGHTS_PATH):
|
|
with open(XIAOGUO_INSIGHTS_PATH) as f:
|
|
data = json.load(f)
|
|
return data
|
|
except Exception:
|
|
pass
|
|
return None
|
|
|
|
|
|
def main():
|
|
data = load_xiaoguo_output()
|
|
if data is None:
|
|
data = {"updated_at": datetime.now().isoformat(), "stocks": {}}
|
|
else:
|
|
# 转换为 {code: {sentiment, confidence, keywords, summary}} 格式
|
|
formatted = {"updated_at": datetime.now().isoformat(), "stocks": {}}
|
|
for item in data.get("analyses", []):
|
|
code = item.get("code", "")
|
|
if code:
|
|
formatted["stocks"][code] = {
|
|
"name": item.get("name", ""),
|
|
"sentiment": item.get("sentiment", "neutral"),
|
|
"confidence": item.get("confidence", 0),
|
|
"keywords": item.get("keywords", []),
|
|
"summary": item.get("brief", ""),
|
|
"source": "xiaoguo",
|
|
}
|
|
data = formatted
|
|
|
|
os.makedirs(os.path.dirname(OUTPUT_PATH), exist_ok=True)
|
|
with open(OUTPUT_PATH, "w") as f:
|
|
json.dump(data, f, ensure_ascii=False, indent=2)
|
|
|
|
stock_count = len(data.get("stocks", {}))
|
|
print(f"[xiaoguo_bridge] {stock_count} stocks synced", file=sys.stderr)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|