FireAnt Script
- 🇻🇳 Tiếng Việt
- 🇬🇧 English
- 🇰🇷 한국어
- 🇨🇳 中文
FireAnt Script là ngôn ngữ để bạn tự viết chỉ báo và chiến lược chạy thẳng trên biểu đồ FireAnt Chart: vẽ đường, vùng, mũi tên tín hiệu, đặt cảnh báo khi điều kiện của bạn xảy ra, kiểm thử chiến lược trên nến của biểu đồ theo luật giao dịch Việt Nam, và lọc cả rổ mã bằng chính điều kiện đó. Cú pháp là JavaScript với bộ hàm phân tích kỹ thuật (ta.rsi, ta.ema, crossAbove…) — cùng ngôn ngữ với Quant AI Studio, nên script mở được sang Studio để chạy trên cả rổ nhiều năm.
Không cần biết lập trình để bắt đầu: thư viện có sẵn 16 mẫu, chỉ việc thêm vào biểu đồ rồi chỉnh tham số; script người khác chia sẻ ở Cộng đồng; hoặc nhờ Copilot viết theo mô tả bằng lời. Muốn tự viết, chương Lập trình FireAnt Script dạy từ script đầu tiên tới chiến lược có kiểm thử.
Khung script
Bấm nút Script (biểu tượng </>) trên đầu biểu đồ; khung script mở bên dưới các biểu đồ và làm việc trên biểu đồ đang chọn. Kéo mép trên của khung để đổi chiều cao. Bấm lại nút hoặc ✕ ở góc phải để đóng.

① Thẻ — Trình soạn, Kiểm thử chiến lược, Nhật ký (kèm số dòng khi có), Copilot (hỏi hoặc nhờ sửa script đang mở — Nhờ Copilot viết script).
② Loại và tên — nhãn Chỉ báo, Chiến lược hoặc Thư viện, tên script (thêm • khi chưa lưu). Bấm tên để xem Trên biểu đồ này: các script đang gắn vào biểu đồ, mỗi script có Sửa trong trình soạn, Ẩn (dừng chạy) / Hiện (chạy lại), Gỡ khỏi biểu đồ. Một biểu đồ gắn được tối đa 5 script.
③ Mới — Chỉ báo mới (mẫu RSI), Chiến lược mới (mẫu EMA nhanh cắt EMA chậm) hoặc Thư viện mới (hàm dùng chung cho script khác — Thư viện hàm).
④ Thư viện — Script của tôi, mẫu, Cộng đồng. Xem Thư viện script.
⑤ Lưu — lưu vào Script của tôi (Ctrl+S, macOS Cmd+S); mỗi lần lưu mã đã đổi là một phiên bản mới.
⑥ Thêm vào biểu đồ / Chạy lại — lưu rồi chạy script trên biểu đồ (Ctrl+Enter, macOS Cmd+Enter). Script đã gắn thì nút là Chạy lại: áp mã vừa sửa. Với thư viện, nút là Lưu thư viện.
⑦ ⋯ — Cảnh báo theo script…, Lọc bằng script…, Chia sẻ lên Cộng đồng… (đã chia sẻ thì là Cập nhật bản chia sẻ…), Mở trong Quant AI Studio, Phiên bản (quay lại một bản trước), Gỡ khỏi biểu đồ.
⑧ Trình soạn — mã nguồn, có tô màu, gợi ý hàm, báo lỗi ngay khi gõ.
⑨ Thời gian theo dòng — thời gian mỗi dòng chạy trong lần tính gần nhất; dòng tốn từ 5 ms trở lên tô cam.
⑩ Tham số — các tham số script khai báo. Xem Tham số.
⑪ Tại nến … — giá trị mọi đầu ra của script tại nến dưới con trỏ (không rê chuột là nến cuối); hình / tín hiệu ghi ✓ hoặc –, chiến lược thêm ▲ Tín hiệu mua / ▼ Tín hiệu bán, điều kiện cảnh báo có biểu tượng chuông.
⑫ Thanh trạng thái — mã · khung, số nến và thời gian tính (ví dụ 4.956 nến · 11.3 ms), 🔔 kèm số cảnh báo đang bật, Sandbox · 2 s / 50 ms.
Trình soạn
- Gợi ý khi gõ: tên hàm, tham số, mô tả tiếng Việt; rê chuột lên một hàm để xem cách dùng.
- Báo lỗi ngay trên dòng: lỗi cú ph áp, gõ sai tên (Không có tên 'x' (gõ sai, hay quên khai báo?)), sai số đối số… Lỗi khi chạy hiện ở dải đỏ trên trình soạn (Lỗi cú pháp:, Lỗi:, Vượt ngân sách:) kèm số dòng, tô dòng lỗi, và nút Sửa giúp tôi — nhờ Copilot sửa đúng lỗi đó.
- Giá trị ngay trong mã: cuối dòng khai báo biến hiện mờ
r = 31,8— giá trị tại nến dưới con trỏ trên biểu đồ. - Thời gian theo dòng ở rãnh trái (như Pine Profiler): tìm dòng làm script chậm. Giá trị trong mã và thời gian chỉ hiện khi script đang chạy trên biểu đồ.
- Bản nháp tự lưu khi gõ; đóng khung script rồi mở lại vẫn còn.
- Ctrl+F tìm trong mã, Tab thụt dòng.
Script chạy trong sandbox tách khỏi trang: không gọi được mạng, không đọc được tài khoản của bạn. Mỗi script có 2 giây để tính toàn bộ lịch sử và 50 ms cho mỗi lần giá mới; vượt thì dừng với lỗi Script chạy quá … — đã dừng (vượt 50 ms mỗi lần giá mới thì thanh trạng thái ghi Vượt 50 ms mỗi tick — chỉ tính lại khi có nến mới).
Thư viện script

