雲圖剝頭皮策略:一目均衡表+三重過濾、Python 實現與 223% 回測拆解|Quant Strategies Ep 9 筆記
第 9 課・共 18 課
目錄
Algo-trading with Saleh 的 Saleh 在片中公開一個他自稱私人的剝頭皮策略 Cloud Scalper:以一目均衡表雲圖判斷趨勢,用 Python(Jesse 框架)實現,標題的「223%」是他特定設定下的回測教學案例數字,並非實盤成績。他特別強調全程沒有跑參數優化,認為這降低了過度擬合的機會——這個說法是否成立,正是本課值得拆解的地方。
學習重點
- 策略核心:一目均衡表的轉換線高於基準線,並且先行帶 A 高於先行帶 B(雲圖同向),兩重確認才視為升勢;短倉完全鏡像。講者明言第二重確認是用來避開假突破。
- 倉位與出場:市價單入場,每單風險為可用保證金的 3%,止蝕設於入場價減 2.5 倍 ATR,止盈設於加 3.2 倍 ATR——盈虧比略大於 1。
- 首輪回測赤裸版慘敗:逾 1,000 宗交易、手續費逾 6,000 美元;其後逐重加入 ADX>50、布林帶寬度<5、4 小時圖 EMA200 三重過濾,交易次數大幅收斂。
- 223% 的由來:未放大倉位前 15 分鐘圖最大回撤僅 -6%,講者把倉位數量乘 4 再乘 5,回撤升至 -28%,回測淨盈利讀數才變成 223%——是倉位放大後的結果。
- 除錯過程同樣值得學:片中至少三個程式錯誤(span A 打錯、止盈加減號倒轉、BBW 方向寫反),全靠回測結果「不正常」才逐個揭出。
詳細筆記
核心邏輯:雲圖兩重確認
Saleh 先在 TradingView 上講解主指標一目均衡表 Ichimoku Cloud,並把跟策略無關的遲行線(他指「這條綠線沒用」)移除。這個指標的特點是一圖多用:轉換線與基準線分別由 9 期與 26 期的高低價中點算成,反映短期與中期動力;先行帶 A、B 則把更長期的中點向前投射 26 期,兩線之間的著色區域就是「雲圖」,兼具趨勢方向與支持阻力的含義。入場規則分兩層:第一層,轉換線 Conversion Line(藍線)要在基準線 Base Line(紅線)之上,代表短期動力向上。但他明言不會即時入場,要等第二層確認——由先行帶 A 與先行帶 B 圍成的雲圖本身也轉為上升排列(A 在 B 之上)。兩者同時成立,才是有效升勢;短倉條件完全相反。
他預期讀者會問:「早些入場不是賺更多嗎?」他的回應是:圖表上這是容易的例外,實戰中大量假突破會被第二重確認擋下。這是典型「用滯後換取勝率」的取捨——確認越足,入場越遲,但假訊號越少。

截圖出自原片(Algo-trading with Saleh):BTC-USDT 15 分鐘圖上的一目均衡表——轉換線(藍)、基準線(紅)與先行帶圍成的雲圖。
Python 實現:Jesse 框架的策略骨架
轉到 Jesse 建立策略,命名 CloudScalper,並改用 VS Code 編寫(他認為比儀表板內建編輯器好用)。趨勢判斷寫成一個屬性:調用 ta.ichimoku_cloud 時他刻意不傳任何參數,全部用預設值,理由是「策略越簡單,過度擬合機會越低」(摘錄自原片教學):
@property
def trend(self):
cloud = ta.ichimoku_cloud(self.candles)
if cloud.conversion > cloud.base and cloud.span_a > cloud.span_b:
return 1
elif cloud.conversion < cloud.base and cloud.span_a < cloud.span_b:
return -1
return 0
trend 回傳 1、-1 或 0,should_long 與 should_short 只需檢查它是否等於 1 或 -1。這與上一課 Trend Wave Rider 的寫法一致:每個條件獨立成屬性,入場函數只用 and 串連,方便日後疊加過濾器。
倉位方面,入場用市價單,每單風險為可用保證金的 3%,以 Jesse 內建的 risk_to_qty 反推數量,並傳入交易所費率。止蝕設於入場價減 2.5 倍 ATR——他解釋不想止蝕太貼,否則會錯失大量好機會(摘錄自原片教學):
def go_long(self):
entry = self.price
stop = entry - ta.atr(self.candles) * 2.5
qty = utils.risk_to_qty(self.available_margin, 3,
entry, stop, fee_rate=self.fee_rate)
self.buy = qty, entry
止盈與止蝕單則在 on_open_position 內才提交:止盈設於入場價加 3.2 倍 ATR(短倉相反),數量等於當前倉位。他特別提到一個 Jesse 細節:在 go_long 內直接掛止蝕止盈只適用於期貨交易、不適用於現貨,所以他習慣統一在開倉後才掛單。止盈距離(3.2 倍)略大於止蝕距離(2.5 倍),即贏的單平均比利潤大、輸的單輸得少,盈虧比約 1.28:1。

