為什麼 Renko 與 Heikin Ashi 回測會作弊,以及 AlphaPrime 如何阻止
多數合成K棒回測在三個地方作弊:K棒以交易者當時無從得知的收盤價畫出、成交價取用K棒本身的價格,而停損是依據畫出來的K棒而非真實K棒判斷。AlphaPrime 只在底層K棒收盤後才完成每根合成K棒,每筆委託都以下一個真實成交價加上滑價成交,停損則以底層K棒的高低點判斷,且先看停損。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
為什麼 Renko 與 Heikin Ashi 回測看起來比實單交易好這麼多?
因為圖表上的價格,是交易者在當時根本看不到的價格。Renko 磚塊、Heikin Ashi K 棒或區間K棒都是合成K棒:依照某種規則,由真實成交建構出來的形狀。大多數回測讓策略直接對這個形狀交易,而這個形狀其實悄悄知道了未來。
凡是不是單純依時鐘切出來的K棒,都是合成K棒。Renko 磚塊、FlexRenko、Kagi 線、Line Break 線段、區間K棒、反轉K棒、Kase K棒與點數圖的柱,都屬於這一類;Heikin Ashi 雖然保留時間軸,但會替換價格,所以也屬於這一類。交易者喜歡它們,是因為能過濾雜訊。回測引擎喜歡它們,則是出於更糟的理由:幾乎任何趨勢規則套上去都會變得好看。
問題不在圖表,而在回測對每根K棒所做的三個小決定,而這三個決定通常都用最偷懶的方式處理。本文是總覽,每種圖表類型都有自己的頁面,說明該形狀的細節。下面三條規則,是 AlphaPrime(Valynox)在 Classic 與 Reserve 中,為每一個合成K棒策略建構或測試時都會套用的規則。
未來會從哪裡滲入合成K棒回測?
有三個地方,而且會疊加。每一處單獨來看都只帶來一點不存在的優勢,合在一起,就能把一個虧損的想法變成一條直線上升的權益曲線。
漏洞一:K棒在其資料完成之前就已經「收盤」
當價格移動了一個磚塊的大小,Renko 磚塊就「收盤」了。在回放歷史的圖表上,引擎已經知道這塊磚會完成,於是把它畫出來,並讓策略依此行動。但在即時情況下,只有當穿越門檻的底層成交已經印出,你才知道磚塊已經完成;而多數引擎要到用來建構它的底層分鐘K棒收盤時,才會得知此事。如果回測以磚塊名義上的收盤價行動,它其實是在依據一筆可能還要好幾秒或好幾分鐘才能確認的成交行事。
漏洞二:成交用的是K棒自己的價格
這是最大的一個。收盤在整數價位的磚塊,對你而言並不是在那個價位成交的。等磚塊確認時,市場早已到了別處,而且通常已朝著行情方向又走了好幾個跳動點,因為完成一塊磚本來就意味著這件事。若以磚塊收盤價作為多單進場的成交價,你拿到的價格,其實是行情本身早已拋在身後的價格。Heikin Ashi 更糟:它的開盤價與收盤價是平均值,因此以 Heikin Ashi 收盤價成交,等於是以一個可能從未真正成交過的價格成交。
漏洞三:停損是依據畫出來的K棒判斷
在多數實作中,Renko 磚塊沒有影線。Heikin Ashi K 棒的高低點則是經過平滑的。若引擎以合成K棒的區間來檢查停損,那麼停損被觸發的次數就會比用該K棒內部的真實成交來檢查時少。你的最大不利移動看起來很小,停損看起來既緊又安全,但兩者都不是事實。
| 漏洞 | 偷懶的回測怎麼做 | 實際交易者看到的是什麼 |
|---|---|---|
| K棒完成 | 價格一碰到門檻,就視為磚塊已知 | 直到底層K棒收盤後,才得知磚塊已完成 |
| 成交價 | 以磚塊收盤價或 Heikin Ashi 收盤價成交 | 拿到下一筆真實成交,通常更差,外加滑價 |
| 停損檢查 | 拿停損與合成K棒的高低點比較 | 被真實成交觸發,而合成K棒把這些成交隱藏了 |

