b6acbf4b2c
Remove external-close risk hooks; register user_instance, user_hub, and user_trend_stop via hub API and trend stop; update docs and tests. Co-authored-by: Cursor <cursoragent@cursor.com>
211 lines
9.1 KiB
Bash
211 lines
9.1 KiB
Bash
# =============================================================================
|
||
# 环境配置模板(可提交 Git)。程序运行时只读取同目录下的 .env。
|
||
#
|
||
# 首次部署 / 新机:
|
||
# cp .env.example .env
|
||
# nano .env # 填入真实密钥、端口、代理等
|
||
#
|
||
# 升级代码(git pull)前建议备份(.env 不在 Git 中,pull 不会覆盖):
|
||
# cp .env .env.backup.$(date +%Y%m%d)
|
||
#
|
||
# 从备份恢复:
|
||
# cp .env.backup.YYYYMMDD .env
|
||
# =============================================================================
|
||
|
||
APP_ENV=production
|
||
# 服务监听地址(云服务器通常用 0.0.0.0)
|
||
APP_HOST=0.0.0.0
|
||
# 服务端口
|
||
APP_PORT=5002
|
||
# 是否开启调试模式(生产建议 false)
|
||
APP_DEBUG=false
|
||
|
||
# 登录账号
|
||
APP_USERNAME=dekun
|
||
# 登录密码(请改成你自己的强密码)
|
||
APP_PASSWORD=ChangeMe123!
|
||
# 是否关闭登录校验(局域网可设 true;公网务必 false)
|
||
APP_AUTH_DISABLED=true
|
||
# --- 多账户交易中控 manual_trading_hub ---
|
||
# 中控请求本实例 /api/hub/* 时携带请求头 X-Hub-Token,须与中控启动环境变量 HUB_BRIDGE_TOKEN 一致
|
||
# 未设置且 APP_AUTH_DISABLED=false 时,仅网页登录后可访问;本机联调可保持 APP_AUTH_DISABLED=true
|
||
# HUB_BRIDGE_TOKEN=your-long-random-token
|
||
# Flask 会话密钥(必须替换为长随机字符串)
|
||
FLASK_SECRET_KEY=CHANGE_TO_LONG_RANDOM_SECRET
|
||
|
||
# 企业微信机器人 Webhook(用于行情/风控推送)
|
||
WECHAT_WEBHOOK=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=REPLACE_WITH_REAL_KEY
|
||
|
||
# 数据库文件路径(相对路径会自动按项目目录解析)
|
||
DB_PATH=crypto.db
|
||
# 交易截图上传目录
|
||
UPLOAD_DIR=static/images
|
||
|
||
# 自动备份(scripts/backup_data.sh + cron,可选;默认即可)
|
||
# BACKUP_ROOT=/root/backups
|
||
# BACKUP_RETENTION_DAYS=30
|
||
# BACKUP_INSTANCE=crypto_monitor_gate_bot
|
||
|
||
# 已废弃:资金账户仅显示交易所 funding 余额,不再读取此变量
|
||
# TOTAL_CAPITAL=100
|
||
# 计仓:risk=以损定仓(默认);full_margin=合约可用×FULL_MARGIN_BUFFER_RATIO 全仓杠杆(须无仓后重启)
|
||
POSITION_SIZING_MODE=risk
|
||
# 每天起始基数(U)
|
||
DAILY_START_CAPITAL=30
|
||
# 日内回撤后基数(U)
|
||
DAILY_LOSS_CAPITAL=20
|
||
# 日内盈利后基数(U)
|
||
DAILY_PROFIT_CAPITAL=50
|
||
# BTC 默认杠杆倍数
|
||
BTC_LEVERAGE=10
|
||
# 山寨币默认杠杆倍数
|
||
ALT_LEVERAGE=5
|
||
# 交易日重置小时(北京时间)
|
||
TRADING_DAY_RESET_HOUR=8
|
||
# 整点前禁止新开仓:true=启用(默认),false=关闭(仍可保留 8 点作为交易日划分)
|
||
TRADING_DAY_RESET_OPEN_GUARD_ENABLED=true
|
||
|
||
# 是否开启 Gate 实盘下单(false=只做本地流程,true=真实下单)
|
||
LIVE_TRADING_ENABLED=true
|
||
# Gate API Key(实盘)
|
||
GATE_API_KEY=REPLACE_WITH_GATE_API_KEY
|
||
# Gate API Secret(实盘)
|
||
GATE_API_SECRET=REPLACE_WITH_GATE_API_SECRET
|
||
# 保证金模式:cross=全仓,isolated=逐仓
|
||
GATE_TD_MODE=cross
|
||
# 持仓筛选:hedge=双向持仓下按多空腿过滤;其它值(如 single)不按腿过滤
|
||
GATE_POS_MODE=hedge
|
||
# 永续止盈止损:是否优先用官方仓位类触发单(POST price_orders,close-*-position);false=仅用旧版两张 ccxt 条件单
|
||
GATE_TPSL_USE_POSITION_ORDER=true
|
||
# 触发单超时(秒),默认 604800=7 天;设为 0 或负数则不向 API 传 expiration
|
||
GATE_TPSL_TRIGGER_EXPIRATION=604800
|
||
# 触发参考价:0=最新成交 1=标记价 2=指数价(非法值按 0)
|
||
GATE_TPSL_PRICE_TYPE=0
|
||
# 仓位类 TP/SL 相对现价的最小间距(%),避免 Gate 1026「触发价须高于/低于现价」
|
||
GATE_TPSL_LAST_PRICE_GAP_PCT=0.05
|
||
# 页面与浏览器标签展示的交易所名称(多环境区分时可改成例如 Gate·模拟)
|
||
# EXCHANGE_DISPLAY_NAME=Gate.io
|
||
|
||
# =============================================================================
|
||
# 关键位门控(页面「关键位监控」规则条与 _key_hard_checks 共用)
|
||
# =============================================================================
|
||
# 【周期】门控 K 线周期,如 5m、15m
|
||
KLINE_TIMEFRAME=5m
|
||
# 【确认K】闭合 K 序列中的棒偏移:突破棒默认 -2,确认棒默认 -1
|
||
KEY_CONFIRM_BREAKOUT_BAR=-2
|
||
KEY_CONFIRM_BAR=-1
|
||
# 【量能】突破棒成交量 > 前 N 根均量 × 倍数
|
||
KEY_VOLUME_MA_BARS=20
|
||
KEY_VOLUME_RATIO_MIN=1.3
|
||
# 【突破K实体幅度】占开盘价百分比区间
|
||
# 【箱体/收敛】突破K收盘越过关键位下限%;无上限(过猛由计划RR过滤)
|
||
KEY_BREAKOUT_AMP_MIN_PCT=0.03
|
||
KEY_BREAKOUT_AMP_MAX_PCT=0.5
|
||
# 【阻力/支撑】突破后微信提醒
|
||
KEY_ALERT_MAX_TIMES=3
|
||
KEY_ALERT_INTERVAL_MINUTES=5
|
||
# 【日成交量排名】品种须在该排名前 N 名
|
||
KEY_DAILY_VOLUME_RANK_MAX=30
|
||
# 【关键位自动开仓盈亏比】严格大于该值才市价开仓
|
||
KEY_AUTO_MIN_PLANNED_RR=1.5
|
||
# 止损:突破 K 极值向外缓冲的百分比(默认 0.5 即 0.5%)
|
||
KEY_STOP_OUTSIDE_BREAKOUT_PCT=0.5
|
||
# 趋势单方案:止损在突破 K 极值外侧的百分比(默认 1 即 1%)
|
||
KEY_TREND_STOP_OUTSIDE_PCT=1
|
||
KEY_ALERT_MAX_TIMES=3
|
||
KEY_ALERT_INTERVAL_MINUTES=5
|
||
|
||
# =============================================================================
|
||
# 交易执行 / 人工风控(页面「实盘下单」)
|
||
# =============================================================================
|
||
# 【最大同时持仓】默认 1=单仓
|
||
MAX_ACTIVE_POSITIONS=1
|
||
# 【人工下单最低盈亏比】低于该值前后端均拒绝(默认 1.4,即须 >=1.4:1)
|
||
MANUAL_MIN_PLANNED_RR=1.4
|
||
# 【关键位连开计仓】已有持仓时按无仓时资金快照算基数
|
||
KEY_SIZING_USE_ZERO_POSITION_SNAPSHOT=true
|
||
# 【单日开仓 AI 提醒】本交易日开仓达到该次数时推送企业微信 AI 克制提醒(不拦单)
|
||
DAILY_OPEN_ALERT_THRESHOLD=5
|
||
# 【单日开仓硬上限】本交易日开仓次数>=该值后禁止一切新开仓直至下一交易日(北京时间 TRADING_DAY_RESET_HOUR 切日);0=不启用
|
||
DAILY_OPEN_HARD_LIMIT=0
|
||
|
||
# =============================================================================
|
||
# 账户冷静期 / 日冻结风控(手动平仓、外部平仓、复盘情绪标签)
|
||
# 详见 docs/account-risk-cooldown.md
|
||
# =============================================================================
|
||
# RISK_CONTROL_ENABLED=true
|
||
# RISK_COOLING_HOURS_MANUAL=4
|
||
# RISK_COOLING_HOURS_MANUAL_JOURNAL=1
|
||
# RISK_MANUAL_CLOSE_DAILY_LIMIT=2
|
||
# RISK_MOOD_ISSUES_DAILY_FREEZE=true
|
||
|
||
# 资金与仓位刷新周期(秒)
|
||
BALANCE_REFRESH_SECONDS=60
|
||
# 前端价格快照轮询(秒)
|
||
PRICE_REFRESH_SECONDS=5
|
||
# 后台监控轮询周期(秒)
|
||
MONITOR_POLL_SECONDS=3
|
||
# 重启后多少秒内不做「外部平仓」同步(避免 API 未就绪误判)
|
||
RECONCILE_STARTUP_GRACE_SEC=90
|
||
# 连续多少次轮询确认交易所空仓后,才记为外部平仓(默认 3 次 ≈ 9 秒)
|
||
RECONCILE_FLAT_CONFIRM_POLLS=3
|
||
# 使用可用资金时的缓冲比例(如0.98代表用98%)
|
||
FULL_MARGIN_BUFFER_RATIO=0.98
|
||
|
||
# =============================================================================
|
||
# 自动划转(页顶「将 swap 补足到 XU」;与 DAILY_START_CAPITAL 独立,需一致时请设为相同值)
|
||
# =============================================================================
|
||
AUTO_TRANSFER_ENABLED=false
|
||
# 交易账户(swap)目标余额 U:每日 8 点(北京)自动划入或划出至 funding;持仓中不划转
|
||
AUTO_TRANSFER_AMOUNT=30
|
||
AUTO_TRANSFER_FROM=funding
|
||
AUTO_TRANSFER_TO=swap
|
||
TRANSFER_CCY=USDT
|
||
# 北京时间该整点小时内尝试;账簿按 UTC 自然日去重
|
||
AUTO_TRANSFER_BJ_HOUR=8
|
||
# 强制清仓整点(北京时间,默认 0=凌晨00点)
|
||
FORCE_CLOSE_BJ_HOUR=0
|
||
# 是否启用强制清仓(默认关闭,true 才会在整点执行)
|
||
FORCE_CLOSE_ENABLED=false
|
||
|
||
# 推送与AI超时(秒)
|
||
WECHAT_TIMEOUT_SECONDS=10
|
||
AI_TIMEOUT_SECONDS=120
|
||
|
||
# AI 提供方:openai(默认)| ollama
|
||
AI_PROVIDER=openai
|
||
OPENAI_API_BASE=https://op.bz121.com/v1
|
||
OPENAI_API_KEY=你的密钥
|
||
OPENAI_MODEL=gemma4:e4b
|
||
OLLAMA_API=http://127.0.0.1:11434/api/generate
|
||
AI_MODEL=huihui_ai/deepseek-r1-abliterated:latest
|
||
|
||
# Gate 代理(可选):本机网络不稳定时通过 SSH 动态转发 SOCKS5 出口
|
||
# 1) 先在本机建立隧道(示例):
|
||
# ssh -N -D 127.0.0.1:1080 root@你的VPS_IP -o ServerAliveInterval=30 -o ExitOnForwardFailure=yes
|
||
# 2) 再启用下面这一行(推荐 socks5h,让远端解析域名):
|
||
# GATE_SOCKS_PROXY=socks5h://127.0.0.1:1080
|
||
#
|
||
# 如你更偏向 HTTP 代理(VPS 上跑 tinyproxy 之类),可用:
|
||
# GATE_HTTP_PROXY=http://127.0.0.1:3128
|
||
# GATE_HTTPS_PROXY=http://127.0.0.1:3128
|
||
|
||
# 开仓多周期K线图(可选)
|
||
# ORDER_CHART_ENABLED=true
|
||
# ORDER_CHART_TFS=4h,1h,15m,5m
|
||
# ORDER_CHART_LIMIT=100
|
||
# ORDER_CHART_DIR=static/images/order_charts
|
||
# 详见 DAILY_OPEN_ALERT_THRESHOLD / DAILY_OPEN_HARD_LIMIT;说明文档 docs/daily-open-limit.md
|
||
# 以损定仓(按交易账户资金的百分比)
|
||
# RISK_PERCENT=2
|
||
# 移动保本触发(达到多少R触发)与偏移(百分比)
|
||
# BREAKEVEN_RR_TRIGGER=1.0
|
||
# 移动保本阶梯(每多少R继续上移一次,默认1R)
|
||
# BREAKEVEN_STEP_R=1.0
|
||
# BREAKEVEN_OFFSET_PCT=0.02
|
||
# 开单风格默认值:trend / swing
|
||
# DEFAULT_TRADE_STYLE=trend
|
||
|
||
APP_TIMEZONE=Asia/Shanghai
|
||
# TRADING_DAY_RESET_HOUR 现在表示「北京时间」整点,默认 8 点起算新交易日;开仓整点限制见 TRADING_DAY_RESET_OPEN_GUARD_ENABLED
|