截圖出自原片(Algo-trading with Saleh):go_long 以市價單入場,止蝕距離 2.5 倍 ATR,risk_to_qty 以 3% 風險反推倉位數量。
第一輪回測:1,000 宗交易與 6,000 美元手續費
首輪回測設定:Binance 永續合約、BTC-USDT、15 分鐘圖,期間由 2024 年初至影片錄製前一日(2025 年 1 月中),開啟 fast mode 與 benchmark。第一次運行甚至沒有執行——程式把條件打成「span A 大於 span A」;修正後第二次運行,淨值曲線明顯異常,追查後發現止盈的加減號倒轉(長倉止盈寫成減 ATR)。兩個錯誤都是靠「結果看起來不對」倒逼出來的。
修正後的赤裸版成績不佳:超過 1,000 宗交易、單是手續費已逾 6,000 美元。Saleh 對此毫不意外,並說了一句值得記下的話:單靠一個指標,不可能找到好策略。這正是策略開發的起點而非終點。
除錯實錄:三個錯誤,三種教訓
值得單獨記下的是片中的除錯過程。第一個錯誤是筆誤:條件寫成「span A 大於 span A」,永遠為假,回測一宗交易都沒有——這類錯誤的訊號是「結果為零」。第二個是方向錯誤:長倉止盈寫成「減 3.2 倍 ATR」,止盈價落在入場價下方,倉位遲遲無法正常平倉,淨值曲線形態怪異——訊號是「曲線看起來不自然」。第三個在後文加 BBW 過濾時出現:條件方向寫反(應為低於 5、寫成高於 5),成績突然轉差才揭出——訊號是「改動後結果與預期相反」。Saleh 沒有剪走任何一段,這其實是量化開發的日常:策略邏輯與程式實現之間的落差,只能靠回測結果的「異常感」逐個逼出來。讀者自己寫策略時,遇到零交易、曲線怪異、結果反常三種情況,第一步永遠是先懷疑程式,而非懷疑策略。
三重過濾:ADX、布林帶寬度、4 小時 EMA200
第一重:ADX 強度過濾。 ADX 上升代表趨勢轉強,低沉代表橫行。Saleh 把閾值設在 50:ADX 高於 50 才允許入場。重跑後交易次數由逾 1,000 宗暴跌至 129 宗(他仍嫌多),最大回撤 -22%,成績明顯改善。他同時加跑 30 分鐘與 1 小時圖對照——1 小時圖此時已錄得盈利,最大回撤約 -8.5%。他隨即把這個版本另存為 CloudScalperHourly,保留日後比較。
第二重:布林帶寬度。 雖然這是趨勢跟隨策略,他不想在價格已急升急跌時追入,於是加入布林帶寬度 BBW 條件:帶寬低於 5(乘 100 與 TradingView 讀數對齊)才入場。這裏又出現第三個錯誤:先寫成「大於 5」,回測成績異常才發現方向寫反。
第三重:錨定時間框架的 EMA200。 他不直接用當前 15 分鐘圖的均線,而是用 Jesse 的 get_candles 抓取 4 小時圖數據,計算 200 期 EMA:價格在 4 小時 EMA200 之上回傳 1、之下回傳 -1,與入場方向一致才放行。這是多時間框架確認的典型寫法——大級別趨勢先行過濾,小級別訊號才有意義。最終入場規則變成(摘錄自原片教學):
def should_long(self) -> bool:
return (self.trend == 1 # 雲圖兩線同向
and self.adx # ADX > 50
and self.bbw # 布林帶寬度 < 5
and self.longterm_trend == 1) # 企穩 4H EMA200

截圖出自原片(Algo-trading with Saleh):should_long 由雲圖方向、ADX、BBW 與 4 小時 EMA200 四重條件組成;下方可見倉位乘上倍數後下單。
倉位倍數與 223% 的由來
三重過濾後,15 分鐘圖成績最好:勝率 60%、夏普比率 2、卡瑪比率 5、期望值 2.5%,最大回撤只有 -6%。讀者此刻的疑問與 Saleh 自問的一樣:回報跑輸買入持有,好在哪裏?他的答案是回撤極淺,淨值曲線極平滑,因此有空間放大倉位——這正是夏普與卡瑪比率優異的意義所在。
做法很直接:把 go_long 與 go_short 的數量乘 4,回撤升至 -23%,仍未觸及他個人上限 -30%;再乘 5,回撤 -28%,回測淨盈利讀數變成約 223%(期間約一年,89 宗已平倉交易,累計手續費約 7,348 美元)。223% 是倉位放大五倍後的數字,不是訊號本身的邊際——若策略本身虧損,同一操作會把虧損同樣放大五倍。