規則一:合成K棒只有在其底層K棒收盤後才存在
AlphaPrime 會從一連串真實的時間基準K棒(即底層週期,通常是 1 分鐘)建構每一根合成K棒。合成K棒只有在完成它的底層K棒收盤時,才會對策略可見。不是在穿越門檻線的那一筆成交時,也絕不是在磚塊名義價格時。
這會帶來三個你會注意到的結果。第一,一波快速行情在一分鐘內完成三塊磚,這三塊磚會在同一時刻,也就是該分鐘結束時,同時變得可見。策略無法先交易第一塊、再交易第二塊;這三塊磚產生的每個訊號,都會以同一個下一個真實成交價成交。第二,K棒的時間戳記是底層K棒的收盤時間,因此當你把策略匯出到實單平台時,委託的時序與平台實際能做到的一致。第三,一個可以持續延伸的圖形元素,會被切成無法收回的步驟:點數圖每新增一格就給策略一根K棒,Kagi 線則在每次反轉被確認、線段改變粗細、或再延伸一個反轉幅度時給出一次。策略已經看過的部分,會以它當時所見的樣子留在圖上;而一次反轉必須在完整的反轉幅度被涵蓋之後才為人所知,圖表版本則是把轉折畫在極值處,隱藏了這一點。
同樣的規則也適用於 Heikin Ashi。它以時間為基準,但需要計算:每根 Heikin Ashi K 棒都是由已完成的真實K棒計算出來,數值在那時就固定了。目前這根K棒不會重繪,因為策略永遠看不到仍在形成中的K棒。
假設性範例
磚塊大小 10 點。09:31:12 價格穿越 5,010,圖表會畫出一塊新的上升磚。09:31:40 價格來到 5,014。底層一分鐘K棒於 09:32:00 收在 5,012。在 AlphaPrime 中,這塊磚於 09:32:00 確認,基於它的買進訊號會在 09:32 這一分鐘的第一筆成交時成交,約為 5,012 加上滑價,而不是 5,010。
規則二:訊號來自合成K棒,成交來自下一個真實價格
你的規則讀取的是 Renko 磚塊、Heikin Ashi 顏色或點數圖的柱。這部分沒有問題,這正是這些圖表的用途所在。成交則是另一回事:每筆委託都以訊號已知之後的下一個真實成交價,加上你設定的滑價成交。磚塊收盤價、Heikin Ashi 收盤價與格子價格,都不會被當作成交價。
實際上,這表示在已確認磚塊上下的市價單,會以下一根底層K棒的開盤價成交。停損單或限價單則會在底層K棒之中等待,直到有真實成交觸及其價格。這與 AlphaPrime 用於一般時間K棒的下一根K棒規則相同,只是套用在真實資料的週期,而非繪圖的週期。如果你已讀過前視偏誤與單根K棒位移檢驗一頁,這裡就是把那條規則延伸到「下一根K棒」含糊不清的圖表上。
誠實的代價立刻就看得出來。以 10 點 Renko 磚塊建構的趨勢規則,若以磚塊收盤價成交,平均每筆可能有 6 點;改用下一個真實成交價成交,可能只剩 2 點。這個落差並非引擎刻薄,而是那部分從未存在過的優勢。
規則三:停損與停利以底層K棒判斷,且先看停損
停損、停利與移動停損,都是以每根合成K棒底下底層K棒的真實高低點來檢查,而不是以合成K棒畫出來的區間判斷。如果同一根真實價格K棒同時涵蓋你的停損與停利,AlphaPrime 會假設停損先被觸發。它不會在K棒內部尋找對你比較有利的事件順序,因為K棒本身並不告訴你那個順序。
這條規則會在回測中讓你少掉一些獲利的交易。它也移除了合成K棒策略實單時最常見的垮掉原因:圖表說停損從未被碰到,而經紀商卻說它被碰到了。如果你想了解停損如何設定與計量,系統化期貨策略的停損一頁有完整說明;那裡的規則與這裡的規則是同一條。
移動停損也遵循同樣的邏輯。停損線是依據底層K棒的高點或低點更新,而且要等進場那根K棒收盤後才開始追蹤。若移動停損從進場那根K棒就開始追蹤,並以該K棒自己的極值為準,那同樣是從未來偷來的一點好處。
為什麼快速行情中,多磚圖表需要雙倍滑價?
因為會產生訊號的K棒,依其構造,正是市場移動最快的K棒。區間K棒或 Renko 磚塊恰恰在波動率飆升時快速完成,而那正是價差擴大、委託簿變薄的時候。在這些K棒上,你的成交會比你設定的平均滑價假設來得更差。
AlphaPrime 對 Renko、FlexRenko、區間K棒、反轉K棒、Kase K棒與點數圖策略的規則,是把你設定的滑價乘以二,而固定手續費維持不變。你可以把乘數調得更高,但不能低於二。這些圖表類型在同一分鐘的底層K棒內可能完成好幾根,引擎自己對約三年 ES 與 NQ 1 分鐘資料的量測,說明了原因:在產生三根或更多區間K棒的分鐘裡,從K棒收盤到下一筆真實成交的距離,大約是只產生一根的分鐘的四倍。Kagi 與 Line Break 是以收盤價建構的,每根底層K棒最多只產生一條線,因此不會聚集;但它們仍適用最低乘數二,因為線段是在一段可觀的行情之後才被確認,那時市場正在奔跑,而它們較大的隱藏成本,也就是從畫出的線到真實成交的距離,會再由真實價格成交額外收取。Heikin Ashi 是唯一的例外:它以一般時間K棒的頻率運作,保留你正常的滑價設定。關於如何把成本納入測試的一般方法,請見手續費、滑價與平均每筆損益一頁。
| 圖表類別 | K棒何時完成 | 滑價乘數 |
|---|---|---|
| Renko、FlexRenko、區間、反轉、Kase、點數圖 | 同一根底層K棒內可能完成數根,快速行情中會聚集 | 二或更高;不可設為低於二 |
| Kagi、Line Break | 每根底層K棒最多一條線,在一段可觀的行情之後確認 | 二或更高;真實價格成交會額外收取從線到成交的距離 |
| Heikin Ashi | 每根時間K棒 | 一;以真實價格成交 |

