描述
马丁格尔策略涉及的不是一个决策,而是三个:何时加仓、何时放弃、何时退出。大多数实现把三者合并为一个阈值,随后才付出惨痛代价,发现其失效方式——阶梯加仓不断翻倍,直到账户资金耗尽。 本软件包将三者分开。add 和 flatten 由价格相对于平均入场价的偏离程度触发;max_layers 则是独立的绝对上限,无论回撤多大都不能突破。返回的层级索引告诉执行器当前信号属于加仓阶梯的哪一层,因此实际订单数量由执行器决定,而非策略决定。 适用场景 • Agent 持有经过加仓摊平的仓位,需要判断下一步回撤是否足以触发再次加仓。 • 需要从机制上展示:为什么没有层数上限的马丁格尔是导致破产的策略,而非挽回损失的策略。 • 风控层只需要一个布尔值:这组阶梯仓位是否已达到层数上限? 不要用本软件包为尚未计算仓位规模的杠杆操作辩护。软件包返回层级索引;如何将它换算成名义敞口完全由你决定,本软件包有意不实现这一功能。 本软件包有意不包含的内容 这是框架版本,不是经过调校的生产版本。具体而言: • 不计算仓位规模。不包含 base_amount、翻倍乘数或由此得到的名义金额。这些计算由你负责。 • 不处理杠杆或保证金模式。现货与永续合约的行为不同;这应由执行器处理。 • 不计算平均入场价。avg_entry 和 layers 由你传入,策略不会根据交易所成交历史猜测你的仓位。 • 没有预设或调校好的阈值。 • 代码中没有默认阈值。scripts/martingale_layer.py 会抛出 PARAM_INCOMPLETE, 而不是退回某个数值。静默采用默认值会让你误以为正在运行经过校准的系统, 实际上运行的却是别人的参数。 每一项决策边界都通过输入提供。这就是完整的约定。 决策约定 • action:含义 — 执行器的责任 • seed:当前无仓位,没有需要管理的仓位 — 如果希望建立敞口,则进行首笔建仓 • add:回撤已越过触发阈值,且层数上限允许再加一层 — 自行计算订单数量;layer 字段表明所处层级 • flatten:反弹已越过退出触发阈值 — 平掉整组阶梯仓位,而非仅平掉一层 • wait:仍在阈值区间内,或已达到层数上限 — 不执行操作 输入:drop_threshold 和 rebound_threshold 为正的小数比例(0.02 = 2%),max_layers 为 >= 1 的整数层数上限。状态:avg_entry、layers,以及可选的 price。 输出结构 { "action": "add", "layer": 3, "price": 61250.0, "reason": "drawdown -2.61% <= -2.50% - double into layer 3 of 4" } action 是唯一必须用于分支判断的字段。reason 用于日志,以及供 Agent 向人复述原因——不要解析它。 运行方式 python3 scripts/martingale_layer.py \ --params references/params-example.json \ --symbol BTC/USDT \ --interval 15m references/params-example.json 使用简洁、明显仅供演示的数值。 它们的作用是让命令第一次就能运行,而不是因为这些数值合适。 传入仓位状态: python3 scripts/martingale_layer.py --params my.json --state '{"avg_entry": 61250.5, "layers": 2}' 校准阈值 1. drop_threshold — 加仓阶梯的步长。步长越小,层级越多,平均入场价的变化越平滑,但每一层也会更早触发,因此第 1 层的建仓数量必须更小。应根据实际交易周期内该交易品种的典型不利波动幅度来校准,而不是按日历时间校准。 2. rebound_threshold — 退出阈值。它必须是能够达到的。如果反弹阈值远高于平均回撤步长,这组阶梯仓位就会一直无法平仓,最终达到层数上限。常见设置是反弹触发幅度等于或略高于下跌步长。 3. max_layers — 唯一提供保护的输入。反向推算:对于逐层翻倍的加仓阶梯,总敞口为 base (2^n - 1)。选择总敞口仍在你承受范围内的最大 n,再使 base 足够小,确保这一条件成立。应把它视为资金约束,而不是调参旋钮——绝不要在这组阶梯仓位尚未结束时提高它。 将历史数据按时间顺序分为 70/30 两段;在前一段选择参数,在后一段验证。只能在前一段存活的参数组合属于曲线拟合。 已知限制 • 这种结构本身没有优势。马丁格尔将许多小额盈利转化为罕见的灾难性亏损;把阈值分开并不会改变这种分布,只会让破产边界变得明确。 • avg_entry 按可信输入处理。如果执行器上报的平均入场价过时或错误,后续所有决策都会出错。 • 软件包不区分交易方向,也不了解资金费率、强平价格或借贷成本,而这些因素对长期维持的阶梯仓位都有决定性影响。 • 在 layers 值相同的情况下连续出现两次 add 信号,意味着执行器未能成交;策略有意采用无状态设计,不会替你去重。 免责声明 这是用于研究和教育的决策框架,不是投资建议,不是盈利承诺,也不是回测结果。加密货币衍生品的亏损可能超过保证金。你需要对所选参数以及执行器发出的每一笔订单负责。