分類
技術
難度
進階
適用情境
回測EA 評估

Tick 資料

Tick 資料是某個商品每一次單獨價格變動的紀錄——每一筆都帶著自己的時間戳記與買賣報價——也正是 MT5 在「以真實 tick 為基礎的每個 tick」模式下重播的東西,而不是自行在 K 棒之間編造一條路徑。

亦稱:tick 歷史, 真實 tick 資料

更新於 · 審閱於

一句話講清

K 棒資料每根 K 線只留下四個價格:開、高、低、收。Tick 資料留下的是它們之間的一切——每一次價格變動,依序排列,並帶著那一刻實際存在的點差。只有當一筆交易在同一根 K 棒之內開倉又平倉時,兩者的差距才真正決定什麼,而那裡正好就是多數 EA 行銷居住的地方。

為什麼重要

回測只能交易你交給它的價格。K 棒資料交給測試器的是每根 K 線四個價格,然後任由它自行編造中間的路線,因此任何在 K 棒之內進出的策略,交代的都是一條沒有人記錄過的路徑。Tick 資料把編造換成紀錄。接著我們自己的執行又補上一個令人不安的第二個發現:你從哪裡取得這些 tick,對結果的影響遠大於把編造的 tick 換成記錄下來的 tick。

  • 它敲定了 K 棒內部的事件順序。如果真實路線先碰到停損才碰到目標,一條把兩者順序顛倒過來的編造路線,會讓這筆交易的正負號整個翻過來。
  • 它帶著每一刻實際存在的點差。本站一次 USD/JPY 真實 tick 執行中,tick 檔案裡出現了 227 個介於 10 點到 350 點之間的不同點差值,沒有任何單一固定數字能夠代表這個範圍。
  • 它要求終端裡真的有庫存。本站公開的十一次真實 tick 執行,全都需要一個由匯入封存檔建立的自訂商品;目錄中沒有任何一個經紀商原生商品曾經跑到真實 tick 模型。
  • 它不是最大的那根槓桿。在測試器模型固定的情況下換掉資料來源,讓本站一次執行的獲利因子從 1.35 變成 1.13;接著把同一份來源從產生式 tick 升級成真實 tick,只再讓它移動了 0.02。

用它驗證策略

用在哪裡

  • 策略測試器(Strategy Tester)→ 設定(Settings)→ 建模(Modelling),其中「以真實 tick 為基礎的每個 tick」(Model 4)重播記錄下來的路徑,而單純的「每個 tick」(Model 0)則由 M1 K 棒產生一條出來。
  • 檢視(View)→ 商品(Symbols,Ctrl+U)→ Ticks 分頁,你在這裡為某個日期區間索取商品的 tick 歷史,測試器才碰得到它。
  • 由匯入的 tick 封存檔建立自訂商品——本目錄裡每一次真實 tick 執行的資料都是這樣來的。
  • 把一份已定稿的策略在第二個 tick 來源上重跑,用來弄清楚結果究竟屬於規則,還是屬於資料。

可靠的結果長什麼樣

  • 商品頁在同一句話裡點名 tick 來源與測試器模型,讓讀者可以重建這次執行,而不是只能相信它。
  • tick 歷史確實涵蓋整個區間。本站公開的每一次執行都自 2019-01-01 開始(只有一次例外),跑在能夠回溯到那麼早的來源上。
  • 買價與賣價都在匯入之後存活下來,於是測試器以記錄下來的點差成交,而不是拿一個頂替的常數。
  • 第二個來源重現了同樣的結果——而當它沒能重現時,商品頁會說明是哪一個沒過。

警訊

  • 宣稱「真實 tick 資料」卻不點名供應商。供應商正是這項主張中決定結果的那一半。
  • 把一個歷史品質百分比拿來揮舞,當作真實 tick 的證明。本目錄裡一次模型 0 的執行就印出了 100%。
  • 測試區間的起點早於來源 tick 的起點,這會悄悄把早期年份交還給插值。
  • 在 tick 資料之上又設定了固定點差。在模型 4 上測試器本來就會忽略這個欄位,所以這項設定誤導作者的程度更甚於誤導讀者。

