Isolated Scroll Container

1. Mô Tả Dynamic Delta FVG Strategy

Phát hiện Fair Value Gap (FVG) 3 nến kinh điển, chia mỗi vùng gap thành 2 phần theo tỷ lệ khối lượng mua/bán ước tính từ dữ liệu nến khung nhỏ hơn (tối ưu 1 giây), kèm dashboard tổng hợp cảm tính thị trường từ toàn bộ gap đang mở.

1.1 Khái Niệm Chỉ Báo

Chỉ báo này dựa trên khái niệm Fair Value Gap (FVG) - một mẫu hình 3 nến kinh điển: nến hiện tại và nến 2 bar trước để lại một "khoảng trống" giá (nến giữa hoàn toàn bị bỏ qua trong phép so sánh) không có giao dịch nào xảy ra tại đó - vùng này được xem là "chưa được lấp đầy công bằng" và có xu hướng hút giá quay lại trong tương lai.

Điểm khác biệt của chỉ báo này: mỗi khi một FVG hình thành, nó còn ước tính tỷ lệ khối lượng mua/bán đã diễn ra TRONG chính cây nến gây ra khoảng trống đó (nến ở giữa, nến "displacement"), bằng cách lấy dữ liệu nến khung thời gian nhỏ hơn (mặc định 1 giây) và cộng dồn khối lượng theo hướng từng nến nhỏ. Tỷ lệ này sau đó được dùng để chia đôi vùng FVG thành 2 box màu khác nhau theo đúng tỷ lệ - phần nào chiếm ưu thế trong delta sẽ chiếm phần diện tích lớn hơn trong vùng, cho cái nhìn trực quan về bên nào thực sự kiểm soát cú dịch chuyển tạo ra gap đó.

  • Dashboard tổng hợp cảm tính thị trường: tính trung bình tỷ lệ mua/bán của TẤT CẢ các gap đang còn mở (chưa bị vô hiệu hoá), cho ra một chỉ số "Buyer Strength / Seller Strength / Net Sentiment" tổng quát.
  • 2 chế độ vô hiệu hoá (mitigation): "Touch" (giá chỉ cần chạm mép gần của gap) hoặc "Full Fill" (giá phải xuyên hết qua mép xa) - cho phép người dùng chọn mức độ "nghiêm ngặt" để coi một gap là đã hết hiệu lực.
  • Bộ lọc kép: lọc theo khối lượng của nến displacement (so với trung bình 20 nến) VÀ lọc theo độ lớn tối thiểu của gap tính theo ATR - giúp loại bỏ các gap quá nhỏ/không đáng kể.

1.2 Chức Năng Chỉ Báo

  • Vùng FVG chia đôi theo Delta: mỗi gap được vẽ thành 2 box xếp chồng - box "bên mua" (màu buyColorInput) và box "bên bán" (màu sellColorInput), đường phân chia giữa 2 box dịch chuyển theo đúng tỷ lệ B/S% đo được, không cố định ở giữa.
  • Nhãn Delta: text "B:xx% S:xx%" đặt ở giữa vùng, nền nhãn tô màu theo bên thắng thế (xanh nếu mua áp đảo, đỏ nếu bán áp đảo).
  • Vòng đời theo Mitigation: gap tự động cập nhật mép phải mỗi nến khi còn hoạt động (chạy trên mọi tick, phản ứng gần như tức thời), biến mất hoặc chuyển sang dạng mờ (tuỳ "Show Mitigated Gaps") ngay khi bị vô hiệu hoá theo chế độ đã chọn.
  • Lọc chồng lấn: khi bật, một gap mới hình thành sẽ tự động xoá MỌI gap cũ (chưa vô hiệu hoá) có vùng giá chồng lấn với nó - không so sánh mạnh/yếu, gap mới luôn thắng.
  • Dashboard trực tiếp: bảng 2 cột hiện số gap tăng/giảm đang mở, % sức mua/sức bán trung bình, và một dòng "Net Sentiment" phân loại thành Aggressive Buying/Selling/Neutral dựa trên chênh lệch giữa 2 tỷ lệ đó.
  • Giới hạn số gap tối đa: khi vượt "Max Active Gaps", gap CŨ NHẤT trong mảng bị loại theo FIFO.

