# =============================================================================
# 中控 hub.py / 子代理 agent.py 环境变量模板（可提交 Git）
# 使用：cp .env.example .env 后填入真实值；启动前由 shell  export 或 dotenv 加载
# 云服务器完整说明：见 云服务器部署说明.md
# =============================================================================

# hub.py 监听
HUB_HOST=0.0.0.0
HUB_PORT=5100
# 仅本机访问可改为 127.0.0.1，并设 HUB_TRUST_LAN=false

# 与三实例 .env 中 HUB_BRIDGE_TOKEN 相同的长随机串
# 中控 → 各 Flask：请求头 X-Hub-Token
# 中控 → 各子代理：请求头 X-Control-Token（可与子代理 CONTROL_TOKEN 同值，hub 会用 HUB_BRIDGE_TOKEN 转发）
# 中控「打开实例」SSO 链接也复用此令牌签名（默认 2 小时内有效、单次使用）
# HUB_BRIDGE_TOKEN=your-long-random-token
# HUB_SSO_TTL_SEC=7200

# 逗号分隔的账户 id，强制关闭（不参与监控/全局全平；设置页对应行勾选框灰掉）
# 留空 = 不强制关闭；仅不想用 OKX 时可设 HUB_DISABLED_IDS=1
HUB_DISABLED_IDS=

# true=允许 RFC1918 私网访问中控页面；false=仅 127.0.0.1（反代须指向 127.0.0.1:5100）
HUB_TRUST_LAN=true

# 云服务器用域名/HTTPS 反代访问中控时设为 true（否则公网可能看到 {"detail":"forbidden"}）
# HUB_ALLOW_PUBLIC=true

# 中控 Web 登录（默认 admin / admin123；生产环境请在 .env 中修改）
HUB_USERNAME=admin
HUB_PASSWORD=admin123
# 会话签名密钥（建议单独随机串；未设则用用户名+密码拼接）
# HUB_SESSION_SECRET=another-long-random-string
# HTTPS 反代时建议 true：仅 HTTPS 访问会带 Secure Cookie；http://内网IP:5100 仍可登录
# HUB_COOKIE_SECURE=true
# 登录保持天数（默认 7）
# HUB_SESSION_DAYS=7

# 本地导航 / 门户 iframe 嵌入中控（默认 true）
# HUB_ALLOW_EMBED=true
# 限制可嵌入的父页来源（逗号分隔）；默认 * 不限制
# HUB_EMBED_ORIGINS=http://192.168.8.6:5070,https://hub.example.com

# 三实例允许被中控 iframe 内嵌（各 crypto_monitor_*/.env，与 hub 同步部署）
# APP_ALLOW_HUB_EMBED=true
# HUB_EMBED_PARENT_ORIGINS=https://hub.example.com
# HTTPS 跨子域 iframe 时三实例还须 APP_COOKIE_SECURE=true（见 crypto_monitor_*/.env.example）

# 浏览器打开的实例/复盘链接（hub_settings 里 flask_url 为 127.0.0.1 时替换为对外地址）
# 局域网：填内网 IP，见《局域网与反代部署说明.md》
# HUB_PUBLIC_ORIGIN=http://192.168.1.100
# 反代：各实例 flask_url 建议直接写 https 域名，可不设此项
# HUB_PUBLIC_HOST=192.168.1.100
# HUB_PUBLIC_SCHEME=http

# 三实例网页登录（直链反代/IP:端口 访问时输入；中控点「打开实例」免输）
# 各 crypto_monitor_*/.env 统一：APP_USERNAME=...  APP_PASSWORD=...

# 监控区：hub 后台每 N 秒聚合一次，浏览器经 SSE 收版本号再拉快照（默认 5 秒）
# HUB_BOARD_POLL_INTERVAL=5
# 单次聚合超时（秒，默认 agent 8 / flask 10 / board 45）
# HUB_AGENT_TIMEOUT=8
# HUB_FLASK_TIMEOUT=10
# HUB_BOARD_TIMEOUT=45
# 为 false 时不拉各实例 /api/price_snapshot（关键位门控简化为「-」，首屏明显更快）
# HUB_BOARD_KEY_PRICES=true

# ---------- 行情区 K 线库（data/hub_kline.db，默认保留 15 天）----------
# HUB_KLINE_RETENTION_DAYS=15
# HUB_KLINE_DB_PATH=/opt/crypto_monitor/manual_trading_hub/data/hub_kline.db
# 行情区后台轮询 + SSE（对齐监控区 board）
# HUB_CHART_POLL_INTERVAL=5
# HUB_CHART_POSITION_TIMEFRAME=5m
# HUB_CHART_WATCH_TTL_SEC=45
# HUB_CHART_MAX_SERIES_PER_TICK=24

# --- 子代理 agent.py（在 crypto_monitor_* 目录启动时另设 EXCHANGE / PORT）---
# 与 HUB_BRIDGE_TOKEN 一致时可只设其一；agent 校验请求头 X-Control-Token
# CONTROL_TOKEN=your-long-random-token
# EXCHANGE=binance
# PORT=15200
# HOST=127.0.0.1

# ---------- 中控 AI 教练（/ai，模块 hub_ai/，存 hub_ai_*.json）----------
# 与三实例相同变量名；默认 OpenAI 兼容网关（改 AI_PROVIDER=ollama 可走本机 Ollama）
# 详见 manual_trading_hub/AI教练说明.md 与仓库根 AI复盘与模型配置说明.md
AI_TIMEOUT_SECONDS=120
# AI 教练聊天（默认：输出 8192 token、续写 4 次、快照约 2 万字符、历史单条 1500 字）
# CHAT_MAX_OUTPUT_TOKENS=8192
# CHAT_MAX_CONTINUATIONS=4
# CHAT_CONTEXT_MAX_CHARS=20000
# CHAT_SUMMARY_EXCERPT_MAX_CHARS=2000
# CHAT_HISTORY_MAX_CHARS_PER_MSG=1500
# CHAT_AI_TIMEOUT_SECONDS=300

# AI 提供方：openai（默认，OpenAI 兼容网关）| ollama（本机 Ollama）
AI_PROVIDER=openai
OPENAI_API_BASE=https://op.bz121.com/v1
OPENAI_API_KEY=你的密钥
OPENAI_MODEL=gemma4:e4b
# 本机 Ollama（AI_PROVIDER=ollama 时使用）
OLLAMA_API=http://127.0.0.1:11434/api/generate
AI_MODEL=huihui_ai/deepseek-r1-abliterated:latest

# 交易日切分（与三实例 TRADING_DAY_RESET_HOUR 一致，定义「今日总结」的日期）
TRADING_DAY_RESET_HOUR=8
# 资金概况 / AI 上下文：分户资金快照保留交易日数（默认 180）
# HUB_FUND_HISTORY_DAYS=180
# 自动备份（系统设置 → 备份与恢复；也可设 HUB_BACKUP_ROOT）
# HUB_BACKUP_ROOT=/root/backups/crypto_monitor_portal
# 资金概况：曲线与回撤统计起始交易日
HUB_FUND_HISTORY_START_DAY=2026-06-09
