Isolated Scroll Container

1. Mô Tả Volume HeatMap Divergence Strategy

Vẽ khối lượng dưới dạng "heatmap" tô màu theo phân vị (percentile) ngay trên biểu đồ giá, đồng thời phát hiện phân kỳ giữa các đỉnh KHỐI LƯỢNG (không phải oscillator) và các điểm cực trị giá tương ứng tại cùng vị trí.

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

Chỉ báo này thay thế oscillator truyền thống (RSI, MACD...) bằng chính khối lượng đã chuẩn hoá làm chuỗi để phát hiện phân kỳ với giá. Khối lượng mỗi nến được biểu diễn dưới dạng % so với khối lượng LỚN NHẤT trong 1000 nến gần nhất (luôn nằm trong khoảng 0-100), rồi tô màu theo gradient 2 giai đoạn: xanh ngọc→vàng cho vùng thấp (dưới 20%), vàng→đỏ cho vùng cao (20-100%) - tạo hiệu ứng "bản đồ nhiệt" (heatmap) trực quan ngay trên biểu đồ giá.

Phân kỳ được phát hiện tại các đỉnh của chính chuỗi khối lượng đã chuẩn hoá (không phải đỉnh/đáy oscillator kiểu RSI), so sánh với giá TẠI ĐÚNG cùng vị trí offset. Đáng chú ý: 2 hướng phân kỳ dùng 2 LÝ THUYẾT KHÁC NHAU, không đối xứng hoàn toàn:

  • Phân kỳ Tăng (Bull): giá tạo đáy MỚI THẤP HƠN đáy trước, NHƯNG đỉnh khối lượng tại thời điểm đó lại CAO HƠN đỉnh khối lượng trước - đọc theo lý thuyết "khối lượng cực đại tại đáy mới" (climax/capitulation volume): một cú bán tháo với khối lượng áp đảo tại đáy mới thường báo hiệu kiệt sức bên bán, có khả năng đảo chiều tăng.
  • Phân kỳ Giảm (Bear): giá tạo đỉnh MỚI CAO HƠN đỉnh trước, NHƯNG đỉnh khối lượng tại thời điểm đó lại THẤP HƠN đỉnh khối lượng trước - đọc theo lý thuyết phân kỳ kinh điển: đỉnh giá mới được tạo bởi động lượng khối lượng đang SUY YẾU, báo hiệu bên mua đang cạn sức.

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

  • Heatmap Khối Lượng: vẽ khối lượng đã chuẩn hoá dưới dạng cột màu (dùng plotcandle từ 0 tới giá trị vol) ngay trên biểu đồ giá, tự động co giãn theo tỷ lệ riêng nhờ một điểm neo vô hình (input "Chart Scale").
  • Đánh Dấu Phân Kỳ Trên Track Khối Lượng: một điểm đánh dấu (không phải đường nối 2 điểm) xuất hiện tại đúng vị trí đỉnh khối lượng khi phân kỳ được xác nhận, màu theo hướng tăng/giảm.
  • Nhãn Chi Tiết Phân Kỳ: hiện "Bull"/"Bear" kèm khối lượng thực (định dạng gọn "1.2M"...) và % chuẩn hoá, đặt trên track heatmap (tuỳ chọn bật/tắt riêng từng phần).
  • Nhãn Trên Biểu Đồ Giá Thực: "Bull"/"Bear" đặt CHÍNH XÁC tại mức giá đáy/đỉnh thực sự xảy ra phân kỳ (dùng force_overlay + location.absolute) - độc lập với nhãn trên track heatmap.
  • Không có Alert: chỉ báo này không lập sẵn bất kỳ alertcondition() nào.

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

  • Đọc màu heatmap như một "nhiệt kế" tham gia thị trường: vùng đỏ = khối lượng đang ở gần mức cao nhất trong 1000 nến gần đây (tham gia mạnh); vùng xanh ngọc/vàng = khối lượng thấp/trung bình.
  • Dùng phân kỳ Bull để tìm điểm capitulation: khi giá vừa tạo đáy mới kèm cột heatmap đỏ rực (khối lượng đỉnh điểm) so với đáy trước, cân nhắc khả năng đảo chiều tăng.
  • Dùng phân kỳ Bear để tìm exhaustion cổ điển: đỉnh giá mới nhưng cột heatmap mờ hơn (khối lượng yếu hơn) đỉnh trước - dấu hiệu bên mua đuối sức.
  • Đọc nhãn giá thực (trên biểu đồ chính) để biết CHÍNH XÁC entry/SL tham chiếu - đây mới là vị trí thực tế trên price action, khác với vị trí nhãn trên track heatmap (chỉ mang tính minh hoạ khối lượng).
  • Điều chỉnh "Range Min"/"Max" để lọc bỏ các cặp pivot khối lượng quá gần nhau (nhiễu) hoặc quá xa nhau (không còn liên quan).
  • Điều chỉnh "Pivot Trái"/"Phải" để đổi độ nhạy phát hiện đỉnh khối lượng - lưu ý 2 giá trị này KHÔNG đối xứng theo mặc định (10 trái / 5 phải), nghĩa là độ trễ xác nhận ngắn hơn độ dài cần thiết để xác nhận pivot hợp lệ về phía trái.

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