1.3 Cách Dùng Chỉ Báo

  • Đọc phần diện tích lớn hơn trong mỗi gap như dấu hiệu bên kiểm soát: nếu box "mua" chiếm phần lớn vùng, nến tạo ra gap đó có nhiều khối lượng mua hơn - có thể xem như một tín hiệu ủng hộ hướng tăng khi giá quay lại vùng này.
  • Chọn "Mitigation Mode" phù hợp phong cách giao dịch: "Touch" phản ứng sớm hơn (gap hết hiệu lực ngay khi giá chỉ chạm mép gần), "Full Fill" chờ xác nhận chắc chắn hơn (giá phải lấp đầy toàn bộ vùng).
  • Theo dõi Dashboard để nắm cảm tính tổng thể: "Aggressive Buying/Selling" xuất hiện khi chênh lệch trung bình 2 bên vượt 5 điểm phần trăm - dùng như bối cảnh chung, không phải tín hiệu vào lệnh trực tiếp cho một gap cụ thể.
  • Điều chỉnh "Min ATR Magnitude" để lọc gap theo độ lớn: tăng lên chỉ giữ các gap thực sự đáng kể so với biến động trung bình; giảm xuống bắt cả gap nhỏ.
  • Cân nhắc kỹ "Delta Timeframe": 1 giây cho độ chính xác cao nhất nhưng cần gói TradingView trả phí để có dữ liệu theo giây; nếu không có, chỉ báo tự động chuyển sang ước tính thô dựa trên hướng nến (xem Lưu Ý bên dưới).
  • Bật "Filter Overlapping" trên khung thời gian nhỏ để tránh nhiều gap chồng lấn cùng lúc làm rối biểu đồ - chỉ giữ lại gap mới nhất trong mỗi vùng giá.

1.4 Cách Hoạt Động Của Chỉ Báo

Đầu vào & vai trò

  • volMultInput ("Min Volume Threshold", Số thập phân, mặc định: 0.0): khối lượng của nến displacement (nến giữa) phải ≥ trung bình 20 nến × hệ số này. Mặc định 0 = luôn đúng (bộ lọc TẮT theo mặc định).
  • atrMultInput ("Min ATR Magnitude", Số thập phân, mặc định: 0.2): độ lớn của gap phải ≥ ATR(14) hiện tại × hệ số này. Ví dụ: ATR=0.0050, atrMultInput=0.2 → gap phải rộng ≥ 0.0010 mới hợp lệ.
  • mitModeInput ("Mitigation Mode", tuỳ chọn: Touch/Full Fill, mặc định: "Touch"): "Touch" = vô hiệu hoá ngay khi giá chạm mép GẦN của gap; "Full Fill" = phải xuyên hết qua mép XA mới tính là vô hiệu hoá.
  • filterOverlapInput ("Filter Overlapping", Boolean, mặc định: true): khi bật, gap mới xoá mọi gap cũ (chưa vô hiệu hoá) có vùng giá chồng lấn - không so sánh mạnh/yếu, gap mới luôn được giữ lại.
  • deltaTfInput ("Delta Timeframe", mặc định: "1S"): khung thời gian nhỏ hơn dùng để tái tạo tỷ lệ khối lượng mua/bán bên trong nến displacement.
  • maxGapsInput ("Max Active Gaps", Số nguyên, mặc định: 20): giới hạn kích thước mảng lưu trữ gap; khi vượt, gap ĐẦU MẢNG (cũ nhất theo thứ tự tạo) bị xoá theo FIFO.
  • buyColorInput / sellColorInput (Màu, mặc định: xanh/đỏ 60% trong suốt): màu 2 nửa box của mỗi gap.
  • showMitigatedInput ("Show Mitigated Gaps", Boolean, mặc định: false): giữ lại gap đã vô hiệu hoá dưới dạng box rất mờ (thay vì xoá hẳn), xoá riêng nhãn delta của nó.
  • showDashInput ("Show Dashboard", Boolean, mặc định: true) / dashPosInput / dashSizeInput: bật/tắt, vị trí, và cỡ chữ của bảng tổng hợp.
