FVG Volume Profile Analysis

1. Mô tả chỉ báo FVG Volume Profile [ChartPrime]

Công cụ phân tích khối lượng giao dịch thông minh trong các vùng mất cân bằng giá (Fair Value Gap)

1.1 Concept của chỉ báo

Chỉ báo FVG Volume Profile dựa trên lý thuyết về Fair Value Gap (FVG) - hay còn gọi là "vùng mất cân bằng giá". Đây là những khoảng trống xuất hiện trên biểu đồ giá khi thị trường di chuyển quá nhanh, tạo ra vùng giá mà không có hoặc có rất ít giao dịch diễn ra.

Nguyên lý cốt lõi: Thị trường có xu hướng quay lại để "lấp đầy" (fill) các vùng FVG này vì chúng được coi là vùng giá chưa được định giá công bằng (unfair value). Tuy nhiên, không phải tất cả FVG đều có giá trị như nhau.

Chỉ báo này đi sâu hơn bằng cách phân tích khối lượng giao dịch bên trong mỗi vùng FVG từ khung thời gian nhỏ hơn (lower timeframe). Điều này giúp trader hiểu được:

  • Mật độ giao dịch: Khối lượng giao dịch tập trung ở đâu trong vùng FVG
  • Điểm kiểm soát giá (POC - Point of Control): Mức giá có khối lượng giao dịch lớn nhất, thường là vùng hỗ trợ/kháng cự mạnh
  • Độ mạnh yếu của FVG: FVG có khối lượng lớn thường có khả năng gây phản ứng giá mạnh hơn
💡 Tư tưởng chính: Kết hợp cả yếu tố giá (price structure - FVG) và khối lượng (volume profile) để có cái nhìn đầy đủ hơn về cấu trúc vi mô của thị trường, từ đó đưa ra quyết định giao dịch chính xác hơn.

1.2 Chức năng của chỉ báo

Hiển thị trên biểu đồ:

  • Hộp FVG (FVG Box): Vùng hình chữ nhật màu xanh lá (bullish FVG) hoặc màu tím (bearish FVG) đánh dấu vùng giá mất cân bằng. Hộp tự động mở rộng sang phải và hiển thị tổng khối lượng giao dịch bên trong.
  • Biểu đồ khối lượng dọc (Volume Profile): Các thanh ngang bên trong mỗi FVG thể hiện phân bố khối lượng theo từng mức giá. Màu sắc từ nhạt đến đậm tùy theo mật độ khối lượng (càng đậm = càng nhiều giao dịch).
  • Đường POC (Point of Control): Đường ngang màu xanh lá (bullish) hoặc tím (bearish) đánh dấu mức giá có khối lượng lớn nhất trong FVG. Đây là vùng quan trọng nhất cần theo dõi.
  • Nhãn POC (POC Label): Hiển thị con số khối lượng giao dịch tại mức POC, giúp đánh giá độ mạnh yếu của vùng này.
  • Tổng khối lượng FVG: Số được hiển thị ở góc của mỗi hộp FVG (góc dưới bên phải với bullish FVG, góc trên bên phải với bearish FVG).

Tính năng điều chỉnh:

  • Chế độ Auto Timeframe: Tự động chọn khung thời gian nhỏ hơn 10 lần để phân tích khối lượng (ví dụ: biểu đồ 1 giờ sẽ dùng dữ liệu 6 phút)
  • Chế độ Manual Timeframe: Cho phép tự chọn khung thời gian cụ thể để phân tích chi tiết hơn
  • Resolution (Độ phân giải): Điều chỉnh số lượng "bins" (ô) để chia nhỏ FVG - càng nhiều bins càng chi tiết (mặc định 15)
  • Filter Gaps: Lọc ra chỉ những FVG đủ lớn dựa trên độ lệch chuẩn, tránh nhiễu từ các gap nhỏ không quan trọng
  • Bật/Tắt Volume Profile: Có thể ẩn biểu đồ khối lượng chi tiết, chỉ giữ lại hộp FVG và đường POC để giao diện gọn gàng hơn

