範圍K棒回測:固定價格區間、不固定時間,以及你從來沒拿到的成交價
範圍K棒在其最高價與最低價的距離達到固定大小時收盤,因此在快速行情中K棒出現得很快,在冷清時則很慢。範圍K棒回測會因為以K棒的收盤跳動點成交而美化策略績效,那是行情已經走過的價格。AlphaPrime在底層時間K棒收盤時才確認範圍K棒,以下一個真實價格成交,並將滑價加倍,停損則以底層K棒的最高價與最低價判定。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
什麼是範圍K棒,為什麼範圍K棒回測會高估績效?
範圍K棒是指當其最高價與最低價之間的距離達到固定大小時就收盤的K棒,不論花多少時間。範圍K棒策略的回測會高估績效,因為它們以收盤那一跳動點成交,而按定義,那一跳動點正是你還沒看到結束的行情終點。
範圍K棒的設計目的,是讓每根K棒包含相同的價格波動量。在指數期貨上,一根10點的範圍K棒在午間可能要花四十分鐘才會成形,而在經濟數據公布後可能只要八秒。這種圖表會壓縮冷清時段、拉長忙碌時段,讓突破與回檔比時間K棒更容易判讀。圖上不顯示時間,X軸只是一根接一根的K棒。
這個特性同時也是陷阱。產生訊號的K棒,正是成形最快的那些K棒,而那些時刻恰恰是最難以已知價格成交的時候。本頁討論的是範圍K棒特有的問題;所有合成K棒共通的規則,請見為什麼合成K棒回測會作弊的總覽。
範圍K棒如何形成,它又是什麼時候才為人所知?
範圍K棒是在真實成交把K棒的最高價與最低價距離推到設定大小時才為人所知。以分鐘資料做的回測,會在該分鐘收盤時得知此事;一個誠實的引擎,會讓策略在那時才看到這根K棒,而不是在跳動點上。
規則本身很簡單。K棒的開盤價比前一根K棒的收盤價多一個跳動點,因為一個跳動點只屬於一根K棒。每一筆新成交都會更新最高價或最低價。一旦最高價減最低價等於範圍大小,K棒就在該筆成交收盤,收在最高價或最低價,下一根K棒隨即開始。在快速行情中,一根底層分鐘K棒可能產生多根範圍K棒;在冷清時段則可能一根也沒有。
AlphaPrime(Valynox)以你選定的底層時間K棒建構範圍K棒,日內交易多半使用1分鐘K棒。範圍K棒只有在完成它的那根底層K棒收盤時,才會對策略可見。同一分鐘內完成的數根範圍K棒,會在該分鐘結束時一起出現,而由它們產生的所有訊號,都以同一個下一個真實價格成交。這正是一個收到一分鐘資料的即時平台所能做到的事。
另外有兩條規則,決定如何從一根分鐘K棒切出範圍K棒。分鐘K棒有開盤價、最高價、最低價與收盤價,但不包含最高價與最低價出現的先後順序。AlphaPrime採用對策略較不利、且較長的路徑假設:若收漲,順序為開盤、最高、最低、收盤;若收跌,則為開盤、最低、最高、收盤。相較於較友善的順序,這個路徑在ES與NQ的1分鐘資料上會切出多出四分之一到二分之一的K棒與假訊號,而且它只使用該K棒自身的四個價格,不借用未來的資訊。若兩根分鐘K棒之間有跳空,缺口之中不畫任何東西:缺口小於範圍時,併入當前K棒;恰等於範圍時,K棒在缺口價收盤;大於範圍時,當前K棒以最後一個真實價格收短,並在缺口價開出新K棒。沒有成交的地方,不會畫出幻影K棒。
假設性範例
範圍大小為8點。一根K棒於10:14:03在100開盤。到10:14:41時,K棒已在100至108之間成交,因此在108收盤,下一筆成交開出新K棒。10:14這一分鐘於10:15:00以110收盤。若回測以範圍K棒的收盤價成交突破買單,你會在108進場。AlphaPrime則在10:15:00確認K棒,並以10:15第一筆成交(約110)加上滑價成交。
範圍K棒回測在哪裡看到了未來?
主要在成交價,其次在K棒的聚集。困擾Renko的停損問題在這裡比較小,因為範圍K棒確實記錄了真實的最高價與最低價,但問題並未消失。
收盤跳動點是最不該假設的成交價
所有合成K棒的第一條規則:K棒要等底層資料收盤後才存在。原因在於:完成範圍K棒的那一筆成交,要等它真的成交之後才知道它是完成的那一筆,而你的委託是在那之後才送出的。它避免的錯誤是:以收盤跳動點成交,等於每一次都買在8點行情的精確終點,這不是成交,而是一廂情願。經過數百筆交易,收盤跳動點與下一筆真實成交之間的差距會累積起來,足以吃掉快速行情突破規則看似擁有的大部分優勢。
K棒會聚集在成交最差的時候
範圍K棒策略的大多數訊號,集中在一天中少數幾分鐘,那時範圍K棒成批完成。這些分鐘的價差很寬,委託簿很薄。如果你的回測對每筆交易都用同一個平均滑價,那等於悄悄假設了開盤混亂時段卻用了午間的價差。引擎對約三年ES 1分鐘資料、範圍為8跳動點所做的實測說明了這一點:產生範圍K棒的分鐘中,接近三分之一的分鐘產生了三根或以上;在這些分鐘裡,從K棒收盤到下一筆真實成交的距離,平均約為只有單根K棒分鐘的四倍。這就是為什麼範圍K棒的滑價乘數是二,而且只能往上調。
多根K棒的分鐘內的停損
當一根底層分鐘K棒內有三根範圍K棒完成,逐塊檢查的停損方式可能讓你在第一根K棒進場,卻在第三根K棒被停損,虧損幅度相當於一個範圍。實際上,你會在分鐘收盤時同時看到三根K棒,在它們之後才進場,然後承受接下來的走勢。誠實的做法是:在進場確實可能發生之後,以底層K棒的最高價與最低價來判定停損,這有時對你有利,但更常是不利的。
| 範圍K棒特性 | 收盤跳動點回測 | AlphaPrime |
|---|---|---|
| K棒完成 | 在收盤跳動點得知 | 在底層K棒收盤時得知 |
| 進場成交 | K棒的收盤跳動點 | 下一個真實價格加上加倍的滑價 |
| 停損與停利檢查 | 每根範圍K棒分開檢查,一分鐘內可能多次 | 以底層K棒的真實最高價與最低價檢查,停損優先 |
| 一分鐘內最高價與最低價的先後 | 依引擎偏好的順序 | 永遠採用較長、較不利的路徑 |
| 跳空大於範圍 | 跨越缺口畫出幻影K棒,每根都可交易 | 當前K棒以最後真實價格收短;新K棒在缺口價開出;缺口內不畫任何東西 |

