Danh mục
Kỹ thuật
Độ khó
Trung cấp
Dùng trong
BacktestĐánh giá EA

Dữ liệu tick

Dữ liệu tick là bản ghi mọi thay đổi giá riêng lẻ của một công cụ — mỗi tick mang dấu thời gian, giá bid và giá ask của riêng nó — và đó chính là thứ MT5 phát lại trong mô hình 'Every tick based on real ticks', thay vì tự dựng ra đường đi giữa các nến.

còn gọi: lịch sử tick, dữ liệu tick thật

Đã cập nhật · Đã đánh giá

Nói đơn giản

Dữ liệu nến giữ bốn mức giá mỗi cây nến: mở, cao, thấp và đóng. Dữ liệu tick giữ mọi thứ nằm giữa chúng — từng thay đổi giá, theo đúng thứ tự, mang theo mức spread đã đứng ở thời điểm đó. Khoảng cách giữa hai loại dữ liệu chỉ quyết định điều gì đó khi một lệnh mở và đóng bên trong cây nến, và đó đúng là nơi phần lớn quảng cáo EA sinh sống.

Vì sao quan trọng

Một backtest chỉ có thể giao dịch trên những mức giá bạn đưa cho nó. Dữ liệu nến đưa cho trình kiểm thử bốn mức giá mỗi cây nến rồi để nó tự dựng ra lộ trình giữa chúng, nên mọi chiến lược vào và ra bên trong cây nến đều đang trả lời cho một lộ trình chưa ai ghi lại. Dữ liệu tick đổi phần bịa ra ấy lấy bản ghi thật. Các lần chạy của chính chúng tôi rồi bổ sung một phát hiện thứ hai khó chịu: bạn lấy tick từ đâu làm kết quả dịch chuyển xa hơn nhiều so với việc chuyển từ tick tạo sinh sang tick đã ghi.

  • Nó xác lập trật tự các sự kiện bên trong cây nến. Nếu lộ trình thật chạm điểm dừng lỗ trước khi chạm mục tiêu, một lộ trình bịa ra chạm chúng theo thứ tự ngược lại sẽ làm đổi dấu giao dịch đó.
  • Nó mang theo mức spread thực sự đã đứng ở từng thời điểm. Trong một lần chạy tick thật trên USD/JPY ở đây, tệp tick chứa 227 giá trị spread khác nhau nằm giữa 10 và 350 điểm, và không một con số cố định nào thay thế được cả dải đó.
  • Nó đòi hỏi kho dữ liệu thật trong terminal. Cả mười một lần chạy tick thật công bố ở đây đều cần một mã tùy chỉnh dựng từ kho lưu trữ đã nhập; không một mã gốc nào của sàn trong danh mục này từng chạm tới mô hình tick thật.
  • Nó không phải đòn bẩy lớn nhất. Đổi nguồn dữ liệu trong khi giữ nguyên mô hình đã kéo một lần chạy của chúng tôi từ profit factor 1,35 xuống 1,13; nâng chính nguồn đó từ tick tạo sinh lên tick thật sau đó chỉ dịch thêm 0,02.

Dùng để kiểm chứng một chiến lược

Dùng ở đâu

  • Strategy Tester → Settings → Modelling, nơi 'Every tick based on real ticks' (Model 4) phát lại lộ trình đã ghi còn 'Every tick' thuần (Model 0) tự dựng lộ trình ấy ra từ nến M1.
  • View → Symbols (Ctrl+U) → thẻ Ticks, nơi bạn yêu cầu lịch sử tick của một mã cho một khoảng ngày trước khi trình kiểm thử có thể động tới.
  • Dựng một mã tùy chỉnh từ kho lưu trữ tick đã nhập, đó là cách mọi lần chạy tick thật trong danh mục này có được dữ liệu của mình.
  • Chạy lại một chiến lược đã hoàn thiện trên nguồn tick thứ hai, để biết kết quả thuộc về bộ quy tắc hay thuộc về dữ liệu.

Kết quả đáng tin trông như thế nào

  • Mục đăng nêu nguồn tick và mô hình kiểm thử trong cùng một hơi, để người đọc có thể dựng lại lần chạy thay vì phải tin nó.
  • Lịch sử tick thực sự phủ kín cửa sổ. Mọi lần chạy công bố ở đây đều mở từ 2019-01-01 trừ một lần, trên những nguồn vươn ngược được tới tận đó.
  • Cả bid lẫn ask đều sống sót qua khâu nhập dữ liệu, nên trình kiểm thử khớp lệnh ở mức spread đã ghi thay vì ở một hằng số đặt vào thay thế.
  • Một nguồn thứ hai tái lập được kết quả — và khi không tái lập được, mục đăng nói rõ nguồn nào đã hỏng.

