策略如何进入实盘:金额配置、自动对账、全部平仓与下单开关。
下单组合是允许实际下单的策略集合。组合里的每个策略各配置一笔固定金额,reconciler 常驻程序持续把策略自己建立的部位调整到合并后的目标——这些单不需要你自己下。它只管理自己下过的单:你手动开的仓它看不见、也永远不会碰。
strategy.py ──► state.json ──────────────┐
(cron) ├──► reconciler.py ──► exchange
amounts ──► portfolio_config.json ───┘
组合里的每个策略各配置一笔金额(以账户币别计,例如 USD)——信号满仓时这个策略动用的资金。每个标的的目标部位是所有策略的加总:
target[symbol] = Σ ( amount × position )
position 是策略信号,可以是小数(波动率调整的策略可能输出 0.5 或 1.8)。你设置多少金额就用多少金额计算仓位,不会随账户净值漂移。例外:群益台指期策略的金额是手数(合约数量),不是美元金额。
manager/portfolio_config.json。金额请在工作区「下单设置」页设置,或请 agent 代劳;优化器权重只通过 manager.py 应用——默认是 dry-run,你确认后加上 --apply 才会写入。
Reconciler 是常驻程序,每 5 秒轮询一次,遇到以下任一情况就对账:
state.json 变动)每一轮把目标部位和自己的账本相比——reconciler 自行记账,累加自己下过的每笔单(manager/orders.jsonl),不是读交易所的账户持仓,所以你手动开的仓不会被当成「已经持有」而被加仓或平掉——然后下单抹平差额。默认市价单,每个策略可在下单设置改成市价/TWAP/限价追价/自定义下单方式(群益台指期仅支持市价)。差额低于 $10 就略过(台指期改以整数手数对账)。翻仓(多翻空)会拆成「只减仓平掉旧仓」加「重新开新仓」两笔,双向持仓账户不会同时持有多空。
如果连续 3 次读不到交易所持仓(密钥被撤销、IP 未加白名单、交易所故障),reconciler 会自动挂上下单开关。它只会挂、不会自己解除——解除永远由你决定。
工作区点「暂停下单」后,对话框二选一:「暂停,不动部位」只挂上下单开关;「暂停并关闭部位」(或 python3 manager/flatten.py)把策略自己建立的部位全部市价平掉——只平 bot 自己账本上的部位,你手动开的仓不动;现货也只卖策略管理范围内的币,你自己持有的其他币不会被卖。它是紧急刹车,不是调仓工具:
下单开关挂上后,所有会增加敞口的订单都在程序层被拒绝。平仓、止损止盈与取消订单照常执行——开关不会困住你想减的仓位。
挂上的方式:工作区的「暂停下单」(含「暂停并关闭部位」)、跟 agent 说停止交易,或交易所断线时自动触发。开关永远不会自动解除——只有你按下「启动下单」或明确要求 agent 恢复,才会继续下单。按「启动下单」时再二选一:「启动并补齐部位」立刻用市价把部位补到策略目前的信号状态;「启动,等新信号才进场」现在不下单,每条策略等它下次进场、出场或翻向才开始交易。每一次下单尝试与拒绝都会写入审计记录。
每笔已执行订单都会连同它的 legs(逐腿成交明细)写入 manager/orders.jsonl——每一腿记录交易所返回的成交价与成交数量。翻仓会记两腿:平仓腿是出场价,开仓腿是进场价。
部分失败也会记录:翻仓的平仓腿成交、开仓腿却失败时,这笔记录会保留并标记失败——只要真的动到钱,交易历史绝不隐藏。工作区的「交易历史」标签页显示的就是这个文件。