Mục lục bài viết

Bằng chứng và phạm vi

Nguồn chính chủ công bố một detector FVG và thông số; bài dùng bản hình học tối giản cùng biến thể nghiên cứu, chưa chứng minh tỷ lệ fill hay lợi nhuận.

Dữ liệu và thị trườngDữ liệu OHLC chuẩn theo cùng feed; khoảng gap qua phiên và thiếu dữ liệu phải được gắn nhãn riêng.
Khung thời gian nghiên cứuFVG H1 chỉ có sau nến H1 thứ ba đóng; không dùng phần cuối nến H1 để vào sớm trên M1.
Biên trên 101,2 và biên dưới 100 tạo vùng FVG, sau đó có retest tới 100,5 và phản ứng minh họa.Mở hình kích thước đầy đủ
Đường sự kiện giả lập dùng các cực trị A/B/C, không phải chuỗi close của nến thực. Vùng FVG 100–101,2; không phải backtest.

Quy trình thực hành

Sơ đồ quy trình Fair Value Gap: vùng ba nến, trạng thái fill và thuật toán retest
Các bước được mô tả đầy đủ bên dưới. Tại mỗi bước, dữ liệu thiếu hoặc điều kiện sai phải có lý do loại bỏ.
  1. Đủ ba nến đóngKiểm không chồng lấn A và C.
  2. Khóa zoneGhi created_at và biên ban đầu.
  3. Theo dõi fillPartial, midpoint, full là cờ riêng.
  4. Chọn entryLimit đã đặt hoặc close xác nhận.
  5. Vô hiệu/hết hạnGiữ mọi fill đã xảy ra.

Tên fair value không phải ước lượng giá trị hợp lý

Với nến A, B, C liên tiếp, bullish FVG tồn tại khi low C cao hơn high A. Đoạn giữa hai giá này là zone. B có thể là nến đi lên mạnh qua đoạn đó, nên nói “không có giao dịch tại đây” là suy luận sai từ OHLC. Muốn biết các mức không có prints cần trades theo giá.

LuxAlgo công bố detector có thêm điều kiện close nến giữa và threshold [1]. Bản tối giản ở đây chỉ lưu hình học trước; thêm middle-close, displacement hoặc BOS là version riêng. Điều này giúp biết một filter có giá trị hay chỉ làm chart ít ô hơn.

FVG cũng khác gap qua đêm: một bên là quan hệ ba nến, một bên là gián đoạn giữa phiên. Nếu chúng chồng nhau, lưu cả gap_session flag; không gộp tất cả fill statistics như cùng một cơ chế.

Công bố zone sau nến thứ ba

Bullish: L[t]>H[t−2], zone=[H[t−2],L[t]]. Bearish: H[t]<L[t−2], zone=[H[t],L[t−2]]. Dùng nến đã đóng. Đề xuất width≥max(2tick,0,15ATR[t−1]) để lọc vùng quá nhỏ, nhưng giữ cả raw_fvg và eligible_size để audit.

Tạo zone_id, created_at và eligible_from=t+1. Hai biên giữ nguyên dù giá đi vào vùng; nếu muốn vẽ phần chưa fill thì lưu residual_zone riêng, không thay entry/stop ban đầu. Lưu độ rộng theo ATR, tuổi, direction và context trend đã biết.

Với bullish zone, partial khi low đi vào, midpoint_touch khi low≤mid, full_fill khi low≤zone_low. Đây là cờ mức độ tương tác. Invalidation đề xuất là close<zone_low−b; do đó full fill bằng wick không đồng nghĩa vô hiệu. Phiên bản wick-invalidation cần thống kê riêng.

Trong baseline minh họa, khóa b=max(2tick,0,05ATR trước creation) cho invalidation và stop; reclaim_margin=1tick cho close xác nhận trên zone_high. Hai buffer khác nhau và đều là lựa chọn nghiên cứu. Với tick 0,05 và ATR2 trong ví dụ, b=0,10 còn reclaim_margin=0,05. Mã giả xử lý fill của lệnh đang sống trước quyết định hủy ở close; mỗi lần lặp dùng đúng chỉ số bar hiện tại.

Chỉ zone ACTIVE được xét entry mới. EXPIRED và INVALIDATED là trạng thái kết thúc; một close hồi lên về sau không hồi sinh zone đã hỏng. Bộ đánh giá entry phải dùng đúng policy first-touch hoặc số attempt đã đăng ký trước, và tiêu thụ attempt khi phát signal; hủy theo close vẫn không xóa fill đã xảy ra.

on_completed_bar(t):
  process_resting_order_events_up_to_close(t,respect_order_expiry=True)
  for zone in active_zones_published_before_bar(t):
    if t > zone.created_at+20:
      zone.state = EXPIRED; cancel_future_orders(zone); continue
    record_partial_mid_full_touches(zone.original_bounds,t)
    if C[t] < zone.low-zone.b:
      zone.state = INVALIDATED; cancel_future_orders(zone); continue
    evaluate_registered_entry_version_after_received_close(zone,t)
    # The registered attempt policy consumes or keeps an otherwise active zone.
  A = ATR14[t-1]
  if not finite_positive(A) or not valid_three_bar_history(t): return
  if L[t] > H[t-2] and L[t]-H[t-2] >= max(2*tick,0.15*A):
    create(zone=[H[t-2],L[t]],known_at=received_close_time(t),
           eligible_from=t+1,b=max(2*tick,0.05*A),reclaim_margin=tick)
# Fills of existing orders precede close-based cancellation.
# The creation candle is never its own post-publication retest.

Đo impulse và lần quay lại vùng

FVG hình học không bắt buộc volume. Đề xuất so volume nến B với median cùng giờ, rồi so volume retest với impulse trên cùng độ dài. Một vùng tạo bởi nến volume cao có thể đi cùng tin mới; retest sau tin và retest trong thị trường bình thường không nên coi cùng regime.

Nếu dùng volume profile, cần tính profile chỉ tới lúc quyết định. Một FVG có volume lớn trong nến giữa không mâu thuẫn với định nghĩa; profile có thể cho thấy vùng từng được trao đổi dày. Vì vậy FVG, LVN và imbalance order book phải là ba feature khác nhau.

Đừng dùng fill percentage của toàn bộ tương lai làm feature chọn FVG ở thời điểm tạo. Nó chỉ là outcome; phân tách bảng feature và outcome giúp chặn leakage.

Ví dụ số về midpoint, full fill và thua lệnh

Giả lập high A=100, low C=101,2 nên zone=[100,101,2], midpoint=100,6. ATR=2, tick=0,05; width=1,2 vượt ngưỡng 0,3. Nến C đóng rồi mới có zone. Retest sau đó low=100,5, close=101,3: đã chạm midpoint nhưng chưa full fill.

Nếu chiến lược xác nhận yêu cầu close trở lại trên zone_high+0,05, entry sau close khớp 101,35, stop 99,90, target 104,25 thì risk=1,45 và reward=2,90. Đây là ví dụ thắng tiềm năng chỉ nếu đường giá đi tới target trước stop.

Một nến retest khác low=99,6, close=99,7 vừa full fill vừa vô hiệu; bản chờ close không được phát entry. Nhưng nếu đã đặt buy limit 100,6 từ trước, lệnh có thể khớp rồi lỗ khi giá xuyên 99,9. Không được nhìn close cuối nến để xóa fill đó. Trường hợp không quay lại vùng trước TTL phải tính no-fill, không thắng hay thua giả.

Limit midpoint và xác nhận close là hai chiến lược

Phiên bản limit đặt tại midpoint sau khi zone công bố; cần spread, queue và cách xử lý touch/no-fill. Phiên bản xác nhận đợi giá vào zone rồi close vượt biên trên với bullish FVG; entry thường cao hơn nhưng phản ứng đã quan sát. Không trộn entry đẹp của limit với độ chọn lọc của close confirmation.

Đề xuất TTL=20 nến và chỉ first eligible retest. Các số này chưa tối ưu. Nếu vùng đã được chạm trong chính nến tạo, không gọi đó là retest có thể giao dịch sau công bố. Với FVG khung lớn, phải đợi close khung lớn theo timing của feed [2].

Stop theo far edge là một lựa chọn; cấu trúc swing có thể đòi stop khác. Order type và giới hạn fill cần mô phỏng cụ thể [3]. Target 2R, đỉnh cũ hoặc time-exit nên thử riêng; không mặc định giá sẽ quay về một vùng FVG đối diện chưa tồn tại.

Tỷ lệ fill không bằng lợi nhuận

Để đo fill probability, quy định horizon: trong 10, 20 hoặc 50 nến, cùng cách xử lý dữ liệu hết mẫu. Vùng cuối dataset chưa đủ horizon không được coi chưa fill vĩnh viễn. Có thể báo thời gian tới partial/mid/full cùng nhóm censored.

So FVG với các zone giả lập có cùng độ rộng, khoảng cách tới giá và trend. Nếu mọi giá đều hay hồi một phần, tỷ lệ touch cao chưa riêng có ở FVG. Đo phản ứng sau lần chạm và return sau entry khả thi.

Kiểm sensitivity threshold, TTL và first/second touch, tính chi phí và no-fill. Một chiến lược có nhiều vùng không quay lại cần đánh giá return theo ngày và vốn nhàn rỗi, không chỉ các trade đã may mắn được khớp.

Sai lầm thường gặp

Vùng chưa từng giao dịch

Nến giữa có thể đi xuyên; dùng trades nếu cần xác minh prints.

Mọi FVG sẽ lấp

Không có bảo đảm; phải đo theo horizon.

Xóa limit thua bằng close

Một lệnh đã khớp intrabar vẫn là trade dù close vô hiệu zone.

Checklist trước khi dùng phương pháp

Tự đánh dấu khi đã kiểm tra trên dữ liệu của bạn. Trạng thái lưu trong trình duyệt này; đây không phải chứng nhận chiến lược có lãi.

0/7 mục

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

FVG 50% có phải fair value?

Midpoint chỉ là trung điểm hình học trong đặc tả, không phải ước lượng giá trị nội tại.

FVG đầy rồi còn dùng được không?

Tùy luật: wick full-fill và close-invalidation là hai sự kiện khác. Chọn một version trước kiểm định.

Nguồn nghiên cứu

Các nguồn dưới đây hỗ trợ phần định nghĩa hoặc bằng chứng được ghi bên cạnh. Mã giả, ví dụ minh họa và tham số đề xuất trong bài cần được kiểm định riêng.

  1. Fair Value GapLuxAlgo trên TradingView. Đọc điều kiện detector công bố; không chạy kiểm định fill rate. Đối chiếu: .
  2. RepaintingTradingView. Tài liệu về dữ liệu chưa xác nhận. Đối chiếu: .
  3. Futures Order TypesCME Group. Đọc để đối chiếu thực thi lệnh. Đối chiếu: .

Đọc tiếp theo phương pháp

Lưu ý rủi ro

Nội dung phục vụ giáo dục và thiết kế nghiên cứu, không phải lời khuyên tài chính. Backtest là mô phỏng lịch sử, không bảo đảm hiệu quả tương lai và không đặt lệnh giao dịch thật. Các phương pháp trong thư viện không mặc nhiên là tính năng đã có trong ứng dụng. Xem phương pháp tính và trung tâm học.

Kiểm tra quy tắc trước khi dùng vốn thật

Đối chiếu khả năng hỗ trợ của ứng dụng, dữ liệu và từng giao dịch mô phỏng; các detector nâng cao có thể cần triển khai riêng.

Tải Backtest trên App Store