Đi tới nội dung chính
Chuyển tới nội dung chính

FireAnt Script

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.

Khung script với mẫu RSI + tín hiệu đang chạy trên FPT

① 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ư viện script, thẻ Mẫu, mẫu RSI + tín hiệu

① 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ómMẫuLàm gì
Dao độngRSI + tín hiệuRSI 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 độngMACD hai màuHistogram xanh / đỏ, đường MACD và tín hiệu, mũi tên khi cắt nhau
Xu hướngEMA cắt nhauHai EMA trên giá, mũi tên khi cắt nhau
Xu hướngSupertrend hai màuSupertrend xanh / đỏ, mũi tên khi đảo chiều
Xu hướngMây Ichimoku (không dịch)Tenkan, Kijun, mây Senkou A / B
Biến độngBollinger nénDải Bollinger, đánh dấu khi độ rộng dải thấp nhất 120 nến
Biến độngKênh Donchian và bứt pháKênh đỉnh / đáy, cờ khi giá vượt đỉnh kênh
Khối lượngKhối lượng đột biếnKhố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ãnNhãn Đỉnh / Đáy trên biểu đồ và bảng tóm tắt góc phải
Chiến lượcEMA 20/50 + lọc MA200Mua 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ượcRSI hồi về trung bìnhMua 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 QuantVượ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ăngMẫ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 hàm trong khung script: nút Lưu thư viện, dòng use và các tên xuất

① 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ính add, sub, gt, lt, and, or, crossAbove, crossBelow, highest, lowest, shift… và bộ ta.* (ta.rsi, ta.ema, ta.sma, ta.macd…; ta.run gọ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ùng onBar.

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.

Nhờ Copilot viết 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​

Tham số Quá bán đã đổi thành 35, có nút ↺

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.

Kiểm thử chiến lược EMA 20/50 + lọc MA200 trên FPT

① 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.

Thêm chiến lược vào biểu đồ trước khi kiểm thử

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ẻ conNội dung
Tổng quanChỉ số chính, đường vốn so với mua và giữ, dải sụt giảm
Giao dịchTừ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ángBảng lợi nhuận từng tháng theo năm
Monte CarloXá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 ưuQuét hai tham số số theo Sharpe (lưới tới 49 tổ hợp) — Tối ưu tham số
Walk-forwardKiể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).

Thẻ Giao dịch

Monte Carlo​

Monte Carlo 1.000 lần xáo thứ tự giao dịch

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ố​

Bản đồ nhiệt tối ưu EMA nhanh × EMA chậm

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​

Walk-forward: 4 đoạn kiểm ngoài mẫu

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ử.

Kết quả quá khứ không bảo đảm tương lai

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ý

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​

Menu ⋯ của khung 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.

Hộp 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 alerts mộ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 đồ).

Lọc bằng script RSI + tín hiệu trên VN30, đúng trong 10 phiên

  • Điều kiện — Cảnh báo: … (mỗi điều kiện trong alerts), Hình: … (mỗi shape, 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ệuGó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 StudioThiế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​

Hộp Chia sẻ lên Cộng đồng

⋯ › 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ệcCầ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​