① Thẻ — Của tôi (script bạn đã lưu), Mẫu (16 mẫu), Cộng đồng (script người dùng chia sẻ). Ô tìm bên cạnh tìm không dấu theo tên, mô tả.
② Danh sách — tên, nhãn Chỉ báo / Chiến lược / Thư viện (mẫu lấy từ Quant AI Studio có thêm nhãn Quant, script Cộng đồng có nhãn Mở mã / Đóng mã), mô tả.
③ Thêm vào biểu đồ — gắn script vào biểu đồ đang chọn và chạy ngay; Mở trong trình soạn chỉ mở mã để đọc / sửa (nhấp đúp vào dòng cũng vậy). Với script của bạn có thêm Chia sẻ (đã chia sẻ thì là Bản chia sẻ) và Xoá.
④ Mã nguồn — xem trước mã.
Mẫu (biểu đồ):
| Nhóm | Mẫu | Làm gì |
|---|---|---|
| Dao động | RSI + tín hiệu | RSI với mức quá mua / quá bán, mũi tên khi RSI cắt lên quá bán / cắt xuống quá mua, có cảnh báo |
| Dao động | MACD hai màu | Histogram xanh / đỏ, đường MACD và tín hiệu, mũi tên khi cắt nhau |
| Xu hướng | EMA cắt nhau | Hai EMA trên giá, mũi tên khi cắt nhau |
| Xu hướng | Supertrend hai màu | Supertrend xanh / đỏ, mũi tên khi đảo chiều |
| Xu hướng | Mây Ichimoku (không dịch) | Tenkan, Kijun, mây Senkou A / B |
| Biến động | Bollinger nén | Dải Bollinger, đánh dấu khi độ rộng dải thấp nhất 120 nến |
| Biến động | Kênh Donchian và bứt phá | Kênh đỉnh / đáy, cờ khi giá vượt đỉnh kênh |
| Khối lượng | Khối lượng đột biến | Khối lượng và trung bình, đánh dấu phiên gấp N lần trung bình |
| Vẽ | Heikin Ashi (ngăn riêng) | Nến Heikin Ashi ở ngăn riêng |
| Vẽ | Đỉnh / đáy và nhãn | Nhãn Đỉnh / Đáy trên biểu đồ và bảng tóm tắt góc phải |
| Chiến lược | EMA 20/50 + lọc MA200 | Mua khi EMA 20 cắt lên EMA 50 và giá trên MA200, bán khi cắt xuống; dừng lỗ 7 %, dừng lỗ kéo theo 10 % |
| Chiến lược | RSI hồi về trung bình | Mua khi RSI(2) dưới 10 và giá trên MA200, bán khi RSI trên 70; dừng lỗ 8 % |
| Chiến lược của Quant | Vượt đỉnh Donchian 55 phiên (Turtle), Vượt đỉnh 52 tuần kèm khối lượng, Supertrend chuyển sang tăng, RSI hồi phục trong xu hướng tăng | Mẫu chiến lược của Quant AI Studio chạy được trên một mã |
Thêm một mẫu (hoặc script mở mã của Cộng đồng) vào biểu đồ là tạo bản của bạn trong Của tôi, ghi nguồn (Từ mẫu, Từ Cộng đồng · tác giả · bản …); mẫu gốc không đổi.
Của tôi: mỗi script ghi Bản {số}, thời điểm lưu, và đã chia sẻ (mở mã / đóng mã) nếu đã đưa lên Cộng đồng. Mục Phiên bản trước · đang dùng bản … giữ 20 bản gần nhất; bản do Copilot viết có nhãn Copilot. Quay lại đưa một bản cũ thành bản mới nhất (các bản khác vẫn giữ) — trong khung script cũng làm được qua ⋯ › Phiên bản › Quay lại bản …. Xoá bỏ script khỏi Script của tôi (script đang gắn trên biểu đồ vẫn chạy).
Thư viện hàm dùng chung
Hàm bạn dùng ở nhiều script (một điều kiện xu hướng, một cách tính riêng) đặt vào một thư viện: Mới › Thư viện mới, viết library({ name, exports }), bấm Lưu thư viện. Thư viện không chạy riêng, không thêm vào biểu đồ được; script khác dùng nó bằng một dòng use("…@phiên bản").

① Thư viện — loại của script đang soạn.
② Lưu thư viện — mỗi lần lưu mã đã đổi là một phiên bản mới (Ctrl+S cũng vậy).
③ Dùng trong script khác — dòng use(…) ghim đúng phiên bản vừa lưu; Chép dòng use để dán vào chỉ báo / chiến lược. Sửa thư viện sau đó, script đang dùng vẫn giữ bản cũ tới khi bạn đổi số phiên bản trong dòng use.
④ Tên xuất — các hàm, hằng số thư viện cung cấp (hàm · 2 tham số, số…).
Ở Thư viện › Của tôi, thư viện có nút Chép dòng use (bản …), và Chép use ở từng phiên bản trước. Cách viết: Tham chiếu › Thư viện.
Cộng đồng script
Thẻ Cộng đồng của thư viện liệt kê script người dùng FireAnt chia sẻ, lưu ở máy chủ FireAnt nên ai cũng thấy cùng một danh sách — kể cả khi chưa đăng nhập. Tìm theo tên, mô tả (không dấu).
- Chi tiết một script: tác giả, bản, thời điểm cập nhật, điểm ★ trung bình (số đánh giá), số lượt dùng, thẻ, và dòng Script do người dùng chia sẻ, không phải khuyến nghị của FireAnt. Tác giả là tên công khai của tài khoản FireAnt — không bao giờ là email hay số điện thoại đăng nhập; tài khoản chưa đặt tên công khai hiện Nhà đầu tư FireAnt.
- Đánh giá của bạn: chấm 1–5 sao (cần đăng nhập; chấm lại thì thay điểm cũ).
- Mở mã: đọc được mã; Thêm vào biểu đồ tạo bản của bạn trong Của tôi, giữ đúng bản đã thêm — tác giả sửa sau đó không đổi script của bạn.
- Đóng mã: tác giả không chia sẻ mã nguồn — không xem, không sửa được (Mở trong trình soạn mờ). Thêm vào biểu đồ thì script chạy ở máy chủ FireAnt (cần đăng nhập): đường, tín hiệu trên biểu đồ, cảnh báo theo script, lọc mã, kiểm thử / tối ưu (với chiến lược) đều tính ở máy chủ, mã không bao giờ gửi xuống trình duyệt. Script đóng mã không vào Script của tôi. Chưa đăng nhập thì nút là Đăng nhập để thêm; ngăn của script đóng mã đã có trên biểu đồ ghi Cần đăng nhập để chạy script này kèm nút Đăng nhập, đăng nhập xong script tự chạy lại.
Trên máy chủ, mỗi bản chia sẻ hiện ngay; bộ lọc tự động giữ lại chờ quản trị duyệt những bản có đường link, số điện thoại, lời mời liên hệ qua Zalo / Telegram / nhóm riêng, hay lời cam kết lợi nhuận (trong tên, mô tả, ghi chú bản hoặc chú thích, chuỗi chữ trong mã). Cách chia sẻ: Chia sẻ lên Cộng đồng.
Viết script đầu tiên
Một chỉ báo khai báo bằng indicator({...}), một chiến lược bằng strategy({...}). Ví dụ mẫu RSI + tín hiệu (rút gọn):
indicator({
name: "RSI + tín hiệu",
pane: "new", // vẽ ở ngăn riêng; "price" = chồng lên giá
params: {
len: param.int(14, { min: 2, max: 50, label: "Chu kỳ" }),
lower: param.int(30, { min: 5, max: 50, label: "Quá bán" }),
},
plot: (d, p) => {
const r = ta.rsi(d.close, p.len); // d = nến của biểu đồ, p = tham số
return {
RSI: line(r, { color: "accent" }),
"Quá bán": hline(p.lower, { color: "up", dash: "dash" }),
"Cắt lên quá bán": shape(r.crossAbove(p.lower), { at: "below", shape: "triangleUp", color: "up" }),
};
},
alerts: (d, p) => ({ "RSI cắt lên quá bán": ta.rsi(d.close, p.len).crossAbove(p.lower) }),
});
params— tham số hiện ở cột Tham số:param.int,param.num,param.pct(phần trăm),param.bool(hộp đánh dấu),param.choice/param.enum(danh sách chọn),param.symbol(mã),param.price/param.time(chọn giá / nến bằng cách bấm lên biểu đồ).plot— đầu ra vẽ lên biểu đồ:line,area,hist,columns,band,fill,hline,shape(mũi tên, tròn, cờ… khi điều kiện đúng),bgcolor,barcolor,candles. Tên khoá là tên hiện ở chú giải và cột Tại nến.alerts— các điều kiện đặt cảnh báo theo script và dùng để lọc mã.- Chuỗi giá (
d.close,d.high,d.volume…) có các phép tínhadd,sub,gt,lt,and,or,crossAbove,crossBelow,highest,lowest,shift… và bộta.*(ta.rsi,ta.ema,ta.sma,ta.macd…;ta.rungọi mọi chỉ báo của thư viện chỉ báo). Ngoài nến của mã đang xem, script đọc được nến của mã khác (d.symbol("VNINDEX")), khung lớn hơn / nhỏ hơn (d.tf,d.ltf), dòng tiền chủ động (d.flow, gói Chuyên nghiệp). Muốn tự tính từng nến (vẽ nhãn, bảng, lệnh giấy), dùngonBar.
Một chiến lược khai báo tín hiệu vào / ra và quản lý rủi ro:
strategy({
name: "EMA 20/50 + lọc MA200",
params: { fast: param.int(20, { label: "EMA nhanh" }), slow: param.int(50, { label: "EMA chậm" }) },
signals: (d, p) => {
const f = ta.ema(d.close, p.fast), s = ta.ema(d.close, p.slow);
return { entry: f.crossAbove(s).and(d.close.gt(ta.sma(d.close, 200))), exit: f.crossBelow(s) };
},
risk: { stopLoss: 0.07, trailingStop: 0.1 },
});
Tín hiệu vào lệnh hiện trên biểu đồ là ▲, tín hiệu ra là ▼; kiểm thử cho biết các lệnh khớp ở đâu, lãi / lỗ bao nhiêu. Chiến lược cũng viết được bằng lệnh giấy trong onBar (ctx.buy, ctx.sell, ctx.exit…). Toàn bộ hàm của ngôn ngữ: Tham chiếu FireAnt Script.
Mở Copilot khi đang ở biểu đồ và mô tả bằng lời, ví dụ "viết chỉ báo đánh dấu phiên khối lượng gấp 3 lần trung bình 20 phiên". Copilot viết script, chạy thử, tự sửa lỗi rồi gắn lên biểu đồ đang chọn; bạn mở khung script để xem và chỉnh mã. Script đang mở thì hỏi ngay ở thẻ Copilot của khung script — Nhờ Copilot viết script.
Tham số: mặc định trong mã và giá trị của bạn
Cột Tham số hiện khi script đã gắn lên biểu đồ (trước đó ghi Thêm vào biểu đồ để chỉnh tham số.). Đổi một ô là script tính lại ngay trên toàn bộ lịch sử.
- Giá trị trong mã (
param.int(30, …)) là mặc định. Giá trị bạn gõ vào ô là giá trị riêng của biểu đồ này, lưu cùng biểu đồ và được ưu tiên hơn mặc định. - Ô có giá trị khác mặc định hiện nút ① ↺ cạnh tên; rê chuột để xem Đã đổi so với mã — bấm để dùng mặc định trong mã (30). Bấm ↺ là bỏ giá trị riêng, quay về mặc định.
- Khi bạn sửa mã rồi Chạy lại: tham số nào bạn đổi mặc định trong mã thì giá trị riêng của tham số đó bị bỏ (áp mặc định mới); tham số đã xoá khỏi mã hoặc giá trị riêng trùng mặc định mới cũng bị bỏ; còn lại giữ nguyên.
- Tham số giá / thời điểm có nút Chọn trên biểu đồ: bấm nút rồi bấm vào biểu đồ để lấy giá (hoặc nến); Esc để huỷ.
- Giá trị ngoài khoảng cho phép (
min,max) được kéo về giới hạn khi chạy.
Kiểm thử chiến lược
Với script loại Chiến lược, thẻ Kiểm thử chiến lược chạy chiến lược trên chính nến c ủa biểu đồ — mã và khung đang xem (phút, giờ, ngày, tuần…) — theo luật giao dịch Việt Nam của loại mã: cổ phiếu T+2, lô 100, biên độ, khoá trần / sàn; phái sinh bán khống, phí theo hợp đồng. Chiến lược viết bằng signals hay bằng lệnh giấy trong onBar đều chạy được. Script loại chỉ báo thì thẻ nhắc Kiểm thử dành cho chiến lược.

① Chạy kiểm thử (sau đó là Chạy lại kiểm thử, Dừng khi đang chạy) và kỳ: Toàn bộ lịch sử, Từ 2018, 5 năm, 3 năm. Bên cạnh là mã · khung · nến của biểu đồ, rồi phí, thuế bán, trượt giá của lần chạy (mặc định 0,15 % / 0,1 % / 0,1 %; đặt khác trong mã chiến lược nếu cần).
② Khớp trong nến — Khớp trong nến: theo thiết lập, Đường đi O–H–L–C (ước lượng thứ tự chạm giá trong nến), hoặc Kính lúp nến 1 phút: dừng lỗ / chốt lời / lệnh chờ trong nến ngày hay nến giờ khớp theo nến 1 phút thật bên trong, biết lệnh nào chạm trước (nến cũ hơn dữ liệu 1 phút — khoảng 555 phiên gần nhất — lùi về đường đi O–H–L–C). Mục kính lúp mờ khi biểu đồ đã ở khung giây hoặc 1 phút.
③ Trễ lệnh — Trễ lệnh 1 nến (mặc định), 2 hoặc 3 nến: lệnh từ tín hiệu khớp ở nến thứ mấy sau nến đặt lệnh; thử để biết chiến lược còn chạy khi bạn vào lệnh chậm.
④ Xuất Chuyên nghiệp — xuất kết quả ra CSV hoặc báo cáo.
⑤ Thẻ con — Tổng quan, Giao dịch, Theo tháng, Monte Carlo, Tối ưu, Walk-forward.
⑥ Tổng quan — Lợi nhuận, CAGR, Sharpe, Sụt giảm tối đa, Số giao dịch, Tỷ lệ thắng, Profit factor, Thời gian có vị thế; đường vốn so với Mua và giữ mã, dải sụt giảm.
Đổi mã / tham số / kỳ sau khi chạy thì có nhãn Mã / tham số đã đổi — chạy lại. Biểu đồ cũng vẽ mũi tên tại các lệnh vào / ra và thêm ngăn Vốn (triệu đồng), Sụt giảm % của chiến lược.
Các mục trên dành cho chiến lược đã Thêm vào biểu đồ. Chiến lược mới soạn, chưa thêm vào biểu đồ thì bảng chạy bằng bộ mô phỏng của Quant AI Studio trên nến ngày của mã (không có khớp trong nến, trễ lệnh; chiến lược onBar chỉ chạy khi đã ở trên biểu đồ).
| Thẻ con | Nội dung |
|---|---|
| Tổng quan | Chỉ số chính, đường vốn so với mua và giữ, dải sụt giảm |
| Giao dịch | Từng giao dịch: Vào, Ra, Giá vào, Giá ra, KL, Lãi / lỗ (đ), %, Phiên, Lý do ra (Tín hiệu bán, Dừng lỗ, Dừng lỗ kéo theo, Chốt lời, Hết thời gian giữ, Đang giữ…), MAE, MFE. Bấm một dòng để biểu đồ nhảy tới nến vào lệnh |
| Theo tháng | Bảng lợi nhuận từng tháng theo năm |
| Monte Carlo | Xáo / lấy mẫu lại các giao dịch để xem kết quả có thể xấu tới đâu — Monte Carlo |
| Tối ưu | Quét hai tham số số theo Sharpe (lưới tới 49 tổ hợp) — Tối ưu tham số |
| Walk-forward | Kiểm định ngoài mẫu — Walk-forward |
Tối ưu và Walk-forward chạy trên cùng nến c ủa biểu đồ, cùng kỳ, phí, luật khớp với Tổng quan (chưa dùng kính lúp nến 1 phút). Mọi tổ hợp tham số chấm trên cùng khoảng nến, bắt đầu sau đoạn khởi động của tổ hợp có chu kỳ dài nhất. Giá trị cần đoạn khởi động dài tới mức không còn đủ nến để chấm bị bỏ khỏi lưới, dưới kết quả ghi Bỏ khỏi lưới vì không đủ nến khởi động: EMA chậm 252, 300 — nên đặt max của tham số vừa với lịch sử của mã (Bài 11).

Monte Carlo

