Hỏi đáp và mẹo
Script có 2 giây để tính cả lịch sử và 50 ms mỗi lần cập nhật giá. Phần lớn script chỉ cần vài mili-giây (thanh trạng thái của khung script ghi thời…
- 🇻🇳 Tiếng Việt
- 🇬🇧 English
- 🇰🇷 한국어
- 🇨🇳 中文
Bắt đầu
Tôi chưa biết lập trình, học từ đâu?
Làm Script đầu tiên trong 5 phút, đọc Khái niệm nền, rồi đi lần lượt 12 bài học. Mỗi bài chỉ thêm một kỹ năng. Song song, lấy một mẫu gần ý bạn nhất và sửa dần — cách học nhanh nhất là sửa mã đang chạy.
FireAnt Script khác Pine Script thế nào?
Là JavaScript với bộ hàm riêng; phép trên chuỗi viết bằng phương thức (.gt(), .add()), logic theo nến viết trong onBar. Đối chiếu đầy đủ: Chuyển từ Pine Script.
Script của tôi lưu ở đâu? Mất máy có mất không?
Khi đã đăng nhập, Script của tôi (mã và 20 phiên bản gần nhất) đi theo tài khoản FireAnt — máy khác đăng nhập cùng tài khoản là thấy; hai máy cùng sửa thì bản của máy kia vào Phiên bản trước, không mất chữ (Đồ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); bản nháp đang soạn lưu trên trình duyệt. Chưa đăng nhập thì mọi thứ chỉ ở trình duyệt đang dùng — xem Lưu ở đâu.
Một biểu đồ gắn được bao nhiêu script?
- Mỗi script chạy riêng trong sandbox.
Dữ liệu và tính toán
Vì sao đường của tôi bắt đầu trễ, phần đầu biểu đồ trống?
Chỉ báo cần đủ nến để tính (SMA 200 cần 200 nến; EMA, RSI cần đoạn khởi động dài hơn để ổn định). Biểu đồ tự nạp thêm nến trước vùng đang xem; nếu lịch sử của mã ngắn, phần đầu sẽ trống. NaN và khởi động.
Tín hiệu trên nến cuối hiện rồi mất?
Trong phiên, nến cuối chưa đóng nên điều kiện còn thay đổi theo giá. Tín hiệu trên các nến đã đóng không bao giờ thay đổi (không vẽ lại). Muốn cảnh báo chỉ khi chốt: xét dieuKien.shift(1) — Bài 5.
Giá trị của script khác chỉ báo dựng sẵn cùng tên?
ta.* dùng công thức của Quant AI Studio (EMA khởi tạo bằng SMA, RSI / ATR Wilder) — khớp chỉ báo dựng sẵn sau đoạn khởi động; có thể lệch nhỏ ở những nến đầu. ta.run("id") dùng đúng công thức của chỉ báo dựng sẵn cùng id.
Dùng được dữ liệu khối ngoại, BCTC, mã khác trên biểu đồ không?
Mã khác có: d.symbol("VNINDEX"), d.bench — biểu đồ tự nạp nến. Dòng tiền chủ động (d.flow, d.footprint) có với gói Chuyên nghiệp. Khối ngoại, BCTC, vĩ mô, định giá thì chưa — đường dùng chúng trên biểu đồ để trống; dùng khi Lọc bằng script trên rổ có tên và trong Quant AI Studio. Trên biểu đồ, chỉ báo dựng sẵn cùng loại (khối ngoại, P/E…) của thư viện chỉ báo vẫn có dữ liệu. Bài 8.
Giá điều chỉnh hay giá gốc?
Script tính trên nến đang hiện trên biểu đồ — theo chế độ giá của biểu đồ.
Chạy được trên biểu đồ phút không?
Được. Mọi khung của biểu đồ đều chạy; dùng d.tf("1D") để lấy mức của phiên trước, d.session cho giờ trong phiên; ngược lại trên biểu đồ ngày, d.ltf("1") đọc nến phút bên trong mỗi phiên. Kiểm thử, Tối ưu, Walk-forward đều chạy trên nến của biểu đồ. Riêng cảnh báo máy chủ theo script hiện chỉ xét ở khung ngày (1D).
Hiệu năng
Script có 2 giây để tính cả lịch sử và 50 ms mỗi lần cập nhật giá. Phần lớn script chỉ cần vài mili-giây (thanh trạng thái của khung script ghi thời gian tính, ví dụ 4.949 nến · 10.9 ms; rãnh trái trình soạn ghi thời gian từng dòng, dòng tốn từ 5 ms tô cam). Khi chậm:
| Nên | Thay vì |
|---|---|
Phép chuỗi (ta.*, .highest(), .rolling()) — tính một lần cho mọi nến, cập nhật O(1) mỗi giá mới | Vòng lặp tự viết trong onBar duyệt lại nhiều nến trước |
series + ctx.v.x đưa chuỗi vào onBar | Tự tính trung bình trong onBar bằng mảng |
ctx.ta.sma(x, n) cho số tự tính | Giữ mảng n giá trị rồi cộng lại mỗi nến |
Cắt mảng trong state (if (s.ds.length > 100) s.ds.shift()) | Mảng dài mãi (trạng thái tối đa 256 KB, và được sao chép mỗi lần giá mới) |
Đối tượng vẽ có id (sửa tại chỗ) | Vẽ mới mỗi nến hàng nghìn đối tượng |
Tính một lần, đặt tên bằng const, dùng lại | Gọi lại cùng biểu thức dài nhiều nơi (lõi gộp phép trùng, nhưng mã khó đọc) |
map, zip, combine (hàm tự viết trên chuỗi) chậm hơn phép có sẵn — dùng khi không có phép tương đương.
Chiến lược và kiểm thử
Vì sao kết quả kiểm thử khác TradingView / Amibroker?
FireAnt áp luật thị trường Việt Nam (T+2, lô 100, biên độ, không khớp khi trắng bên ở trần / sàn, phí 0,15 %, thuế bán 0,1 %, trượt giá) và khớp ở giá mở cửa nến sau tín hiệu. Công thức một số chỉ báo cũng khác nhau.
Vì sao Tối ưu cho số khác thẻ Tổng quan?
Mọi tổ hợp của Tối ưu 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 — thường ngắn hơn khoảng của Tổng quan; tối ưu cũng chưa dùng kính lúp nến 1 phút. So các tổ hợp với nhau trong thẻ Tối ưu; đọc con số cuối cùng ở Tổng quan sau khi áp tham số và chạy lại kiểm thử. Dưới kết quả có dòng Bỏ khỏi lưới vì không đủ nến khởi động… thì max của tham số quá lớn so với lịch sử (Bài 11).
Chạy chiến lược trên nhiều mã cùng lúc?
⋯ › Mở trong Quant AI Studio — chọn rổ, Studio chạy danh mục nhiều mã nhiều năm. Bài 12.
Script có đặt lệnh thật không?
Không. Chiến lược là lệnh giấy chỉ dùng để kiểm thử; script không có đường nào tới tài khoản giao dịch.
An toàn
Script của người khác có đọc được tài khoản của tôi không?
Không. Script chạy trong sandbox tách khỏi trang: không gọi mạng, không đọc lưu trữ trình duyệt, không truy cập tài khoản hay lệnh. Script Đóng mã của Cộng đồng chạy ở máy chủ FireAnt (cũng trong sandbox), chỉ nhận nến của biểu đồ; bạn không xem được mã của nó.
Chia sẻ script lên Cộng đồng thì người khác thấy gì về tôi?
Chỉ tên công khai của tài khoản FireAnt (chưa đặt thì hiện Nhà đầu tư FireAnt) — không bao giờ là email hay số điện thoại đăng nhập. Chọn Đóng mã nếu không muốn người khác đọc mã: script vẫn chạy được cho họ, ở máy chủ. Chia sẻ lên Cộng đồng.
Copilot có tự bật cảnh báo hay đặt lệnh không?
Không. Copilot viết, sửa, kiểm thử script; cảnh báo do bạn tự bật, lệnh giao dịch do bạn tự đặt. Nhờ Copilot viết script.
Cảnh báo theo script có chạy khi tôi tắt máy không?
Có, với gói Thiết yếu trở lên (đã đăng nhập): mỗi điều kiện bật trong Cảnh báo theo script thành một cảnh báo máy chủ, xét ở khung ngày (1D) cả khi FireAnt Terminal đóng. Gói Miễn phí: cảnh báo chỉ chạy khi biểu đồ đang mở trên trình duyệt. Cảnh báo theo script.
Getting started
I don't know how to program. Where do I start?
Do Your first script in 5 minutes, read Core concepts, then work through the 12 lessons in order. Each lesson adds just one skill. Alongside, take the template closest to your idea and modify it bit by bit — the fastest way to learn is to edit code that already runs.
How is FireAnt Script different from Pine Script?
It is JavaScript with its own function set; series operations are written as methods (.gt(), .add()), and per-candle logic is written in onBar. Full comparison: Moving from Pine Script.
Where are my scripts stored? Do I lose them if I lose my computer?
When you are signed in, Script của tôi (My scripts) (code and the 20 most recent versions) follows your FireAnt account — any other computer signed in to the same account sees them; if two computers edit at the same time, the other computer's version goes to Phiên bản trước (Previous versions), and no text is lost (Account sync). Scripts attached to a chart and the parameter values you adjust are saved with the chart state (page, board, workspace); the draft you are editing is saved in the browser. If you are not signed in, everything stays only in the browser you are using — see Where things are stored.
How many scripts can one chart hold?
- Each script runs separately in its own sandbox.
Data and calculation
Why does my line start late, leaving the start of the chart empty?
An indicator needs enough candles to calculate (SMA 200 needs 200 candles; EMA and RSI need a longer warm-up to stabilize). The chart automatically loads extra candles before the visible range; if the ticker's history is short, the beginning will be empty. NaN and warm-up.
A signal on the last candle appears and then disappears?
During a session the last candle has not closed, so the condition still changes with price. Signals on closed candles never change (no repainting). To alert only on confirmed signals, check dieuKien.shift(1) — Lesson 5.
The script's values differ from the built-in indicator with the same name?
ta.* uses Quant AI Studio's formulas (EMA seeded with an SMA, Wilder's RSI / ATR) — matching the built-in indicators after the warm-up; there may be small differences on the first candles. ta.run("id") uses exactly the formula of the built-in indicator with the same id.
Can I use foreign investor data, BCTC or other tickers on the chart?
Other tickers: yes — d.symbol("VNINDEX"), d.bench; the chart loads the candles automatically. Active order flow (d.flow, d.footprint): yes, with the Professional plan. Foreign investors, financial statements, macro, valuation: not yet — lines using them stay empty on the chart; use them with Lọc bằng script (Screen with script) on a named basket and in Quant AI Studio. On the chart, the equivalent built-in indicators in the indicator library (foreign investors, P/E…) still have the data. Lesson 8.
Adjusted or unadjusted prices?
The script calculates on the candles currently shown on the chart — following the chart's price mode.
Does it work on minute charts?
Yes. It runs on every chart timeframe; use d.tf("1D") to get the previous session's levels and d.session for the time within the session; conversely, on a daily chart, d.ltf("1") reads the minute candles inside each session. Backtesting, Tối ưu (Optimization) and Walk-forward all run on the chart's candles. Only server-side script alerts are currently evaluated on the daily timeframe (1D) only.
Performance
A script has 2 seconds to calculate the whole history and 50 ms for each price update. Most scripts need only a few milliseconds (the script pane's status bar shows the calculation time, for example 4.949 nến · 10.9 ms (4,949 candles · 10.9 ms); the editor's left gutter shows per-line timing, with lines taking 5 ms or more highlighted orange). When it is slow:
| Prefer | Instead of |
|---|---|
Series operations (ta.*, .highest(), .rolling()) — calculated once for all candles, O(1) updates on each new price | Hand-written loops in onBar that walk back over many previous candles |
series + ctx.v.x to feed series into onBar | Computing averages yourself in onBar with arrays |
ctx.ta.sma(x, n) for numbers you compute | Keeping an array of n values and summing it on every candle |
Trimming arrays in state (if (s.ds.length > 100) s.ds.shift()) | Arrays that grow forever (state is capped at 256 KB and is copied on every new price) |
Drawing objects with an id (updated in place) | Drawing thousands of new objects on every candle |
Calculating once, naming it with const, reusing it | Repeating the same long expression in many places (the engine merges duplicates, but the code is hard to read) |
map, zip, combine (your own functions over series) are slower than built-in operations — use them only when no equivalent exists.
Strategies and backtesting
Why do backtest results differ from TradingView / Amibroker?
FireAnt applies Vietnamese market rules (T+2, 100-share lots, price bands, no fill when one side is empty at the ceiling / floor, 0.15% fees, 0.1% sales tax, slippage) and fills at the open of the candle after the signal. The formulas of some indicators also differ.
Why does the Optimization tab give different numbers from the Overview tab?
Every combination in Tối ưu (Optimization) is scored on the same candle range, starting after the warm-up of the combination with the longest period — usually shorter than the range in Tổng quan (Overview); the optimization also does not yet use the 1-minute candle magnifier. Compare combinations with each other in the Optimization tab; read the final numbers in Tổng quan after applying the parameters and rerunning the backtest. If the results show the line Bỏ khỏi lưới vì không đủ nến khởi động… (Dropped from the grid due to insufficient warm-up candles…), the parameter's max is too large for the history (Lesson 11).
Can I run a strategy on many tickers at once?
⋯ › Mở trong Quant AI Studio (Open in Quant AI Studio) — choose a basket and the Studio runs a multi-ticker portfolio over many years. Lesson 12.
Does a script place real orders?
No. Strategies use paper orders for backtesting only; a script has no path to a trading account.
Safety
Can someone else's script read my account?
No. Scripts run in a sandbox isolated from the page: no network calls, no access to browser storage, no access to accounts or orders. Đóng mã (Closed-source) Community scripts run on the FireAnt server (also in a sandbox) and receive only the chart's candles; you cannot view their code.
If I share a script to the Community, what do others see about me?
Only your FireAnt account's public name (if not set, it shows Nhà đầu tư FireAnt (FireAnt Investor)) — never your sign-in email or phone number. Choose Đóng mã (Closed-source) if you don't want others to read the code: the script still runs for them, on the server. Sharing to the Community.
Does Copilot turn on alerts or place orders by itself?
No. Copilot writes, edits and backtests scripts; you turn on alerts yourself and place trading orders yourself. Ask Copilot to write a script.
Do script alerts run when my computer is off?
Yes, with the Essential plan or higher (signed in): each condition turned on in Cảnh báo theo script (Script alerts) becomes a server alert, evaluated on the daily timeframe (1D) even when FireAnt Terminal is closed. Free plan: alerts run only while the chart is open in the browser. Script alerts.
시작하기
프로그래밍을 모르는데 어디서부터 배우나요?
5분 만에 첫 스크립트를 해 보고, 기본 개념을 읽은 다음 12개 강의를 차례로 진행하세요. 각 강의는 기술을 하나씩만 추가합니다. 동시에 원하는 것과 가장 가까운 예제를 골라 조금씩 고쳐 보세요. 가장 빨리 배우는 방법은 실행 중인 코드를 고치는 것입니다.
FireAnt Script는 Pine Script와 어떻게 다른가요?
자체 함수 세트를 가진 JavaScript입니다. 시계열 연산은 메서드(.gt(), .add())로 쓰고, 캔들별 로직은 onBar 안에 씁니다. 전체 비교: Pine Script에서 옮겨 오기.
내 스크립트는 어디에 저장되나요? 컴퓨터를 잃어버리면 사라지나요?
로그인한 상태라면 Script của tôi(내 스크립트)(코드와 최근 20개 버전)는 FireAnt 계정을 따라갑니다. 같은 계정으로 로그인한 다른 컴퓨터에서도 보입니다. 두 컴퓨터에서 동시에 수정하면 다른 컴퓨터의 버전은 Phiên bản trước(이전 버전)로 들어가며 내용이 사라지지 않습니다(계정 동기화). 차트에 붙은 스크립트와 조정한 매개변수 값은 차트 상태(페이지, 보드, 워크스페이스)와 함께 저장되고, 작성 중인 초안은 브라우저에 저장됩니다. 로그인하지 않았다면 모든 것이 사용 중인 브라우저에만 있습니다. 저장 위치를 참고하세요.
차트 하나에 스크립트를 몇 개 붙일 수 있나요?
- 각 스크립트는 샌드박스에서 따로 실행됩니다.
데이터와 계산
내 선이 왜 늦게 시작하고 차트 앞부분이 비어 있나요?
지표는 계산할 만큼의 캔들이 필요합니다(SMA 200은 200캔들, EMA, RSI는 안정되려면 더 긴 워밍업 구간이 필요). 차트는 보고 있는 구간 앞의 캔들을 자동으로 더 불러오지만, 종목의 과거 데이터가 짧으면 앞부분이 비게 됩니다. NaN과 워밍업.
마지막 캔들의 신호가 나타났다가 사라지나요?
장중에는 마지막 캔들이 마감되지 않아 조건이 가격에 따라 계속 바뀝니다. 마감된 캔들의 신호는 절대 바뀌지 않습니다(다시 그려지지 않음). 마감 시에만 알림을 받으려면 dieuKien.shift(1)로 판단하세요. 5강.
스크립트 값이 같은 이름의 내장 지표와 다른가요?
ta.*는 Quant AI Studio의 공식(SMA로 초기화하는 EMA, Wilder 방식의 RSI / ATR)을 사용합니다. 워밍업 구간 이후에는 내장 지표와 일치하지만, 처음 몇 캔들에서는 약간 다를 수 있습니다. ta.run("id")는 같은 id의 내장 지표 공식을 그대로 사용합니다.
차트에서 외국인 데이터, BCTC, 다른 종목을 쓸 수 있나요?
다른 종목은 가능합니다: d.symbol("VNINDEX"), d.bench — 차트가 캔들을 자동으로 불러옵니다. 능동 자금 흐름(d.flow, d.footprint)은 Professional 플랜에서 사용할 수 있습니다. 외국인, 재무제표, 거시경제, 밸류에이션은 아직 안 됩니다. 이를 사용하는 선은 차트에서 비어 있으며, 이름이 있는 바스켓에서 Lọc bằng script(스크립트로 필터)를 할 때와 Quant AI Studio에서 사용합니다. 차트에서는 지표 라이브러리의 같은 종류 내장 지표(외국인, P/E…)에는 여전히 데이터가 있습니다. 8강.
수정주가인가요, 원래 가격인가요?
스크립트는 차트에 표시된 캔들로 계산합니다. 즉 차트의 가격 모드를 따릅니다.
분봉 차트에서도 실행되나요?
네. 차트의 모든 시간 프레임에서 실행됩니다. d.tf("1D")로 전 세션의 수준을, d.session으로 장중 시간을 가져오고, 반대로 일봉 차트에서는 d.ltf("1")로 각 세션 안의 분봉을 읽습니다. 테스트, Tối ưu(최적화), Walk-forward는 모두 차트의 캔들로 실행됩니다. 단, 스크립트 서버 알림은 현재 일봉(1D)에서만 판단합니다.
성능
스크립트에는 전체 과거 데이터 계산에 2초, 가격 갱신마다 50 ms가 주어집니다. 대부분의 스크립트는 몇 밀리초면 충분합니다(스크립트 패널의 상태 표시줄에 계산 시간이 표시됩니다. 예: 4.949 n ến · 10.9 ms(4,949캔들 · 10.9 ms). 편집기 왼쪽 여백에는 줄별 시간이 표시되며, 5 ms 이상 걸리는 줄은 주황색입니다). 느릴 때는:
| 이렇게 하세요 | 이렇게 하지 말고 |
|---|---|
시계열 연산(ta.*, .highest(), .rolling()) — 모든 캔들을 한 번에 계산하고 새 가격마다 O(1)로 갱신 | onBar 안에서 이전 캔들을 여러 번 다시 도는 직접 작성한 반복문 |
series + ctx.v.x로 시계열을 onBar에 전달 | onBar 안에서 배열로 평균을 직접 계산 |
직접 계산한 숫자에는 ctx.ta.sma(x, n) | 값 n개를 배열에 담아 캔들마다 더하기 |
state 안의 배열 자르기(if (s.ds.length > 100) s.ds.shift()) | 끝없이 길어지는 배열(상태는 최대 256 KB이며 새 가격마다 복사됨) |
id가 있는 그리기 객체(제자리에서 수정) | 캔들마다 수천 개의 객체를 새로 그리기 |
한 번 계산해 const로 이름 붙이고 재사용 | 같은 긴 식을 여러 곳에서 다시 호출(엔진이 중복 연산을 합치지만 코드가 읽기 어려움) |
map, zip, combine(시계열에 대해 직접 작성하는 함수)은 내장 연산보다 느립니다. 대응하는 연산이 없을 때만 쓰세요.
전략과 테스트
테스트 결과가 왜 TradingView / Amibroker와 다른가요?
FireAnt는 베트남 시장 규칙(T+2, 100주 단위, 가격제한폭, 상한가 / 하한가에서 반대 호가가 없으면 체결 안 됨, 수수료 0.15 %, 매도세 0.1 %, 슬리피지)을 적용하고, 신호 다음 캔들의 시가에 체결합니다. 일부 지표의 공식도 다릅니다.
최적화 결과가 왜 개요 탭과 숫자가 다른가요?
Tối ưu(최적화)의 모든 조합은 같은 캔들 구간에서 채점되며, 가장 긴 기간을 가진 조합의 워밍업 구간 이후부터 시작합니다. 보통 Tổng quan(개요)의 구간보다 짧고, 최적화는 아직 1분봉 돋보기도 쓰지 않습니다. 조합끼리는 최적화 탭에서 비교하고, 최종 숫자는 매개변수를 적용해 테스트를 다시 실행한 뒤 Tổng quan에서 읽으세요. 결과 아래에 Bỏ khỏi lưới vì không đủ nến khởi động…(워밍업 캔들이 부족해 그리드에서 제외…) 줄이 있으면 매개변수의 max가 과거 데이터에 비해 너무 큰 것입니다(11강).
여러 종목에서 전략을 동시에 실행할 수 있나요?
⋯ › Mở trong Quant AI Studio(Quant AI Studio에서 열기) — 바스켓을 고르면 Studio가 여러 종목, 여러 해의 포트폴리오를 실행합니다. 12강.
스크립트가 실제 주문을 내나요?
아니요. 전략은 테스트에만 쓰는 모의 주문입니다. 스크립트에는 거래 계좌로 가는 경로가 없습니다.
보안
다른 사람의 스크립트가 내 계좌를 읽을 수 있나요?
아니요. 스크립트는 페이지와 분리된 샌드박스에서 실행됩니다. 네트워크 호출, 브라우저 저장소 읽기, 계좌나 주문 접근이 모두 불가능합니다. 커뮤니티의 Đóng mã(코드 비공개) 스크립트는 FireAnt 서버에서(역시 샌드박스 안에서) 실행되며 차트의 캔들만 받습니다. 그 코드는 볼 수 없습니다.
커뮤니티에 스크립트를 공유하면 다른 사람은 나에 대해 무엇을 보나요?
FireAnt 계정의 공개 이름만 보입니다(설정하지 않았으면 Nhà đầu tư FireAnt(FireAnt 투자자)로 표시). 로그인 이메일이나 전화번호는 절대 보이지 않습니다. 다른 사람이 코드를 읽지 않기를 원하면 Đóng mã(코드 비공개)를 고르세요. 스크립트는 서버에서 그들을 위해 계속 실행됩니다. 커뮤니티에 공유.
Copilot이 알림을 켜거나 주문을 스스로 내나요?
아니요. Copilot은 스크립트를 작성, 수정, 테스트합니다. 알림은 직접 켜고, 거래 주문도 직접 냅니다. Copilot에게 스크립트 작성 요청.
컴퓨터를 꺼도 스크립트 알림이 작동하나요?
네, Essential 플랜 이상(로그인 상태)이면 작동합니다. Cảnh báo theo script(스크립트 알림)에서 켠 각 조건은 서버 알림이 되어, FireAnt Terminal이 닫혀 있어도 일봉(1D)에서 판단합니다. 무료 플랜: 차트가 브라우저에 열려 있을 때만 알림이 작동합니다. 스크립트 알림.
入门
我不会编程,从哪里开始学?
先完成5 分钟写出第一个脚本,阅读基础概念,然后依次学习 12 节课。每节课只增加一项技能。同时,找一个最接近您想法的模板逐步修改——最快的学习方 法就是修改正在运行的代码。
FireAnt Script 与 Pine Script 有何不同?
它是带有自有函数集的 JavaScript;序列运算用方法来写(.gt()、.add()),逐 K 线逻辑写在 onBar 中。完整对照:从 Pine Script 迁移。
我的脚本保存在哪里?电脑丢了会丢失吗?
一张图表可以挂多少个脚本?
- 每个脚本在沙箱中独立运行。
数据与计算
为什么我的线开始得晚,图表开头是空的?
指标需要足够的 K 线才能计算(SMA 200 需要 200 根 K 线;EMA、RSI 需要更长的预热段才能稳定)。图表会自动加载可视区域之前的更多 K 线;如果该代码的历史较短,开头部分就会是空的。NaN 与预热。
最后一根 K 线上的信号出现后又消失?
交易时段内,最后一根 K 线尚未收盘,因此条件仍随价格变化。已收盘 K 线上的信号永远不会改变(不重绘)。若只想在确认时提醒:检查 dieuKien.shift(1)——第 5 课。
脚本的值与同名内置指标不同?
ta.* 使用 Quant AI Studio 的公式(EMA 用 SMA 初始化,RSI / ATR 用 Wilder)——预热段之后与内置指标一致;最初几根 K 线可能有微小偏差。ta.run("id") 使用与同 id 内置指标完全相同的公式。
图表上能使用外资、BCTC、其他代码的数据吗?
其他代码可以:d.symbol("VNINDEX")、d.bench——图表会自动加载 K 线。主动资金流(d.flow、d.footprint)在 Professional 套餐下可用。外资、财务报表、宏观、估值暂不可用——在图表上使用它们的线为空;可在有名称的篮子上 Lọc bằng script(用脚本筛选)时以及在 Quant AI Studio 中使用。在图表上,指标库中同类的内置指标(外资、P/E…)仍有数据。第 8 课。
复权价还是原始价?
脚本在图表上显示的 K 线上计算——即按图表的价格模式。
能在分钟图上运行吗?
可以。图表的所有周期都能运行;用 d.tf("1D") 获取上一交易时段的价位,用 d.session 获取交易时段内的时间;反过来在日线图上,d.ltf("1") 可读取每个交易时段内部的分钟 K 线。测试、Tối ưu(优化)、Walk-forward 都在图表的 K 线上运行。只有按脚本的服务器提醒目前仅在日线周期(1D)上检查。
性能
脚本计算整个历史有 2 秒,每次价格更新有 50 ms。大多数脚本只需几毫秒(脚本窗格的状态栏会显示计算时间,例如 4.949 nến · 10.9 ms(4,949 根 K 线 · 10.9 ms);编辑器左侧边槽显示每行耗时,耗时 5 ms 以上的行标为橙色)。变慢时:
| 建议 | 代替 |
|---|---|
序列运算(ta.*、.highest()、.rolling())——对所有 K 线计算一次,每个新价格以 O(1) 更新 | 在 onBar 中自写循环,反复遍历之前的多根 K 线 |
用 series + ctx.v.x 把序列传入 onBar | 在 onBar 中用数组自行计算平均值 |
对自算数字使用 ctx.ta.sma(x, n) | 保存 n 个值的数组,每根 K 线重新求和 |
裁剪 state 中的数组(if (s.ds.length > 100) s.ds.shift()) | 数组无限增长(状态最多 256 KB,且每个新价格都要复制) |
带 id 的绘图对象(原地修改) | 每根 K 线新画对象,累积成千上万个 |
计算一次,用 const 命名后复用 | 在多处重复调用同一长表达式(内核会合并重复运算,但代码难读) |
map、zip、combine(在序列上自写函数)比现成运算慢——仅在没有等效运算时使用。
策略与测试
为什么测试结果与 TradingView / Amibroker 不同?
FireAnt 应用越南市场规则(T+2、100 股一手、涨跌幅限制、涨停 / 跌停单边无对手盘时不成交、手续费 0.15%、卖出税 0.1%、滑点),并以信号后下一根 K 线的开盘价成交。部分指标的公式也有所不同。
为什么优化给出的数字与概览标签页不同?
Tối ưu(优化)的所有组合都在同一段 K 线上评分,从周期最长的组合的预热段之后开始——通常比 Tổng quan(概览)的区间短;优化也尚未使用 1 分钟 K 线放大镜。请在优化标签页内比较各组合;最终数字请在应用参数并重新运行测试后,在 Tổng quan 中查看。结果下方出现 Bỏ khỏi lưới vì không đủ nến khởi động…(因预热 K 线不足而从网格中移除…)这一行时,说明参数的 max 相对历史过大(第 11 课)。
能同时在多个代码上运行策略吗?
⋯ › Mở trong Quant AI Studio(在 Quant AI Studio 中打开)——选择篮子,Studio 会运行多代码、多年的投资组合。第 12 课。
脚本会下真实委托吗?
不会。策略使用的是仅用于测试的模拟单;脚本没有任何通往交易账户的途径。
安全
别人的脚本能读取我的账户吗?
不能。脚本在与页面隔离的沙箱中运行:不能访问网络,不能读取浏览器存储,不能访问账户或委托。社区中的 Đóng mã(闭源)脚本在 FireAnt 服务器上运行(同样在沙箱中),只接收图表的 K 线;您无法查看它的代码。
把脚本分享到社区后,别人能看到我的哪些信息?
只有 FireAnt 账户的公开名称(未设置时显示 Nhà đầu tư FireAnt,即 FireAnt 投资者)——绝不会显示登录用的电子邮件或电话号码。如果不想让别人读取代码,请选择 Đóng mã(闭源):脚本仍可在服务器上为他们运行。分享到社区。
Copilot 会自动开启提醒或下单吗?
不会。Copilot 编写、修改、测试脚本;提醒由您自己开启,交易委托由您自己下。请 Copilot 编写脚本。
我关掉电脑后,按脚本提醒还会运行吗?
会,适用于 Essential 及以上套餐(已登录):在 Cảnh báo theo script(按脚本提醒)中开启的每个条件都会成为一个服务器提醒,即使 FireAnt Terminal 已关闭,也会在日线周期(1D)上检查。免费套餐:提醒只在图表于浏览器中打开时运行。按脚本提醒。