feat(messenger): 全部77个活跃cron脚本接入统一消息通道(install_stdio_hook)

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