💡 Lưu ý về sai lệch tooltip gốc: tooltip của "Min ATR Magnitude" trong code gốc ghi "Reduced default to 0.1 for better sensitivity on NQ/XAUUSD" (đã giảm mặc định xuống 0.1), nhưng giá trị mặc định THỰC TẾ trong code là 0.2, không phải 0.1 - đây là sai lệch có sẵn giữa tooltip và giá trị mặc định thật của chỉ báo gốc, không phải lỗi phát sinh từ phân tích này. Bản Việt hoá dịch nguyên văn tooltip gốc (kể cả phần không khớp) để giữ đúng 100% nội dung gốc.

Các Khối Logic Chính

🧮 Luồng 1: Ước Tính Delta Khối Lượng (mỗi nến, real-time)

  • get_delta_details() chạy MỖI NẾN (không chờ nến đóng): lấy dữ liệu open/close/volume của các nến khung deltaTfInput nằm bên trong nến hiện tại. Với mỗi nến nhỏ: đóng cửa tăng → cộng trọn khối lượng vào buyVol; đóng cửa giảm → cộng vào sellVol; đứng yên → chia đôi 50/50.
  • Nếu không lấy được dữ liệu khung nhỏ hơn (fallback): dùng chính hướng của nến hiện tại với giá trị đặt cứng 100 (tăng → buyVol=100; giảm → sellVol=100; đứng yên → 50/50 mỗi bên) - vì chỉ tỷ lệ % cuối cùng được dùng, giá trị tuyệt đối 100 không quan trọng, chỉ cần đúng tỷ lệ.
  • Trả về buyPct/sellPct = % trên tổng (mặc định 50/50 nếu tổng = 0).

🎯 Luồng 2: Phát Hiện FVG (chỉ khi nến đã đóng)

  • isBullFVG = low > high[2]: đáy nến hiện tại cao hơn đỉnh nến 2 bar trước - khoảng trống tăng. isBearFVG = high < low[2]: đối xứng cho khoảng trống giảm. Cả 2 đều BỎ QUA hoàn toàn nến ở giữa (nến displacement) trong phép so sánh.
  • volFilter: khối lượng nến GIỮA (nến[1]) ≥ trung bình 20 nến của chính nó × volMultInput. sizeFilterBull/Bear: độ rộng gap ≥ ATR hiện tại × atrMultInput.
  • Nếu cả 2 điều kiện đều đúng: top/bottom được gán theo hướng gap (bull: top=low hiện tại, bottom=high[2]; bear: top=low[2], bottom=high hiện tại).

🖊️ Luồng 3: Vẽ Gap Chia Đôi Theo Delta

  • Lấy buyPct[1]/sellPct[1] - CHÍNH LÀ tỷ lệ delta đo được TẠI NẾN GIỮA (nến displacement, index 1), không phải nến xác nhận hiện tại - vì nến giữa mới là nến thực sự "gây ra" khoảng trống.
  • splitLevel = bottom + rangeHeight × (sellPct/100): điểm chia giữa box mua và box bán. sellPct càng cao → splitLevel càng dịch LÊN cao → box bán chiếm diện tích lớn hơn (và ngược lại) - diện tích box tỷ lệ trực tiếp với % delta đo được.
  • Nếu filterOverlapInput bật: xoá mọi gap cũ (chưa vô hiệu hoá) có vùng giá chồng lấn với gap mới - không so sánh mạnh yếu.
  • Vẽ 2 box (buy box từ top→splitLevel, sell box từ splitLevel→bottom) trải từ bar_index[2] (nến gốc thật) tới bar_index hiện tại, cộng 1 nhãn delta text tại trung điểm, màu nền nhãn theo bên thắng thế. Đẩy vào mảng activeGaps. Nếu mảng vượt maxGapsInput → xoá phần tử ĐẦU MẢNG (cũ nhất).
  • Ví dụ: bull FVG, top=1.2650 (low hiện tại), bottom=1.2620 (high[2]) → rangeHeight=0.0030. bPct[1]=65%, sPct[1]=35% → splitLevel=1.2620+0.0030×0.35=1.2620+0.00105=1.26305. Box mua trải từ 1.26305 đến 1.2650 (65% chiều cao vùng), box bán từ 1.2620 đến 1.26305 (35% chiều cao vùng) - phần mua chiếm diện tích lớn hơn hẳn, phản ánh đúng bPct=65% áp đảo.

