# 计仓模式(三所统一)

## 配置

在各实例 `.env` 中设置(**仅能通过 env 切换,修改后须重启进程**):

```env
# risk(默认)= 以损定仓
# full_margin = 全仓杠杆(合约可用保证金 × 比例)
POSITION_SIZING_MODE=risk
FULL_MARGIN_BUFFER_RATIO=0.98

# 关键位程序自动单(默认 false,详见各所 关键位自动下单说明.md)
KEY_AUTO_ORDER_ENABLED=false
```

切换为全仓杠杆前:**交易所须无持仓**(`MAX_ACTIVE_POSITIONS` 默认 1,全仓模式会强制单仓).

## 模式说明

| 模式 | 保证金计算 | 杠杆 | 允许入口 |
|------|------------|------|----------|
| `risk` | `RISK_PERCENT` × 交易资金,按止损距离反推 | 表单可选 / 同步交易所 | 实盘人工,关键位自动(须 `KEY_AUTO_ORDER_ENABLED=true`),趋势回调,顺势加仓 |
| `full_margin` | **合约账户可用 USDT × `FULL_MARGIN_BUFFER_RATIO`**(保留 2 位小数) | BTC/ETH **10x**,其它 **5x**(与 `BTC_LEVERAGE`/`ALT_LEVERAGE` 一致) | **实盘人工下单**,**关键位触价**(须 `KEY_AUTO_ORDER_ENABLED=true`);阻力/支撑仅提醒 |

全仓模式下:

- **`KEY_AUTO_ORDER_ENABLED=false`(默认)** 时,触价程序自动单也不执行.
- **`KEY_AUTO_ORDER_ENABLED=true`** 时,仅触价可程序自动开仓;箱体/斐波等仍禁止.
- 仍校验 **计划盈亏比**(实盘用 `MANUAL_MIN_PLANNED_RR`;触价开仓用 `KEY_AUTO_MIN_PLANNED_RR`).
- 下单张数由 `prepare_order_amount` + 交易所 `amount_to_precision` 决定.
- `order_monitors.initial_stop_loss` 仍记录**开仓时**止损快照;交易记录复盘以该快照为准.
- 已存在的 **箱体突破 / 收敛突破 / 斐波 / 假突破** 监控:进程启动时**自动撤销**并企业微信通知.

## 不允许(全仓模式)

- 关键位:箱体突破,收敛突破,斐波,假突破(添加时拒绝;已存在则启动时撤销).
- 趋势回调,顺势加仓(策略入口返回明确错误).

**允许(须 `KEY_AUTO_ORDER_ENABLED=true`):** 关键位 **回调触价开仓** / **突破触价开仓**(程序盯价,触达/穿越计划入场后市价成交,无交易所挂单;全仓下仅允许一条待触发).

## `KEY_AUTO_ORDER_ENABLED`(三所统一,默认 `false`)

| 计仓 | 开关 | 效果 |
|------|------|------|
| `risk` | `false` | 关闭全部关键位程序自动单(含触价);顺势加仓不受影响 |
| `risk` | `true` | 关键位全套自动(旧行为) |
| `full_margin` | `false` | 关闭触价自动 |
| `full_margin` | `true` | 仅触价自动 |

详见各实例目录 `关键位自动下单说明.md`.

## 用脚本更新三所 `.env`

详见 **[env-sync-scripts.md](./env-sync-scripts.md)**.常用命令:

```bash
git pull

# 仅补全计仓相关项(缺省 risk,缓冲 0.98)
python scripts/sync_four_exchange_position_sizing_env.py

# 无仓后切换全仓
python scripts/sync_four_exchange_position_sizing_env.py --set-mode full_margin

# 无仓后切回以损定仓
python scripts/sync_four_exchange_position_sizing_env.py --set-mode risk

# 计仓 + 划转一并补全
python scripts/sync_four_exchange_env.py

pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate
```