這涵蓋哪些圖表類型?各自在哪裡說明?
AlphaPrime 能用來建構策略的每一種合成K棒類型,都有自己的頁面,內容包括繪圖規則、其回測通常在哪裡作弊,以及它適合哪一類市場。請閱讀你會交易的那一種。
- Heikin Ashi 回測:為何平滑後的收盤價永遠不能作為成交價,以及變色規則如何計時。
- Renko 圖表回測:磚塊大小、缺少的影線,以及跳空所造成的幽靈磚塊。
- FlexRenko K棒:趨勢與反轉偏移量改變了什麼,以及漏洞為何藏在反轉磚塊上。
- Kagi 圖表:反轉幅度、陽線與陰線,以及轉折是在新線的底部而非肩部才為人所知。
- Line Break 圖表:三線反轉,以及它對出場造成的長時間等待。
- 區間K棒回測:固定區間、變動時間,以及為何區間K棒的最後一筆成交是最不該假設的價格。
- 反轉K棒:上下交替的K棒,以及在轉折處成交的陷阱。
- Kase K棒:以真實區間計算、會計入與前一收盤價之間跳動的K棒,以及為何它們永遠不需要幽靈K棒。
- 點數圖回測:格子大小、反轉格,以及突破格是市場已經穿越過的價位,而非進場點。
這些類型之間的底層規則並不會改變。改變的,是偷懶的捷徑通常藏在哪裡,以及它會把結果美化多少。
對使用 AlphaPrime 的你來說,這代表什麼?在策略生成中選擇圖表類型後,這三條規則會套用到搜尋所測試的每一個候選策略上,無論是 Classic 或 Reserve。你無法將其關閉,而這是刻意的設計。當你匯出以此方式建構的策略時,匯出檔會附上一則註記,列出它所依據的圖表類型與設定,並說明每個訊號之後都以第一個真實成交價成交,讓你能把實單圖表設定得與之相符,並清楚預期的結果。你的工作,是為該圖表類型設定夠細的底層週期(日內磚塊通常選 1 分鐘),把滑價乘數維持在二或調得更高,然後像評斷其他任何策略一樣,依樣本外結果來判斷。如果結果依然成立,你就有東西了。如果它只有在以磚塊價格成交時才成立,那你手上的只是一張圖。
常見問題
Renko 圖表會重繪嗎?
已完成的磚塊不會改變,但形成中的磚塊在完成前會被重新繪製,而且在某些平台上,最後一塊磚的開盤價會隨方向移動。若回測讓策略依據形成中的磚塊行動,它所用的資訊就不是最終確定的。AlphaPrime 只有在完成該磚塊的底層K棒收盤後,才會讓策略看到那塊磚,因此策略永遠不會看到仍可能改變的磚塊。
Heikin Ashi 會重繪嗎?
已完成的 Heikin Ashi K 棒不會重繪,但目前這根K棒會隨每筆成交變動,而且其開盤價與收盤價是平均值,並非實際成交價。多數 Heikin Ashi 回測的漏洞不在重繪,而在於以 Heikin Ashi 收盤價成交。AlphaPrime 從已完成的K棒取得訊號,並以下一個真實成交價成交。
這和前視偏誤是同一回事嗎?
是的,這是穿著不同外衣的前視偏誤。一般性的錯誤,是回測使用了在送出委託時尚未存在的數字。合成K棒讓人很容易在不自覺中犯下這個錯誤,因為畫出來的K棒看起來像一般的K棒,而引擎也依它來成交。
我仍然可以用以磚塊為基礎的規則進場嗎?
可以。規則讀取的是合成K棒;只有成交與停損檢查使用真實價格。Renko 突破規則或 Heikin Ashi 變色規則,都可以維持你原本寫的樣子。改變的是你拿到的價格,以及停損被觸發的頻率,而這正是回測應該告訴你的。
這套規則同時適用於外匯與加密貨幣嗎?
這些規則不依賴市場。任何在底層週期上有真實價格歷史的商品,都可以建構合成K棒,而外匯與加密貨幣回測中也會出現同樣的三個漏洞。不同市場的滑價數字不同;方法則是相同的。