Một chuỗi giao dịch trong quá khứ chỉ là một thứ tự may / rủi. Thẻ Monte Carlo dựng lại hàng nghìn chuỗi từ chính các giao dịch đã đóng của lần kiểm thử:
- Cách: Xáo thứ tự giao dịch (giữ lãi / lỗ từng giao dịch, đổi thứ tự — lợi nhuận cuối không đổi, xem sụt giảm có thể sâu tới đâu) hoặc Lấy mẫu lại có hoàn lại (lợi nhuận cuối và sụt giảm đều đổi).
- Số lần: 500 lần, 1.000 lần, 5.000 lần; ngưỡng Phá sản khi sụt ≥ 20 % / 30 % / 50 %. Bấm Chạy Monte Carlo.
- Kết quả: Xác suất lỗ, Xác suất sụt ≥ …, Lợi nhuận trung vị, Lợi nhuận P5 (xấu), Sụt giảm trung vị, Sụt giảm P5 (xấu), Sụt giảm theo thứ tự thật; dải đường vốn 5–95 % và 25–75 % theo số giao dịch, bảng phân vị Lợi nhuận cuối, Sụt giảm tối đa.
Hạt giống cố định — chạy lại cho cùng kết quả. Sụt giảm ở đây tính trên vốn sau mỗi giao dịch đóng (không gồm biến động khi đang giữ vị thế) nên thường nhỏ hơn số ở Tổng quan. Đây là thống kê trên dữ liệu quá khứ, chỉ để tham khảo.
Xuất kết quả
Xuất Chuyên nghiệp (hiện sau khi chạy kiểm thử): Giao dịch (CSV) — từng giao dịch, ngày, giá, khối lượng, lãi / lỗ, lý do ra, MAE / MFE; Tổng quan (CSV) — thông tin lượt chạy, tham số, thiết lập và các chỉ số; Báo cáo in được (PDF)… — mở báo cáo ở cửa sổ mới rồi in / lưu PDF (trình duyệt chặn cửa sổ bật lên thì tải tệp HTML); Tải báo cáo HTML. Gói thấp hơn, nút có nhãn PRO; bấm vào thì app mời nâng cấp.
Tối ưu tham số

Chọn Trục ngang và Trục dọc (hai tham số số), bấm Chạy tối ưu (theo Sharpe). Mỗi trục chia khoảng min–max của tham số thành 7 mức (một trục: 12 mức), tối đa 49 tổ hợp. Kết quả là dòng tóm tắt (số tổ hợp, thời gian, bộ tốt nhất: Sharpe, CAGR, sụt giảm), bản đồ nhiệt Sharpe (xanh tốt, đỏ xấu), và hai chỉ số chống "quá khớp":
- Độ phẳng — Sharpe trung bình các ô kề ô tốt nhất so với ô tốt nhất: gần 1 là vùng ổn định (cao nguyên), thấp là đỉnh nhọn dễ quá khớp.
- Deflated Sharpe — xác suất Sharpe dương sau khi trừ hiệu ứng thử nhiều tổ hợp.
Bấm một ô để dùng cặp tham số đó, Áp dụng bộ tốt nhất, hoặc Áp dụng vùng ổn định (…) — ô có Sharpe trung bình vùng lân cận cao nhất, tâm của cao nguyên, nên chọn hơn một đỉnh đơn lẻ. Tham số mới được ghi vào cột Tham số và áp ngay lên script trên biểu đồ (đường, tín hiệu ▲ / ▼ vẽ lại theo bộ mới).
Walk-forward

Chạy walk-forward chia các phiên thành 4 đoạn kiểm (40 % đầu chỉ để huấn luyện): ở mỗi bước tối ưu trên toàn bộ phần trước, chạy bộ tham số vừa chọn trên đoạn kế tiếp, rồi nối các đoạn ngoài mẫu.
- Ngoài mẫu ghép lại (lợi nhuận, Sharpe), Sụt giảm ngoài mẫu, Số giao dịch ngoài mẫu.
- Hiệu quả walk-forward — CAGR ngoài mẫu bình quân ÷ CAGR trong mẫu bình quân của bộ đã chọn, kèm nhãn Quá khớp thấp (từ 0,6), Quá khớp vừa (từ 0,3) hoặc Quá khớp cao.
- Bảng từng đoạn: Huấn luyện, Đoạn kiểm, Tham số chọn, Điểm huấn luyện, Lợi nhuận kiểm, Sharpe, Sụt giảm, Lệnh.
Chiến lược tốt ngoài mẫu gần bằng trong mẫu, tham số chọn ở các đoạn không nhảy lung tung, mới đáng theo dõi tiếp. Như Tối ưu, giá trị lưới không đủ nến khởi động bị bỏ (có dòng ghi chú); không giá trị nào vừa thì thẻ báo lỗi, ví dụ Biểu đồ có 1.200 nến, không đủ cho đoạn khởi động của mọi giá trị "EMA chậm" trong lưới — giảm chu kỳ hoặc tải thêm lịch sử.
Kiểm thử, tối ưu, Monte Carlo là thông tin tham khảo trên dữ liệu quá khứ, không phải khuyến nghị đầu tư. Kiểm thử trên một mã dễ cho kết quả đẹp do may mắn. Mở chiến lược trong Quant AI Studio (⋯ › Mở trong Quant AI Studio) để chạy trên cả rổ nhiều năm, xem Tối ưu và kiểm định độ vững.
Nhật ký

Thẻ Nhật ký (kèm số dòng trên nhãn thẻ) hiện lỗi khi chạy (kèm số dòng mã và nút Sửa giúp tôi) và những gì script ghi bằng ctx.log(...) trong onBar — mỗi dòng gắn với một nến có nút ngày, bấm để biểu đồ nhảy tới nến đó — hoặc console.log(...) khi dựng script. Ảnh trên: một chỉ báo ghi ctx.log("Tăng", …) ở mỗi phiên tăng trên 5 %.
Cảnh báo theo script

Script có khai báo alerts (hoặc ctx.alert trong onBar) thì đặt được cảnh báo theo đúng điều kiện đó. Có hai lối:
- Khung script › ⋯ › Cảnh báo theo script… (cần thêm script vào biểu đồ trước; menu ghi số điều kiện đang bật).
- Hộp đặt cảnh báo của biểu đồ, loại điều kiện Script — Cảnh báo theo script.

Trong hộp Cảnh báo theo script · {mã}:
- Đánh dấu điều kiện muốn nhận (mỗi tên trong
alertsmột dòng; điều kiện đã báo ghi đã báo). - Tần suất của từng điều kiện: Một lần, Mỗi nến một lần (mặc định), Mỗi lần tính lại.
- Bấm Lưu cảnh báo.
Cảnh báo được xét ở hai nơi:
- Trên máy chủ FireAnt Thiết yếu (đã đăng nhập): mỗi điều kiện đang bật thành một cảnh báo máy chủ — xét cả khi bạn đóng biểu đồ hay tắt máy, gửi qua các kênh của cảnh báo máy chủ (cả thông báo trong FireAnt Terminal) và hiện trong Trung tâm cảnh báo, tính vào số cảnh báo máy chủ của gói. Bỏ chọn điều kiện rồi Lưu cảnh báo thì cảnh báo máy chủ của điều kiện đó bị xoá; bật lại hay đổi tần suất thì đăng ký lại. Sửa mã hay tham số của script (Chạy lại, Lưu, quay lại phiên bản, bảng Tham số) thì cảnh báo máy chủ của các điều kiện đang bật nhận bản mới. Cảnh báo đặt từ hộp đặt cảnh báo của biểu đồ (điều kiện Script) vẫn giữ bản lúc đặt — sửa script thì xoá cảnh báo đó ở Đang đặt của trang Cảnh báo rồi đặt lại. Hiện máy chủ xét cảnh báo theo script ở khung ngày (1D): Một lần, Mỗi nến một lần xét khi nến ngày đóng; Mỗi lần tính lại xét theo từng giá khớp. Ở khung khác, hộp báo Cảnh báo máy chủ theo chỉ báo, khối lượng hoặc script hiện chỉ chạy ở khung ngày — chuyển biểu đồ sang khung 1D rồi đặt lại. Chi tiết: Cảnh báo máy chủ.
- Trên trình duyệt: điều kiện chưa đăng ký được ở máy chủ (gói Miễn phí, máy chủ chưa chạy) xét khi biểu đồ đó đang mở trên FireAnt Terminal — điều kiện đã đăng ký thì máy chủ báo, không báo hai lần. Lúc điều kiện đúng ở nến mới nhất, app hiện thông báo góc màn hình (FPT · RSI + tín hiệu: RSI cắt lên quá bán — giá …), và thông báo của trình duyệt nếu bạn đang ở cửa sổ khác. Script đang ẩn thì không xét. Gói Miễn phí chỉ có cách này — hộp ghi Cảnh báo chạy trên máy chủ cần gói Thiết yếu trở lên.
Thanh trạng thái khung script hiện 🔔 kèm số điều kiện đang bật. Script đóng mã của C ộng đồng cũng đặt được cảnh báo máy chủ (máy chủ ghim bản đang hiện lúc đặt).
Lọc mã bằng script
Chạy điều kiện của script trên cả một rổ mã: ⋯ › Lọc bằng script… ở khung script, hoặc ở Lọc realtime menu ⋯ của kết quả › Lọc bằng FireAnt Script… (nhãn Beta, chọn script trong Script của tôi, mẫu, hoặc script đóng mã của Cộng đồng đang gắn trên biểu đồ).