回測與實盤的差異

  • Tick 資料釘住的是價格路徑,成交環節則原封不動。延遲、重新報價、部分成交以及經紀商自己的政策,全都仍然坐在測試器之外。
  • 記錄下來的點差屬於記錄它的那一方。另一家經紀商在同一時刻的報價可能有實質差異,在主要交易時段之外尤其如此。
  • 滑點從來不會進到檔案裡。測試器以記錄下來的價格成交;實盤訂單晚了那麼一點點才抵達,拿到的是當下擺在那裡的東西。
  • 可以預期剩下的差距關乎成交而不是價格——這道差距比 K 棒資料留下的窄得多,也可預測得多。

建議的驗證方法

  1. 1先為整個區間索取商品的 tick 歷史,再讀 Ticks 分頁,確認它回傳的範圍真的涵蓋得到。
  2. 2把模型編號寫在來源名稱旁邊。「每個 tick」與「以真實 tick 為基礎的每個 tick」在同一個下拉選單裡只差一行,描述的卻是兩個不同的實驗。
  3. 3在模型 4 上別動測試器的點差欄位,改成用手動加上手續費。本站以 `Spread=10` 對上 `Spread=100` 跑出來的逐筆點差完全相同。
  4. 4在相信那個數字之前,先在第二個來源上重跑一次。來源之間的分歧本身就是結果,而不是麻煩。

範例

一個 EA、一個區間、三次執行。TidewellSlack 在 M15 上自 2019-01-01 起交易 GBP/JPY,我們用三種方式跑它,把商品頁慣常混為一談的兩件事拆開來看:tick 從哪裡來,以及測試器是重播它們還是編造它們。

經紀商 M1 歷史,模型 0(已公開的那次執行)
獲利因子 1.35,最大回撤 9.92%
303 筆交易,歷史品質 99%,而且通過本站關卡。
匯入的 tick,仍然是模型 0
獲利因子 1.13,最大回撤 18.18%
351 筆交易。只有來源改變了。
匯入的 tick,模型 4 真實 tick
獲利因子 1.11,最大回撤 18.20%
345 筆交易。只有模型改變了。

三次執行中有兩次沒有通過本站自己的關卡,而活下來的那一次跑的是產生式 tick。這就是為什麼商品頁公布的是它的商品名稱與模型編號,而不是「真實」這個形容詞。

計算 更換來源:獲利因子 −0.22,回撤 +8.26 個百分點。在此之上再升級到真實 tick:−0.02 與 +0.02。

結果 資料來源把結果推動的距離,是 tick 模型的十一倍

怎麼讀這個數字

讀 tick 資料時,先對照持倉時間,再對照資料來源。目標相對於 K 棒越細,結果中由路徑決定的部分就越多——但來源決定了這個結果有多少能被帶到別的地方去。

區間 含義
日內或剝頭皮 EA,真實 tick,且點名了供應商 站得住腳的情形。路徑被記錄下來,陌生人光憑商品頁就能重建這次執行。
多日持倉的波段系統,跑在由 K 棒產生的 tick 上 通常足夠。一根 K 棒的內部路線,很少決定一筆持有一週的交易。
真實 tick,但只有單一來源 只是半個答案。本站的 GBP/JPY 執行在一個來源上通過,在另一個來源上卻以相同規則、相同區間失敗。
宣稱「真實 tick」,卻沒有供應商也沒有模型編號 無從查核,而缺席的這兩個欄位,恰好就是決定那個數字的兩個。
  • 在選定模型之前,先確認 Ticks 分頁回傳的範圍。起點早於來源 tick 的區間,會讓早期年份退回插值,而整次執行仍然只回報一個數字。
  • 保留買價與賣價。在模型 4 上,測試器從 tick 檔案取得點差,並忽略你輸入的數字——本站一次 USD/JPY 執行裡有 227 個介於 10 點到 350 點之間的不同數值,沒有一個是設定的那一個。
  • 數一數究竟有多少人真的量過點差。本站公開的 23 次執行中,恰好只有一次帶著量測到的平均值,在測試器內部記錄為 19.14 點,而那次執行用的是模型 0。
  • 把第二個來源當成實驗,而不是雜務。一致會讓一份 tick 資料回測升格為證據;不一致教你的更多。