Dấu hiệu cảnh báo

  • 'Dữ liệu tick thật' mà không nêu tên nhà cung cấp. Hóa ra nhà cung cấp lại chính là nửa quyết định kết quả của lời khẳng định ấy.
  • Một tỷ lệ chất lượng lịch sử được vẫy lên như bằng chứng của tick thật. Một lần chạy Model 0 trong danh mục này in ra 100 %.
  • Một cửa sổ kiểm thử mở ra trước khi tick của nguồn bắt đầu, việc này lặng lẽ trả những năm đầu về cho phép nội suy.
  • Một mức spread cố định được đặt chồng lên dữ liệu tick. Trên Model 4, trình kiểm thử vốn đã bỏ qua trường đó, nên thiết lập này đánh lừa chính tác giả nhiều hơn là đánh lừa người đọc.

Backtest so với giao dịch thật

  • Dữ liệu tick ghim chặt lộ trình giá và để nguyên khâu khớp lệnh. Độ trễ, requote, khớp một phần và chính sách của chính sàn vẫn nằm ngoài trình kiểm thử.
  • Mức spread đã ghi thuộc về người đã ghi nó. Một sàn khác báo giá cùng thời điểm có thể chênh đáng kể, nhất là ngoài các phiên chính.
  • Trượt giá không bao giờ đi vào tệp. Trình kiểm thử khớp ở giá đã ghi; một lệnh thật đến chậm hơn một chút và nhận bất cứ mức giá nào đang nằm ở đó.
  • Hãy chờ đợi phần khoảng cách còn lại nằm ở khâu khớp lệnh chứ không ở giá — một khoảng cách hẹp hơn và dễ đoán hơn nhiều so với những gì dữ liệu nến để lại.

Phương pháp kiểm chứng khuyến nghị

  1. 1Trước hết hãy yêu cầu lịch sử tick của mã cho toàn bộ cửa sổ, rồi đọc thẻ Ticks để xác nhận khoảng dữ liệu nó trả về thực sự phủ kín cửa sổ ấy.
  2. 2Hãy ghi số hiệu Model bên cạnh tên nguồn. 'Every tick' và 'Every tick based on real ticks' nằm cách nhau đúng một dòng trong cùng một danh sách thả xuống và mô tả hai thí nghiệm khác nhau.
  3. 3Hãy để yên trường spread của trình kiểm thử khi chạy Model 4 và cộng hoa hồng bằng tay thay vào đó. Chạy Spread=10 rồi Spread=100 ở đây cho ra mức spread từng tick giống hệt nhau.
  4. 4Hãy chạy lại trên một nguồn thứ hai trước khi tin con số. Sự bất đồng giữa các nguồn chính là kết quả, không phải phiền toái.

Ví dụ

Một EA, một cửa sổ, ba lần chạy. TidewellSlack giao dịch GBP/JPY trên M15 từ 2019-01-01, và chúng tôi chạy nó theo ba cách để tách rời hai thứ mà các mục đăng vẫn thường gộp làm một: tick đến từ đâu, và trình kiểm thử phát lại chúng hay tự dựng chúng ra.

Lịch sử M1 của sàn, Model 0 (lần chạy đã công bố)
PF 1,35, sụt giảm vốn tối đa 9,92 %
303 lệnh, chất lượng lịch sử 99 %, và nó vượt cổng kiểm tra của chúng tôi.
Tick đã nhập, vẫn Model 0
PF 1,13, sụt giảm vốn tối đa 18,18 %
351 lệnh. Chỉ nguồn dữ liệu thay đổi.
Tick đã nhập, Model 4 tick thật
PF 1,11, sụt giảm vốn tối đa 18,20 %
345 lệnh. Chỉ mô hình thay đổi.

Hai trong ba lần chạy trượt chính cổng kiểm tra của chúng tôi, và kẻ sống sót lại là lần chạy trên tick tạo sinh. Đó là lý do mục đăng công bố tên mã và số hiệu mô hình của nó thay vì công bố tính từ 'thật'.

