feat(messenger): 全部77个活跃cron脚本接入统一消息通道(install_stdio_hook)
This commit is contained in:
@@ -18,6 +18,13 @@ from pathlib import Path
|
||||
from datetime import datetime, timedelta
|
||||
from collections import defaultdict
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB_PATH = Path("/home/hmo/MoFin/data/mofin.db")
|
||||
UA = "Mozilla/5.0"
|
||||
|
||||
|
||||
@@ -13,6 +13,13 @@ v1 动作:XMPP 告警 + 日志(不自动 kill——kill 需要 hermes 会话
|
||||
import json, os, sqlite3, glob
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
STATE_FILE = "/home/hmo/MoFin/gateway/logs/spiral_watchdog_state.json"
|
||||
# 2026-08-19 僵尸会话检测:记录每 session 上次 msg 数,停滞不增长 = 僵尸(非螺旋)
|
||||
ZOMBIE_GROWTH = 0.001 # 若本轮 msgs 相对上次增长 < 0.1%(停滞)→ 僵尸跳过
|
||||
|
||||
@@ -18,6 +18,13 @@ import sqlite3, os, sys
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
|
||||
DB = "/home/hmo/MoFin/data/mofin.db"
|
||||
|
||||
@@ -10,6 +10,13 @@
|
||||
import sys, sqlite3
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.path.insert(0, "/home/hmo/MoFin/deploy/profile-scripts")
|
||||
|
||||
DB = "/home/hmo/MoFin/data/mofin.db"
|
||||
|
||||
@@ -13,6 +13,13 @@ import sys, json, urllib.request, sqlite3, re, time
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB_PATH = Path("/home/hmo/MoFin/data/mofin.db")
|
||||
UA = "Mozilla/5.0"
|
||||
|
||||
|
||||
@@ -13,6 +13,13 @@ from concurrent.futures import ThreadPoolExecutor, as_completed
|
||||
from threading import Semaphore
|
||||
from mofin_db import get_conn, write_capital_flow_cache
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DATA_DIR = "/home/hmo/web-dashboard/data"
|
||||
CACHE_PATH = f"{DATA_DIR}/capital_flow_cache.json"
|
||||
|
||||
|
||||
@@ -13,6 +13,13 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
from mo_data import read_portfolio, read_decisions, read_watchlist
|
||||
from mofin_db import get_conn, write_watchlist_stock, write_holding_strategy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def main():
|
||||
holding_codes = set()
|
||||
|
||||
@@ -8,6 +8,13 @@ import sys
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
script_dir = Path(__file__).parent.resolve()
|
||||
target = script_dir / "generate_report.py"
|
||||
|
||||
|
||||
@@ -23,6 +23,13 @@ import re
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DATA_DIR = Path(__file__).parent.parent / "data"
|
||||
PROFILES_PATH = DATA_DIR / "stock_profiles.json"
|
||||
OUTPUT_PATH = DATA_DIR / "evaluation_input.json"
|
||||
|
||||
@@ -15,6 +15,13 @@ import sys
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# 使用绝对路径,不受 profile 环境变量影响
|
||||
REAL_HOME = Path("/home/hmo")
|
||||
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
"""daily_kline_hk.py — 港股通日K采集(包装入口,2026-08-14 港股接入)"""
|
||||
import sys, runpy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.argv = ["daily_kline_collector.py", "hk"]
|
||||
runpy.run_path("/home/hmo/.hermes/profiles/position-analyst/scripts/daily_kline_collector.py", run_name="__main__")
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
"""daily_kline_sh.py — 全市场日K采集(上海,包装入口)"""
|
||||
import sys, runpy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.argv = ["daily_kline_collector.py", "--prefix", "sh"]
|
||||
runpy.run_path("/home/hmo/.hermes/profiles/position-analyst/scripts/daily_kline_collector.py", run_name="__main__")
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
"""daily_kline_sz_a.py — 全市场日K采集(深圳前半批(0开头),包装入口)"""
|
||||
import sys, runpy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.argv = ["daily_kline_collector.py", "--prefix", "sz_a"]
|
||||
runpy.run_path("/home/hmo/.hermes/profiles/position-analyst/scripts/daily_kline_collector.py", run_name="__main__")
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
"""daily_kline_sz_b.py — 全市场日K采集(深圳后半批(3开头),包装入口)"""
|
||||
import sys, runpy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.argv = ["daily_kline_collector.py", "--prefix", "sz_b"]
|
||||
runpy.run_path("/home/hmo/.hermes/profiles/position-analyst/scripts/daily_kline_collector.py", run_name="__main__")
|
||||
|
||||
@@ -11,6 +11,13 @@ from pathlib import Path
|
||||
from datetime import datetime
|
||||
from mo_data import read_portfolio, read_decisions, read_watchlist
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
BASE = Path("/home/hmo/MoFin")
|
||||
DATA = BASE / "data"
|
||||
DB_PATH = DATA / "mofin.db"
|
||||
|
||||
@@ -12,6 +12,13 @@
|
||||
import sqlite3, os, glob
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
SRC = "/home/hmo/MoFin/data/mofin.db"
|
||||
DST_DIR = "/home/hmo/MoFin/data/backups"
|
||||
KEEP = 14
|
||||
|
||||
@@ -17,6 +17,13 @@
|
||||
import json, os, subprocess, sys, glob
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
REPO = "/home/hmo/MoFin"
|
||||
CANONICAL = f"{REPO}/deploy/profile-scripts"
|
||||
PROFILE_DIRS = [
|
||||
|
||||
@@ -17,6 +17,13 @@ divergence_detector.py — 跨市场背离监测器(no_agent)
|
||||
import sys, json, re, datetime, os, requests
|
||||
from pathlib import Path
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
BASE = Path("/home/hmo/MoFin")
|
||||
DATA = BASE / "data"
|
||||
DB_PATH = DATA / "mofin.db"
|
||||
|
||||
@@ -22,6 +22,13 @@ from datetime import datetime, timedelta
|
||||
|
||||
sys.path.insert(0, "/home/hmo/MoFin")
|
||||
from backtest_framework import (calc_ma, calc_rsi, calc_macd, calc_atr,
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
calc_trend_strength, calc_obv, calc_roc)
|
||||
|
||||
DB_PATH = Path("/home/hmo/MoFin/data/mofin.db")
|
||||
|
||||
@@ -8,6 +8,13 @@ v3: 2026-08-10 修复自愈反噬死循环(8/3起gateway每5分钟被重启→
|
||||
import subprocess, sys, time, socket, json, urllib.request, os
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
GATEWAY_PORT = 8643
|
||||
BOT_PORT = 5805
|
||||
BOT_SCRIPT = "/home/hmo/xmpp_zhiwei_bot.py"
|
||||
|
||||
@@ -10,6 +10,13 @@
|
||||
import os, sys, json, sqlite3, subprocess
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
sys.path.insert(0, '/home/hmo/MoFin')
|
||||
|
||||
DB = '/home/hmo/MoFin/data/mofin.db'
|
||||
|
||||
@@ -16,6 +16,13 @@ import sys, os, re, time, sqlite3, fcntl, urllib.request
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB_PATH = Path("/home/hmo/MoFin/data/mofin.db")
|
||||
UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
|
||||
BATCH = 100 # 腾讯推荐上限 100/批
|
||||
|
||||
@@ -5,6 +5,13 @@ EPS(TTM) = 现价/PE。限速0.15s/只。
|
||||
"""
|
||||
import sqlite3, subprocess, time
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB = "/home/hmo/MoFin/data/mofin.db"
|
||||
|
||||
def prefix(code):
|
||||
|
||||
@@ -14,6 +14,13 @@ hardcode_scanner.py — 自成长扫描器
|
||||
"""
|
||||
import re, ast, json, os, sys
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
SCAN_DIRS = [
|
||||
"/home/hmo/.hermes/profiles/position-analyst/scripts",
|
||||
"/home/hmo/MoFin",
|
||||
|
||||
@@ -14,6 +14,13 @@ import sys, os, sqlite3, fcntl
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
sys.path.insert(0, "/home/hmo/MoFin")
|
||||
sys.path.insert(0, "/home/hmo/MoFin/evolution")
|
||||
sys.path.insert(0, "/home/hmo/MoFin/deploy/profile-scripts")
|
||||
|
||||
@@ -43,6 +43,13 @@ import urllib.request
|
||||
from datetime import date, datetime
|
||||
from pathlib import Path
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# ── 配置 ────────────────────────────────────────────────
|
||||
DB_PATH = Path("/home/hmo/MoFin/data/mofin.db") # 与同目录脚本一致(daily_kline_collector/market_data)
|
||||
API_HOST = "push2delay.eastmoney.com" # 延时镜像;push2 主 host 对 246 被封
|
||||
|
||||
@@ -15,6 +15,13 @@ import sys
|
||||
import time
|
||||
import urllib.request
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB_PATH = "/home/hmo/MoFin/data/mofin.db"
|
||||
UA = "Mozilla/5.0"
|
||||
SLEEP = 0.3
|
||||
|
||||
@@ -14,6 +14,13 @@ import sys
|
||||
import time
|
||||
import urllib.request
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB_PATH = "/home/hmo/MoFin/data/mofin.db"
|
||||
UA = "Mozilla/5.0"
|
||||
BATCH = 100
|
||||
|
||||
@@ -11,6 +11,13 @@ import sqlite3
|
||||
import sys
|
||||
import time
|
||||
import warnings
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
warnings.filterwarnings("ignore")
|
||||
|
||||
DB_PATH = "/home/hmo/MoFin/data/mofin.db"
|
||||
|
||||
@@ -19,6 +19,13 @@ from datetime import datetime
|
||||
|
||||
from hk_strategies import HK_STRATEGIES, strategies_for_regime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB_PATH = Path("/home/hmo/MoFin/data/mofin.db")
|
||||
PANEL = "/tmp/panel_12d_hk.pkl"
|
||||
TD_GUARD = 5 # trend_down 连续>5天暂停超卖(组合级防守)
|
||||
|
||||
@@ -11,6 +11,13 @@ import sqlite3
|
||||
import sys
|
||||
import time
|
||||
import warnings
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
warnings.filterwarnings("ignore")
|
||||
|
||||
DB_PATH = "/home/hmo/MoFin/data/mofin.db"
|
||||
|
||||
@@ -14,6 +14,13 @@ from mofin_db import get_conn
|
||||
sys.path.insert(0, "/home/hmo/MoFin")
|
||||
from mo_data import read_portfolio, read_decisions, read_watchlist
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
BASE = Path("/home/hmo/MoFin")
|
||||
DATA = BASE / "data"
|
||||
DB_PATH = DATA / "mofin.db"
|
||||
|
||||
@@ -10,6 +10,13 @@
|
||||
"""
|
||||
import json, os, sqlite3, time, urllib.request
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
KANBAN_DB = "/home/hmo/.hermes/kanban.db"
|
||||
STATE = "/home/hmo/MoFin/gateway/logs/kanban_bridge_state.json"
|
||||
XMPP_SEND = "http://127.0.0.1:5805/"
|
||||
|
||||
@@ -11,6 +11,13 @@
|
||||
import sqlite3, json, os, pandas as pd, numpy as np
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB = "/home/hmo/MoFin/data/mofin.db"
|
||||
LIVE_DIR = "/home/hmo/MoFin/data/live_data"
|
||||
os.makedirs(LIVE_DIR, exist_ok=True)
|
||||
|
||||
@@ -21,6 +21,13 @@ import sys, json, hashlib, os, re
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DATA_DIR = Path("/home/hmo/MoFin/data")
|
||||
DB_PATH = DATA_DIR / "mofin.db"
|
||||
STATE_PATH = DATA_DIR / "macro_risk_state.json"
|
||||
|
||||
@@ -15,6 +15,13 @@ import sqlite3, json, os, sys, time
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
BASE = Path("/home/hmo/MoFin")
|
||||
DATA = BASE / "data"
|
||||
DB_PATH = DATA / "mofin.db"
|
||||
|
||||
@@ -15,6 +15,13 @@ import sys
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DATA_DIR = Path(__file__).parent.parent / "data"
|
||||
|
||||
# ── 持仓股 → 行业映射(从 stock_profiles 自动提取) ──
|
||||
|
||||
@@ -35,6 +35,13 @@ import sqlite3
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# ── 路径注入:可被 deploy/profile-scripts 下脚本直接 import ──
|
||||
_SCRIPT_DIR = Path(__file__).resolve().parent
|
||||
_MOFIN_ROOT = _SCRIPT_DIR.parent.parent # deploy/profile-scripts → MoFin
|
||||
|
||||
@@ -19,6 +19,13 @@ from pathlib import Path
|
||||
from mofin_db import get_conn, init_all_tables, write_market_snapshot
|
||||
from messenger import send as messenger_send
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DATA_DIR = Path(__file__).parent.parent / "data"
|
||||
|
||||
|
||||
|
||||
@@ -13,6 +13,13 @@ import json, subprocess, urllib.request
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
HOME = Path.home()
|
||||
PROFILE = HOME / ".hermes" / "profiles" / "position-analyst"
|
||||
MEMORY_FILE = PROFILE / "MEMORY.md"
|
||||
|
||||
@@ -12,6 +12,13 @@ from pathlib import Path
|
||||
from datetime import datetime, timezone
|
||||
from mofin_db import get_conn
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DATA_DIR = Path("/home/hmo/MoFin/data")
|
||||
WEB_DATA = Path("/home/hmo/web-dashboard/data")
|
||||
STATIC_DIR = Path("/home/hmo/web-dashboard/static")
|
||||
|
||||
@@ -30,6 +30,13 @@ import json, os, sqlite3, subprocess, sys, time, urllib.request
|
||||
from pathlib import Path
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# ── 路径 ──
|
||||
BASE = Path("/home/hmo/MoFin")
|
||||
DATA = BASE / "data"
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
"""news_collector_full_b0.py — 全市场新闻采集(batch 0,包装入口)"""
|
||||
import sys, runpy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.argv = ["news_collector_full.py", "--batch", "0"]
|
||||
runpy.run_path("/home/hmo/.hermes/profiles/position-analyst/scripts/news_collector_full.py", run_name="__main__")
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
"""news_collector_full_b1.py — 全市场新闻采集(batch 1,包装入口)"""
|
||||
import sys, runpy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.argv = ["news_collector_full.py", "--batch", "1"]
|
||||
runpy.run_path("/home/hmo/.hermes/profiles/position-analyst/scripts/news_collector_full.py", run_name="__main__")
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
"""news_collector_full_b2.py — 全市场新闻采集(batch 2,包装入口)"""
|
||||
import sys, runpy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.argv = ["news_collector_full.py", "--batch", "2"]
|
||||
runpy.run_path("/home/hmo/.hermes/profiles/position-analyst/scripts/news_collector_full.py", run_name="__main__")
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
"""news_collector_full_b3.py — 全市场新闻采集(batch 3,包装入口)"""
|
||||
import sys, runpy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.argv = ["news_collector_full.py", "--batch", "3"]
|
||||
runpy.run_path("/home/hmo/.hermes/profiles/position-analyst/scripts/news_collector_full.py", run_name="__main__")
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
"""news_collector_full_b4.py — 全市场新闻采集(batch 4,包装入口)"""
|
||||
import sys, runpy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.argv = ["news_collector_full.py", "--batch", "4"]
|
||||
runpy.run_path("/home/hmo/.hermes/profiles/position-analyst/scripts/news_collector_full.py", run_name="__main__")
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
"""news_collector_full_b5.py — 全市场新闻采集(batch 5,包装入口)"""
|
||||
import sys, runpy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.argv = ["news_collector_full.py", "--batch", "5"]
|
||||
runpy.run_path("/home/hmo/.hermes/profiles/position-analyst/scripts/news_collector_full.py", run_name="__main__")
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
"""news_collector_full_b6.py — 全市场新闻采集(batch 6,包装入口)"""
|
||||
import sys, runpy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.argv = ["news_collector_full.py", "--batch", "6"]
|
||||
runpy.run_path("/home/hmo/.hermes/profiles/position-analyst/scripts/news_collector_full.py", run_name="__main__")
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
"""news_collector_full_b7.py — 全市场新闻采集(batch 7,包装入口)"""
|
||||
import sys, runpy
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
sys.argv = ["news_collector_full.py", "--batch", "7"]
|
||||
runpy.run_path("/home/hmo/.hermes/profiles/position-analyst/scripts/news_collector_full.py", run_name="__main__")
|
||||
|
||||
@@ -7,6 +7,13 @@ import sys
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
script_dir = Path(__file__).parent.resolve()
|
||||
target = script_dir / "generate_report.py"
|
||||
|
||||
|
||||
@@ -40,6 +40,13 @@ from mo_data import read_decisions, read_portfolio
|
||||
from llm_client import call_llm, REASSESS_MODEL
|
||||
from mofin_db import snapshot_strategy_history
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def _build_full_analysis(code, entry, result):
|
||||
"""从重评结果构建完整12维分析文本"""
|
||||
|
||||
@@ -14,6 +14,13 @@ from pathlib import Path
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
from news_collector import fetch_stock_news, init_table
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB_PATH = Path("/home/hmo/MoFin/data/mofin.db")
|
||||
SLEEP = 0.4 # 请求间隔(防东财封)
|
||||
RECENT_DAYS = 3 # 只存近 3 天新闻(news3 因子口径)
|
||||
|
||||
@@ -14,6 +14,13 @@ import sys, os, json, sqlite3, subprocess
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
MOFIN = Path("/home/hmo/MoFin")
|
||||
DATA = MOFIN / "data"
|
||||
DB_PATH = DATA / "mofin.db"
|
||||
|
||||
@@ -59,6 +59,13 @@ print("\n" + "=" * 50)
|
||||
print("🔍 自选退出检查")
|
||||
print("=" * 50)
|
||||
from watchlist_auto_exit import main as auto_exit
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
exited = auto_exit(dry_run=False)
|
||||
|
||||
# Step 3: 写入摘要供开盘简报引用
|
||||
|
||||
@@ -78,6 +78,13 @@ except ImportError:
|
||||
# 市场抽象层(阶段1:行情符号/市场判断唯一事实源)
|
||||
from market_config import kline_symbol, market_for_code
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# 策略重评依赖(技术面驱动,非机械百分比)
|
||||
sys.path.insert(0, "/home/hmo/web-dashboard")
|
||||
try:
|
||||
|
||||
@@ -7,6 +7,13 @@ import sys, json, sqlite3, time
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB_PATH = Path("/home/hmo/MoFin/data/mofin.db")
|
||||
|
||||
# 2026-08-10 修复参数:控制单次运行时长,防 hermes 600s 超时杀进程
|
||||
|
||||
@@ -11,6 +11,13 @@ from pathlib import Path
|
||||
from datetime import datetime
|
||||
from mo_data import get_price
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB = Path("/home/hmo/MoFin/data/mofin.db")
|
||||
|
||||
def fetch_index(code, name):
|
||||
|
||||
@@ -13,6 +13,13 @@ import os
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# 确保能找到 web-dashboard 模块
|
||||
sys.path.insert(0, "/home/hmo/web-dashboard")
|
||||
|
||||
|
||||
@@ -17,6 +17,13 @@ import sqlite3
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
_SCRIPT_DIR = Path(__file__).resolve().parent
|
||||
sys.path.insert(0, str(_SCRIPT_DIR))
|
||||
sys.path.insert(0, "/home/hmo/MoFin")
|
||||
|
||||
@@ -9,6 +9,13 @@ XMPP 走 alert_helper 统一网关(分级 ACTION)。
|
||||
"""
|
||||
import sys, json, os, datetime, sqlite3
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
sys.path.insert(0, "/home/hmo/MoFin")
|
||||
os.chdir("/home/hmo/MoFin")
|
||||
DB = "/home/hmo/MoFin/data/mofin.db"
|
||||
|
||||
@@ -5,6 +5,13 @@
|
||||
import sqlite3, time, sys
|
||||
import akshare as ak
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB = "/home/hmo/MoFin/data/mofin.db"
|
||||
|
||||
def main():
|
||||
|
||||
@@ -18,6 +18,13 @@ import sys, os, sqlite3, fcntl, time
|
||||
from pathlib import Path
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB_PATH = Path("/home/hmo/MoFin/data/mofin.db")
|
||||
RECENT_DAYS = 5 # 增量:每次只算最近 5 天(历史已有,每日新增)
|
||||
|
||||
|
||||
@@ -15,6 +15,13 @@
|
||||
import os, sys, json, subprocess, sqlite3, time
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
sys.path.insert(0, '/home/hmo/MoFin')
|
||||
|
||||
FUNCTIONAL_REPORT = '/home/hmo/MoFin/gateway/logs/functional_health.json'
|
||||
|
||||
@@ -17,6 +17,13 @@ from datetime import datetime, timezone
|
||||
sys.path.insert(0, '/home/hmo/MoFin')
|
||||
from mo_data import read_portfolio, read_decisions, read_watchlist, get_price, get_prices_batch
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def fetch_prices(codes):
|
||||
"""统一价格源:优先 stock_quote.py,腾讯API降级为兜底"""
|
||||
|
||||
@@ -15,6 +15,13 @@ sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
|
||||
from datetime import datetime
|
||||
from mo_data import read_decisions, read_portfolio
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB_PATH = '/home/hmo/web-dashboard/data/mofin.db'
|
||||
OUTPUT_PATH = "/home/hmo/web-dashboard/data/strategy_staleness_report.json"
|
||||
|
||||
|
||||
@@ -14,6 +14,13 @@ import json
|
||||
from pathlib import Path
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB = "/home/hmo/MoFin/data/mofin.db"
|
||||
OUT = Path("/home/hmo/MoFin/data/strategy_alerts.json")
|
||||
|
||||
|
||||
@@ -4,6 +4,13 @@
|
||||
import os, sys, sqlite3, json
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB = "/home/hmo/MoFin/data/mofin.db"
|
||||
|
||||
def get_expired_strategies(conn):
|
||||
|
||||
@@ -30,6 +30,13 @@ import subprocess
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
_SCRIPT_DIR = Path(__file__).resolve().parent
|
||||
sys.path.insert(0, str(_SCRIPT_DIR))
|
||||
sys.path.insert(0, "/home/hmo/MoFin")
|
||||
|
||||
@@ -21,6 +21,13 @@ from pathlib import Path
|
||||
from datetime import datetime, timedelta
|
||||
from collections import Counter
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
_SCRIPT_DIR = Path(__file__).resolve().parent
|
||||
sys.path.insert(0, str(_SCRIPT_DIR))
|
||||
sys.path.insert(0, "/home/hmo/MoFin")
|
||||
|
||||
@@ -16,6 +16,13 @@ from datetime import datetime
|
||||
from collections import Counter
|
||||
from mo_data import read_portfolio, read_decisions, read_watchlist, get_price, get_prices_batch
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
BASE = Path("/home/hmo/MoFin")
|
||||
DATA = BASE / "data"
|
||||
DB_PATH = DATA / "mofin.db"
|
||||
|
||||
@@ -19,6 +19,13 @@ import sys
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
_SCRIPT_DIR = Path(__file__).resolve().parent
|
||||
sys.path.insert(0, str(_SCRIPT_DIR))
|
||||
sys.path.insert(0, "/home/hmo/MoFin")
|
||||
|
||||
@@ -20,6 +20,13 @@ from pathlib import Path
|
||||
from datetime import datetime, timedelta
|
||||
from mo_data import read_portfolio, read_decisions, read_watchlist
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DATA_DIR = Path("/home/hmo/MoFin/data")
|
||||
WEB_DATA = Path("/home/hmo/web-dashboard/data")
|
||||
REPORT = {"timestamp": datetime.now().isoformat(), "issues": [], "fixes": [], "ok": []}
|
||||
|
||||
@@ -16,6 +16,13 @@ import os, sys, json, glob, hashlib, sqlite3, subprocess
|
||||
from datetime import datetime, timedelta
|
||||
from pathlib import Path
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
sys.path.insert(0, '/home/hmo/MoFin')
|
||||
|
||||
DEPLOY = '/home/hmo/MoFin/deploy/profile-scripts'
|
||||
|
||||
@@ -5,6 +5,13 @@
|
||||
"""
|
||||
import sqlite3, os
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DBS = [
|
||||
"/home/hmo/.hermes/profiles/position-analyst/state.db",
|
||||
"/home/hmo/.hermes/state.db",
|
||||
|
||||
@@ -16,6 +16,13 @@ from pathlib import Path
|
||||
from datetime import datetime, timedelta
|
||||
from urllib.request import Request, urlopen
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
BASE = Path(__file__).parent.parent
|
||||
sys.path.insert(0, str(BASE))
|
||||
sys.path.insert(0, "/home/hmo/MoFin")
|
||||
|
||||
@@ -10,6 +10,13 @@
|
||||
import sqlite3, sys, json
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# ── 消息通道统一路由(broadcast/xmpp by delivery) ──
|
||||
try:
|
||||
from messenger import install_stdio_hook as _msh
|
||||
_msh()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
DB = "/home/hmo/MoFin/data/mofin.db"
|
||||
|
||||
def get_signal_rank(signal):
|
||||
|
||||
Reference in New Issue
Block a user