Files
Chan/live/deploy/live.env.example
T
jackandCursor 335d891478 生产与研究分家:实盘执行器独立成 live/ 子树,加 AWS 部署
实盘要跑在 AWS(API key 绑了 IP 白名单),而信号在新加坡那台算。借这次
把生产从研究侧摘出来,四条具体代价里第一条已经咬过:

1. live_state.json 原先落在 research/out/,而那里 shadow_hb 会自动 rename
   归档、研究脚本会写、人也手工清过。那文件装的是 MAX_DAY_LOSS 累计与已
   处理信号键,被清掉不报错,只是两道闸静默失效。改到 LIVE_HOME。
2. 采集器十币清空 300~560ms 直接叠在信号到达执行器的延迟上。
3. 研究侧探针 OOM 过一次(14.9GB),当时若有仓位在场会连坐执行器。
4. 为读两个常量 import 研究侧 step43,把 numpy/pandas/pyarrow 拖进实盘
   进程。抽出 stdlib-only 的 live/exit_params.py,install.sh 加断言挡回归。

新增 live/ship_signals.py:AWS 侧 ssh tail 拉总线,每次重连从文件头重放
+ 按幂等键去重,断线期间的信号自愈;旧信号由 staleness 闸挡掉不补做。
带时钟倒流检测——两机时钟不同步会让那道闸静默放宽。

部署件:systemd 两单元(搬运挂了执行器仍管在场仓位的超时平仓)、
install.sh、dryrun.sh(验密钥/白名单/时钟/ssh/取整)、status.sh、README。

验证:live_exec 重构后端到端空跑,SOL 多头与 ADA 空头的止损/两级止盈/
数量取整逐项核对正确,isolated + post_only + reduceOnly 都在;搬运的去重、
重启不重复追加、脏数据跳过、断线重连重放均已测。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-28 17:03:03 +08:00

51 lines
3.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 生产配置。装到 /etc/chan-live/live.env,权限 640 root:chan。
# **不要提交填好的版本**——这里有交易权限的密钥。
#
# 改完要重启:sudo systemctl restart chan-live-exec
# ── Bitget 密钥 ───────────────────────────────────────────────────
# 权限只勾「只读」+「交易」,**不要勾提币**。
# IP 白名单填这台机的公网出口 IPcurl -s https://api.ipify.org 看)。
# 这也是执行器必须跑在这台机上的唯一原因——密钥绑了这个 IP。
BITGET_API_KEY=
BITGET_API_SECRET=
BITGET_PASSPHRASE=
# ── 信号来源(采集机)─────────────────────────────────────────────
# ssh 目标。可以是 ~/.ssh/config 里的别名,或 user@ip
SHIP_FROM=sg-collector
# 采集机上总线文件的路径(在对端 shell 里展开,可用 ~)
SHIP_REMOTE_BUS=~/chan-live/state/signals_live.jsonl
# ── 状态与总线 ────────────────────────────────────────────────────
# 生产状态的根。**不要指到仓库里**git checkout/clean 会动仓库,而这里存的
# 是日亏损累计与在场仓位,被清掉等于 MAX_DAY_LOSS / MAX_OPEN 两道闸失忆。
# systemd 单元里 ReadWritePaths 也是这个路径,改了要一起改
LIVE_HOME=/var/lib/chan-live
SIGNAL_BUS=/var/lib/chan-live/state/signals_live.jsonl
# ── 仓位 ─────────────────────────────────────────────────────────
# 每笔名义额(USDT)。杠杆**不改**手续费与滑点(都按名义额收),所以抬名义额
# 有真实成本;抬它的唯一理由是压掉步长取整:实测最差币的偏差
# 100U → 6.7%(SOL)、500U → 1.8%、1000U → 0.6%
LIVE_NOTIONAL=500
# 杠杆只影响占用保证金,不影响名义敞口/手续费/滑点/盈亏绝对值。
# 名义 500 在 10x 下占 50 USDT 保证金;止损在 2 ATR ≈ 0.2%,而 10x 强平约需
# 逆向 10% = 100 个 ATR,差 50 倍。交易所侧记得设**逐仓**
LIVE_LEVERAGE=10
# ── 硬约束:封的是「代价不随仓位缩小」的那几类故障 ─────────────────
# 并发仓位数。信号 6.8 笔/天、持仓 48 分钟 → 期望并发 0.23 笔,3 已很宽。
# 超了说明有 bug,不是行情好
LIVE_MAX_OPEN=3
# 日开仓上限。专门封「循环里的 bug 反复开仓」——单笔小但笔数无界
LIVE_MAX_DAY=15
# 日亏损上限(USDT)。一笔止损约 1 USDT15 笔全亏 15 USDT
LIVE_MAX_DAY_LOSS=20
# 信号超过这么久就不做。参考成交价是次根开盘价,过期后跑的不是回测那个价。
# ⚠️ 这道闸依赖两机时钟一致,chrony 必须在跑(install.sh 会装)
LIVE_STALE_S=20
# 交易的币池。要与采集机一致,否则会收到不做的币的信号(会被忽略但徒增噪声)
SYMS=BTC,ETH,SOL,BNB,XRP,DOGE,ADA,AVAX,LINK,LTC