截圖出自原片(Algo-trading with Saleh):倉位乘五倍後的回測——淨盈利 223.6%、最大回撤 -28.44%、89 宗交易、累計手續費約 7,348 美元。
最後他用 benchmark 表對照三個時間框架:不看淨盈利、改看夏普與卡瑪比率,15 分鐘圖明顯勝出,30 分鐘與 1 小時版本隨之「退役」。他總結時重申:策略全程沒有跑優化,因此過度擬合機會較低,並會把策略提交到 Jesse 的策略索引頁,讓讀者查看其他時間框架與期間的表現。(註:片中提及的去中心化交易所註冊連結、付費版策略計劃與抽獎活動屬講者的商業推廣,本筆記不轉載。)
🙏 覺得內容有用?本站所有內容免費提供,使用推薦碼開戶就是支持我們繼續營運的最大鼓勵:
ZA Bank 邀請碼 P20923
—— 你享 HKD 2,000 迎新獎賞,本站獲得營運支持。
立即開戶 →
(聯盟連結|投資涉及風險,受條款及細則約束,此資料僅可於香港境內分發)
MT5 可行性速評
| 項目 | 評估 |
|---|---|
| 邏輯可移植性 | 高。一目均衡表用 iIchimoku(內含轉換線、基準線、先行帶 A/B 緩衝)、ADX 用 iADX、ATR 用 iATR、4 小時 EMA200 用 iMA 指定 PERIOD_H4,全部為 MT5 內建;唯 BBW 無現成函數,要用 iBands 取上下軌自行計算(上軌 − 下軌)÷ 中軌。 |
| 平台限制 | 加密貨幣永續合約並非一般 MT5 券商標的,移植到外匯或商品後,ATR 倍數、ADX 閾值與 BBW 界線須重新驗證;MT5 淨額帳戶下同方向只持一個合併倉位,不影響本策略;多時間框架讀數在 MQL5 屬標準做法,無額外障礙。 |
| 評級 | ✅ 純技術角度可完整移植,指標全屬內建,是練習多時間框架 EA 的好題材;但「能移植」不等於「能複製成績」,223% 是倉位放大後的回測讀數,換市場換平台後一切要重驗。 |
| MQL5 寫法提示 | 見下 |
int ichi = iIchimoku(_Symbol, PERIOD_CURRENT, 9, 26, 52);
double tenkan[], kijun[], senkouA[], senkouB[];
CopyBuffer(ichi, TENKANSEN_LINE, 0, 1, tenkan);
CopyBuffer(ichi, KIJUNSEN_LINE, 0, 1, kijun);
// 升勢:tenkan[0] > kijun[0] 且 senkouA > senkouB
// 再以 iADX > 50、iBands 計 BBW < 5、iMA(PERIOD_H4, 200) 過濾
注意:即使移植成功,MT5 策略測試器跑出的回測同樣會過度擬合——ADX 閾值 50、BBW 界線 5、ATR 倍數 2.5/3.2、倉位乘五倍,每一個都是看著回測結果調出來的,換平台不解決方法論問題。
欣利克的看法
- 防坑檢查一:223% 的構成要拆開看。這個數字來自「倉位乘五倍」後的回測讀數。未放大前,策略訊號本身在 2024 年初至 2025 年 1 月中的成績是回撤 -6%、跑輸買入持有——講者自己也承認這一點,他看重的是平滑的淨值曲線。把槓桿放大後的報酬當策略實力,是閱讀這類影片最常見的誤區。
- 防坑檢查二:剝頭皮對成本極度敏感。15 分鐘圖、89 宗交易已付約 7,348 美元手續費(相對 10,000 美元本金並非小數);未過濾的版本更因逾 1,000 宗交易而全軍覆沒。手續費、買賣差價與滑點的假設稍有出入,盈虧比僅 1.28:1 的微弱優勢便可能消失。
- 防坑檢查三:「零優化」不等於「零擬合」。講者強調沒有跑參數優化,但 ADX 閾值 50、BBW 界線 5、ATR 倍數與倉位倍數,全是邊看回測邊調出來的——這本身就是人手形式的擬合。三重過濾逐一疊加的過程,本質上與優化器做的事相同,只是次數較少、自覺較高。是否真正穩健,要靠樣本外數據與分年檢驗,而片中並未展示。
- 觀點比較——值得肯定之處:片中連三個程式錯誤與修正過程都照實播出,亦坦白交代未放大倉位前跑輸市場、30 分鐘與 1 小時版本被淘汰,這種「不剪走失敗」的示範在策略教學頻道中難得。但影片附帶交易所註冊連結與付費策略推廣,存在利益關係,解讀其績效宣稱時應計算在內。
- 時效提醒:回測期間為 2024 年初至 2025 年 1 月中,是加密貨幣的特定年份;截至 2026 年中,市場結構與費率環境已有變化,片中任何數字均不代表當前條件。本文僅為學習記錄,不構成任何買賣建議。
名詞解釋
- 一目均衡表 Ichimoku Cloud:由轉換線、基準線與先行帶組成的綜合趨勢指標;本策略要求轉換線在基準線之上、且雲圖同向,兩重確認才入場。
- 平均趨向指數 ADX:量度趨勢強度而不分方向;本策略以 ADX 高於 50 作第一重過濾,把交易次數由逾千宗壓至百餘宗。
- 布林帶寬度 Bollinger Band Width:量度布林帶上下軌的相對距離;本策略拒絕在帶寬高於 5 的急升急跌時段追入。
- 指數移動平均線 EMA:對近期價格加權的移動平均;本策略用 4 小時圖 200 期 EMA 作大級別方向過濾。
- 平均真實波幅 ATR:量度每根 K 線平均波動範圍;止蝕設於入場價加減 2.5 倍 ATR,止盈距離 3.2 倍。
- 剝頭皮 Scalping:持倉時間極短、追逐微小價差的交易風格,對手續費與滑點極度敏感。
- 多時間框架分析 Multi-Timeframe:以大級別走勢過濾小級別訊號;本策略用 4 小時 EMA200 過濾 15 分鐘圖入場。
- 夏普比率 Sharpe Ratio:每單位波動所換取的超額回報;講者以此而非淨盈利選出 15 分鐘圖版本。
- 最大回撤 Drawdown:淨值由高位回落的最大幅度;講者以 -30% 為個人上限,決定倉位可乘大的空間。
- 期望值 Expectancy:每宗交易的平均預期盈虧;本策略放大倉位後期望值為 2.5%。
- 過度擬合 Overfitting:策略過度遷就回測數據的噪音;「零優化」不代表零擬合,人手邊看邊調同屬擬合。
- 回測 Backtesting:以歷史數據檢驗交易規則;片中 223% 屬回測教學案例數字,並非實盤成績。
常見問題 FAQ
Cloud Scalper 的核心邏輯是甚麼?
一句話概括:「雲圖同向+三重過濾的順勢剝頭皮」。先用一目均衡表確認趨勢——轉換線在基準線之上、且先行帶 A 在先行帶 B 之上;再要求 ADX 高於 50(趨勢夠強)、布林帶寬度低於 5(不在急升急跌後追入)、價格企穩 4 小時圖 EMA200(大級別同向),四重條件齊備才以市價單入場。止蝕設於 2.5 倍 ATR,止盈 3.2 倍 ATR,每單風險為保證金的 3%。
223% 的回測報酬可以當真嗎?
數字屬回測教學案例,構成要拆開看:講者先把每單風險定為保證金的 3%,見最大回撤只有 -6%,便把倉位數量乘以五倍——223% 是倉位放大後的讀數,未放大前策略跑輸買入持有。此外所有參數(ADX 50、BBW 5、ATR 倍數)都是看著回測結果調校的,回測期間亦只有約一年,未來能否重現並無保證。
講者說「零優化」,為何仍有過度擬合風險?
「沒有跑優化器」只代表沒有用程式窮舉參數組合;但片中每加一重過濾、每定一個閾值,都是看著回測成績決定去留——這是人手形式的擬合,只是迭代次數較少。判斷策略是否穩健的標準從來不是「有沒有優化」,而是有沒有在未見過的數據上驗證;片中並未展示樣本外或分年檢驗,這正是需要讀者自行補做的部分。
為何第二層確認(雲圖同向)能避開假突破?
轉換線與基準線只反映 9 期與 26 期的短期結構,價格一衝便可能交叉;先行帶 A、B 則把更長期的中點向前投射 26 期,雲圖轉向需要更持久的走勢配合。要求「短期交叉+長期雲圖同向」同時成立,等於用滯後換取過濾:入場會變遲、錯過爆發初段,但橫行市中反覆交叉的假訊號大多會被雲圖條件擋下。這是典型的訊號確認取捨,代價是趨勢初段的部分利潤。
原影片
本文整理自以下影片,版權屬原創作者所有,建議配合原片觀看: