Đầu ra và màu
- 🇻🇳 Tiếng Việt
- 🇬🇧 English
- 🇰🇷 한국어
- 🇨🇳 中文
Đầu ra là những gì script vẽ lên biểu đồ. plot trả một đối tượng { "Tên": đầuRa, … }: tên (khoá) hiện ở chú giải, cột Tại nến, cột của Lọc bằng script và là tên dùng trong fill; giá trị là một trong 11 hàm dưới. Tối đa 64 đầu ra mỗi script.
Mỗi giá trị trong plot phải là một đầu ra — trả thẳng một chuỗi ({ A: d.close }) báo plot: "A" phải là line(…), hist(…), band(…)….
Bảng tóm tắt
| Hàm | Vẽ | Dùng cho |
|---|---|---|
line(x, opts) | Đường | Trung bình, RSI, mức động |
hist(x, opts) | Cột quanh mức gốc, hai màu | MACD histogram, dao động quanh 0 |
columns(x, opts) | Cột từ 0 | Khối lượng, số đếm |
area(x, opts) | Vùng tô từ mức gốc tới đường | Sụt giảm, dòng tiền |
band(tren, duoi, opts) | Hai đường biên + tô giữa | Bollinger, Keltner, kênh |
fill(a, b, opts) | Tô giữa hai đầu ra (theo tên) hoặc hai chuỗi | Vùng giữa hai EMA, vùng quá mua |
hline(so, opts) | Đường ngang cố định | Mức 30 / 70, mức 0 |
shape(dk, opts) | Dấu ở nến điều kiện đúng | Mũi tên tín hiệu, cờ, ký tự |
bgcolor(dk, opts) | Tô nền nến điều kiện đúng | Giai đoạn xu hướng, phiên |
barcolor(dk, opts) | Tô lại nến giá | Nến đột biến, nến trong xu hướng |
candles(ohlc, opts) | Nến tuỳ biến | Heikin Ashi, nến của chỉ báo |
Tuỳ chọn chung
| Tuỳ chọn | Kiểu | Nghĩa |
|---|---|---|
pane | "price" | "new" | tên | Ngăn của đầu ra này; mặc định theo pane của chỉ báo. Một tên khác ("KL") tạo ngăn phụ theo tên — cùng tên thì chung ngăn |
opacity | 0…1 | Độ đục (1 = đục hẳn). Với vùng, tô, nền: độ đục phần tô |
format | "price" | "percent" | "number" | "integer" | "volume" | "compact" | "ratio" | Cách hiện số ở chú giải và thang |
hidden | true | Ẩn mặc định; vẫn có trong chú giải để bật |
color | màu | Màu chính — bảng màu |
colors | [{ when: dk, color }, …] | Đổi màu theo điều kiện ở từng nến: luật đầu tiên đúng thắng; không luật nào đúng → color. Dùng cho line, hist, columns, area, shape, bgcolor, barcolor |
line
line(x, { color?, colors?, width? = 1.5, dash?, step?, points?, offset?, pane?, opacity?, format?, hidden? })
| Tuỳ chọn | Nghĩa |
|---|---|
width | Độ dày (điểm ảnh) |
dash | "solid" (mặc định), "dash", "dot" |
step | true: bậc thang (giá trị giữ ngang tới nến đổi) |
points | "circles": chấm tại từng nến; "cross": chữ thập |
offset | Dời khi vẽ (số nến; dương sang phải, âm sang trái). Chỉ đổi hình vẽ, không đổi giá trị của chuỗi |
x có thể là một số: line(50) vẽ đường ngang 50 (như hline nhưng có trong cột Tại nến).
hist
hist(x, { up?, down?, base? = 0, color?, colors?, … }) — cột từ mức base tới giá trị. Không đặt color: cột ≥ base màu up (mặc định xanh tăng), < base màu down (đỏ giảm). Đặt color thì mọi cột một màu (trừ khi có up / down).
columns
columns(x, { color?, colors?, … }) — cột từ 0, một màu. Hợp với khối lượng, số đếm.
area
area(x, { color?, base? = 0, opacity? = 0,25, … }) — đường + vùng tô từ base tới đường.
band
band(tren, duoi, { color?, fill?, width?, opacity?, … }) — hai đường biên (tren, duoi: chuỗi hoặc số) và vùng tô giữa. fill là màu phần tô (mặc định theo color). band(70, 30) tô dải giữa hai số.
fill
fill(a, b, { color?, below?, opacity? = 0,15 })
a,blà tên của hai đầu ra khác trong cùngplot(đường, mức ngang, vùng, cột) —fillphải đứng sau chúng; hoặc là hai chuỗi bất kỳ.- Tô màu
colorkhiatrênb, màubelowkhiadướib(đổi tại điểm cắt).below: "#00000000"(trong suốt) để chỉ tô một phía.
hline
hline(so, { color? = xám, dash? = "dash", width? = 1, pane? }) — đường ngang tại một số (không nhận chuỗi; hline("70") báo hline(value) cần một số). Giá trị phụ thuộc chuỗi thì dùng line(...).
shape
shape(dk, { at?, shape?, char?, text?, color?, colors?, size?, value?, … }) — dấu ở mọi nến dk đúng.
| Tuỳ chọn | Giá trị | Mặc định |
|---|---|---|
at | "above" trên nến, "below" dưới nến, "value" tại mức value, "top" / "bottom" mép trên / dưới ngăn | "above" |
shape | "triangleUp", "triangleDown", "arrowUp", "arrowDown", "circle", "square", "diamond", "flag", "label" | tam giác theo at |
char | Một ký tự thay hình: "★", "B", "▲" | |
text | Chữ ngắn kèm dấu | |
size | "s", "m", "l" | "m" |
value | Chuỗi / số: mức đặt dấu khi at: "value" |
bgcolor
bgcolor(dk, { color?, colors?, opacity? = 0,15, pane? }) — tô nền cột của nến dk đúng, trong ngăn của đầu ra (chỉ báo ngăn riêng tô ngăn riêng; thêm pane: "price" để tô ngăn giá).
barcolor
barcolor(dk, { color?, colors? }) — tô lại nến giá ở nến dk đúng (cả thân và bóng).
candles
candles({ open, high, low, close }, { up?, down?, wick?, when?, pane?, opacity? }) — vẽ nến từ bốn chuỗi tự tính. up / down màu nến tăng / giảm, wick màu bóng, when chỉ vẽ ở nến điều kiện đúng.
Màu
| Màu | Nghĩa | Nền tối |
|---|---|---|
"up" | Tăng | xanh lá |
"down" | Giảm | đỏ |
"accent" | Màu nhấn | xanh dương |
"ref" | Tham chiếu | vàng |
"ceil" | Trần | tím |
"floor" | Sàn | xanh lơ |
"ai" | Màu của Copilot | tím nhạt |
"text" | Chữ | trắng / đen theo nền |
"textMuted" | Chữ mờ | xám |
"palette.0" … "palette.5" | Bảng màu phân biệt: cam, xanh dương, tím, xanh lơ, hồng, xanh cốm | |
"#RRGGBB", "#RRGGBBAA" | Mã màu; hai số cuối AA là độ đục (80 ≈ 50 %, 00 trong suốt) | |
"rgba(r, g, b, a)" | Mã màu có độ đục |
Màu tên tự đổi theo nền sáng / tối của giao diện; mã màu thì giữ nguyên. Bỏ trống color: đường lấy lần lượt màu của bảng màu. Tên màu khác ("warn", "muted", "neutral" có trong đặc tả cũ) hiện chưa có màu riêng — biểu đồ dùng màu tự động; nên dùng các tên trong bảng.
Ví dụ tổng hợp
Mọi đầu ra và tuỳ chọn trong một chỉ báo:
indicator({
name: "Mọi đầu ra",
pane: "new",
state: () => ({ o: NaN, c: NaN }),
onBar: (ctx, s) => {
const c = (ctx.open + ctx.high + ctx.low + ctx.close) / 4;
const o = Number.isNaN(s.o) ? (ctx.open + ctx.close) / 2 : (s.o + s.c) / 2;
s.o = o;
s.c = c;
return { o, h: Math.max(ctx.high, o, c), l: Math.min(ctx.low, o, c), c };
},
plot: (d, p, o) => {
const r = ta.rsi(d.close, 14);
const bb = ta.bb(d.close, 20, 2);
const kc = ta.keltner(d, 20, 1.5, 10);
const m = ta.macd(d.close);
return {
RSI: line(r, { color: "accent", width: 2, colors: [{ when: r.gt(70), color: "down" }, { when: r.lt(30), color: "up" }], format: "number" }),
"70": hline(70, { color: "down", dash: "dash" }),
"30": hline(30, { color: "up", dash: "dot" }),
"Trên 70": fill("RSI", "70", { color: "down", below: "#00000000", opacity: 0.3 }),
"MACD hist": hist(m.hist, { pane: "MACD", up: "up", down: "down", base: 0 }),
"Khối lượng": columns(d.volume, { pane: "KL", color: "textMuted", opacity: 0.6, format: "volume" }),
"Sụt giảm %": area(d.close.div(d.close.highest(60)).sub(1).mul(100), { pane: "Sụt giảm", color: "down", base: 0, format: "percent" }),
Bollinger: band(bb.upper, bb.lower, { pane: "price", color: "accent", fill: "accent", opacity: 0.08, width: 1 }),
"Keltner trên": line(kc.upper, { pane: "price", color: "ai", dash: "dot" }),
"Keltner dưới": line(kc.lower, { pane: "price", color: "ai", dash: "dot" }),
"Bóp Bollinger": fill(kc.upper, bb.upper, { color: "ref", below: "#00000000", opacity: 0.2 }),
"EMA 20 dời": line(ta.ema(d.close, 20), { pane: "price", color: "palette.4", offset: 3, hidden: true }),
"Đỉnh 20 bậc thang": line(d.high.highest(20), { pane: "price", color: "up", step: true, hidden: true }),
"PSAR": line(ta.psar(d), { pane: "price", points: "circles", color: "textMuted" }),
"RSI cắt lên 30": shape(r.crossAbove(30), { at: "bottom", shape: "triangleUp", color: "up", size: "s" }),
"Đáy RSI": shape(r.lt(25), { at: "value", value: r, char: "●", color: "up" }),
"Tín hiệu giá": shape(r.crossAbove(30), { pane: "price", at: "below", shape: "label", text: "RSI", color: "up" }),
"Nền quá mua": bgcolor(r.gt(70), { color: "down", opacity: 0.08 }),
"Nến khi RSI > 70": barcolor(r.gt(70), { color: "ceil" }),
"Heikin Ashi": candles({ open: o.o, high: o.h, low: o.l, close: o.c }, { pane: "HA", up: "up", down: "down", wick: "textMuted" }),
"HA khi tăng": candles({ open: o.o, high: o.h, low: o.l, close: o.c }, { pane: "HA tăng", when: o.c.gt(o.o), up: "#16C784CC" }),
};
},
});
Outputs are what a script draws on the chart. plot returns an object { "Tên": đầuRa, … }: the name (key) appears in the legend, the Tại nến (At bar) column, the columns of Lọc bằng script (Screen by script), and is the name used in fill; the value is one of the 11 functions below. At most 64 outputs per script.
Every value in plot must be an output — returning a raw series ({ A: d.close }) reports plot: "A" phải là line(…), hist(…), band(…)… (plot: "A" must be line(…), hist(…), band(…)…).
Summary table
| Function | Draws | Used for |
|---|---|---|
line(x, opts) | A line | Moving averages, RSI, dynamic levels |
hist(x, opts) | Two-color columns around a base level | MACD histogram, oscillators around 0 |
columns(x, opts) | Columns from 0 | Volume, counts |
area(x, opts) | A filled area from the base level to the line | Drawdown, money flow |
band(tren, duoi, opts) | Two boundary lines + fill between | Bollinger, Keltner, channels |
fill(a, b, opts) | Fill between two outputs (by name) or two series | Area between two EMAs, overbought zone |
hline(so, opts) | A fixed horizontal line | 30 / 70 levels, the 0 level |
shape(dk, opts) | A marker on bars where the condition is true | Signal arrows, flags, characters |
bgcolor(dk, opts) | Background fill on bars where the condition is true | Trend phases, sessions |
barcolor(dk, opts) | Recolors the price candles | Spike bars, bars within a trend |
candles(ohlc, opts) | Custom candles | Heikin Ashi, indicator candles |
Common options
| Option | Type | Meaning |
|---|---|---|
pane | "price" | "new" | name | The pane for this output; defaults to the indicator's pane. Another name ("KL") creates a named sub-pane — outputs with the same name share a pane |
opacity | 0…1 | Opacity (1 = fully opaque). For areas, fills, backgrounds: the opacity of the filled part |
format | "price" | "percent" | "number" | "integer" | "volume" | "compact" | "ratio" | How numbers are shown in the legend and the scale |
hidden | true | Hidden by default; still in the legend to turn on |
color | color | Main color — color table |
colors | [{ when: dk, color }, …] | Changes color by condition on each bar: the first matching rule wins; no rule matches → color. Used for line, hist, columns, area, shape, bgcolor, barcolor |