描述
馬丁格爾策略涉及的不是一個決策,而是三個:何時加倉、何時放棄、何時退出。大多數實作把三者合併為一個閾值,隨後才付出慘痛代價,發現其失效方式——階梯加倉不斷翻倍,直到帳戶資金耗盡。 本套件將三者分開。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 訊號,意味著執行器未能成交;策略刻意採用無狀態設計,不會替你去重。 免責聲明 這是用於研究和教育的決策框架,不是投資建議,不是獲利承諾,也不是回測結果。加密貨幣衍生商品的虧損可能超過保證金。你需要對所選參數以及執行器發出的每一筆訂單負責。