- Điều kiện — Cảnh báo: … (mỗi điều kiện trong
alerts), Hình: … (mỗishape,bgcolor,barcolor), với chiến lược thêm Tín hiệu mua (▲), Tín hiệu bán (▼), Đang giữ (đã mua, chưa bán); hoặc Không lọc — chỉ xếp theo cột. - Đúng trong — Phiên cuối, 3 phiên, 5 phiên, 10 phiên.
- Rổ mã — VN30, HNX30, VN100, Cổ phiếu HOSE / HNX / UPCoM, Toàn bộ cổ phiếu; một watchlist của bạn; hoặc Mã tự nhập….
- Thanh khoản — GTGD trung bình 20 phiên tối thiểu: Mọi mức, ≥ 1 tỷ, ≥ 5 tỷ, ≥ 20 tỷ.
Bấm Lọc. Kết quả: số mã thoả, bảng Mã, đường giá 30 phiên, Cách (phiên) (điều kiện đúng cách đây mấy phiên), giá trị các đường của script, Giá, +/- %, GTGD TB 20 phiên; bấm tiêu đề cột để sắp xếp, bấm dòng để mở mã trên biểu đồ, bấm mã để xem thông tin mã. Sao chép mã và Thêm vào watchlist để dùng tiếp. Đây là kết quả lọc theo điều kiện của bạn, không phải khuyến nghị.
| Rổ | Dữ liệu | Gói |
|---|---|---|
| Watchlist hoặc mã tự nhập, tối đa 30 mã | Nến ngày của biểu đồ | Miễn phí, không cần đăng nhập |
| Rổ có tên hoặc trên 30 mã | Dữ liệu Quant AI Studio | Thiết yếu 250 mã, Chuyên nghiệp 2.000 mã mỗi lần |
Script tính bằng onBar chưa lọc được; dùng điều kiện dạng chuỗi (ta.*, crossAbove…).
Chia sẻ lên Cộng đồng và mở trong Quant AI Studio

⋯ › Chia sẻ lên Cộng đồng… (mã đang soạn được lưu trước), hoặc Thư viện › Của tôi › Chia sẻ. Trong hộp:
- Tên (từ 3 ký tự), Mô tả (từ 20 ký tự — script làm gì, tham số nào nên chỉnh, dùng ở khung nào).
- Mã nguồn: Mở mã — ai cũng xem được mã, thêm vào biểu đồ, lưu bản sao để sửa; Đóng mã — mã không gửi xuống trình duyệt người khác, script chạy ở máy chủ.
- Thẻ (tối đa 4: Xu hướng, Dao động, Biến động, Khối lượng, Mẫu hình…), Ghi chú bản (bản này đổi gì).
- App chạy thử script trên dữ liệu mẫu (Script biên dịch và chạy được trên dữ liệu mẫu.); script lỗi thì phải sửa, lưu lại trước.
- Dòng Tác giả hiện công khai: … cho biết tên sẽ hiện — tên công khai của tài khoản, không dùng email hay số điện thoại.
- Đánh dấu Tôi đồng ý quy tắc chia sẻ script (không cam kết lợi nhuận, không mời gọi đầu tư hay quảng cáo; không sao chép script của người khác khi chưa được phép; mô tả đúng việc script làm) rồi bấm Chia sẻ. Nút còn mờ thì hộp liệt kê thiếu gì.
Bản chia sẻ hiện ngay cho mọi người (Đã chia sẻ bản … lên Cộng đồng … — hiện ngay cho mọi người.). Tên, mô tả, ghi chú hoặc chú thích trong mã có đường link, số điện tho ại, Zalo / Telegram hay lời cam kết lợi nhuận thì bản đó chờ quản trị duyệt — hộp ghi lý do; sửa rồi chia sẻ lại để hiện ngay. Chia sẻ lại (⋯ › Cập nhật bản chia sẻ…, hoặc Bản chia sẻ ở thư viện) › Chia sẻ bản mới là một phiên bản mới; Gỡ khỏi Cộng đồng thôi hiện script, script vẫn ở Script của tôi.
| Việc | Cần |
|---|---|
| Xem, tìm, thêm script mở mã vào biểu đồ | Miễn phí, không cần đăng nhập |
| Chấm sao; thêm script đóng mã (chạy ở máy chủ) | Đăng nhập |
| Chia sẻ (mở mã hoặc đóng mã) | Thiết yếu; tối đa 50 script đang chia sẻ, 20 lần chia sẻ mỗi ngày, mã tối đa 64 KB |
Chỉ chia sẻ được chỉ báo và chiến lược (thư viện hàm chưa chia sẻ được).
Mở trong Quant AI Studio:
- ⋯ › Mở trong Quant AI Studio — chọn rổ (VN30, VN100, Cổ phiếu HOSE (GTGD ≥ 5 tỷ), Toàn bộ cổ phiếu (GTGD ≥ 5 tỷ), Chỉ {mã}): chiến lược mở thành chiến lược của Studio (danh mục, tối ưu, kiểm định độ vững), chỉ báo mở thành bộ lọc. Theo quyền của Quant AI Studio, xem Gói, giới hạn.
- Ngược lại, ở Quant AI Studio, thẻ Lệnh › Hiện trên biểu đồ đánh dấu M / B các lệnh của chiến lược lên mọi biểu đồ FireAnt Chart đang mở; dải trên biểu đồ ghi số lệnh trên mã đang xem, nút Ẩn để bỏ.
Lưu ở đâu
- Script của tôi (mã, 20 phiên bản gần nhất, nguồn, bản đã chia sẻ): khi bạn đăng nhập, đi theo tài khoản FireAnt — mở FireAnt Terminal ở máy khác là thấy. Hai máy cùng sửa một script thì không mất chữ: bản của máy đang dùng giữ làm bản hiện tại, bản của máy kia vào Phiên bản trước (ghi Bản từ máy khác …). Chưa đăng nhập: lưu trên trình duyệt đang dùng. Xem Đồng bộ theo tài khoản.
- Script gắn trên biểu đồ và giá trị tham số bạn chỉnh lưu cùng trạng thái biểu đồ (trang, Bảng, workspace) như chỉ báo, nên mở lại trang vẫn chạy.
- Bản nháp đang soạn, chiều cao và thẻ của khung script lưu trên trình duyệt đang dùng.
- Cảnh báo máy chủ theo script lưu ở máy chủ, xem được ở mọi máy; luật cảnh báo trên trình duyệt lưu cùng script trên biểu đồ.
Liên quan
- Lập trình FireAnt Script — học viết chỉ báo, chiến lược từ đầu: bài học, tham chiếu đầy đủ, thư viện mẫu.
- Nhờ Copilot viết script
- Quant AI Studio › Viết code (SDK) — đầy đủ về ngôn ngữ, dữ liệu, chiến lược.
- Cảnh báo trên biểu đồ
- Lọc realtime
FireAnt Script is a language for writing your own indicators and strategies that run directly on FireAnt Chart charts: draw lines, zones and signal arrows, set alerts when your conditions occur, backtest strategies on the chart's candles under Vietnamese trading rules, and screen a whole basket of tickers with the same conditions. The syntax is JavaScript with a set of technical analysis functions (ta.rsi, ta.ema, crossAbove…) — the same language as Quant AI Studio, so a script can be opened in Studio to run across a whole basket over many years.
You do not need to know how to program to get started: the library has 16 ready-made templates — just add one to the chart and tune its parameters; scripts shared by others are in the Community; or ask Copilot to write one from a plain-language description. If you want to write your own, the Programming FireAnt Script chapter teaches you from your first script to a backtested strategy.
Script pane
Click the Script button (the </> icon) on the chart header; the script pane opens below the charts and works on the biểu đồ đang chọn (selected chart). Drag the pane's top edge to change its height. Click the button again or ✕ in the right corner to close it.

① Thẻ (Tabs) — Trình soạn (Editor), Kiểm thử chiến lược (Strategy backtest), Nhật ký (Log) (with a line count when there are entries), Copilot (ask about or get help fixing the open script — Ask Copilot to write scripts).
② Loại và tên (Type and name) — the label Chỉ báo (Indicator), Chiến lược (Strategy) or Thư viện (Library), and the script name (with • added when unsaved). Click the name to see Trên biểu đồ này (On this chart): the scripts attached to the chart, each with Sửa trong trình soạn (Edit in editor), Ẩn (dừng chạy) (Hide (stop running)) / Hiện (chạy lại) (Show (run again)), Gỡ khỏi biểu đồ (Remove from chart). A chart can have at most 5 scripts attached.
③ Mới (New) — Chỉ báo mới (New indicator) (RSI template), Chiến lược mới (New strategy) (fast EMA crossing slow EMA template) or Thư viện mới (New library) (shared functions for other scripts — Function libraries).
④ Thư viện (Library) — My scripts, templates, Community. See Script library.
⑤ Lưu (Save) — saves to Script của tôi (My scripts) (Ctrl+S, macOS Cmd+S); each save of changed code creates a new version.
⑥ Thêm vào biểu đồ (Add to chart) / Chạy lại (Run again) — saves and then runs the script on the chart (Ctrl+Enter, macOS Cmd+Enter). If the script is already attached, the button is Chạy lại: applies the code you just edited. For a library, the button is Lưu thư viện (Save library).
⑦ ⋯ — Cảnh báo theo script… (Script alerts…), Lọc bằng script… (Screen with script…), Chia sẻ lên Cộng đồng… (Share to Community…) (once shared, it becomes Cập nhật bản chia sẻ… (Update shared version…)), Mở trong Quant AI Studio (Open in Quant AI Studio), Phiên bản (Versions) (revert to an earlier version), Gỡ khỏi biểu đồ.
⑧ Trình soạn (Editor) — source code with syntax highlighting, function suggestions and errors reported as you type.
⑨ Thời gian theo dòng (Per-line timing) — how long each line took in the latest calculation; lines taking 5 ms or more are highlighted in orange.
⑩ Tham số (Parameters) — the parameters declared by the script. See Parameters.
⑪ Tại nến … (At candle …) — the value of every script output at the candle under the cursor (the nến cuối (last candle) when not hovering); shapes / signals show ✓ or –, strategies add ▲ Tín hiệu mua (▲ Buy signal) / ▼ Tín hiệu bán (▼ Sell signal), and alert conditions have a bell icon.
⑫ Thanh trạng thái (Status bar) — symbol · timeframe, number of candles and calculation time (for example 4.956 nến · 11.3 ms — 4,956 candles · 11.3 ms), 🔔 with the number of active alerts, Sandbox · 2 s / 50 ms.
Editor
- Suggestions as you type: function names, parameters, Vietnamese descriptions; hover over a function to see how to use it.
- Errors shown right on the line: syntax errors, misspelled names (Không có tên 'x' (gõ sai, hay quên khai báo?) — No name 'x' (typo, or forgot to declare it?)), wrong number of arguments… Runtime errors appear in a red strip above the editor (Lỗi cú pháp: (Syntax error:), Lỗi: (Error:), Vượt ngân sách: (Budget exceeded:)) with the line number, the error line highlighted, and a Sửa giúp tôi (Fix it for me) button — Copilot fixes exactly that error.
- Values right in the code: at the end of a variable declaration line, a faded
r = 31,8appears — the value at the candle under the cursor on the chart. - Per-line timing in the left gutter (like the Pine Profiler): find the lines that slow your script down. In-code values and timing appear only while the script is running on the chart.
- Drafts save automatically as you type; they are still there after you close and reopen the script pane.
- Ctrl+F searches the code, Tab indents.
Scripts run in a sandbox isolated from the page: they cannot access the network or read your account. Each script gets 2 seconds to compute the whole history and 50 ms for each new price; exceeding this stops it with the error Script chạy quá … — đã dừng (Script ran over … — stopped) (exceeding 50 ms per new price makes the status bar show Vượt 50 ms mỗi tick — chỉ tính lại khi có nến mới (Over 50 ms per tick — recomputing only on new candles)).
Script library

① Thẻ (Tabs) — Của tôi (Mine) (scripts you have saved), Mẫu (Templates) (16 templates), Cộng đồng (Community) (scripts shared by users). The search box next to them searches names and descriptions without needing diacritics.
② Danh sách (List) — name, the label Chỉ báo / Chiến lược / Thư viện (templates from Quant AI Studio also carry a Quant label, Community scripts carry Mở mã (Open source) / Đóng mã (Closed source)), description.
③ Thêm vào biểu đồ (Add to chart) — attaches the script to the selected chart and runs it immediately; Mở trong trình soạn (Open in editor) only opens the code to read / edit (double-clicking the row does the same). Your own scripts also have Chia sẻ (Share) (once shared, it becomes Bản chia sẻ (Shared version)) and Xoá (Delete).
④ Mã nguồn (Source code) — code preview.
Mẫu (Templates) (chart):
| Group | Template | What it does |
|---|---|---|
| Oscillators | RSI + tín hiệu (RSI + signals) | RSI with overbought / oversold levels, arrows when RSI crosses up out of oversold / crosses down out of overbought, with alerts |
| Oscillators | MACD hai màu (Two-color MACD) | Green / red histogram, MACD and signal lines, arrows on crossovers |
| Trend | EMA cắt nhau (EMA crossover) | Two EMAs on price, arrows on crossovers |
| Trend | Supertrend hai màu (Two-color Supertrend) | Green / red Supertrend, arrows on reversals |
| Trend | Mây Ichimoku (không dịch) (Ichimoku cloud (no displacement)) | Tenkan, Kijun, Senkou A / B cloud |
| Volatility | Bollinger nén (Bollinger squeeze) | Bollinger Bands, marked when band width is the lowest in 120 candles |
| Volatility | Kênh Donchian và bứt phá (Donchian channel and breakout) | High / low channel, flag when price breaks above the channel high |
| Volume | Khối lượng đột biến (Volume spike) | Volume and its average, marking sessions at N times the average |
| Drawing | Heikin Ashi (ngăn riêng) (Heikin Ashi (own pane)) | Heikin Ashi candles in a separate pane |
| Drawing | Đỉnh / đáy và nhãn (Highs / lows and labels) | Đỉnh (High) / Đáy (Low) labels on the chart and a summary table in the right corner |
| Strategy | EMA 20/50 + lọc MA200 (EMA 20/50 + MA200 filter) | Buy when EMA 20 crosses above EMA 50 and price is above MA200, sell when it crosses below; 7% stop loss, 10% trailing stop |
| Strategy | RSI hồi về trung bình (RSI mean reversion) | Buy when RSI(2) is below 10 and price is above MA200, sell when RSI is above 70; 8% stop loss |
| Quant strategies | Vượt đỉnh Donchian 55 phiên (Turtle) (55-session Donchian breakout (Turtle)), Vượt đỉnh 52 tuần kèm khối lượng (52-week high breakout with volume), Supertrend chuyển sang tăng (Supertrend turns bullish), RSI hồi phục trong xu hướng tăng (RSI recovery in an uptrend) | Quant AI Studio strategy templates that run on a single ticker |
Adding a template (or an open-source Community script) to the chart creates your own copy under Của tôi (Mine), noting its source (Từ mẫu (From template), Từ Cộng đồng · tác giả · bản … (From Community · author · version …)); the original template is unchanged.
Của tôi (Mine): each script shows Bản {số} (Version {number}), when it was saved, and đã chia sẻ (mở mã / đóng mã) (shared (open source / closed source)) if it has been posted to the Community. The Phiên bản trước · đang dùng bản … (Previous versions · using version …) section keeps the 20 most recent versions; versions written by Copilot carry a Copilot label. Quay lại (Revert) makes an old version the newest one (the other versions are kept) — you can also do this in the script pane via ⋯ › Phiên bản › Quay lại bản … (Revert to version …). Xoá (Delete) removes the script from My scripts (a script already attached to a chart keeps running).
Shared function libraries
Functions you use in several scripts (a trend condition, a custom calculation) go into a thư viện (library): Mới › Thư viện mới, write library({ name, exports }), and click Lưu thư viện (Save library). A library does not run on its own and cannot be added to a chart; other scripts use it with a single use("…@phiên bản") line.

① Thư viện (Library) — the type of the script being edited.
② Lưu thư viện (Save library) — each save of changed code creates a new version (Ctrl+S does the same).
③ Dùng trong script khác (Use in other scripts) — the use(…) line pins exactly the version you just saved; Chép dòng use (Copy use line) to paste it into an indicator / strategy. If you edit the library later, scripts using it keep the old version until you change the version number in the use line.
④ Tên xuất (Exported names) — the functions and constants the library provides (hàm · 2 tham số (function · 2 parameters), số (number)…).
Under Thư viện › Của tôi, a library has a Chép dòng use (bản …) (Copy use line (version …)) button, and Chép use (Copy use) on each previous version. How to write one: Reference › Libraries.
Script community
The library's Cộng đồng (Community) tab lists scripts shared by FireAnt users. They are stored on FireAnt's servers, so everyone sees the same list — even without signing in. Search by name or description (no diacritics needed).
- Script details: author, version, last updated, average ★ rating (number of ratings), number of uses, tags, and the line Script do người dùng chia sẻ, không phải khuyến nghị của FireAnt. (Script shared by a user, not a FireAnt recommendation.) The author is the tên công khai (public name) of the FireAnt account — never the email or phone number used to sign in; accounts without a public name show Nhà đầu tư FireAnt (FireAnt investor).
- Đánh giá của bạn (Your rating): rate 1–5 stars (sign-in required; rating again replaces your old score).
- Mở mã (Open source): you can read the code; Thêm vào biểu đồ creates your own copy under Mine, pinned to the exact version you added — later edits by the author do not change your script.
- Đóng mã (Closed source): the author does not share the source code — you cannot view or edit it (Mở trong trình soạn is grayed out). With Thêm vào biểu đồ, the script runs on máy chủ FireAnt (FireAnt's servers) (sign-in required): lines and signals on the chart, script alerts, ticker screening, and backtesting / optimization (for strategies) are all computed on the server, and the code is never sent to the browser. Closed-source scripts do not go into My scripts. If you are not signed in, the button reads Đăng nhập để thêm (Sign in to add); a closed-source script pane already on the chart shows Cần đăng nhập để chạy script này (Sign in to run this script) with a Đăng nhập (Sign in) button, and the script reruns automatically after you sign in.
On the server, each shared version hiện ngay (appears immediately); an automatic filter holds for admin review any version containing links, phone numbers, invitations to contact via Zalo / Telegram / private groups, or promises of profit (in the name, description, version notes or comments, or text strings in the code). How to share: Share to Community.
Write your first script
An indicator is declared with indicator({...}), a strategy with strategy({...}). Example from the RSI + tín hiệu (RSI + signals) template (shortened):
indicator({
name: "RSI + tín hiệu",
pane: "new", // vẽ ở ngăn riêng; "price" = chồng lên giá
params: {
len: param.int(14, { min: 2, max: 50, label: "Chu kỳ" }),
lower: param.int(30, { min: 5, max: 50, label: "Quá bán" }),
},
plot: (d, p) => {
const r = ta.rsi(d.close, p.len); // d = nến của biểu đồ, p = tham số
return {
RSI: line(r, { color: "accent" }),
"Quá bán": hline(p.lower, { color: "up", dash: "dash" }),
"Cắt lên quá bán": shape(r.crossAbove(p.lower), { at: "below", shape: "triangleUp", color: "up" }),
};
},
alerts: (d, p) => ({ "RSI cắt lên quá bán": ta.rsi(d.close, p.len).crossAbove(p.lower) }),
});
params— parameters shown in the Tham số (Parameters) column:param.int,param.num,param.pct(percent),param.bool(checkbox),param.choice/param.enum(drop-down list),param.symbol(symbol),param.price/param.time(pick a price / candle by clicking on the chart).plot— outputs drawn on the chart:line,area,hist,columns,band,fill,hline,shape(arrows, circles, flags… when a condition is true),bgcolor,barcolor,candles. The key name is the name shown in the legend and the Tại nến (At candle) column.alerts— the conditions for script alerts, also used for ticker screening.- Price series (
d.close,d.high,d.volume…) have the operationsadd,sub,gt,lt,and,or,crossAbove,crossBelow,highest,lowest,shift… and theta.*set (ta.rsi,ta.ema,ta.sma,ta.macd…;ta.runcalls any indicator in the indicator library). Beyond the candles of the symbol you are viewing, a script can read candles of other symbols (d.symbol("VNINDEX")), higher / lower timeframes (d.tf,d.ltf), and aggressive money flow (d.flow, Professional plan). To compute candle by candle yourself (drawing labels, tables, paper orders), useonBar.
A strategy declares entry / exit tín hiệu (signals) and risk management:
strategy({
name: "EMA 20/50 + lọc MA200",
params: { fast: param.int(20, { label: "EMA nhanh" }), slow: param.int(50, { label: "EMA chậm" }) },
signals: (d, p) => {
const f = ta.ema(d.close, p.fast), s = ta.ema(d.close, p.slow);
return { entry: f.crossAbove(s).and(d.close.gt(ta.sma(d.close, 200))), exit: f.crossBelow(s) };
},
risk: { stopLoss: 0.07, trailingStop: 0.1 },
});
Entry signals appear on the chart as ▲ and exit signals as ▼; the backtest shows where orders filled and how much they gained / lost. Strategies can also be written with paper orders in onBar (ctx.buy, ctx.sell, ctx.exit…). All functions of the language: FireAnt Script reference.
Open Copilot while on the chart and describe what you want in plain language, for example “write an indicator that marks sessions with volume 3 times the 20-session average”. Copilot writes the script, test-runs it, fixes its own errors and attaches it to the selected chart; open the script pane to view and adjust the code. With a script open, ask right in the script pane's Copilot tab — Ask Copilot to write scripts.
Parameters: defaults in code and your own values
The Tham số (Parameters) column appears once the script is attached to the chart (before that it reads Thêm vào biểu đồ để chỉnh tham số. (Add to chart to adjust parameters.)). Changing a field makes the script recompute immediately over the whole history.
- The value in the code (
param.int(30, …)) is the mặc định (default). The value you type in the field is giá trị riêng của biểu đồ này (this chart's own value), saved with the chart and taking priority over the default. - A field whose value differs from the default shows button ① ↺ next to its name; hover to see Đã đổi so với mã — bấm để dùng mặc định trong mã (30) (Changed from the code — click to use the default in the code (30)). Clicking ↺ discards the custom value and goes back to the default.
- When you edit the code and click Chạy lại (Run again): for any parameter whose default you changed in the code, its custom value is dropped (the new default applies); custom values for parameters removed from the code, or equal to the new default, are also dropped; everything else stays.
- Price / time parameters have a Chọn trên biểu đồ (Pick on chart) button: click it, then click on the chart to take the price (or candle); Esc to cancel.
- Values outside the allowed range (
min,max) are clamped to the limit when the script runs.
Strategy backtest
For Chiến lược (Strategy) scripts, the Kiểm thử chiến lược (Strategy backtest) tab runs the strategy on the chart's own candles — the symbol and timeframe you are viewing (minutes, hours, days, weeks…) — under the Vietnamese trading rules for that security type: stocks T+2, lots of 100, price limits, ceiling / floor locks; derivatives with short selling and per-contract fees. Strategies written with signals or with paper orders in onBar both work. For indicator scripts, the tab reminds you Kiểm thử dành cho chiến lược (Backtesting is for strategies).

① Chạy kiểm thử (Run backtest) (then Chạy lại kiểm thử (Run backtest again), and Dừng (Stop) while running) and the period: Toàn bộ lịch sử (Full history), Từ 2018 (Since 2018), 5 năm (5 years), 3 năm (3 years). Next to it are symbol · timeframe · nến của biểu đồ (chart candles), then the run's fee, sales tax and slippage (default 0.15% / 0.1% / 0.1%; set different values in the strategy code if needed).
② Khớp trong nến (Intrabar fills) — Khớp trong nến: theo thiết lập (Intrabar fills: as configured), Đường đi O–H–L–C (O–H–L–C path) (estimates the order in which prices were touched within the candle), or Kính lúp nến 1 phút (1-minute magnifier): stop losses / take profits / pending orders within a daily or hourly candle are filled using the real 1-minute candles inside it, so you know which order was hit first (candles older than the 1-minute data — roughly the last 555 sessions — fall back to the O–H–L–C path). The magnifier option is grayed out when the chart is already on a second or 1-minute timeframe.
③ Trễ lệnh (Order delay) — Trễ lệnh 1 nến (mặc định) (1-candle delay (default)), 2 or 3 candles: which candle after the signal candle the order fills on; try it to see whether the strategy still works when you enter late.
④ Xuất (Export) Professional — export results to CSV or a report.
⑤ Thẻ con (Sub-tabs) — Tổng quan (Overview), Giao dịch (Trades), Theo tháng (Monthly), Monte Carlo, Tối ưu (Optimization), Walk-forward.
⑥ Tổng quan (Overview) — Lợi nhuận (Return), CAGR, Sharpe, Sụt giảm tối đa (Max drawdown), Số giao dịch (Number of trades), Tỷ lệ thắng (Win rate), Profit factor, Thời gian có vị thế (Time in market); equity curve versus Mua và giữ (Buy and hold) for the ticker, and a drawdown band.
If you change the symbol / parameters / period after running, the label Mã / tham số đã đổi — chạy lại (Symbol / parameters changed — run again) appears. The chart also draws arrows at entries / exits and adds the strategy's Vốn (triệu đồng) (Equity (VND mn)) and Sụt giảm % (Drawdown %) panes.
The items above are for strategies that have been Thêm vào biểu đồ (added to the chart). For a newly written strategy not yet added to the chart, the panel runs Quant AI Studio's simulator on the ticker's nến ngày (daily candles) (no intrabar fills or order delay; onBar strategies only run once they are on the chart).
| Sub-tab | Content |
|---|---|
| Tổng quan (Overview) | Key metrics, equity curve versus buy and hold, drawdown band |
| Giao dịch (Trades) | Each trade: Vào (Entry), Ra (Exit), Giá vào (Entry price), Giá ra (Exit price), KL (Quantity), Lãi / lỗ (đ) (P/L (VND)), %, Phiên (Sessions), Lý do ra (Exit reason) (Sell signal, Stop loss, Trailing stop, Take profit, Holding period expired, Still holding…), MAE, MFE. Click a row to jump the chart to the entry candle |
| Theo tháng (Monthly) | Table of monthly returns by year |
| Monte Carlo | Shuffles / resamples trades to see how bad results could get — Monte Carlo |
| Tối ưu (Optimization) | Scans two numeric parameters by Sharpe (grid of up to 49 combinations) — Parameter optimization |
| Walk-forward | Out-of-sample validation — Walk-forward |
Tối ưu and Walk-forward run on the same chart candles, with the same period, fees and fill rules as Tổng quan (without the 1-minute magnifier). Every parameter combination is scored over the same candle range, starting after the warm-up period of the combination with the longest lookback. Values that need a warm-up so long that there are not enough candles left to score are dropped from the grid, and the result shows Bỏ khỏi lưới vì không đủ nến khởi động: EMA chậm 252, 300 (Dropped from grid for lack of warm-up candles: Slow EMA 252, 300) — so set each parameter's max to fit the ticker's history (Lesson 11).

Monte Carlo

A sequence of past trades is just one lucky / unlucky ordering. The Monte Carlo tab rebuilds thousands of sequences from the closed trades of your backtest:
- Method: Xáo thứ tự giao dịch (Shuffle trade order) (keeps each trade's P/L but changes the order — the final return stays the same; shows how deep the drawdown could get) or Lấy mẫu lại có hoàn lại (Resample with replacement) (both the final return and the drawdown change).
- Runs: 500 lần (500 runs), 1.000 lần (1,000 runs), 5.000 lần (5,000 runs); ruin threshold Phá sản khi sụt ≥ 20 % (Ruin at drawdown ≥ 20%) / 30 % / 50 %. Click Chạy Monte Carlo (Run Monte Carlo).
- Results: Xác suất lỗ (Probability of loss), Xác suất sụt ≥ … (Probability of drawdown ≥ …), Lợi nhuận trung vị (Median return), Lợi nhuận P5 (xấu) (P5 return (bad)), Sụt giảm trung vị (Median drawdown), Sụt giảm P5 (xấu) (P5 drawdown (bad)), Sụt giảm theo thứ tự thật (Drawdown in actual order); 5–95% and 25–75% equity bands by trade number, and percentile tables for Lợi nhuận cuối (Final return) and Sụt giảm tối đa (Max drawdown).
The random seed is fixed — rerunning gives the same result. Drawdown here is computed on equity after each closed trade (excluding fluctuations while a position is open), so it is usually smaller than the figure in Tổng quan. These are statistics on past data, for reference only.