Đầu vào & vai trò

  • showDiv ("Divergence", Boolean, mặc định: true): công tắc tổng - tắt sẽ vô hiệu hoá HOÀN TOÀN việc tính phân kỳ (không chỉ ẩn hiển thị).
  • labelVolume/labelPercent (Boolean, mặc định: true/true): bật/tắt riêng phần khối lượng thực và phần trăm chuẩn hoá trong nhãn chi tiết.
  • minRange ("Range Min", Số nguyên, mặc định: 5) / maxRange ("Max", mặc định: 60): khoảng số nến cho phép giữa 2 đỉnh khối lượng liên tiếp để một phân kỳ được coi là hợp lệ.
  • divLookLeft ("Pivot Trái", mặc định: 10) / divLookRight ("Phải", mặc định: 5): số nến 2 bên để xác nhận đỉnh trong CHUỖI KHỐI LƯỢNG (không phải giá).
  • BullColor/BearColor (mặc định: xanh ngọc #19b493 / cam nâu #b95919): màu cho toàn bộ hình vẽ tăng/giảm.
  • sizeOffset ("Chart Scale", mặc định: 400): giá trị của một plot ẨN dùng làm điểm neo tỷ lệ, giúp track heatmap khối lượng (thang 0-100) hiển thị ở kích thước hợp lý khi chồng lên biểu đồ giá thực.
💡 Lưu ý 1 - Có phần code không tạo ra hiệu ứng nào:
• Biến candleColor được tính (công thức giống hệt nửa trên của gradient volColor, đoạn 20-100 vàng→đỏ) nhưng KHÔNG được dùng ở bất kỳ đâu khác trong code - đây là biến chết.
• Dòng barcolor(volColor, display = display.none) có tham số display.none khiến toàn bộ hiệu ứng tô màu nến GỐC bị VÔ HIỆU HOÁ hoàn toàn - nến giá thực trên biểu đồ KHÔNG hề được tô màu theo khối lượng, chỉ có track heatmap riêng (vẽ bằng plotcandle) mới hiển thị màu gradient. Đây là hành vi có sẵn của code gốc, không phải suy diễn từ phân tích này.

Các Khối Logic Chính

📊 Luồng 1: Chuẩn Hoá Khối Lượng Thành "vol" (mọi nến)

  • vol = volume / percentile_nearest_rank(volume, 1000, 100) * 100 - chia khối lượng nến hiện tại cho khối lượng LỚN NHẤT trong 1000 nến gần nhất (percentile 100 = giá trị max của cửa sổ), nhân 100 → luôn nằm trong khoảng 0-100 (không thể vượt 100 vì cửa sổ 1000 nến LUÔN bao gồm chính nến hiện tại, nên nến hiện tại không bao giờ "vượt qua max của chính nó").
  • Ví dụ: volume nến hiện tại = 8,500. Volume lớn nhất trong 1000 nến gần nhất = 10,000. → vol = 8500/10000×100 = 85. Màu tương ứng: nằm trong đoạn 20-100 → gradient vàng→đỏ tại vị trí 85/100 (gần đỏ, khối lượng rất cao).

🎯 Luồng 2: Phát Hiện Pivot Trên Chuỗi Khối Lượng

  • PH = not na(ta.pivothigh(vol, divLookLeft, divLookRight)) - LƯU Ý: pivot ở đây được tính trên chuỗi vol (khối lượng đã chuẩn hoá), KHÔNG PHẢI trên giá - đây là điểm khác biệt cốt lõi so với các chỉ báo phân kỳ oscillator thông thường (RSI, MACD...).
  • volVal = vol[divLookRight]: giá trị vol TẠI đúng bar pivot (không phải bar xác nhận hiện tại) - dùng xuyên suốt các bước so sánh sau.

🔍 Luồng 3: Kiểm Tra Khoảng Cách Giữa 2 Pivot

  • _inRange(PH[1]) tính số nến kể từ lần PH true gần nhất (tính lùi 1 bar), yêu cầu nằm trong [minRange, maxRange] - đảm bảo 2 đỉnh khối lượng so sánh với nhau không quá gần (nhiễu) hoặc quá xa (không còn liên quan).

🐂 Luồng 4: Phân Kỳ Tăng (Bull) - Khối Lượng Cực Đại Tại Đáy Mới

  • volHL = volVal > ta.valuewhen(PH, volVal, 1) and range_: đỉnh khối lượng HIỆN TẠI cao hơn đỉnh khối lượng LẦN TRƯỚC. priceLL = low[divLookRight] < ta.valuewhen(PH, low[divLookRight], 1): giá thấp HIỆN TẠI (tại cùng offset) thấp hơn giá thấp lần trước. bull = PH and volHL and priceLL.
  • Ví dụ: pivot khối lượng trước có volVal=60, low=1.2600. Pivot khối lượng hiện tại có volVal=85 (cao hơn 60) và low=1.2580 (thấp hơn 1.2600) → cả 2 điều kiện đúng → bull=true: giá tạo đáy mới thấp hơn NHƯNG với khối lượng đỉnh điểm cao hơn hẳn - dấu hiệu capitulation.

🐻 Luồng 5: Phân Kỳ Giảm (Bear) - Khối Lượng Suy Yếu Tại Đỉnh Mới

  • Đối xứng ngược: volLH = đỉnh khối lượng hiện tại THẤP hơn lần trước; priceHH = giá cao hiện tại CAO hơn lần trước; bear = PH and volLH and priceHH.
  • Ví dụ: pivot trước có volVal=90, high=1.2700. Pivot hiện tại có volVal=55 (thấp hơn) và high=1.2750 (cao hơn) → bear=true: đỉnh giá mới cao hơn nhưng khối lượng hậu thuẫn yếu hơn hẳn - dấu hiệu exhaustion cổ điển.

🖊️ Luồng 6: Vẽ Track Heatmap & Neo Tỷ Lệ (mọi nến)

  • plot(sizeOffset, color=na): 1 plot vô hình cố định tại giá trị 400, buộc trục giá dùng chung (vì overlay=true + scale=scale.none) phải bao gồm mốc 400 - giữ cho track heatmap (0-100) hiển thị ở tỷ lệ dễ nhìn thay vì bị bóp méo theo giá thực.
  • plotcandle(0, vol, 0, vol, ...): vẽ 1 "nến" ảo mỗi bar, open=0/low=0, high=close=vol - thực chất là 1 cột dựng từ 0 tới vol, màu theo volColor - đây chính là hiệu ứng heatmap thấy trên biểu đồ.

🖊️ Luồng 7: Vẽ Đánh Dấu Phân Kỳ (mọi nến)

  • 2 lệnh plot(PH ? volVal : na, offset=-divLookRight, ...) - CÙNG một biểu thức giá trị, chỉ khác title và điều kiện màu (isBullDiv/isBearDiv) - mỗi lệnh vẽ 1 ĐIỂM ĐƠN tại đúng bar pivot (nhờ offset lùi về đúng vị trí), KHÔNG PHẢI một đường nối 2 điểm pivot liên tiếp như một số chỉ báo phân kỳ khác - chỉ hiện màu khi đúng hướng phân kỳ, còn lại trong suốt.
  • Nếu isBullDiv/isBearDiv đúng: tạo nhãn text tại (bar_index[divLookRight], volVal) trên track heatmap, kèm khối lượng thực + % (tuỳ input bật/tắt).
  • Đồng thời (độc lập), vẽ plotshape với force_overlay=true + location.absolute tại ĐÚNG mức giá thấp/cao thực tế (không phải trên track heatmap) - đây là nhãn "Bull"/"Bear" hiển thị trên chính biểu đồ nến giá.

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

  • Track heatmap khối lượng: cái nhìn trực quan tức thời về mức độ tham gia thị trường tại mỗi nến, không cần đọc số liệu.
  • Điểm đánh dấu trên track: vị trí chính xác của đỉnh khối lượng gây ra phân kỳ, kèm chi tiết số liệu trong nhãn.
  • Nhãn trên biểu đồ giá thực: vị trí entry/tham chiếu thực tế trên price action, dùng trực tiếp cho quyết định giao dịch.
Zoom/Pan Layered Image
Sơ đồ logic chỉ báo Volume HeatMap Divergence
− +

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