Phép tính Đổi nguồn: −0,22 profit factor và +8,26 điểm phần trăm sụt giảm vốn. Nâng lên tick thật chồng lên trên đó: −0,02 và +0,02.

Kết quả Nguồn dữ liệu làm kết quả dịch chuyển xa gấp mười một lần so với mô hình tick

Cách diễn giải

Hãy đọc dữ liệu tick trước hết theo thời gian nắm giữ, sau đó theo nguồn. Mục tiêu càng nhỏ so với cây nến thì phần kết quả do lộ trình định đoạt càng lớn — nhưng chính nguồn mới quyết định bao nhiêu phần của kết quả ấy đi được tới nơi khác.

Khoảng Ý nghĩa
EA trong ngày hoặc scalping, tick thật, có nêu tên nhà cung cấp Trường hợp bảo vệ được. Lộ trình đã được ghi lại và một người lạ có thể dựng lại lần chạy chỉ từ mục đăng.
Hệ thống swing nhiều ngày chạy trên tick sinh ra từ nến Thường là đủ. Lộ trình bên trong một cây nến hiếm khi quyết định một lệnh giữ cả tuần.
Tick thật, nhưng chỉ từ một nguồn duy nhất Mới là nửa câu trả lời. Lần chạy GBP/JPY của chúng tôi đạt trên một nguồn và trượt trên nguồn kia với bộ quy tắc y hệt và cửa sổ y hệt.
'Tick thật' mà không có nhà cung cấp và không có số hiệu mô hình Không kiểm chứng được, và đúng hai trường bị thiếu lại là hai trường quyết định con số.
  • Hãy xác nhận khoảng dữ liệu mà thẻ Ticks trả về trước khi chọn mô hình. Một cửa sổ mở ra trước khi tick của nguồn bắt đầu sẽ quay về phép nội suy cho những năm đầu và vẫn báo một con số duy nhất cho cả lần chạy.
  • Hãy giữ cả bid lẫn ask. Trên Model 4, trình kiểm thử lấy spread từ tệp tick và bỏ qua con số bạn gõ vào — 227 giá trị khác nhau nằm giữa 10 và 350 điểm trong một lần chạy USD/JPY, không giá trị nào trùng với con số đã cấu hình.
  • Hãy đếm xem hiếm hoi thế nào mới có người đo spread. Đúng một trong 23 lần chạy công bố ở đây mang một mức trung bình đã đo, 19,14 điểm ghi ngay trong trình kiểm thử, và lần chạy đó dùng Model 0.
  • Hãy coi nguồn thứ hai là thí nghiệm chứ không phải việc vặt. Sự đồng thuận nâng một backtest trên dữ liệu tick lên thành bằng chứng; sự bất đồng dạy bạn nhiều hơn.

Mười một trong 23 lần chạy công bố ở đây dùng Model 4 và mười hai lần dùng Model 0, và mọi lần chạy Model 4 đều mang hậu tố _DUKA trong tên mã, bởi tick đã nhập chỉ có thể sống trên một mã tùy chỉnh. Mười trong mười một manifest ấy vẫn nêu lịch sử M1 của sàn ở trường nguồn giá, một thứ sót lại từ dòng dõi mà chúng đã di cư khỏi. Hãy đọc số hiệu mô hình và tên mã; phần văn xuôi quanh chúng cũ đi nhanh hơn.

Sai lầm thường gặp

Mua mô hình tick mà bỏ qua nguồn tick

Mô hình chỉ là một dòng trong danh sách thả xuống, còn nguồn là bản ghi của cả một thị trường khác. Trong lần chạy GBP/JPY ở trên, đổi nguồn tốn 0,22 profit factor và làm sụt giảm vốn tăng gấp đôi, trong khi nâng lên tick thật trên cùng nguồn đó chỉ tốn 0,02. Một mục đăng nêu mô hình nhưng không nêu nhà cung cấp mới chỉ nói cho bạn nửa nhỏ hơn.

Đọc con số chất lượng lịch sử như bằng chứng của tick thật

Tỷ lệ này đo mức độ lịch sử phủ kín cửa sổ, chứ không đo mô hình nào đã tạo ra nó. Lần chạy Model 0 chạy song song phía sau KestrelHover in ra 100 % — đúng con số mà người anh em chạy tick thật của nó in ra. Một con số mà cả hai mô hình đều đạt tới được thì không thể phân biệt được chúng.

Đặt một mức spread cố định chồng lên dữ liệu tick