本站公開的 23 次執行中,十一次使用模型 4,十二次使用模型 0,而每一次模型 4 的執行,商品名稱都帶著 `_DUKA` 後綴,因為匯入的 tick 只能住在自訂商品上。那十一次裡有十次,運行清單的價格來源欄位仍然寫著經紀商的 M1 歷史,那是它們遷移出來的血統留下的殘餘。讀模型編號與商品名稱;圍繞在它們周圍的文字老得快得多。

常見誤解

買下 tick 模型,卻忽略 tick 來源

模型只是下拉選單裡的一行,來源卻是另一個完全不同市場的紀錄。在上面那次 GBP/JPY 執行中,更換來源付出了 0.22 的獲利因子並讓回撤翻倍,而在同一份來源上升級到真實 tick 只付出 0.02。一個寫明模型卻不寫明供應商的商品頁,告訴你的是比較小的那一半。

把歷史品質數字讀成真實 tick 的證明

這個百分比量的是歷史對受測區間的涵蓋有多完整,而不是由哪一個模型產生。KestrelHover 背後那次模型 0 的影子執行印出 100%——與它真實 tick 的同胞執行印出的是同一個數字。一個兩種模型都能達到的數字,無法用來分辨它們。

在 tick 資料之上設定固定點差

在模型 4 上,測試器以 tick 檔案自己的賣價減買價成交,完全不理會這個欄位;把同一個 USD/JPY 測試以 `Spread=10` 跑一次、再以 `Spread=100` 跑一次,得到的逐筆點差完全相同。這項設定在執行中什麼都沒有改變,卻悄悄改變了作者相信這次執行量測了什麼。

測試一段 tick 並未涵蓋的區間

在一個 tick 自 2019 年才開始的來源上從 2015 年起測試,會把早期年份插值出來、把後期年份重播出來,再把兩者當成單一結果回報。Ticks 分頁會說明它持有的範圍;測試器永遠不會警告你,你的區間超出了它。

指望真實 tick 能填平與實盤之間的差距

它們填平的是價格那一半,成交那一半原封未動。延遲、重新報價、部分成交以及經紀商的政策都留在模擬之外,所以一次真實 tick 的執行,依然是對成交結果的一份樂觀說法——只不過這份樂觀說法,是建立在一條真正發生過的路徑之上。

深入說明

一次只動一個變數的三次執行

TidewellSlack — GBP/JPY,M15,自 2019-01-01 起交易筆數獲利因子最大回撤歷史品質本站關卡
經紀商 M1 歷史,模型 0(Model 0,已公開)3031.359.92%99%PASS
匯入的 tick,模型 03511.1318.18%99%FAIL
匯入的 tick,模型 4(Model 4)真實 tick3451.1118.20%100%FAIL

第一列到第二列只改了資料,其他一律不動:相同規則、相同區間、相同測試器模型。 獲利因子掉了 0.22,回撤大致翻倍。第二列到第三列只改了模型,其他一律不動—— 把產生式 tick 升級成同一份封存檔裡記錄下來的真實 tick——獲利因子掉了 0.02, 回撤只動了 0.02 個百分點。兩列匯入 tick 的執行都沒有通過本站關卡;活下來的 那一次,跑的是產生式 tick。

這個先後順序並非放諸四海皆準,而這正是誠實的那一部分。KestrelHover 走的是另一個方向:真實 tick 上 291 筆交易、獲利因子 1.33,對上經紀商產生式 tick 上的 292 筆交易與 1.30,而且兩次執行都通過了。有時候來源就是全部的故事,有時候 它只是雜訊——而你只有跑第二次才會知道是哪一種。把 TidewellSlack 的商品頁與那一頁擺在一起讀,道理自己就會浮出來。

真實 tick 的代價是一個自訂商品

