Phương Thức chart.point
ctx object namespace cho chart point — ctx.line, ctx.label, ctx.box, ctx.polyline khi visual là đối tượng có điểm cuối hoặc biên.
ctx Object Namespace: Khi Visual Là Một Đối Tượng#
Chọn object namespace khi bạn cần điểm cuối, biên, nhãn, hoặc shape mà không thể biểu diễn tự nhiên
dưới dạng một giá trị trên mỗi hàng. Đối tượng vẫn phải đến từ dữ liệu đã chuẩn bị; chỉ việc
lắp ráp đối tượng mới diễn ra bên trong build_visuals.
Các ctx object namespace khả dụng#
| Namespace | Dùng cho |
|---|---|
ctx.line.new(...) | Đoạn line giữa hai chart point (x1/y1 → x2/y2). |
ctx.label.new(...) | Label văn bản neo tại một chart point với style tùy chỉnh. |
ctx.box.new(...) | Hình chữ nhật xác định bởi chart point trên-trái và dưới-phải. |
ctx.polyline.new(...) | Đường đa đoạn qua một mảng chart point. |
ctx.table.new(...) | Widget table được quản lý với hàng, cột, và văn bản ô. |
Quy ước tọa độ chart.point#
Tất cả đối tượng ctx.* nhận x là chỉ số bar (integer từ column index) và y là giá trị giá float.
Luôn ép kiểu tọa độ một cách tường minh:
ctx.label.new(
key="signal_label",
x=int(last["index"]),
y=float(last["low"]),
text="BUY",
color="#2962ff",
style="label_down",
)Quy tắc: chuẩn bị tọa độ trong frame, lắp ráp đối tượng trong build_visuals#
# build_indicator_frame — prepare anchor columns
frame["signal_low"] = np.where(frame["buy_signal"], frame["low"], np.nan)
# build_visuals — assemble object from prepared data only
def build_visuals(frame, params=None, ctx=None):
last = frame.iloc[-1]
if not np.isnan(last.get("signal_low", float("nan"))):
return ctx.label.new(
key="buy_label",
x=int(last["index"]),
y=float(last["signal_low"]),
text="BUY",
)
return None