KAMA 剝頭皮策略:GPT 寫碼、五重過濾與 795% 回測拆解|Quant Strategies Ep 7 筆記
第 7 課・共 18 課
目錄
Algo-trading with Saleh 的 Saleh 在片中做了一個角色實驗:他扮演「懂策略但不熟程式」的交易員,把 考夫曼適應性移動平均線 KAMA 剝頭皮策略的程式碼全部交給 GPT 撰寫,自己只負責出題與糾錯。標題上的「795%」是他特定設定下(BTC-USDT、2022 年起、倉位乘三倍後)的回測教學案例數字,並非實盤成績。這條片最有價值的部分不是結果,而是「出題—驗碼—糾錯—重跑」的迭代過程,以及每一重過濾背後的取捨。
學習重點
- 策略核心:價格在 KAMA 之上視為升勢、之下視為跌勢;KAMA 按市場效率自動變速,訊號比 Supertrend 早約 8 至 10 根 K 線(講者圖表演示)。
- 倉位與出場:市價單入場,每單風險為可用保證金的 3%,止蝕與止盈各設於入場價加減 2.5 倍 ATR,倉位用
risk_to_qty反推並計入手續費。 - 五重過濾逐次疊加:ADX 高於 50、大時間框架 KAMA 同向、Choppiness Index 低於 50、布林帶寬度乘 100 低於 7、平倉後冷卻 10 根 K 線;每加一重便重跑 15m/30m/1h/4h 四個時間框架對照夏普比率。
- 首輪回測的教訓:未加過濾時交易多達數千宗,手續費高達 12,000 美元,比起始本金 10,000 美元還多——剝頭皮策略的頭號敵人是成本。
- 795% 的由來:四時間框架全部錄得低回撤後,講者把倉位數量乘以 3,最大回撤升至 -24%,回測盈利才接近 800%——是槓桿化的倉位調整,不是訊號本身的邊際。
詳細筆記
KAMA:會自動變速的均線
Saleh 開宗明義說 KAMA 已取代 Supertrend 成為他最喜歡的指標。用法表面很簡單:線轉紅是跌勢、轉綠是升勢;換成程式語言,就是當前價格在 KAMA 之上視為升勢、之下視為跌勢。真正令他著迷的是反應速度——他在圖表上並排 KAMA 與 Supertrend 比較,同一段升勢中 Supertrend 轉綠的位置,KAMA 早約 8 至 10 根 K 線已發出訊號,跌勢亦然。KAMA 的全名是 Kaufman Adaptive Moving Average,「適應性」指它會先量度市場走勢的效率——期內淨升跌幅相對逐日波動總和的比例——再據此自動調節平滑速度:走勢越單邊,均線越貼價;橫行反覆時則放慢抗噪。對剝頭皮而言,早幾根 K 線確認方向,入場價與止蝕距離都會實質改善。講者提醒不要被名字嚇怕——判斷邏輯與普通均線完全相同,分別只在「變速」。