Cảnh báo (Alert):

  • Cảnh báo lỗi timeframe: Nếu chọn khung thời gian không phù hợp (lớn hơn hoặc bằng khung biểu đồ hiện tại), chỉ báo sẽ hiển thị biểu tượng cảnh báo ⚠️ yêu cầu điều chỉnh

1.3 Cách dùng chỉ báo

  • Xác định vùng hỗ trợ/kháng cự mạnh:

    FVG với khối lượng lớn (con số tổng volume cao) thường là vùng quan trọng. Khi giá quay lại test FVG này, khả năng cao sẽ có phản ứng mạnh (bounce hoặc breakout).

  • Tìm điểm Entry chính xác với POC:

    Thay vì vào lệnh ngẫu nhiên trong vùng FVG rộng, trader có thể đợi giá về gần đường POC để vào lệnh. POC là vùng có thanh khoản tập trung cao nhất, nơi giá thường "lưỡng lự" hoặc phản ứng mạnh.

  • Đặt Stop Loss hợp lý:

    Đặt SL bên ngoài vùng FVG hoàn chỉnh, hoặc dưới/trên đường POC nếu muốn SL sát hơn. Nếu giá phá vỡ POC, FVG đó có thể đã mất hiệu lực.

  • Đặt Take Profit với nhiều mục tiêu:

    Chia nhỏ lệnh và chốt lời từng phần tại các FVG tiếp theo hoặc tại mức POC của FVG khác. Điều này tối ưu hóa tỷ lệ Risk/Reward.

  • Kết hợp xu hướng với biểu đồ khối lượng:

    - Bullish FVG + POC ở phía trên: Cho thấy áp lực mua mạnh, giá có thể chỉ chạm đỉnh FVG rồi tiếp tục tăng
    - Bullish FVG + POC ở phía dưới: Cho thấy nhiều lệnh bán đã xuất hiện, giá có thể fill sâu hơn vào FVG
    - Tương tự với bearish FVG

  • Đánh giá độ mạnh yếu của FVG:

    So sánh tổng khối lượng giữa các FVG. FVG nào có volume lớn hơn sẽ có tác động mạnh hơn khi giá quay lại test.

  • Theo dõi FVG bị "filled":

    Khi giá đóng cửa vượt qua biên của FVG (bullish FVG bị giá đóng dưới low của nó, bearish FVG bị giá đóng trên high của nó), chỉ báo tự động xóa FVG đó khỏi biểu đồ. Điều này cho biết vùng đó đã hoàn thành nhiệm vụ hoặc không còn giá trị.

💡 Lưu ý quan trọng: Nên kết hợp chỉ báo này với phân tích xu hướng tổng thể và các chỉ báo khác. FVG chỉ là một phần trong bức tranh toàn cảnh của thị trường.

1.4 Cách hoạt động của chỉ báo

Đầu vào & vai trò

  • Dữ liệu giá (OHLC): Giá đóng cửa, cao, thấp và mở cửa từ 3 nến gần nhất để phát hiện FVG. Đây là nguồn dữ liệu chính xác định cấu trúc giá có khoảng trống hay không.
  • Dữ liệu khối lượng từ Lower Timeframe (biến cv): Mảng chứa giá đóng cửa và khối lượng từ tất cả các nến của khung thời gian nhỏ hơn trong phạm vi 1 nến của khung thời gian hiện tại. Ví dụ: nếu đang xem biểu đồ 1H và dùng timeframe 6 phút, mỗi nến 1H sẽ chứa mảng 10 nến 6 phút (60 phút / 6 = 10 nến).
  • Filter Gaps (biến gap_filter): Ngưỡng lọc dựa trên độ lệch chuẩn. Chỉ những FVG có kích thước đủ lớn (vượt ngưỡng) mới được xem xét, loại bỏ nhiễu từ các gap nhỏ không đáng kể.
  • Số lượng Bins (biến bins): Quyết định độ chi tiết của biểu đồ khối lượng - mỗi FVG sẽ được chia thành bao nhiêu ô để phân tích phân bố volume.
  • Timeframe Settings: Chế độ Auto hoặc Manual để chọn khung thời gian phân tích volume.

Các khối logic chính

  • LOGIC 1 - Phát hiện FVG (hàm detectFairValueGap()):

    Bullish FVG: Khi low (thấp nhất nến hiện tại) > high[2] (cao nhất nến cách đây 2 nến) VÀ high[1] > high[2] VÀ kích thước gap > ngưỡng filter. Điều này có nghĩa là có khoảng trống giữa nến hiện tại và nến trước đó 2 nến, với nến ở giữa không lấp đầy khoảng trống đó.
    Bearish FVG: Tương tự ngược lại - high < low[2]low[1] < low[2] VÀ kích thước gap > ngưỡng filter.

  • LOGIC 2 - Tính toán kích thước FVG chuẩn hóa:

    Sử dụng ta.stdev() - hàm độ lệch chuẩn với lookback 200 nến để chuẩn hóa kích thước gap. Điều này giúp chỉ báo thích ứng với độ biến động khác nhau của từng cặp giao dịch và khung thời gian.

  • LOGIC 3 - Lấy dữ liệu Lower Timeframe (hàm request.security_lower_tf()):

    Kéo mảng giá đóng cửa (c) và khối lượng (v) từ khung thời gian nhỏ hơn. Hàm tự động chọn timeframe = chart timeframe / 10 nếu ở chế độ Auto, hoặc dùng timeframe được chỉ định thủ công.

  • LOGIC 4 - Chia FVG thành các bins:

    Mỗi FVG được chia đều thành bins phần theo chiều dọc (mặc định 15 bins). Mỗi bin đại diện cho một khoảng giá nhỏ trong FVG. Công thức: binSize = (fvg_upper - fvg_lower) / bins

  • LOGIC 5 - Phân bổ khối lượng vào từng bin:

    Với mỗi bin, chỉ báo duyệt qua tất cả các nến lower timeframe và cộng dồn volume của các nến có giá đóng cửa nằm trong khoảng giá của bin đó. Điều kiện: math.abs(close_LTF - bin_midpoint) <= binSize. Kết quả là mảng volumeProfile chứa tổng volume cho mỗi bin.

  • LOGIC 6 - Tìm POC (Point of Control):

    Sử dụng volumeProfile.max() để tìm bin có khối lượng lớn nhất. Vẽ đường ngang poc tại giá trung điểm của bin đó và gắn label pocLbl hiển thị giá trị volume.

  • LOGIC 7 - Vẽ Volume Profile Boxes:

    Tạo các box ngang cho mỗi bin, với chiều rộng tỷ lệ với phần trăm volume so với bin có volume lớn nhất. Công thức: boxWidth = (bin_volume / max_volume) * scale_factor. Màu sắc gradient từ nhạt (volume thấp) đến đậm (volume cao).

  • LOGIC 8 - Quản lý FVG động:

    Mỗi FVG mới được thêm vào mảng fvgs (type custom fvg). Nếu có quá 10 FVG, FVG cũ nhất bị xóa để giữ biểu đồ gọn gàng. FVG tự động mở rộng sang phải theo thời gian.

  • LOGIC 9 - Xóa FVG khi bị filled:

    Trong vòng lặp cập nhật, nếu giá đóng cửa vượt qua biên của FVG (bullish FVG: low < FVG.bottom, bearish FVG: high > FVG.top), toàn bộ box FVG, POC line, label và volume boxes đều bị xóa, và FVG đó bị loại khỏi mảng.

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

  • FVG Box (đối tượng box):

    Hình chữ nhật màu xanh lá nhạt (bullish) hoặc tím nhạt (bearish) đánh dấu vùng FVG trên biểu đồ. Trader dùng để nhận biết vùng giá quan trọng cần theo dõi.

  • Volume Profile Boxes (mảng volumeBoxes):

    Các thanh ngang bên trong FVG với màu sắc và độ dài khác nhau. Trader nhìn vào để hiểu mật độ giao dịch ở từng mức giá trong FVG - mức nào có thanh dài và đậm màu hơn = có nhiều volume hơn.

  • POC Line (đối tượng line):

    Đường ngang màu xanh lá hoặc tím đánh dấu mức giá có khối lượng cao nhất trong FVG. Đây là điểm entry tiềm năng hoặc vùng hỗ trợ/kháng cự mạnh nhất trong FVG.

  • POC Label (đối tượng label):

    Hiển thị số khối lượng tại POC. Trader dùng con số này để so sánh độ mạnh yếu giữa các FVG khác nhau.

  • Total Volume Label (text trong FVG Box):

    Tổng khối lượng giao dịch trong toàn bộ FVG. Giúp đánh giá tầm quan trọng tổng thể của vùng FVG đó.

📖 Ví dụ minh họa flow hoạt động:

Tình huống: Đang xem biểu đồ BTC/USDT khung 1 giờ, chế độ Auto timeframe.

Bước 1 - Đầu vào:
- Nến 1 (2 nến trước): High = 65000, Low = 64500
- Nến 2 (1 nến trước): High = 65200, Low = 64800
- Nến 3 (hiện tại): High = 66000, Low = 65300
- Timeframe phân tích: 6 phút (1H/10 = 6 phút)
- Số bins: 15
- Filter threshold: 0.5 độ lệch chuẩn

Bước 2 - Phát hiện FVG:
- Kiểm tra: Low hiện tại (65300) > High[2] (65000)? ✓ Đúng
- Kiểm tra: High[1] (65200) > High[2] (65000)? ✓ Đúng
- Tính kích thước gap: (65300 - 65000) / stdev(200 nến) = 0.8 > 0.5 ✓ Đạt ngưỡng
- Kết luận: Phát hiện Bullish FVG từ 65000 đến 65300 (khoảng trống 300 USD)

Bước 3 - Lấy dữ liệu Lower Timeframe:
- Trong 1 nến 1H vừa qua, có 10 nến 6 phút
- Mảng close: [64520, 64580, 64650, 64720, 64800, 64950, 65100, 65150, 65200, 65280]
- Mảng volume: [150, 200, 180, 220, 300, 280, 250, 190, 210, 240] (đơn vị BTC)

Bước 4 - Chia FVG thành bins:
- FVG từ 65000 đến 65300, chia 15 bins
- Mỗi bin = (65300-65000)/15 = 20 USD
- Bin 1: 65000-65020, Bin 2: 65020-65040, ..., Bin 15: 65280-65300

Bước 5 - Phân bổ volume vào bins:
- Duyệt qua 10 nến LTF: nến 6 phút thứ 6 có close=64950 (không thuộc FVG 65000-65300, bỏ qua)
- Nến thứ 7: close=65100, volume=250 → nằm trong Bin 5 (65080-65100) → Bin 5 += 250
- Nến thứ 8: close=65150, volume=190 → nằm trong Bin 8 (65140-65160) → Bin 8 += 190
- Nến thứ 9: close=65200, volume=210 → nằm trong Bin 10 (65180-65200) → Bin 10 += 210
- Nến thứ 10: close=65280, volume=240 → nằm trong Bin 14 (65260-65280) → Bin 14 += 240
- Kết quả: volumeProfile = [0,0,0,0,250,0,0,190,0,210,0,0,0,240,0]

Bước 6 - Tìm POC:
- Max volume = 250 (tại Bin 5)
- POC = giá giữa của Bin 5 = (65080+65100)/2 = 65090
- Vẽ đường ngang màu xanh lá tại 65090
- Gắn label: "250 BTC"

Bước 7 - Vẽ Volume Boxes:
- Bin 5 (volume=250, max): Thanh ngang dài nhất, màu xanh lá đậm
- Bin 14 (volume=240): Thanh dài 96% so với Bin 5, màu xanh lá vừa
- Bin 10 (volume=210): Thanh dài 84%, màu xanh lá nhạt hơn
- Bin 8 (volume=190): Thanh dài 76%, màu xanh lá rất nhạt
- Các bin khác: Không vẽ (volume = 0)

Bước 8 - Hiển thị trên biểu đồ:
- Hộp FVG màu xanh lá nhạt từ 65000-65300, mở rộng sang phải
- 4 thanh ngang volume ở các mức giá tương ứng
- Đường POC nổi bật tại 65090
- Label góc dưới phải: "2220 BTC" (tổng volume = 250+190+210+240)

Bước 9 - Theo dõi và xóa:
- Giá tiếp tục tăng lên 66000, FVG vẫn còn hiệu lực (low chưa chạm 65000)
- Sau 5 nến, giá điều chỉnh về 64900 (low < 65000 = bottom của FVG)
- Chỉ báo tự động xóa toàn bộ FVG này khỏi biểu đồ
- Ý nghĩa: FVG đã được "filled" - thị trường đã quay lại lấp đầy vùng mất cân bằng

Cách trader sử dụng thông tin này:
- Khi giá lần đầu tạo FVG tại 65300, trader đánh dấu vùng 65000-65300 là support tiềm năng
- Đặc biệt chú ý mức 65090 (POC) - đây là vùng có thanh khoản cao nhất
- Nếu giá quay lại test, có thể đặt lệnh mua tại 65090 với SL dưới 65000
- Target lợi nhuận có thể là FVG tiếp theo hoặc vùng kháng cự trước đó
- Nếu giá phá xuống dưới 65000, biết rằng FVG này đã không giữ được = cấu trúc yếu

🔑 Điểm mạnh của cơ chế này: Thay vì chỉ biết "có một FVG ở đây", trader giờ biết chính xác khối lượng giao dịch phân bố như thế nào trong FVG đó, từ đó đưa ra quyết định giao dịch thông minh hơn về điểm vào lệnh, SL, và TP.
Zoom/Pan Layered Image
Background Overlay
+

Dùng phân tích trên + Code phía dưới để ra lệnh cho AI chỉnh sửa chỉ báo, chuyển thành bot trade mà không cần biết code!

Cách làm tại đây -> 👉ZERO2HERO👈

				
					// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ChartPrime


//@version=6
indicator('FVG Volume Profile [ChartPrime]', overlay = true, max_boxes_count = 500, max_lines_count = 100, max_bars_back = 5000, max_labels_count = 500)

// --------------------------------------------------------------------------------------------------------------------}
// --------------------------------------------------------------------------------------------------------------------{

bool autoTf = input.bool(true, "Auto", inline = "1", group = "Volume DATA")
string tf1 = input.timeframe(
     "10", 
     "", 
     inline = "1", 
     group = "Volume DATA", 
     tooltip = "Select the custom timeframe for detecting volume of Fair Value Gaps. To use this setting, turn off the 'Auto' toggle. Otherwise, the indicator will follow the chart's 10 times lower timeframe automatically."
 )
bool   hideVP = input.bool(true, "Display", group = "FVG Volume Profile")
int    bins   = input.int(15, "Resolution", group = "FVG Volume Profile")


float  gap_filter = input.float(0.5, 'Filter Gaps', step = 0.01)

color  bull_color = input.color(#1da370, 'Bullish Color')
color  bear_color = input.color(#bc25d6, 'Bearish Color')



type fvg 
    box FVG 
    bool isBull
    array<float> volumeProfile
    array<box> volumeBoxes
    line poc
    label pocLbl


// --------------------------------------------------------------------------------------------------------------------}
// --------------------------------------------------------------------------------------------------------------------{
time_ = timeframe.in_seconds(tf1)/60
currentTime = timeframe.in_seconds("")/60

// Warning 
if time_ >= currentTime and not autoTf
    label.delete(label.new(bar_index+3, hl2, "⚠️ Use Lower Timeframes or 'Auto mode'\nin settings", style = label.style_label_center, color = color.rgb(255, 0, 0), size = size.huge)[1])


array<float>   c       = request.security_lower_tf('', time_ >= currentTime and not autoTf ? "" : (autoTf ? str.tostring(int(currentTime/10)) : tf1), close)
array<float>   v       = request.security_lower_tf('', time_ >= currentTime and not autoTf ? "" : (autoTf ? str.tostring(int(currentTime/10)) : tf1), volume)

float bearish_gap_size = (low[2] - high) / ta.stdev(low[2] - high, 200)
float bullish_gap_size = (low - high[2]) / ta.stdev(low - high[2], 200)


detectFairValueGap() =>
    var pocLblAllow = true
    var fvgs    = array.new<fvg>()
    volumeP     = array.new<float>(bins, 0.)
    volumeBoxes = array.new<box>(bins, box(na))
    poc         = line(na)
    pocLbl      = label(na)

    // Conditions to detect bullish and bearish gaps
    bool bullish_gap_condition = low > high[2] and high[1] > high[2] and bullish_gap_size > gap_filter
    bool bearish_gap_condition = high < low[2] and low[1] < low[2] and bearish_gap_size > gap_filter

    cls_array = c[1]
    vol_array = v[1]

    // Bullish FVG logic
    if bullish_gap_condition
        pocLblAllow := false
        fvg_lower = high[2]
        fvg_upper = low

        fvg_box = box.new(bar_index - 1, fvg_upper, bar_index + 3, fvg_lower, border_color = na, border_width = 0, bgcolor = color.new(bull_color, 70))

        binSize = (fvg_upper-fvg_lower)/bins

        for k = 0 to bins -1
            volumeP.set(k, 0.)

        if cls_array.size() > 0
            for k = 0 to bins -1

                lower = fvg_lower + binSize * k 
                mid = lower + binSize/2
                for i = 0 to cls_array.size() - 1
         
                    cls = cls_array.get(i)
                    vol = vol_array.get(i)

                    if math.abs(cls-mid) <= binSize
                        volumeP.set(k, volumeP.get(k) + vol)

        for k = 0 to bins -1
           
            lower = fvg_lower + binSize * k 
            upper = lower + binSize
            mid = lower + binSize/2

            volumeBoxes.set(k, box.new(bar_index-1, upper, bar_index-1, lower, border_width = 0))

            vol = volumeP.get(k)
            if volumeP.max() != 0 
                if vol == volumeP.max() and not pocLblAllow
                    poc    := line.new(bar_index-1, mid, bar_index-1, mid, color = bull_color)
                    pocLbl := label.new(bar_index-1, mid, str.tostring(volumeP.max(), format.volume), style = label.style_label_left, color = bull_color, textcolor = chart.fg_color)
                    pocLblAllow := true

        fvgs.push(fvg.new(fvg_box, true, volumeP, volumeBoxes, poc, pocLbl))

    // Bearish FVG logic
    if bearish_gap_condition
        pocLblAllow := false
        fvg_upper = low[2]
        fvg_lower = high

        fvg_box = box.new(bar_index - 1, fvg_upper, bar_index + 3, fvg_lower, border_color = na, border_width = 0, bgcolor = color.new(bear_color, 70))


        binSize = (fvg_upper-fvg_lower)/bins

        for k = 0 to bins -1
            volumeP.set(k, 0.)

        if cls_array.size() > 0
            for k = 0 to bins -1

                lower = fvg_lower + binSize * k 
                mid = lower + binSize/2

                for i = 0 to cls_array.size() - 1

                    cls = cls_array.get(i)
                    vol = vol_array.get(i)

                    if math.abs(cls-mid) <= binSize
                        volumeP.set(k, volumeP.get(k) + vol)

        for k = 0 to bins -1

            lower = fvg_lower + binSize * k 
            upper = lower + binSize
            mid = lower + binSize/2
            vol = volumeP.get(k)

            volumeBoxes.set(k, box.new(bar_index-1, upper, bar_index-1, lower, border_width = 0))


            if volumeP.max() != 0  and not pocLblAllow
                if vol == volumeP.max()
                    poc := line.new(bar_index-1, mid, bar_index-1, mid, color = bear_color)
                    pocLbl := label.new(bar_index-1, mid, str.tostring(volumeP.max()*-1, format.volume), style = label.style_label_left, color = bear_color, textcolor = chart.fg_color)
                    pocLblAllow := true


        fvgs.push(fvg.new(fvg_box, false, volumeP, volumeBoxes, poc, pocLbl))


    if fvgs.size() > 10
        f = fvgs.shift()
        f.FVG.delete()
        f.poc.delete()
        f.pocLbl.delete()


        for b in  f.volumeBoxes
            b.delete()


    if fvgs.size() > 0

        for f in fvgs

            f.FVG.set_right(bar_index+25)

            top = f.FVG.get_top()
            bot = f.FVG.get_bottom()
            left = f.FVG.get_left()
            right = f.FVG.get_right()
            binSize = (top-bot)/bins

            boxes = f.volumeBoxes

            f.poc.set_x2(right)
            f.pocLbl.set_x(right)
            
            f.FVG.set_text(str.tostring(f.volumeProfile.sum(), format.volume))
            f.FVG.set_text_halign(text.align_right)
            if f.isBull
                f.FVG.set_text_valign(text.align_bottom)
            else 
                f.FVG.set_text_valign(text.align_top)

            f.FVG.set_text_size(size.normal)
            f.FVG.set_text_color(chart.fg_color)
            
            if f.isBull
                
                if low < f.FVG.get_bottom()
                    f.FVG.delete()
                    for b in boxes
                        b.delete()
                    f.poc.delete()
                    f.pocLbl.delete()
                    
                    fvgs.remove(fvgs.indexof(f))

                for k = 0 to bins -1

                    lower = bot + binSize * k 
                    upper = lower + binSize

                    volSum   = f.volumeProfile.max()
                    volRatio = f.volumeProfile.get(k) / volSum * 50
                    step = (right-left)/100
                    boxWidth = math.round(volRatio * step)
                    box_id = boxes.get(k)
                    
                    bgColor = color.from_gradient(f.volumeProfile.get(k), 0, f.volumeProfile.max(), color.new(bull_color, 100), bull_color)

                    if boxWidth != 0 and hideVP

                        box_id.set_right(left+boxWidth)
                        box_id.set_bgcolor(bgColor)

            else
        
                if high > f.FVG.get_top()
                    f.FVG.delete()                    
                    for b in boxes
                        b.delete()
                    f.poc.delete()
                    f.pocLbl.delete()

                    fvgs.remove(fvgs.indexof(f))

                for k = 0 to bins -1

                    lower = bot + binSize * k 
                    upper = lower + binSize

                    volSum   = f.volumeProfile.max()
                    volRatio = f.volumeProfile.get(k) / volSum

                    boxWidth = math.round(volRatio * (right-left)/2.5)
                    box_id = boxes.get(k)
                    
                    bgColor = color.from_gradient(f.volumeProfile.get(k), 0, f.volumeProfile.max(), color.new(bear_color, 100), bear_color)

                    if boxWidth != 0 and hideVP
                        box_id.set_right(left+boxWidth)
                        box_id.set_bgcolor(bgColor)



detectFairValueGap()

// --------------------------------------------------------------------------------------------------------------------}
				
			

Các chỉ báo khác

Volume Delta [BigBeluga]

Volume Delta là chỉ báo dựa trên nguyên lý phân tích dòng lệnh (Order Flow Analysis) – một phương pháp đánh giá sức mạnh thực sự của thị trường thông qua hành động của người mua và người bán.

FVG Volume Profile [ChartPrime]

Chỉ báo FVG Volume Profile dựa trên lý thuyết về Fair Value Gap (FVG) – hay còn gọi là “vùng mất cân bằng giá”. Đây là những khoảng trống xuất hiện trên biểu đồ giá khi thị trường di chuyển quá nhanh, tạo ra vùng giá mà không có hoặc

TP RSI

TP RSI v2.0 được xây dựng dựa trên nguyên lý tích hợp ba chiều trong phân tích kỹ thuật: Xu hướng (Trend), Động lượng (Momentum), và Biến động (Volatility). Thay vì phải chuyển đổi giữa nhiều chỉ báo khác nhau, TP RSI tập trung tất cả vào một màn hình