
jackandCursor
f11c6507b0
实盘执行改走 Bitget v2 REST,止损挂到服务端
丢掉 Hummingbot 的 PositionExecutor。它的连接器只暴露 LIMIT / LIMIT_MAKER /
MARKET,没有触发单,于是 control_stop_loss() 只能本地盯价、触发时才发市价单
——**进程一死仓位就是裸的**。而交易所本身支持 place-order 带
presetStopLossPrice,下单时就把止损挂到服务端。绕过连接器不是图省事,是为了
消掉一整类故障。顺带 TripleBarrierConfig 只有单级止盈,装不下两级,自己写更短。
## 三条出场腿各自挂在哪
止损 交易所侧(presetStopLossPrice,随入场单一起到)→ 进程死了仍在
止盈 交易所侧(post_only reduce-only 限价) → 进程死了仍在
超时 本进程,48 分钟到点市价平
所以进程死掉只会让持仓超过 48 根,不会变成裸仓,退化是良性的。
## 止盈不能用 presetStopSurplusPrice
它触发后按市价执行,而成本模型里止盈是 maker——那 60% 的出场不吃滑点、按
maker 费率计(LEG_IS_TAKER)。用 preset 会让这部分变成 taker,预算就不成立。
所以止盈单独挂 post_only + reduceOnly 限价单。止损反过来必须市价:stop-limit
在急跌里可能不成交,损失远大于省下的费。
## clientOid 是交易所级幂等,但要小心两个坑
信号键形如 SOL:1787904388411:+1,`:` 和 `+` 未必被接受,带过去直接拒单——而
拒单发生在入场腿上,等于这笔信号静默漏掉。
清洗时不能简单把非字母数字换成下划线:那样 `+1` 和 `-1` 都变成 `_1`,同一根上
的多空信号得到相同 oid,第二笔被当重复拒掉。方向显式编码为 L/S。
用 clientOid 而非只靠本地去重,是因为「已发出但没收到回复」这种情况本地判不了,
重试就会开两次仓。
## 空跑要走完 open_position
第一版在 on_signal 里 `if dry: return`,结果数量取整、价位对齐 tick、请求体
构造全都没被验到。现在空跑走完整条路径,不下真单由 Bitget(dry=True) 负责。
实测两笔:SOL 多头 entry 106.706 / ATR 11bp → 止损 106.471、止盈 107.058 与
107.645;BTC 空头 → 止损在上方 79747.5、止盈在下方。半仓精确一半(SOL 2.3+2.3、
BTC 0.0031+0.0031)。
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-28 16:07:28 +08:00
..
2026-08-27 01:05:12 +08:00
2026-08-28 03:23:07 +08:00
2026-08-28 16:07:28 +08:00
2026-08-28 04:04:44 +08:00
2026-08-27 17:47:41 +08:00
2026-08-28 06:19:00 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 01:05:12 +08:00
2026-08-27 17:47:41 +08:00
2026-08-27 17:47:41 +08:00
2026-08-27 17:47:41 +08:00
2026-08-27 17:47:41 +08:00
2026-08-27 17:47:41 +08:00
2026-08-27 17:47:41 +08:00
2026-08-27 17:47:41 +08:00
2026-08-27 17:47:41 +08:00
2026-08-27 17:47:41 +08:00
2026-08-28 00:05:56 +08:00
2026-08-28 00:05:56 +08:00
2026-08-28 00:05:56 +08:00
2026-08-28 03:23:07 +08:00
2026-08-28 04:05:01 +08:00
2026-08-28 04:05:01 +08:00
2026-08-28 04:04:44 +08:00
2026-08-28 04:05:01 +08:00
2026-08-28 05:08:03 +08:00
2026-08-28 04:36:39 +08:00
2026-08-28 05:08:03 +08:00
2026-08-28 05:08:34 +08:00