本站公開的 23 次執行中,十一次使用模型 4,十二次使用模型 0。每一次模型 4 的執行, 交易的商品名稱都以 _DUKA 結尾,因為匯入的 tick 無法住在經紀商自己的商品上—— 你要在商品視窗裡建立一個自訂商品,再把封存檔匯入其中。本目錄裡沒有任何一個 經紀商原生商品曾經跑到真實 tick 模型,這就是那麼多公開回測不使用它的實際原因: 模式是免費的,它背後的庫存不是。

這也打破了「相信一個百分比」這種常見的捷徑。KestrelHover 背後那次模型 0 的影子 執行印出 100% 歷史品質,與它真實 tick 的同胞執行印出的數字一模一樣,所以這個 數字分不出兩者。建模品質回答的是另一個 問題——歷史對受測區間的涵蓋有多完整——而且它對兩種模型都給得出答案。

點差是沒有人檢查的那一半

Tick 資料的第二份禮物是記錄下來的買價與賣價,而它也是最常被丟掉的一份。在模型 4 上,測試器以每一筆 tick 自己的賣價減買價來成交,並忽略你設定的點差:把同一個 USD/JPY 測試分別以 Spread=10Spread=100 跑一次,得到的逐筆點差完全相同, 共有 227 個不同的數值,範圍從 10 點到 350 點。這個欄位看起來像個控制項,行為 卻像個註解。

幾乎也沒有人量測由此產生的成本。本站 23 次執行中,恰好只有一次寫出了量測到的 平均點差——19.14 點,在測試器內部記錄——而那一次用的是模型 0,不是真實 tick。 所以對多數真實 tick 主張(包括我們自己的好幾次)誠實的讀法是:路徑被記錄下來了, 走完這條路的成本卻從來沒有被加總。

常見問題

回測 EA 一定要用真實 tick 資料嗎?
這取決於策略持倉多久。任何在一天之內開倉又平倉的策略都應該用真實 tick,因為 K 棒內的路徑決定了它太多筆交易,無法靠假設帶過。持有數天的波段系統則幾乎察覺不到差別。無論哪一種,都請點名來源:在本站的 GBP/JPY 測試中,更換來源讓獲利因子移動了 0.22,升級到真實 tick 只讓它移動了 0.02。
MT5 的 tick 資料從哪裡來?
兩個地方。MetaTrader 經紀商把 tick 歷史存放在自己的伺服器上,終端依商品與日期區間,從 檢視(View)→ 商品(Symbols,Ctrl+U)→ Ticks 下載它。獨立供應商則發布 tick 封存檔,你把它匯入到一個自訂商品上。本目錄裡每一次真實 tick 執行走的都是第二條路,這也是為什麼它們的商品名稱都帶著 `_DUKA` 後綴。
為什麼兩個 tick 來源會給出不同的回測結果?
因為每一個來源都是某一個交易場所的紀錄,而價格——尤其是點差——在不同場所之間並不相同。同一個 GBP/JPY EA 在同一個區間上,於經紀商自己的歷史上拿到 1.35 的獲利因子,在匯入的封存檔上則是 1.13,最大回撤同時從 9.92% 升到 18.18%。比較兩個來源,是現成最便宜的穩健性測試。
真實 tick 資料能讓回測變得準確嗎?
它讓價格序列變得忠實,而這不是同一回事。成交仍然在測試器之外,而你選的來源依舊佔主導。本站兩個各跑過兩種方式的 EA 落在相反的位置:一個幾乎完全沒有動——真實 tick 上 291 筆交易、獲利因子 1.33,對上產生式 tick 上的 292 筆交易與 1.30——另一個則在來源改變的那一刻就沒能通過關卡。
我要怎麼判斷一份公開的回測用的是什麼 tick 資料?
依序看三個欄位:測試器印出的模型名稱、這次執行交易的商品,以及那個商品背後的供應商。自訂商品的名稱通常就是 tick 曾被匯入的破綻。如果一個商品頁只給出一個百分比與一個形容詞,卻沒有這三項中的任何一項,就把這項主張當成未經查核,而不是當成假的。