Trên Model 4, trình kiểm thử khớp lệnh từ chính ask trừ bid của mỗi tick và hoàn toàn phớt lờ trường đó; chạy một bài kiểm thử USD/JPY ở Spread=10 rồi chạy lại ở Spread=100 trả về mức spread từng tick giống hệt nhau. Thiết lập ấy không thay đổi gì trong lần chạy và lặng lẽ thay đổi điều mà tác giả tin rằng lần chạy đã đo.

Kiểm thử một cửa sổ mà tick không phủ tới

Một bài kiểm thử từ 2015 trên nguồn có tick bắt đầu từ 2019 sẽ nội suy những năm đầu, phát lại những năm sau, và báo cả hai như một kết quả duy nhất. Thẻ Ticks nêu rõ khoảng dữ liệu nó đang giữ; trình kiểm thử không bao giờ cảnh báo bạn rằng cửa sổ của bạn đã vượt quá khoảng ấy.

Trông đợi tick thật khép lại khoảng cách với giao dịch thật

Chúng khép nửa về giá và để nguyên nửa về khớp lệnh. Độ trễ, requote, khớp một phần và chính sách của sàn vẫn ở ngoài mô phỏng, nên một lần chạy trên tick thật vẫn là bản tường thuật lạc quan về những lệnh khớp lẽ ra đã xảy ra — chỉ là một bản tường thuật lạc quan dựng trên một lộ trình thực sự đã diễn ra.

Chi tiết

Ba lần chạy, mỗi lần đổi một biến

TidewellSlack — GBP/JPY, M15, từ 2019-01-01Số lệnhProfit factorSụt giảm vốn tối đaChất lượng lịch sửCổng kiểm tra
Lịch sử M1 của sàn, Model 0 (đã công bố)3031,359,92 %99 %PASS
Tick đã nhập, Model 03511,1318,18 %99 %FAIL
Tick đã nhập, Model 4 tick thật3451,1118,20 %100 %FAIL

Từ dòng một sang dòng hai chỉ dữ liệu thay đổi và không gì khác: cùng bộ quy tắc, cùng cửa sổ, cùng mô hình kiểm thử. Profit factor rơi 0,22 và sụt giảm vốn tăng khoảng gấp đôi. Từ dòng hai sang dòng ba chỉ mô hình thay đổi, nâng tick tạo sinh lên tick đã ghi từ chính kho lưu trữ ấy, và profit factor rơi 0,02 trong khi sụt giảm vốn chỉ nhích 0,02 điểm phần trăm. Cả hai dòng dùng tick đã nhập đều trượt cổng kiểm tra của chúng tôi; kẻ sống sót là lần chạy trên tick tạo sinh.

Thứ tự đó không phải quy luật phổ quát, và đó mới là phần trung thực. KestrelHover đi theo chiều ngược lại: 291 lệnh và profit factor 1,33 trên tick thật, so với 292 lệnh và 1,30 trên tick tạo sinh của sàn, và cả hai lần chạy đều vượt cổng. Có lúc nguồn dữ liệu là toàn bộ câu chuyện, có lúc nó chỉ là nhiễu — và bạn chỉ biết được bằng cách chạy hai lần. Hãy đọc mục đăng của TidewellSlack cạnh mục đăng kia thì luận điểm tự nó hiện ra.

Tick thật bắt bạn trả giá bằng một mã tùy chỉnh

Mười một trong 23 lần chạy công bố ở đây dùng Model 4 và mười hai lần dùng Model 0. Mọi lần chạy Model 4 đều giao dịch một mã có tên kết thúc bằng _DUKA, bởi tick đã nhập không thể sống trên chính mã của sàn — bạn tạo một mã tùy chỉnh trong cửa sổ Symbols rồi nhập kho lưu trữ vào đó. Không một mã gốc nào của sàn trong danh mục này từng chạm tới mô hình tick thật, và đó là lý do thực dụng khiến rất nhiều backtest được công bố không dùng nó: chế độ ấy miễn phí, còn kho dữ liệu phía sau nó thì không.

Điều đó cũng phá vỡ lối tắt quen thuộc là tin vào một tỷ lệ phần trăm. Lần chạy Model 0 chạy song song phía sau KestrelHover in ra chất lượng lịch sử 100 %, đúng con số mà người anh em chạy tick thật của nó in ra, nên con số ấy không thể phân biệt được hai bên. Chất lượng mô phỏng trả lời một câu hỏi khác — lịch sử đã phủ kín cửa sổ đến mức nào — và trả lời nó cho cả hai mô hình.

