KAMA 剝頭皮策略:GPT 寫碼、五重過濾與 795% 回測拆解|Quant Strategies Ep 7 筆記

第 7 課・共 18 課

⚠️ 本站內容僅作教育用途,不構成投資建議。投資涉及風險,作出任何投資決定前請諮詢持牌專業人士。
目錄

Algo-trading with Saleh 的 Saleh 在片中做了一個角色實驗:他扮演「懂策略但不熟程式」的交易員,把 考夫曼適應性移動平均線 KAMA 剝頭皮策略的程式碼全部交給 GPT 撰寫,自己只負責出題與糾錯。標題上的「795%」是他特定設定下(BTC-USDT、2022 年起、倉位乘三倍後)的回測教學案例數字,並非實盤成績。這條片最有價值的部分不是結果,而是「出題—驗碼—糾錯—重跑」的迭代過程,以及每一重過濾背後的取捨。

學習重點

詳細筆記

KAMA:會自動變速的均線

Saleh 開宗明義說 KAMA 已取代 Supertrend 成為他最喜歡的指標。用法表面很簡單:線轉紅是跌勢、轉綠是升勢;換成程式語言,就是當前價格在 KAMA 之上視為升勢、之下視為跌勢。真正令他著迷的是反應速度——他在圖表上並排 KAMA 與 Supertrend 比較,同一段升勢中 Supertrend 轉綠的位置,KAMA 早約 8 至 10 根 K 線已發出訊號,跌勢亦然。KAMA 的全名是 Kaufman Adaptive Moving Average,「適應性」指它會先量度市場走勢的效率——期內淨升跌幅相對逐日波動總和的比例——再據此自動調節平滑速度:走勢越單邊,均線越貼價;橫行反覆時則放慢抗噪。對剝頭皮而言,早幾根 K 線確認方向,入場價與止蝕距離都會實質改善。講者提醒不要被名字嚇怕——判斷邏輯與普通均線完全相同,分別只在「變速」。

KAMA 與 Supertrend 訊號速度對照

截圖出自原片(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_kamatrend_direction 屬性,卻忘了在入場規則裏使用它們。Saleh 發現後要求把方向判斷直接收納進 should_longshould_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_longgo_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%。

30 分鐘圖淨值曲線

截圖出自原片(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)、iADXiBands,價格與均線比較、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 線數、倉位倍數全是看著結果調出來的參數,換平台不解決方法論問題。

欣利克的看法

名詞解釋

常見問題 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 會寫碼」本身重要得多。

原影片

本文整理自以下影片,版權屬原創作者所有,建議配合原片觀看:

來源:https://www.youtube.com/watch?v=uDFZsIqHjT4

🏦 ZA Bank 開戶優惠

本站所有內容免費提供。多使用網站的推薦碼,就是對我們繼續製作優質內容的最大鼓勵和支持 🙏

去 ZA Bank 開戶,享價值 HKD 2,000 迎新獎賞,仲有機會享 USD 30 指定美股兌換券!

  • 💛 全線上開戶,無需前往分行
  • 💛 無最低存款要求,零賬戶管理費
  • 💛 24x7 銀行服務

專屬邀請碼:P20923

立即開戶 → (聯盟連結)