AlphaPrime如何回測範圍K棒策略?
策略讀取的是範圍K棒;但交易的損益是在底層的真實K棒上結算。以下每條規則都說明其存在的原因,以及它消除的錯誤。
- 範圍K棒在完成它的底層K棒收盤時才獲得確認。原因:完成的那一跳動點,要等下一筆成交出現才知道是最後一筆,而以分鐘建構的引擎只能在分鐘收盤時得知。避免的錯誤:把K棒的後半段當作前半段已經告訴你結局一樣去行動。
- 市價單以下一根底層K棒的開盤價加上滑價成交。原因:那是訊號存在之後第一個可取得的價格。避免的錯誤:以收盤跳動點成交,那是行情剛剛離開的價格。
- 停損與停利以底層K棒的真實最高價與最低價判定,停損優先。原因:真實的K棒包含了範圍K棒切割來源的每一個價格,而其內部事件的先後順序是未知的。避免的錯誤:獲利交易只因引擎假設停利先於停損被觸及而存在。
- 分鐘K棒內的路徑永遠採用較長、較不利的那一條。原因:真實路徑未知,選擇較寬鬆的路徑,等於選擇了有利的結果。避免的錯誤:K棒數量與訊號依賴對策略有利的猜測。
- 滑價乘以二,且只能往上調。原因:範圍K棒在價差最寬的時候成批完成。避免的錯誤:用午間的價差來計算混亂時段。
- 缺口內不畫任何東西。原因:缺口內沒有成交。避免的錯誤:在缺口內以從未存在過的價格進場。
實際的效果是:範圍K棒突破規則,相較於圖表版本,每筆交易會損失一個大致固定的金額:從收盤跳動點到下一筆成交的距離,再加上額外的滑價,進場與出場各算一次。關於如何選擇滑價數字並與平均每筆損益比較的一般方法,請見回測中的交易成本。
應該回測多大的範圍,它又如何與底層解析度互動?
選擇底層K棒能夠解析的範圍:如果範圍小於一根典型1分鐘K棒自身的最高價與最低價距離,幾乎整天每分鐘都會產生數根範圍K棒,K棒的形狀將主要來自分鐘內假設的路徑,而非市場本身。請選擇在一般日子裡需要幾分鐘才會成形、只在真實行情中才會一分鐘內完成的範圍。圖表類型面板會顯示你所選設定的平均每日K棒數與最忙碌的時段,這是快速判斷範圍是否過小的方法。
- 從你交易時段的平均1分鐘範圍開始,以已完成的資料計算。範圍大小為該數字的二到四倍,通常能讓K棒在正常情況下形成數分鐘。
- 檢查每分鐘K棒數的分布。如果有相當比例的範圍K棒與另一根在同一分鐘完成,請加大範圍,或改用更細緻的底層解析度。
- 在樣本內與樣本外保持不變。根據測試資料調整的範圍大小就是一個已擬合的參數,不論這個數字看起來多自然。
範圍K棒只計算K棒自身最高價與最低價之間的距離。如果你希望把前一根K棒收盤後的跳空也計入,Kase K棒改以真實區間衡量;如果你希望K棒必須先反轉才會收盤,請見反轉K棒。兩者都遵循本頁的規則。
哪些市場與策略適合範圍K棒?
範圍K棒適合�跳動點大小穩定、流動性佳的市場上的突破與動能規則:指數期貨、主要貨幣對、活躍時段的大型加密貨幣。對於流動性差的合約、價差本身就可能跨越整個範圍的隔夜時段,以及優勢只有幾個跳動點寬的任何規則,它都不是好的選擇。
在相信範圍K棒的結果之前,有兩件事要檢查。第一,看交易在一天中的分布。如果大部分獲利來自少數幾個時段,而那些時段的K棒每隔幾秒就完成一根,那麼加倍的滑價只是底線,不是上限,你應該用更高的滑價來測試。第二,在平均時長相近的時間K棒上跑同一條規則。兩者都有效的,才算是一條規則。只在範圍K棒上有效的規則,通常只是披著策略外衣的成交假設。
如果你使用AlphaPrime,這代表:在策略生成中選擇範圍K棒作為圖表類型,設定範圍與足以解析它的底層解析度,然後讓搜尋執行。每一個候選策略都會以底層收盤後才確認的K棒、下一個真實價格成交、加倍滑價,以及以真實K棒檢查停損的方式測試,同時包含Classic與Reserve。通過的策略,並不依賴收盤跳動點。
常見問題
範圍K棒做回測比時間K棒更好嗎?
兩者都不是更好,它們回答的是不同的問題。範圍K棒讓以行情幅度為基礎的規則更容易表達。時間K棒讓成交時點預設就是誠實的。AlphaPrime讓你在範圍K棒上撰寫規則,但在底層時間K棒上結算交易,這樣既保留了前者的優點,也不犧牲後者的誠實。
範圍K棒會重新繪製嗎?
已完成的範圍K棒不會改變。正在形成中的K棒會隨每一跳動點更新,而若回測把正在形成的K棒當作收盤價已知來交易,就是在使用一個當時尚不存在的數字。AlphaPrime只在完成該範圍K棒的底層K棒收盤後,才讓策略看到它。
什麼是幻影範圍K棒?
在許多圖表上,當價格跳空超過範圍大小時,建構工具會以一根或多根K棒填補缺口,而這些價位根本沒有成交。那些就是幻影K棒,若回測在其中成交,就是在從未存在過的價格上成交。AlphaPrime不會畫出它們:當前K棒以最後真實價格收短,下一根K棒在缺口價開出,而第一個可取得的成交價,是缺口之後的真實價格。
範圍K棒可以用在外匯與加密貨幣上嗎?
可以。外匯以點數設定範圍,加密貨幣則以價格單位或百分比設定。加密貨幣的範圍K棒在清算連鎖反應附近高度聚集,因此在相信結果之前,應該用高於加倍起始值的滑價來測試。