Spread là nửa không ai kiểm tra

Món quà thứ hai của dữ liệu tick là bid và ask đã được ghi lại, và đó lại là món hay bị vứt đi nhất. Trên Model 4, trình kiểm thử khớp lệnh từ chính ask trừ bid của từng tick và bỏ qua mức spread bạn đã cấu hình: chạy một bài kiểm thử USD/JPY ở Spread=10 rồi chạy lại ở Spread=100 cho ra mức spread từng tick giống hệt nhau, 227 giá trị khác nhau trải từ 10 đến 350 điểm. Trường đó trông như một nút điều khiển nhưng hành xử như một dòng chú thích.

Cũng gần như không ai đo chi phí mà nó gây ra. Đúng một trong 23 lần chạy ở đây nêu một mức spread trung bình đã đo — 19,14 điểm, ghi ngay bên trong trình kiểm thử — và lần chạy đó dùng Model 0, không phải tick thật. Vậy nên cách đọc trung thực với phần lớn tuyên bố về tick thật, kể cả vài tuyên bố của chính chúng tôi, là lộ trình đã được ghi lại còn chi phí để đi hết lộ trình ấy thì chưa bao giờ được cộng lại.

Câu hỏi thường gặp

Tôi có cần dữ liệu tick thật để backtest một EA không?
Còn tùy chiến lược giữ lệnh bao lâu. Bất cứ thứ gì mở và đóng trong ngày đều nên dùng tick thật, bởi lộ trình bên trong cây nến quyết định quá nhiều lệnh để có thể đem ra phỏng đoán. Một hệ thống swing giữ lệnh nhiều ngày gần như không nhận ra khác biệt. Dù thế nào cũng hãy nêu nguồn: trong bài kiểm thử GBP/JPY của chúng tôi, đổi nguồn làm profit factor dịch 0,22 còn nâng lên tick thật chỉ dịch 0,02.
Dữ liệu tick của MT5 đến từ đâu?
Từ hai nơi. Các sàn MetaTrader lưu lịch sử tick trên máy chủ của họ và terminal tải nó về qua View → Symbols (Ctrl+U) → Ticks cho một mã và một khoảng ngày. Các nhà cung cấp độc lập phát hành kho lưu trữ tick, và bạn nhập chúng vào một mã tùy chỉnh. Mọi lần chạy tick thật trong danh mục này đều đi con đường thứ hai, và đó là lý do mỗi lần chạy đều mang hậu tố _DUKA trong tên mã.
Vì sao hai nguồn tick lại cho kết quả backtest khác nhau?
Bởi mỗi nguồn là bản ghi của một nơi giao dịch, và các mức giá — nhất là spread — khác nhau giữa các nơi. Cùng một EA GBP/JPY trên cùng một cửa sổ đạt profit factor 1,35 trên lịch sử của chính sàn và 1,13 trên kho lưu trữ đã nhập, với sụt giảm vốn tối đa tăng từ 9,92 % lên 18,18 %. So sánh hai nguồn là bài kiểm tra độ bền rẻ nhất hiện có.
Dữ liệu tick thật có làm backtest trở nên chính xác không?
Nó làm chuỗi giá trung thực, và đó không phải là một chuyện. Khâu khớp lệnh vẫn nằm ngoài trình kiểm thử, còn nguồn bạn chọn vẫn giữ vai trò chi phối. Hai EA của chúng tôi chạy theo cả hai cách rơi vào hai chỗ trái ngược: một cái gần như không nhúc nhích — 291 lệnh và profit factor 1,33 trên tick thật, so với 292 lệnh và 1,30 trên tick tạo sinh — còn cái kia trượt cổng kiểm tra ngay khoảnh khắc nguồn thay đổi.
Làm sao biết một backtest được công bố đã dùng dữ liệu tick nào?
Ba trường, theo thứ tự: tên mô hình mà trình kiểm thử in ra, mã mà lần chạy đã giao dịch, và nhà cung cấp phía sau mã đó. Một tên mã tùy chỉnh thường là dấu hiệu tố giác rằng tick đã được nhập vào. Nếu một mục đăng chỉ trưng ra một tỷ lệ phần trăm và một tính từ mà không có cả ba thứ đó, hãy coi lời khẳng định là chưa kiểm chứng chứ không phải là sai.