🗑️ Luồng 4: Kiểm Tra Vô Hiệu Hoá (mọi tick)

  • Với gap tăng: mode "Touch" → vô hiệu hoá khi low < gap.top (mép gần); mode "Full Fill" → khi low < gap.bottom (mép xa). Gap giảm đối xứng, dùng high thay vì low.
  • Nếu vô hiệu hoá: đặt isMitigated := true. Nếu showMitigatedInput TẮT → xoá hẳn cả 2 box + nhãn, gỡ khỏi mảng. Nếu BẬT → giữ trong mảng, đổi cả 2 box sang màu rất mờ (90%/95% trong suốt dùng chart.fg_color), XOÁ hẳn đối tượng nhãn (không chỉ làm rỗng chữ) - mép phải box không còn được cập nhật nữa (đóng băng ngầm định tại vị trí lần cuối, không phải một lệnh "đóng băng" tường minh).
  • Nếu CHƯA vô hiệu hoá: kéo dài mép phải 2 box + nhãn tới bar_index hiện tại (nhãn luôn đứng NGAY tại mép phải box, không nổi phía trước như một số chỉ báo khác). Cộng dồn vào tổng dashboard: totalActive, sumAllBuyPct/sellPct (dùng gap.buyPct/gap.sellPct - giá trị ĐÓNG BĂNG từ lúc gap hình thành, không phải delta sống hiện tại), và đếm openBull/openBear.

📊 Luồng 5: Tính Chỉ Số Dashboard

  • avgBuyAll = sumAllBuyPct / totalActive (mặc định 50% nếu không có gap nào đang mở), tương tự avgSellAll. netMarketDelta = avgBuyAll - avgSellAll.

🖥️ Luồng 6: Vẽ Dashboard (chỉ tại nến cuối cùng)

  • Bảng 2 cột × 9 dòng, chỉ vẽ khi barstate.islast và showDashInput bật: tiêu đề "Active Imbalances" → số gap tăng/giảm đang mở → % Buyer Strength/Seller Strength → dòng "Net Sentiment" phân loại netMarketDelta > 5 → "Aggressive Buying", < -5 → "Aggressive Selling", còn lại → "Neutral / Balanced".

Đầu ra & vai trò trong sử dụng

  • Box FVG chia đôi: vùng hỗ trợ/kháng cự có "trọng số delta" trực quan - diện tích mỗi màu tỷ lệ với sức mua/bán tại thời điểm gap hình thành.
  • Nhãn delta text: con số cụ thể B/S% cho từng gap, kèm màu nền báo hiệu bên thắng thế.
  • Dashboard: cái nhìn tổng quan cảm tính thị trường dựa trên TOÀN BỘ gap đang mở, dùng làm bối cảnh chung chứ không phải tín hiệu riêng cho 1 gap.
💡 Lưu ý khác: "Buyer Strength"/"Seller Strength" trên Dashboard KHÔNG phải delta thị trường sống tại thời điểm hiện tại - đó là trung bình cộng của các giá trị buyPct/sellPct đã ĐÓNG BĂNG ngay từ lúc mỗi gap đang-mở được tạo ra, không được cập nhật lại sau đó. Ngoài ra, "Max Active Gaps" thực chất giới hạn TỔNG kích thước mảng activeGaps - khi "Show Mitigated Gaps" bật, các gap đã vô hiệu hoá vẫn NẰM TRONG mảng này (chỉ đổi màu mờ, không bị gỡ), nên chúng cũng chiếm chỗ trong giới hạn FIFO, có thể khiến gap mới bị đẩy ra sớm hơn so với những gì tên input gợi ý.
Zoom/Pan Layered Image
Background Overlay
− +

Chỉ báo trên vừa hoá thành BOT TRADE — chỉ 1 click AI

📊Chỉ báo gốc
→
🤖AI convert 1-click
→
⚙️Bot tự trade 24/7