截圖出自原片(Algo-trading with Saleh):同一段升勢,KAMA(綠紅線)的轉向訊號比 Supertrend 早約 8 至 10 根 K 線。
第一版策略與 GPT 的「畫蛇添足」
Saleh 給 GPT 的提示詞(prompt)很具體:用 KAMA 判斷趨勢方向的趨勢跟蹤策略,每單風險 3%,止蝕止盈設於 2.5 倍 ATR。GPT 交出的 Jesse 框架程式碼,他逐段核對後認為大體正確:KAMA 與 ATR 的屬性語法無誤,入場規則正是他口述的邏輯(摘錄自原片教學):
def should_long(self) -> bool:
# Enter long if the price is above KAMA
return self.price > self.kama
def should_short(self) -> bool:
# Enter short if the price is below KAMA
return self.price < self.kama
開倉部分用市價單,止蝕為入場價減 2.5 倍 ATR,數量用 Jesse 的 risk_to_qty 以可用保證金、3% 風險、入場價、止蝕價與當前費率反推(摘錄自原片教學):
def go_long(self):
entry_price = self.price
stop_loss = entry_price - (self.atr * 2.5)
qty = utils.risk_to_qty(self.available_margin, 3,
entry_price, stop_loss, fee_rate=self.fee_rate)
self.buy = qty, entry_price
止蝕止盈單在 on_open_position 事件內提交,短倉方向完全鏡像。但 GPT 同時自作主張加了一個 update_position 方法:價格反向穿越 KAMA 便平倉。Saleh 試過後發現拖累表現,而且這根本不是他要求的功能,於是直接刪除。這是「GPT 代寫程式」工作流的第一課:工具會畫蛇添足,每一行都要當作陌生人寫的程式來審。
首輪回測:手續費吃掉本金
回測在 Jesse 進行,標的 BTC-USDT,由 2022 年跑至影片拍攝前數日,同時開 15 分鐘、30 分鐘、1 小時、4 小時四個時間框架,用 benchmark 頁並排對照。結果 15 分鐘圖慘不忍睹——交易次數以千計,光是手續費就付了約 12,000 美元,比起始本金 10,000 美元還多。30 分鐘圖因交易較少而稍好,1 小時與 4 小時再穩定一些。講者的結論很直接:需要過濾器。值得留意他的驗證習慣——同一策略同時跑四個時間框架、並排比較,而不是挑一個順眼的框架交差;若只看 4 小時圖,第一版策略未必顯得那麼差。這一輪的價值在於示範了剝頭皮策略的典型死法——不是訊號全錯,而是成本把微薄的邊際磨光,交易越密,死得越快。
過濾一:ADX 高於 50
Saleh 向 GPT 提出兩個修改:刪掉未經授權的 update_position,並加入 平均趨向指數 ADX 過濾——ADX 低於 50 不開倉。他解釋這是他的慣用手法:趨勢跟蹤策略最怕橫行市,ADX 只量強度不分方向,正好用來剔除沒有趨勢的時段。GPT 交回的碼正確地加了 ta.adx 屬性並在入場規則加上條件,卻又多寫了一個市價單策略用不上的 should_cancel_entry 方法,再次被刪。重跑後四個時間框架全部顯著改善並轉虧為盈,4 小時圖最好;交易次數降至 573 宗,但手續費仍達約 7,000 美元——講者特意點出:若這筆錢留在結餘裏,利潤會可觀得多。
過濾二:大時間框架 KAMA 雙重確認
第二重過濾是講者的另一慣技:同一指標、放大時間框架再算一次,兩個時間框架方向一致才開倉。圖表上他用 14 期與 250 期兩條 KAMA 示範(因社區版指標不能設時間框架),快線轉綠但慢線仍紅時不做交易,藉此避過一次假突破。在 Jesse 裏則用內建 get_candles 直接取大時間框架 K 線:一般情況取 4 小時,若交易框架本身已是 4 小時則取 6 小時。這一步 GPT 犯了個有趣錯誤——定義了 long_term_kama 與 trend_direction 屬性,卻忘了在入場規則裏使用它們。Saleh 發現後要求把方向判斷直接收納進 should_long/should_short,程式反而更簡潔。重跑後夏普比率略升,30 分鐘圖的淨值曲線形態他較喜歡。
過濾三與四:Choppiness Index 與布林帶寬度
第三重是 波動雜亂指數 Choppiness Index,邏輯與 ADX 相反:ADX 要高(趨勢夠強),CHOP 要低(走勢不雜亂)。他以 50 為閾值,圖表上橫行段 CHOP 明顯高企、趨勢段回落,於是加入「CHOP 低於 50 才開倉」。至此入場條件增至四重,重跑後四個框架的夏普比率全面上升(15 分鐘約 1.0、30 分鐘約 1.3)。
第四重針對「追入急升段」的風險:價格無故暴漲後才出現的訊號,回吐機會大。量度方法是 布林帶 Bollinger Bands 的帶寬(Bollinger Bandwidth)——上下軌差距窄時數值接近 1,暴漲時可升至 7 至 9。規則定為「帶寬乘 100 低於 7 才開倉」,乘 100 只是為了與 TradingView 的顯示口徑一致。GPT 初稿用手動方式由布林帶上下軌自行計算帶寬,Saleh 要求改用 Jesse 內建的 bollinger_bands_width 指標——內建函數經過驗證,比自己重寫少一層出錯機會。
冷卻機制與最終入場規則
最後一重是行為層面的冷卻機制。剝頭皮策略持倉短,常見情況是平倉後入場條件仍然成立,於是立即再開一倉,等於在同一趨勢裏反覆進出。Saleh 要求:記下上次交易的 K 線序號,平倉後至少隔 10 根 K 線才准再開倉。GPT 初稿把序號更新寫在 go_long/go_short(開倉時),講者指出時點錯誤,改在 on_close_position 事件更新才對。最終入場規則按原片講解可重構如下:
def should_long(self) -> bool:
return (self.price > self.kama # 價格在 KAMA 之上
and self.long_term_trend == 1 # 大時間框架 KAMA 同向
and self.adx > 50 # 趨勢強度達標
and self.chop < 50 # 市況不雜亂
and self.bbw * 100 < 7 # 非暴漲後追入
and self.index - self.vars['last_trade_index'] >= 10) # 冷卻期完結
回測成績與 795% 的由來
五重過濾齊備後重跑四個時間框架:15 分鐘圖夏普比率 1.9、卡瑪比率(Calmar ratio)3.7,各框架最大回撤幾乎全部低於 10%;30 分鐘圖夏普 1.3,淨值曲線持續向上。講者認為 1 小時與 4 小時圖可以「退役」,集中看 15 與 30 分鐘。接下來是關鍵一步:既然回撤低,他把倉位數量直接乘以 3 再跑——最大回撤升至約 -24%,回測盈利接近 800%(標題的 795%),並補充自己的風險上限是 -30%,言下之意還有加碼空間。

