onBar
- 🇻🇳 Tiếng Việt
- 🇬🇧 English
- 🇰🇷 한국어
- 🇨🇳 中文
onBar(ctx, s, p) chạy một lần cho mỗi nến, từ nến đầu tới nến cuối, rồi chạy lại nến cuối mỗi khi có giá mới. Dùng khi cần nhớ qua các nến, tự tính theo từng nến, vẽ đối tượng, bảng. Hướng dẫn từng bước: Bài 6, Bài 7.
indicator({
series?: (d, p) => ({ tên: chuỗi }), // chuỗi đầu vào → ctx.v.tên
state?: () => ({ … }), // trạng thái ban đầu → s
onBar: (ctx, s, p) => ({ tênĐầuRa: số }), // giá trị nến này → o.tênĐầuRa trong plot / alerts
plot: (d, p, o) => ({ … }),
})
| Đối số | Nghĩa |
|---|---|
ctx | Ngữ cảnh của nến đang tính (bảng dưới) |
s | Trạng thái: đối tượng từ state(), sửa trực tiếp (s.dem += 1). Thiếu state → undefined |
p | Giá trị tham số |
| Giá trị trả về | Đối tượng { tên: số | true | false }: giá trị của các đầu ra onBar ở nến này (true = 1, false = 0, thiếu khoá → NaN). Trả undefined (hoặc return;) → mọi đầu ra NaN ở nến này |
Đầu ra onBar dùng trong plot / alerts qua đối số thứ ba o (o.tên là chuỗi). Giá trị onBar không tự vẽ — phải đưa vào plot. Dùng o.x mà script không có onBar: lỗi o.x: script không có onBar.
ctx: nến đang tính
| Thuộc tính | Kiểu | Nghĩa |
|---|---|---|
ctx.time | số | Mốc mở nến (ms UTC) |
ctx.open, ctx.high, ctx.low, ctx.close, ctx.volume | số | OHLCV của nến |
ctx.i | số | Chỉ số nến: 0 = nến đầu của dữ liệu đã nạp (kể cả đoạn khởi động) |
ctx.closed | đúng / sai | Nến đã đóng; false ở nến đang chạy (lần chạy này sẽ được chạy lại khi có giá mới) |
ctx.realtime | đúng / sai | Đang chạy theo giá realtime (không phải tính lại lịch sử) |
ctx.warmup | đúng / sai | Nến thuộc đoạn khởi động (chưa hiện, chưa xét cảnh báo) |
ctx.symbol | chữ | Mã đang tính |
ctx.resolution | chữ | Khung đang tính |
ctx.v.tên | số | Giá trị nến này của chuỗi tên khai báo trong series |
ctx.prev(tên, k) | số | Giá trị k nến trước của chuỗi tên trong series (k ≥ 0). Tên không có: ctx.prev: không có chuỗi "…" trong series |
ctx.bar(k) | { time, open, high, low, close, volume } | OHLCV của nến k nến trước (k ≥ 0; 0 = nến này) |
k âm ở ctx.prev, ctx.bar, ctx.track(…).at báo lỗi lookahead (… phải ≥ 0 (không đọc được nến sau)).
ctx.ltf(tên) — mảng giá trị các nến khung nhỏ (d.ltf) của nến đang chạy cho chuỗi khai báo trong series (series: (d) => ({ c: d.ltf("1").close })); ctx.v.c là giá trị ở nến nhỏ cuối. Nến không có nến nhỏ → mảng rỗng.
ctx.ta: chỉ báo trên số tự tính
Gọi mỗi nến với giá trị (số) của nến đó; bộ tính tự nhớ lịch sử. Kết quả trùng ta.* / phép chuỗi cùng tên khi áp trên cùng chuỗi.
| Hàm | Kết quả | Mặc định |
|---|---|---|
ctx.ta.sma(x, n) | Trung bình n giá trị | n = 20 |
ctx.ta.ema(x, n) | EMA | n = 20 |
ctx.ta.rma(x, n) | Làm trơn Wilder | n = 14 |
ctx.ta.wma(x, n) | Trung bình trọng số | n = 20 |
ctx.ta.rsi(x, n) | RSI | n = 14 |
ctx.ta.stdev(x, n) | Độ lệch chuẩn tổng thể | n = 20 |
ctx.ta.sum(x, n) | Tổng n giá trị | n = 20 |
ctx.ta.slope(x, n) | Độ dốc hồi quy | n = 20 |
ctx.ta.highest(x, n), ctx.ta.lowest(x, n) | Lớn / nhỏ nhất n giá trị | n = 20 |
ctx.ta.prev(x, n) | x của n lần gọi trước | n = 1 |
ctx.ta.change(x, n) | x − x của n lần gọi trước | n = 1 |
ctx.ta.cum(x) | Cộng dồn từ nến đầu | |
ctx.ta.barsSince(dk) | Số nến từ lần dk đúng gần nhất (chưa từng → NaN) | |
ctx.ta.crossAbove(a, b), ctx.ta.crossBelow(a, b), ctx.ta.cross(a, b) | 1 / 0: cắt lên / xuống / cả hai | |
ctx.ta.valueWhen(x, dk, thu) | x ở lần thứ thu (0 = gần nhất) dk đúng | thu = 0 |
ctx.ta.atr(n) | ATR (Wilder) của nến đang tính — không nhận x; gọi ở mọi nến thì trùng ta.atr(d, n) | n = 14 |
Thứ tự gọi. Mỗi chỗ gọi là một bộ tính riêng, nhận ra theo thứ tự gọi trong một lượt onBar. Phải gọi ở mọi nến, cùng thứ tự. Gọi trong nhánh if thì truyền khoá riêng là đối số chữ cuối cùng: ctx.ta.ema(x, 10, "ema-tang"). Lệch thứ tự: lỗi ta-order ctx.ta: lần gọi thứ 0 trước là sma:5, nến này là ema:10 — gọi ctx.ta ở mọi nến theo cùng thứ tự, hoặc truyền key khi gọi trong nhánh. n phải là số nguyên ≥ 1 (thu ≥ 0).
ctx.track: lịch sử biến tự tính
ctx.track(khoa, giaTri?) → { at(k = 0) }
ctx.track("x", v)ghivcho nến này (ghi nhiều lần trong một nến: lần cuối thắng) và trả lịch sử.ctx.track("x")chỉ đọc..at(0)= giá trị đã ghi ở nến này (chưa ghi → NaN);.at(k)= giá trị cuối của nếnknến trước (nến đó không ghi → NaN).- Giữ 500 nến gần nhất mỗi khoá (đổi bằng
limits: { track: 2000 }, tối đa 5.000). Quay lui cùng trạng thái khi tick.
Đây là cách viết x[n] cho biến tự tính: đọc ctx.track("x").at(n) ở bất kỳ đâu, ghi ctx.track("x", x) ở cuối onBar.
ctx.persist: giá trị không quay lui
ctx.persist(khoa, () => giaTriDau) → đối tượng
Tạo một lần theo khoa, giữ qua mọi lần chạy — kể cả các lần chạy lại nến cuối khi có giá mới (trạng thái s thì quay lui về bản đã chốt). Dùng để đếm số lần giá đổi trong nến, đo trong nến. Phải là dữ liệu JSON.