Isolated Scroll Container

1. Mô tả Multitimeframe Order Block Finder Strategy

Ở mỗi cây nến, chỉ báo đọc khung thời gian được chọn và chờ một chuỗi nến cùng màu liên tiếp (mặc định 5 nến). Khi chuỗi hoàn tất, nó đặt một hộp Order Block màu xám lên cây nến nằm ngay trước nhịp đẩy, chia hộp bằng một đường giữa nét đứt và hai thanh nửa hộp cho thấy cây nến đó đóng cửa ở đâu trong biên độ của nó, giữ hộp sống cho tới khi giá "ăn" vào hộp, và có thể liệt kê mọi hộp còn sống ở một bảng bên lề phải cùng một đường "OB trend" đã làm mượt.

1.1 Concept của chỉ báo

Chỉ báo trả lời bốn câu hỏi đơn giản: "Một nhịp đẩy mạnh một chiều bắt đầu từ đâu? Ai là người có tiếng nói cuối cùng ở cây nến phát động nhịp đó? Giá đã quay lại và dùng hết vùng đó chưa? Và nhìn tổng thể, các vùng này đang kéo thị trường về phía nào?" Vùng mà chỉ báo săn tìm gọi là Order Block (OB) — khu vực mà dân trong nghề tin rằng các tay chơi lớn đã để lại lệnh chưa khớp trước khi đẩy giá đi.

  • OB là "chân đế" của một nhịp đẩy kéo dài. Khi giá in ra nhiều nến liên tiếp cùng một chiều (mặc định 5 nến), cây nến nằm ngay trước chuỗi đó được coi là nơi nhịp đẩy được phóng đi. Sau một chuỗi nến tăng, hộp gọi là OB tăng (Bullish OB) — vùng cầu, kỳ vọng nằm dưới giá. Sau một chuỗi nến giảm, đó là OB giảm (Bearish OB) — vùng cung, kỳ vọng nằm trên giá. Niềm tin: giá có xu hướng quay lại vùng này và phản ứng.
  • Độ mạnh đến từ độ dài của chuỗi nến. Càng nhiều nến liên tiếp = nhịp đẩy càng thuyết phục, nhưng số vùng càng ít. Chế độ "nâng cao" tuỳ chọn thay điều kiện "nến nào cũng đúng màu" bằng "đường trung bình làm mượt của giá đóng cửa cứ tăng / giảm liên tục", và bộ lọc biên độ tối thiểu tuỳ chọn sẽ loại các nhịp đẩy quá nhỏ.
  • Khung thời gian tuỳ chọn, vẽ trên chart bất kỳ. OB có thể được tính trên khung thời gian khác với khung bạn đang xem (ví dụ vùng của khung 1 giờ vẽ trên chart 15 phút). Vùng của khung lớn thì to hơn và thường được coi là quan trọng hơn.
  • Đọc cây nến OB: ai đã đóng cửa nó? Trong mỗi hộp có hai thanh nửa hộp cho thấy cây nến OB đóng cửa ở đâu trong biên độ cao–thấp của chính nó. Đóng gần đỉnh = phe mua có tiếng nói cuối (thanh xanh ngọc dài); đóng gần đáy = phe bán có tiếng nói cuối (thanh đỏ dài). Dù trong code có chữ "volume", không hề dùng khối lượng thật — nó thuần tuý là vị trí giá đóng cửa trong biên độ nến.
  • Một vùng "chết" khi giá dùng hết nó (mitigation). Mặc định hộp bị xoá ngay khi giá chạm tới đường giữa của nó. Chỉ những vùng chưa bị dùng mới còn lại, nên màn hình luôn là "các vùng còn đang chờ giá".
  • Đường OB trend. Mỗi lần có một OB mới, một mức chạy được kéo về giữa chừng tới giá hiện tại; sau đó một bộ lọc thông thấp làm mượt mức bậc thang đó thành một đường xu hướng, tô màu theo hướng đi.

Tóm lại: đây là một công cụ tự động tìm vùng cung & cầu dựa trên chuỗi nến cùng màu, có quản lý vùng (còn sống / đã dùng hết), có một cách đọc nhanh "phe mua so với phe bán" của cây nến OB, và một thước đo xu hướng chậm. Đây là bộ dò theo mẫu hình nến, không phải công cụ khối lượng.

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

  • Hiển thị:
    • Hộp OB: một hộp màu xám (trong suốt 85%) phủ biên độ cao–thấp của cây nến OB. OB tăng và OB giảm trông y hệt nhau — bạn phân biệt bằng vị trí so với giá. Hộp có chiều rộng cố định (mặc định 100 nến) tính từ cây nến OB; nó không kéo dài tới hiện tại, nên một vùng cũ nhưng còn hiệu lực hiện ra như một hộp ngắn nằm xa bên trái.
    • Đường giữa: một đường nét đứt màu trắng cắt ngang hộp đúng ở nửa biên độ (giá giữa).
    • Hai thanh nửa hộp (tách mua / bán): nửa dưới của hộp chứa một thanh xanh ngọc có độ dài bằng "% mua" của bề rộng hộp; nửa trên chứa một thanh đỏ có độ dài bằng "% bán". Hai số này luôn cộng lại thành 100% bề rộng. Cả hai màu mặc định trong suốt 50%.
    • Bảng OB (tuỳ chọn, mặc định tắt): một cột ở lề phải của chart (khoảng 50–100 nến sau nến cuối) lặp lại mọi OB đang sống ở đúng mức giá của chúng, ghi ngày giờ của OB bên trong. Mỗi bản sao có màu đỏ nếu giá đóng cửa hiện tại thấp hơn mép trên của vùng, ngược lại là xanh ngọc. Phía sau là một khung mảnh màu xám trải suốt toàn bộ lịch sử giá.
    • Đường OB trend (tuỳ chọn, mặc định tắt): một đường mượt màu xanh lá khi đang đi lên và đỏ khi đang đi xuống, kèm một vùng tô chuyển sắc nhẹ (trong suốt 70%) giữa đường này và một đường trung bình ngắn.
  • Alert: 9 lệnh alertcondition() dựng sẵn, gồm ba sự kiện × ba phiên bản (tăng / giảm / bất kỳ):
    • OB Created — một hộp mới vừa được vẽ.
    • OB Retested — lần đầu tiên một hộp bị "chạm" (xem phần ghi chú kỹ thuật: với code như đang viết, điều này chỉ xảy ra ở cây nến nuốt trọn cả biên độ OB).
    • OB Mitigated — một hộp đã bị dùng hết và bị xoá.

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

  • Coi mỗi hộp là một "vùng đang chờ". Hộp xám dưới giá là vùng cầu để canh lệnh mua; hộp trên giá là vùng cung để canh lệnh bán. Hộp còn trên chart chỉ vì giá chưa dùng hết nó.
  • Giao dịch lúc giá quay lại, không phải lúc hộp được tạo. Hộp xuất hiện ngay sau chuỗi nến, khi giá đã đi xa. Kế hoạch kinh điển là chờ giá quay lại vùng và tìm phản ứng ở đó (nến từ chối, đổi cấu trúc ở khung nhỏ hơn, v.v.). Bản thân chỉ báo không đưa ra tín hiệu vào lệnh.
  • Dùng đường giữa như mức "nửa đường". Mặc định vùng bị xoá khi giá chạm đường giữa, nên đường giữa cũng là ranh giới mà vượt qua thì vùng coi như đã bị dùng. Phản ứng bắt đầu tại hoặc trước đường giữa là trường hợp đẹp hơn.
  • Đọc phần tách mua / bán như một yếu tố phân định. Ví dụ: một OB tăng có thanh xanh ngọc ở nửa dưới dài (đóng gần đỉnh của nến OB) cho thấy chính cây nến gốc đã đóng mạnh; thanh xanh ngọc ngắn nghĩa là nến gốc đóng yếu. Đó là gợi ý chất lượng nhanh, không phải số đo khối lượng.
  • Chọn khung thời gian có chủ đích. Để trống Timeframe thì dùng khung của chính chart. Đặt khung cao hơn (VD 60 trên chart 15 phút) để thấy các vùng lớn hơn trong khi giao dịch ở chart nhỏ. Tránh chọn khung thấp hơn chart.
  • Chỉnh Lookback để cân bằng số lượng và chất lượng. 3 cho nhiều vùng nhỏ; 5 (mặc định) là điểm khởi đầu cân bằng; 8 trở lên cho vùng hiếm nhưng mạnh hơn. Bật Minimum Percent move (VD 0.3) để bỏ qua các nhịp đẩy quá nhỏ.
  • Mở bảng OB khi chart quá rối. Kéo chart sang phải một chút là thấy: bảng liệt kê mọi vùng còn sống kèm ngày giờ, giúp tìm vùng gần nhất phía trên và phía dưới giá hiện tại mà không phải dò trên chart.
  • Dùng đường OB trend như thiên hướng chậm, không phải tín hiệu. Đường xanh lá nói "các OB gần đây được tạo ở trên mức xu hướng trước đó", đỏ thì ngược lại. Nó phản ứng chậm theo thiết kế, và đoạn đầu tiên của nó trên chart bị méo (xem ghi chú).
  • Dùng alert để theo dõi. "OB Created" báo có vùng mới; "OB Mitigated" báo một vùng bạn đang canh đã biến mất.

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

Đầu vào & vai trò

  • tf ("Timeframe", ô chọn khung thời gian, mặc định để trống = khung của chart): khung thời gian dùng để đọc nến và dò OB. Ví dụ: trên chart M15, để trống → dùng nến M15; chọn "60" → dùng nến H1, nên "chuỗi 5 nến" nghĩa là 5 nến H1 liên tiếp. Tooltip của chính input này để trống trong code; phần giải thích cho nó thực ra được gắn vào "Lookback".
  • prd ("Lookback", số nguyên, mặc định 5, min 0, nằm cùng hàng với Timeframe): độ dài chuỗi nến. Với 5, cần năm nến liên tiếp cùng màu. Trước/sau: 3 → vùng xuất hiện sau chỉ 3 nến (nhiều hơn, yếu hơn); 8 → cần 8 nến (ít hơn, mạnh hơn). Nó còn quyết định nến nào trở thành OB: luôn là nến prd + 1 nến về trước (xem Flow 3). Nên để từ 1 trở lên.
  • sen ("Enhanced Candle Sensitivity", ô tick, mặc định tắt): tắt = cả prd nến gần nhất đều phải đóng đúng chiều (đóng cao hơn mở với OB tăng). Bật = thay vào đó, một đường trung bình làm mượt của giá đóng cửa (RMA, độ dài 5) phải liên tục tăng (OB tăng) hoặc giảm (OB giảm) trong prd nến, nên một cây nến "sai màu" không còn phá vỡ chuỗi. Ví dụ: năm nến tăng, tăng, giảm, tăng, tăng không qua được luật mặc định, nhưng vẫn có thể qua ở chế độ nâng cao nếu đường làm mượt vẫn đi lên.
  • perc ("Minimum Percent move", số thập phân, mặc định 0.0, step 0.1): khoảng cách % nhỏ nhất giữa giá đóng cửa của nến OB và giá đóng cửa của nến vừa đóng gần nhất. Ví dụ: nến OB đóng 2646, nến vừa đóng gần nhất đóng 2658 → biên độ = 12 ÷ 2646 = 0,45%. Với 0.0 thì qua; với 0.3 thì qua; với 0.5 thì bị loại. Ở 0.0 bộ lọc coi như tắt.
  • mit ("Mitigated on mid", ô tick, mặc định bật): bật = hộp bị xoá khi giá chạm tới đường giữa; tắt = code dùng phép thử theo mép hộp nhạy hơn (xem ghi chú kỹ thuật — nó xoá hộp sớm hơn chế độ "bật", không phải muộn hơn như tooltip gợi ý). Ví dụ: OB tăng 2644–2652, đường giữa 2648. Nến có đáy 2649,5 không làm gì khi "bật", nhưng khi "tắt" chỉ cần đáy 2651 là đã xoá.
  • extendLength ("Extend Boxes", số nguyên, mặc định 100, không giới hạn): bề rộng của mỗi hộp OB, tính bằng số nến của khung chart, đếm từ cây nến OB. Ví dụ: trên M15, 100 nến = 25 giờ. Nó chỉ đổi độ rộng hộp được vẽ; vùng vẫn sống cho tới khi giá dùng hết, dù cũ tới đâu.
  • showActive ("Show OB table", ô tick, mặc định tắt): bật / tắt bảng OB còn sống ở lề phải. Chỉ là hiển thị — logic và alert không bị ảnh hưởng.
  • TableLeft ("Table Left", số nguyên 0–30, mặc định 5) và TableRight ("Right", số nguyên 10–50, mặc định 10): vị trí bảng bắt đầu và kết thúc, tính theo bước 10 nến về bên phải nến hiện tại. Mặc định → từ 50 đến 100 nến phía trước. Ví dụ: Left 5 / Right 10 = một cột rộng 50 nến; Left 0 / Right 20 = bắt đầu ngay tại nến cuối và rộng 200 nến. Chỉ có ý nghĩa khi bảng đang bật.
  • UpCol / DnCol / Col (ba ô màu cùng một hàng, không có tên): UpCol mặc định xanh ngọc (#00ffbb, trong suốt 50%) tô các thanh mua và các bản sao "xanh" trong bảng; DnCol mặc định đỏ (#ff1100, 50%) tô các thanh bán và các bản sao "đỏ" trong bảng; Col mặc định xám (trong suốt 85%) tô chính hộp OB. Chỉ đổi màu.
  • showTrend ("Show OB Trend", ô tick, mặc định tắt), TUpCol (mặc định xanh lá), TDnCol (mặc định đỏ): bật đường trend và vùng tô của nó, và chọn màu cho lúc đi lên / đi xuống. Tắt = không vẽ gì của trend (phép tính vẫn chạy).
  • rp ("Passband Ripple (dB)", số thập phân, mặc định 10.0, min 0.1, step 0.1, nhóm "Trend") và fc ("Cutoff Frequency (0 to 0.5)", số thập phân, mặc định 0.005, min 0.001, max 0.5, step 0.001, nhóm "Trend"): hai núm chỉnh của bộ lọc làm mượt. fc là tốc độ: 0.005 xấp xỉ "một chu kỳ trên 200 nến", nên nhỏ hơn = chậm và mượt hơn, lớn hơn = nhanh hơn. rp định hình bộ lọc (xem ghi chú để biết một điều bất ngờ về chiều tác dụng của nó). Chỉ ảnh hưởng đường trend.

Hằng số cố định trong code (KHÔNG phải input)

  • Độ dài làm mượt 5: đường trung bình dùng ở chế độ nâng cao là ta.rma(close, 5). Cố định.
  • Độ lệch nến: nến OB được đọc ở prd + 1, giá đóng cửa tham chiếu ở [1], và dữ liệu được yêu cầu với lookahead_on.
  • Dò thời gian: code quét tối đa 5000 nến chart về trước (for i = 0 to 4999) để tìm thời điểm cây nến OB xảy ra.
  • Thiết lập của trend: EMA 10 nến (ta.ema(Trend, 10)) cho vùng tô, trong suốt 70% cho vùng tô, và giá trị khởi đầu 0.0 cho mức trend.
  • Chi tiết vẽ: đường giữa trắng nét đứt, định dạng ngày yyyy-MM-dd HH:mm theo múi giờ của chart, màu chữ = màu chữ của chart.
  • Giới hạn: max_boxes_count = 500, max_bars_back = 5000; giới hạn đường không được đặt nên áp dụng mặc định 50 đường của TradingView (ảnh hưởng tới các đường giữa).

Các khối logic chính

⏱️ Flow 0 — Thứ tự làm việc ở mỗi cây nến

  • Khác với các chỉ báo "ảnh chụp nhanh", chỉ báo này làm việc ở mọi cây nến của chart, từ cũ nhất tới mới nhất, và nhớ mọi thứ giữa các nến trong các danh sách (mảng — danh sách đánh số các giá trị) sống suốt đời chart.
  • Ở mỗi nến, thứ tự là: ① lấy dữ liệu từ khung thời gian đã chọn → ② tìm thời điểm của nến OB và tính phần tách mua/bán → ③ kiểm tra các hộp đang có (chạm lại / dùng hết) → ④ tạo hộp mới nếu vừa hoàn tất một chuỗi nến → ⑤ vẽ lại bảng (nếu bật) → ⑥ cập nhật đường trend → ⑦ đánh giá alert.
  • Vì bước ③ đứng trước bước ④, một hộp mới tạo chỉ bị kiểm tra bắt đầu từ nến kế tiếp.

📥 Flow 1 — Lấy nến của khung thời gian đã chọn

  • Hai yêu cầu được gửi tới khung thời gian đã chọn (request.security — "hỏi một khung thời gian khác để lấy số liệu"). Yêu cầu A trả về năm số: c1 = giá đóng cửa của nến vừa đóng gần nhất, cback / hback / lback = giá đóng / đỉnh / đáy của nến cách prd + 1 nến về trước, và v = khối lượng. Yêu cầu B trả về hai cờ đúng/sai: green và red (phép thử chuỗi nến, Flow 2).
  • Ví dụ cụ thể (XAUUSD M15, để trống khung thời gian, prd = 5): nến OB cách 6 nến về trước với giá mở 2648, đỉnh 2652, đáy 2644, đóng 2646; nến vừa đóng gần nhất đóng 2658. Vậy hback = 2652, lback = 2644, cback = 2646, c1 = 2658.

🕯️ Flow 2 — Có chuỗi nến không? (green / red)

  • Chế độ mặc định (sen tắt): green = mỗi nến trong prd nến gần nhất đều có close > open. red = mỗi nến đều có close < open. Phép đếm bao gồm cả nến hiện tại.
  • Chế độ nâng cao (sen bật): green = RMA 5 nến của giá đóng cửa đang tăng trong prd nến; red = nó đang giảm.
  • Ví dụ cụ thể: 5 nến gần nhất đóng ở 2649, 2652, 2655, 2658, 2661 và nến nào cũng đóng cao hơn mở → green = true, red = false. Hai cờ không bao giờ cùng đúng.

🎯 Flow 3 — Lọc và bộ kích hoạt "một lần mỗi chuỗi"

  • Lọc kích thước: minMove = |cback − c1| ÷ cback × 100 ≥ perc. Trong ví dụ: |2646 − 2658| ÷ 2646 × 100 = 0,45%, nên với perc = 0 (hoặc bất kỳ giá trị nào tới 0,45) là qua.
  • Tín hiệu: BullOB = green VÀ minMove, BearOB = red VÀ minMove.
  • Một lần mỗi chuỗi: hộp chỉ được tạo khi tín hiệu đúng lúc này và đã sai ở nến liền trước. Nên một chuỗi 12 nến tăng chỉ tạo một OB tăng (đúng lúc nến thứ 5 hoàn tất), không phải 8.
  • Nến nào trở thành OB: nến cách prd + 1 nến về trước. Bản thân chuỗi gồm prd nến mới nhất (vị trí 0 đến prd−1), nên có một nến (vị trí prd) nằm giữa mà không bao giờ bị kiểm tra. Ví dụ (prd 5): chuỗi = vị trí 0–4, nến ở giữa = vị trí 5, nến OB = vị trí 6. Vì hộp được tạo ở nến đầu tiên mà chuỗi hoàn tất, nến ở giữa lúc đó là một nến không tăng — chính là nến cuối cùng trước nhịp đẩy. Màu của chính nến OB không bao giờ được kiểm tra.
  • Nếu chính bộ lọc kích thước là thứ chặn hộp, hộp vẫn có thể xuất hiện muộn hơn, giữa chuỗi, ngay khi biên độ vượt ngưỡng; khi đó nến OB là nến cách prd + 1 nến tại thời điểm muộn đó.

📦 Flow 4 — Xác định thời điểm của nến OB và vẽ hộp

  • Các số ở Flow 1 chỉ có giá chứ không có thời gian. Một hàm phụ quét các nến chart từ mới nhất về trước (tối đa 5000) để tìm nến đầu tiên có đỉnh đúng bằng hback (HBack), và tương tự cho lback (LBack). Nó trả về thời gian của nến đó. Nếu không khớp cái nào, nó dùng thời gian của nến hiện tại.
  • OB tăng bắt đầu tại HBack, OB giảm bắt đầu tại LBack. Hộp trải từ lback tới hback, mép phải là thời điểm bắt đầu + extendLength nến chart.
  • Mỗi OB có ba thứ được vẽ: hộp xám, một đường giữa trắng nét đứt ở (lback + hback) ÷ 2, và hai nửa hộp ở Flow 5. Tất cả được cất vào các danh sách (mới nhất trước) để tìm lại về sau.
  • Ví dụ cụ thể: biên độ OB 2644–2652 → đường giữa 2648; bắt đầu = thời gian của nến OB; rộng 100 nến M15 = 25 giờ.
  • Mỗi OB mới cũng dịch mức trend (Flow 8).

⚖️ Flow 5 — Phần tách mua / bán trong hộp

  • buyVol = nến OB đóng cửa cao tới đâu trong biên độ của nó: (close − low) ÷ (high − low) × 100. sellVol = (high − close) ÷ (high − low) × 100. Con số khối lượng tự triệt tiêu (chỉ còn thêm làm tròn), nên đây không phải khối lượng.
  • Nửa dưới của hộp (từ đáy tới đường giữa): một thanh xanh ngọc, độ dài = bề rộng hộp × buyVol ÷ 100. Nửa trên (từ đường giữa tới đỉnh): một thanh đỏ, độ dài = bề rộng hộp × sellVol ÷ 100.
  • Ví dụ cụ thể: đóng 2646, đáy 2644, đỉnh 2652 → mua = 2 ÷ 8 = 25%, bán = 6 ÷ 8 = 75%. Trên hộp rộng 100 nến: thanh xanh ngọc dài 25 nến ở nửa dưới và thanh đỏ dài 75 nến ở nửa trên → nến OB này đóng yếu, sát đáy.
  • Nếu cây nến không có biên độ (đỉnh = đáy) hoặc không có khối lượng, phép chia lỗi và kết quả là "không có giá trị"; hộp khi đó có thể không vẽ đúng.

🧹 Flow 6 — Giữ hộp sống: chạm lại và dùng hết

  • Ở mỗi nến chart, code duyệt qua mọi hộp đã lưu (cũ nhất trước), danh sách tăng rồi danh sách giảm, và thử đỉnh và đáy của nến chart hiện tại với từng hộp.
  • Phép thử dùng hết (mitigation). Hộp tăng, mit bật: low ≤ đường giữa. Hộp giảm, mit bật: high ≥ đường giữa. Khi mit tắt, code so với các mép hộp (xem ghi chú). Khi đúng, hộp, đường giữa và hai nửa hộp bị xoá và gỡ khỏi các danh sách, và cờ "mitigated" được bật cho nến đó.
  • Phép thử chạm lại (retest). touched = high ≥ bot VÀ low ≤ top với top / bot đọc từ hộp. Nếu đúng và hộp chưa từng bị retest, nó được đánh cờ "retested" một lần; hộp nhớ điều đó nên không bao giờ bật hai lần.
  • Ví dụ cụ thể (OB tăng 2644–2652, đường giữa 2648, mit bật): nến có đáy 2649,5 → không có gì. Nến có đáy 2647,5 → bị dùng hết, bị xoá. Nến có đỉnh 2653 và đáy 2643 → vừa retested vừa mitigated trong cùng một nến.

🗂️ Flow 7 — Bảng OB (chỉ khi bật "Show OB table")

  • Ở mỗi nến, các bản sao trước đó bị xoá và dựng lại. Đầu tiên là một khung trong suốt từ đáy thấp nhất tới đỉnh cao nhất của toàn bộ lịch sử chart, trải từ TableLeft tới TableRight nến sau nến hiện tại.
  • Sau đó, với mỗi OB tăng còn sống rồi mỗi OB giảm còn sống, một bản sao của hộp được vẽ trong cột đó ở đúng các mức giá cũ, với ngày giờ bắt đầu của OB làm chữ. Màu: đỏ nếu close < giá trị get_bottom() của hộp, ngược lại xanh ngọc.
  • Ví dụ: một vùng còn sống 2644–2652 được tạo lúc 2026-10-06 13:45 hiện trong cột với dòng chữ đó. Nếu giá đóng cửa 2640 (giá dưới vùng) thì màu đỏ; ở 2660 thì màu xanh ngọc.

📈 Flow 8 — Đường OB trend

  • Mức bậc thang. Một con số chạy bắt đầu từ 0.0. Mỗi lần một OB được tạo (tăng hay giảm đều được — hướng không quan trọng), mức mới = trung bình của (mở + cao + thấp + đóng) ÷ 4 của nến hiện tại và mức trước đó. Giữa các OB, mức đứng yên.
  • Ví dụ cụ thể: mức trước 2600, một OB mới khi trung bình OHLC của nến là 2660 → mức mới = (2660 + 2600) ÷ 2 = 2630.
  • Những mức đầu tiên bị méo: OB đầu tiên cho 2660 ÷ 2 = 1330, OB kế (trung bình OHLC 2665) cho (2665 + 1330) ÷ 2 = 1997,5, và cứ thế, mỗi lần thu hẹp khoảng cách một nửa. Cần khoảng 8–10 OB thì mức mới gần giá, nên phần đầu chart có thể có một đường nằm thấp hơn giá rất xa.
  • Màu sắc: xanh lá khi mức vừa tăng (giá ở OB gần nhất cao hơn mức trước), đỏ khi vừa giảm; lúc đứng yên thì giữ màu cũ. Màu khởi đầu: xám.
  • Làm mượt: mức bậc thang đi qua một bộ lọc thông thấp bậc hai (một công thức trộn giá trị mới nhất với hai giá trị đầu ra trước đó). fc đặt độ chậm, rp đặt độ giảm chấn. Kết quả là đường "OB Trend Filter" được vẽ.
  • Vùng tô: một dải chuyển sắc giữa đường đã lọc và EMA 10 nến của mức bậc thang (vẽ bằng một đường phụ vô hình), màu của trend ở độ trong suốt 70%. Nếu showTrend tắt, đường bị ẩn và vùng tô cũng ẩn theo.

🔔 Flow 9 — Alert

  • Mỗi nến sinh ra sáu cờ: tạo (tăng / giảm), chạm lại (tăng / giảm), dùng hết (tăng / giảm), cộng thêm các phiên bản "bất kỳ" của mỗi loại. 9 lệnh alertcondition() chỉ việc mở các cờ đó ra. Chúng hoạt động dù bảng hay đường trend có đang hiển thị hay không.

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

  • Hộp OB + đường giữa: bản đồ các vùng cung/cầu chưa dùng, kèm một mức "nửa đường".
  • Thanh mua / bán: gợi ý nhanh về chất lượng cách cây nến OB đã đóng cửa.
  • Bảng OB: danh sách gọn các vùng còn sống kèm ngày giờ khi chart quá rối.
  • Đường OB trend: thiên hướng chậm, tô màu xanh lá / đỏ.
  • Alert: thông báo cho vùng mới, "chạm lại" và vùng đã dùng hết.
💡 Ghi chú kỹ thuật quan trọng:
  • Hai góc hộp bị đảo — nó đổi ý nghĩa của "retest" và "mitigated khi lấp đầy". Hộp OB được tạo với đáy ở vị trí "top" và đỉnh ở vị trí "bottom" (box.new(left, lback, right, hback)). Các phép thử về sau đọc lại bằng get_top() / get_bottom() và coi chúng như top và bottom. Như code đang viết: ① "retested" đòi high ≥ đỉnh OB và low ≤ đáy OB — chỉ nến nuốt trọn cả biên độ OB mới tính, mà nến như vậy luôn đồng thời dùng hết hộp (kể cả ở chế độ mặc định), nên retest và mitigation nổ ra trong cùng một nến; ② khi "Mitigated on mid" tắt, hộp tăng bị xoá khi low ≤ đỉnh OB (lần chạm đầu tiên vào mép trên) và hộp giảm khi high ≥ đáy OB — tức là sớm hơn đường giữa, không phải "lấp đầy toàn bộ" như tooltip nói. Nên kiểm chứng bằng mắt trên chart của bạn.
  • Nhìn trước tương lai và repaint ở khung thời gian cao hơn. Dữ liệu được yêu cầu với lookahead_on. Các con số giá được lùi một nến (an toàn), nhưng phép thử chuỗi green / red không được lùi, nên ở các nến lịch sử của khung cao hơn nó đã "biết" nến đã hoàn tất của khung cao hơn, trong khi ở nến đang chạy nó chỉ biết phần đã in ra. Vì vậy trong lịch sử, vùng có thể xuất hiện sớm hơn so với khi chạy thật. Để trống khung thời gian (khung chart), hoặc chọn khung cao hơn, là cách dùng an toàn hơn; khung thấp hơn chart thì không đáng tin. Ở nến đang chạy, các cờ chuỗi nến có thể đổi qua lại cho tới khi nến đóng.
  • Mẫu hình, không phải khối lượng. Phần tách "mua / bán" chỉ là vị trí giá đóng cửa trong biên độ của nến OB. Nó không nói gì về khối lượng giao dịch thật.
  • Neo thời gian dùng phép so sánh giá chính xác tuyệt đối. Điểm bắt đầu của hộp là "nến chart gần nhất có đỉnh (hoặc đáy) đúng bằng đỉnh (hoặc đáy) của nến OB". Nếu một nến mới hơn in đúng cùng mức giá, hộp bắt đầu từ nến mới hơn đó; nếu không tìm thấy trong 5000 nến, hộp bắt đầu ở nến hiện tại. Ở khung thời gian cao hơn, điểm bắt đầu là nến tạo ra cực trị, không phải lúc mở của nến khung cao. Phép quét này còn chạy ở mọi nến (2 × tới 5000 bước), khiến script nặng trên chart dài.
  • Đường trend khởi đầu từ số không. Mức bậc thang bắt đầu ở 0.0, nên các OB đầu tiên kéo nó lên từ rất thấp so với giá, và bộ lọc thừa hưởng điều đó. Xét theo công thức, rp đóng vai trò hệ số giảm chấn: mặc định 10 dB cho đường cong giảm chấn mạnh, chậm; giá trị cao hơn còn mượt hơn nữa; còn các giá trị gần 0.1 phản ứng nhanh hơn kèm chút vọt lố — ngược với lời tooltip ("cao hơn = dao động nhiều hơn").
  • Vùng không bao giờ hết hạn theo thời gian. Chỉ giá mới xoá được một OB, nên trên chart dài số vùng còn sống có thể tăng dần. Mỗi OB dùng 3 hộp (cộng 1 đường), và khi bật bảng thì thêm một hộp cho mỗi OB. Giới hạn 500 hộp và giới hạn mặc định 50 đường có thể bị chạm trên lịch sử dài: các đường giữa cũ nhất biến mất trước, và quá giới hạn hộp thì TradingView xoá hộp cũ nhất.
  • Cái bẫy đặt tên trong code: đối tượng tên bv là nhóm tăng, trong khi trường bv của nó chứa các thanh buy-volume; sv là nhóm giảm và trường sv của nó là các thanh sell-volume. Chỉ ảnh hưởng độ dễ đọc.
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