截圖出自原片(Algo-trading with Saleh):加碼前的四框架對照——交易宗數由 490 至 46 不等,淨盈利 49.2% 至 86%,最大回撤 -12.9% 至 -21.3%。

截圖出自原片(Algo-trading with Saleh):30 分鐘圖淨值曲線(紫)對照 BTC-USDT(黃),回測期約 1048 日、由 2022 年 1 月起,共 179 宗已平倉交易。
換言之,795% 的構成是「訊號邊際 × 3 倍倉位」:未加碼前各框架淨盈利約 49% 至 86%(2022 年初起約 2.87 年),加碼三倍後回撤與回報同步放大。片末講者介紹其網站的策略源碼庫與社群抽獎,屬頻道推廣內容,本筆記不轉載。
🙏 覺得內容有用?本站所有內容免費提供,使用推薦碼開戶就是支持我們繼續營運的最大鼓勵:
ZA Bank 邀請碼 P20923
—— 你享 HKD 2,000 迎新獎賞,本站獲得營運支持。
立即開戶 →
(聯盟連結|投資涉及風險,受條款及細則約束,此資料僅可於香港境內分發)
MT5 可行性速評
| 項目 | 評估 |
|---|---|
| 邏輯可移植性 | 高。MT5 內建 iAMA(Adaptive Moving Average,即 KAMA)、iADX、iBands,價格與均線比較、ATR 止蝕(iATR)、市價單進場全是標準 EA 結構;大時間框架 KAMA 只需對 PERIOD_H4 再開一個 iAMA 句柄。 |
| 平台限制 | Choppiness Index 與布林帶寬度均無內建指標,前者須自寫自訂指標或找程式庫,後者可由 iBands 上下軌自行計算(數行程式);冷卻機制要用全域變數記錄上次平倉的 K 線時間。加密貨幣永續合約亦非一般 MT5 券商標的,移植後所有閾值須重新驗證。 |
| 評級 | ⚠️ 核心邏輯(KAMA+ADX+ATR 倉位)可完整移植,但五重過濾中有兩重指標要自行實現,工作量與出錯面上升;且過濾越多、參數越多,移植後重新擬合的誘惑越大。 |
| MQL5 寫法提示 | 見下 |
int kama_h = iAMA(_Symbol, PERIOD_CURRENT, 14, 2, 30, 0);
int kama_h4 = iAMA(_Symbol, PERIOD_H4, 14, 2, 30, 0);
int adx_h = iADX(_Symbol, PERIOD_CURRENT, 14);
double kama[], kama4[], adx[];
CopyBuffer(kama_h, 0, 0, 1, kama); // 升勢條例:Close[0] > kama[0]
CopyBuffer(kama_h4, 0, 0, 1, kama4); // 大框架同向:Close_H4 > kama4[0]
CopyBuffer(adx_h, MAIN_LINE, 0, 1, adx); // && adx[0] > 50
注意:即使移植成功,MT5 策略測試器跑出的回測同樣會過度擬合——ADX 閾值、CHOP 閾值、帶寬上限、冷卻 K 線數、倉位倍數全是看著結果調出來的參數,換平台不解決方法論問題。
欣利克的看法
- 防坑檢查一:795% 的構成要拆開看。這個數字來自「倉位乘三倍」後的回測讀數,不是訊號本身的邊際。未加碼前,2022 年初起約 2.87 年內四個時間框架淨盈利約 49% 至 86%——這才是策略的「原材料」成績。同一操作若套在虧損策略上,虧損亦會放大三倍;把槓桿化回測報酬當策略實力的講法,一律要先除回倍數。
- 防坑檢查二:剝頭皮對成本極度敏感。原片自己提供了最佳例證:未加過濾時手續費 12,000 美元對 10,000 美元本金,加過濾後仍付約 7,000 美元。回測用的費率假設、實際 Taker 費用、滑點與資金費率的差距,任何一項都足以扭轉這類高頻策略的結論,讀者須自行核實。
- 防坑檢查三:參數全是看著結果調的。ADX 50、CHOP 50、帶寬 7、冷卻 10 根、倉位乘三倍——每一個數字都是回測跑出來之後才決定的,屬教科書式的過度擬合流程。片中沒有樣本外驗證(out-of-sample test),795% 能否在未來重現,影片本身沒有提供任何證據。
- 觀點比較——值得學的部分:Saleh 示範的「出題—驗碼—糾錯—重跑」循環很紮實:GPT 三次畫蛇添足(多寫平倉邏輯、多寫取消掛單、忘了引用自己定義的屬性),他每次都逐行抓出來;每加一重過濾便重跑四個時間框架對照夏普比率。把 GPT 當「需要嚴格 code review 的初級程式員」而非神諭,這個定位值得借鑑。
- 時效提醒:回測數據截至影片拍攝前(2024 年底),回測期涵蓋 2022 年起的加密貨幣週期;截至 2026 年中,市場結構、費率與流動性環境已有變化,片中任何數字都不代表當前條件。本文僅為學習記錄,不構成任何買賣建議。
名詞解釋
- 考夫曼適應性移動平均線 KAMA:按市場效率自動調節平滑速度的均線,單邊市緊貼價格、橫行市抗噪;本策略以價格與它的相對位置定趨勢方向。
- 平均趨向指數 ADX:量度趨勢強度而不分方向;本策略要求高於 50 才開倉,剔除橫行市。
- 波動雜亂指數 Choppiness Index:量度走勢雜亂程度,邏輯與 ADX 相反;本策略要求低於 50,雙重確認市況適合趨勢跟蹤。
- 布林帶 Bollinger Bands:以均線加減標準差構成的通道;本策略用其帶寬過濾暴漲後的追入訊號。
- 平均真實波幅 ATR:量度每根 K 線平均波動範圍;本策略的止蝕與止盈均設於入場價加減 2.5 倍 ATR。
- 剝頭皮 Scalping:持倉時間極短、追逐微小價差的交易風格,對手續費與滑點極度敏感。
- 夏普比率 Sharpe Ratio:每單位波動所換取的超額回報;講者每加一重過濾便以此對照四個時間框架的變化。
- 最大回撤 Drawdown:淨值由高位回落的最大幅度;講者以 -30% 為個人上限,據此決定倉位可乘大的空間。
- 過度擬合 Overfitting:策略過度遷就回測數據的噪音;本片所有閾值均為看著回測結果調校,屬高風險案例。
- 槓桿 Leverage:以保證金放大購買力;片中倉位乘三倍後的 795% 回測報酬正是槓桿化結果。
- 回測 Backtesting:以歷史數據檢驗交易規則;本課示範了多時間框架對照與逐重過濾的驗證節奏。
- 大型語言模型 LLM:如 GPT 一類的文字生成模型;本片示範以它代寫策略程式碼,但每一行仍需人工核對。
常見問題 FAQ
KAMA 與普通移動平均線有何分別?
普通均線(SMA、EMA)的平滑速度固定,快則噪音多、慢則滯後大,兩難。KAMA 會先計算市場的效率比率:走勢越單邊,比率越高,均線便自動切換至接近兩期 EMA 的快速模式緊貼價格;橫行反覆時則切換至慢速模式拉平雜訊。用講者的圖表演示,同一段趨勢中 KAMA 的轉向訊號比 Supertrend 早約 8 至 10 根 K 線。用法本身與普通均線無異——價格在線上為升勢、線下為跌勢。
795% 的回測報酬可以當真嗎?
數字屬回測教學案例,且構成要拆開看:它是「倉位乘三倍」之後的讀數。加碼前,2022 年初起約 2.87 年內四個時間框架淨盈利約 49% 至 86%、最大回撤約 -13% 至 -21%;乘三後回撤升至約 -24%,回報同步放大至接近 800%。此外所有參數(ADX 50、CHOP 50、帶寬 7、冷卻 10 根)都是看著回測結果調出來的,影片亦無樣本外驗證,未來能否重現並無保證。
為何要同時用 ADX 和 Choppiness Index?不是重複了嗎?
兩者量度的角度不同、方向相反。ADX 量度趨勢強度,數值高代表有強趨勢(不分升跌);Choppiness Index 量度走勢的雜亂程度,數值高代表市況反覆無向。講者的邏輯是雙重確認:既要趨勢夠強(ADX > 50),又要市況不雜亂(CHOP < 50),兩個條件同時成立才開倉。當然,兩個閾值都是可調參數,條件越多,擬合回測數據的風險也越高。
這條片對「用 GPT 寫交易策略」有甚麼啟示?
最核心的啟示是定位:GPT 是手快但會犯錯的初級程式員,不是策略權威。片中 GPT 三次畫蛇添足——加了一個未經要求的反向平倉邏輯、為市價單策略寫了用不上的取消掛單方法、定義了大時間框架屬性卻忘了在入場規則引用——全靠講者逐行審碼抓出。出題要具體(指標、風險百分比、止蝕倍數寫清楚)、每次只改一個變數、改完即重跑對照,這套紀律比「GPT 會寫碼」本身重要得多。
原影片
本文整理自以下影片,版權屬原創作者所有,建議配合原片觀看: