Khái niệm cần biết
- 🇻🇳 Tiếng Việt
- 🇬🇧 English
- 🇰🇷 한국어
- 🇨🇳 中文
Trang này giải thích những khái niệm bạn gặp ở mọi màn của Quant AI Studio: backtest là gì, ba loại kết quả, rổ mã, vì sao kết quả không "nhìn trước" được tương lai, Studio mô phỏng sàn Việt Nam ra sao. Đọc một lần trước khi đọc báo cáo backtest. Chi tiết kỹ thuật về nguồn dữ liệu, giá điều chỉnh và luật khớp lệnh nằm ở Dữ liệu và mô phỏng khớp lệnh.
Backtest là gì
Backtest là chạy thử một quy tắc mua bán trên dữ liệu quá khứ, như thể bạn đã giao dịch thật theo đúng quy tắc đó từng phiên: cuối mỗi phiên tính tín hiệu, phiên sau đặt lệnh, trả phí và thuế, chờ cổ phiếu về tài khoản, ghi lại tiền và danh mục. Kết quả là đường vốn (giá trị tài khoản theo thời gian) và các chỉ số lời lỗ, rủi ro.
Ví dụ với mẫu Momentum 6-1 xoay vòng hàng tháng (ở thư viện mẫu: Mua 10 mã tăng mạnh nhất 6 tháng, đổi mỗi tháng): đầu mỗi tháng, Studio xếp hạng cổ phiếu HOSE thanh khoản từ 10 tỷ đồng/phiên theo mức tăng 6 tháng (bỏ tháng gần nhất), mua đều 10 mã mạnh nhất, bán các mã rớt khỏi nhóm — lặp lại từ tháng 1/2016 đến nay.
Backtest trả lời câu hỏi "nếu đã làm vậy thì kết quả ra sao", không trả lời "sắp tới sẽ ra sao". Nó hữu ích nhất để loại bỏ ý tưởng không có cơ sở trước khi bạn xuống tiền: một quy tắc thua cả chỉ số trong 10 năm, kể cả khi đã tính đúng chi phí, hiếm khi đáng thử bằng tiền thật. Ngược lại, kết quả đẹp vẫn cần qua kiểm định độ vững vì có thể chỉ là may mắn hoặc quá khớp.
Ba loại kết quả: chiến lược, bộ lọc, phân tích
Mọi thứ Studio tạo ra — từ mẫu, do trợ lý Quant viết hay do bạn tự viết — là một mục, nằm trong tab Của tôi của thanh bên, thuộc một trong ba loại:
| Loại | Trả lời câu hỏi | Dữ liệu dùng | Kết quả | Ví dụ mẫu |
|---|---|---|---|---|
| Chiến lược | "Nếu giao dịch theo quy tắc này nhiều năm thì lời lỗ, rủi ro ra sao?" | Lịch sử đã chốt, mặc định 10 năm gần nhất | Tab Báo cáo, Giao dịch, Danh mục, Độ vững, Mã | Momentum 6-1 xoay vòng hàng tháng; RSI hồi phục trong xu hướng tăng |
| Bộ lọc | "Hôm nay những mã nào thỏa điều kiện?" | Khoảng một năm gần nhất, gồm giá tạm của phiên đang giao dịch | Tab Kết quả (bảng mã), Mã | Sức mạnh giá dẫn đầu (RS); Nền giá chặt gần đỉnh 52 tuần |
| Phân tích | "Trong quá khứ, hiện tượng X diễn ra thế nào?" | Tùy phân tích | Tab Kết quả (số liệu, biểu đồ, bảng, nhận xét), Mã | Mùa vụ theo tháng; Hồ sơ cổ phiếu |
Bộ lọc của Studio khác Lọc realtime: Lọc realtime chọn điều kiện có sẵn và cập nhật liên tục theo giá; bộ lọc của Studio là công thức tự do (điều kiện nhiều kỳ, kết hợp BCTC, khối ngoại, xếp hạng…), tính lại mỗi lần bạn chạy.
Mỗi mục gồm:
- Code viết bằng SDK của Studio — bạn không cần đọc code để dùng mẫu hay nhờ trợ lý.
- Phiên bản — v1, v2, v3… Mỗi lần trợ lý sửa, bạn lưu code đã sửa, khôi phục bản cũ hoặc áp dụng đề xuất của trợ lý, mục có thêm một phiên bản, ghi người tạo (Mẫu, AI, Bạn). Xem Mục của bạn, phiên bản và chia sẻ.
- Tham số — các ngưỡng code khai báo (số mã nắm giữ, chu kỳ RSI, mức cắt lỗ…) hiện thành thanh trượt, công tắc, ô chọn hay ô nhập mã ngay trên kết quả. Đổi tham số chỉ chạy lại, không tạo phiên bản mới. Xem Chạy mẫu và đổi tham số.
- Kết quả chạy gần nhất — mở lại mục là thấy ngay kết quả lần trước, không phải chạy lại.
Mẫu là 99 chiến lược, bộ lọc, phân tích dựng sẵn trong Thư viện mẫu, đã kiểm tra chạy đúng trên dữ liệu thật: 31 phân tích, 33 chiến lược, 35 bộ lọc. Mỗi mẫu kèm kết quả kiểm chứng — kết quả một lần chạy trên dữ liệu thật với tham số mặc định — để bạn xem trước khi chạy, và được xếp theo Điểm Đề xuất (hiệu quả, dễ hiểu, hấp dẫn). 14 mẫu có tên là thuật ngữ hiện thêm một tên nói thẳng việc mẫu làm (xem Tên dễ hiểu của mẫu). Dùng một mẫu là tạo một mục mới của bạn từ mẫu đó. Xem Th ư viện mẫu và Danh sách 99 mẫu.
Hội thoại là một chuỗi trao đổi với trợ lý Quant ở khung Copilot. Một hội thoại có thể tạo và sửa nhiều mục; mỗi lần chạy chiến lược trong hội thoại được đếm là một lần thử — con số dùng để tính Deflated Sharpe.
Rổ mã
Chiến lược, bộ lọc và phân tích chạy trên một rổ mã. Rổ do code của mục khai báo; mẫu nào cho đổi rổ thì có tham số Nhóm hay ô Mã ngay trên kết quả, còn lại bạn nhờ trợ lý chạy trên rổ khác.
| Rổ | Gồm |
|---|---|
| VN30, HNX30 | Thành phần hiện tại của chỉ số |
| VN100, VNMidcap, VNSmallcap | Danh sách cũ của nguồn, nhiều mã đã hủy niêm yết hoặc chuyển sàn — không nên dùng để chọn mã (xem Những chỗ dữ liệu còn mỏng) |
| Cổ phiếu HOSE, Cổ phiếu HNX, Cổ phiếu UPCoM | Cổ phiếu trên từng sàn |
| Toàn bộ cổ phiếu | Cổ phiếu cả ba sàn |
| ETF, Chỉ số, Phái sinh | Quỹ ETF; các chỉ số (gồm cả chỉ số thế giới); hợp đồng tương lai |
| Danh sách mã | Ví dụ FPT, HPG, MWG |
| Ngành | Theo ngành ICB, ví dụ Ngân hàng |
| Watchlist | Một watchlist của bạn, theo tên |
Rổ thường kèm điều kiện, ghi ngay trong nhãn rổ ở đầu kết quả, ví dụ Cổ phiếu HOSE · GTGD ≥ 10 tỷ · top 240:
- GTGD ≥ … — chỉ xét mã có giá trị giao dịch bình quân 20 phiên từ mức đó trở lên. Khi backtest, điều kiện này được xét tại từng phiên trong quá khứ: một mã chỉ được mua ở những phiên nó đủ thanh khoản.
- top n — chỉ giữ n mã thanh khoản nhất.
- Thêm hoặc loại trừ mã cụ thể, giá tối thiểu, lọc ngành.
Giới hạn số mã mỗi lần chạy theo gói: Thiết yếu 250 mã, Chuyên nghiệp và Cao cấp 2.000 mã. Rổ chung (tên rổ hoặc ngành) lớn hơn giới hạn thì Studio tự giữ các mã thanh khoản nhất và ghi chú ở cuối kết quả; danh sách mã tự chọn hoặc watchlist vượt giới hạn thì báo lỗi. Các mẫu đều chạy được trong giới hạn 250 mã. Xem Gói, giới hạn và hỏi đáp.
Rổ theo thời điểm và thiên lệch sống sót
Nếu lấy danh sách cổ phiếu hôm nay để backtest cho 10 năm trước, bạn vô tình bỏ mất mọi mã đã hủy niêm yết hoặc đã chuyển sàn — thường là những mã làm ăn kém. Kết quả vì thế đẹp hơn thực tế. Hiện tượng này gọi là thiên lệch sống sót (survivorship bias).
Studio dựng rổ theo thời điểm cho backtest khi rổ là Toàn bộ cổ phiếu, Cổ phiếu HOSE hoặc một ngành:
- Rổ gồm cả các mã đã hủy niêm yết trong kỳ kiểm tra; nhãn rổ ghi thêm "theo thời điểm, n mã đã hủy niêm yết".
- Mỗi mã chỉ được mua trong khoảng thời gian nó thực sự thuộc rổ (ví dụ đang niêm yết ở HOSE).
- Mã bị hủy niêm yết khi đang nắm giữ được bán hết ở phiên giao dịch cuối của nó (lý do bán Hủy niêm yết).
- top n và thanh khoản được xếp theo dữ liệu trong kỳ, không theo thanh khoản hôm nay.
- Lịch sử thuộc sàn HOSE được suy từ bước giá, có từ 12/09/2016; kỳ bắt đầu sớm hơn thì nhãn rổ ở dòng cuối báo cáo ghi "theo thời điểm từ 09/2016" (trước mốc đó chưa có các mã đã rời HOSE).
Các rổ còn lại — HNX, UPCoM, rổ theo chỉ số (VN30, HNX30, VN100…), danh sách mã, watchlist — dùng danh sách hiện tại cho cả quá khứ. Báo cáo của chiến lược chạy trên VN30, HNX30, VN100, VNMidcap, VNSmallcap bị hạ độ tin cậy kèm lý do "Rổ mã lấy theo danh sách hiện tại cho cả quá khứ (thiên lệch sống sót)"; với HNX, UPCoM, báo cáo ghi chú trong Ghi chú dữ liệu. Hãy coi kết quả dài hạn trên các rổ này là lạc quan hơn thực tế.
Bộ lọc và phân tích luôn dùng danh sách mã hiện tại (bộ lọc chỉ xét hôm nay nên không có thiên lệch này).
Không nhìn trước tương lai
Lỗi phổ biến nhất của backtest là vô tình dùng thông tin chưa có tại thời điểm ra quyết định — ví dụ mua ở giá đóng cửa hôm nay theo tín hiệu tính từ chính giá đóng cửa đó, hay chuẩn hóa dữ liệu bằng trung bình của cả 10 năm. Studio chặn lỗi này theo ba cách:
-
Tín hiệu cuối phiên, khớp phiên sau. Tín hiệu tính bằng dữ liệu đến hết phiên t; lệnh khớp ở phiên t+1 — mặc định giá mở cửa, hoặc giá ATC nếu bạn chọn trong Cài đặt.
Phiên t Phiên t+1 Phiên t+2 Phiên t+3đóng cửa: tín hiệu ──► khớp mua ở giá mở cửa ──► cổ phiếu chưa về (T+2) ──► bán được từ giá mở cửa -
Tái cân bằng ở phiên đầu kỳ. Chiến lược xoay vòng hàng tháng đổi danh mục theo tín hiệu của phiên đầu tiên mỗi tháng, không phải phiên cuối tháng (muốn biết hôm nay là phiên cuối tháng phải biết lịch của ngày mai).
-
Kiểm tra tự động mỗi lần chạy chiến lược. Studio tính lại tín hiệu trên dữ liệu bị cắt ngắn ở hai mốc (55 % và 80 % kỳ kiểm tra) rồi so với bản tính trên dữ liệu đầy đủ. Tín hiệu của một ngày thay đổi khi bỏ dữ liệu phía sau nghĩa là chiến lược đang dùng dữ liệu tương lai: báo cáo hiện khung đỏ Phát hiện dùng dữ liệu tương lai và độ tin cậy về thấp. Code đọc trực tiếp giá trị của phiên sau bị chặn ngay khi chạy (lỗi Dùng dữ liệu tương lai).
Dữ liệu báo cáo tài chính dùng theo ngày công bố, không theo ngày kết thúc kỳ — chiến lược không "biết" lợi nhuận quý trước khi doanh nghiệp công bố. Xem Dữ liệu và mô phỏng khớp lệnh.
Mô phỏng như sàn Việt Nam
Studio khớp lệnh theo luật giao dịch cổ phiếu Việt Nam, nên kết quả gần với những gì bạn đạt được khi giao dịch thật:
| Quy tắc | Trong backtest |
|---|---|
| T+2 | Cổ phiếu mua ở phiên t về sau hai phiên: khớp giá mở cửa thì bán được sớm nhất ở giá mở cửa phiên t+3, khớp ATC thì ở ATC phiên t+2. Tín hiệu bán đến sớm hơn phải chờ |
| Biên độ trần / sàn | HOSE ±7 %, HNX ±10 %, UPCoM ±15 %. Phiên trắng bên (cả phiên một giá và đóng ở biên độ): mua ở giá trần không khớp, bán ở giá sàn không khớp — như khi không có người bán / người mua |
| Lô 100 | Khối lượng làm tròn xuống theo lô 100 cổ phiếu |
| Thanh khoản | Mỗi lệnh mua không quá 10 % khối lượng giao dịch bình quân 20 phiên trước đó (lệnh bán không bị giới hạn) |
| Phí, thuế, trượt giá | Mặc định phí 0,15 % mỗi chiều, thuế bán 0,1 %, trượt giá 0,1 % cộng thêm phần trượt theo cỡ lệnh so với thanh khoản |
| Không bán khống | Chỉ mua rồi bán cổ phiếu đang có |
| Hủy niêm yết | Mã hủy niêm yết khi đang nắm giữ được bán hết ở phiên giao dịch cuối |
Vốn ban đầu mặc định 1 tỷ đồng. Vốn, phí, thuế, trượt giá, lãi suất phi rủi ro và cách khớp đổi được trong Cài đặt; code của chiến lược có thể đặt giá trị riêng. Toàn bộ quy tắc và thống kê khớp lệnh của từng lần chạy: Dữ liệu và mô phỏng khớp lệnh.
Một chiến lược xoay vòng 10 mã hằng tháng có thể thay gần hết danh mục vài lần mỗi năm. Với phí 0,15 % mỗi chiều cộng thuế bán 0,1 % và trượt giá, mỗi vòng mua bán tốn khoảng 0,6 % giá trị, chưa kể phần trượt theo cỡ lệnh — 5 vòng một năm là khoảng 3 %/năm. Báo cáo ghi rõ tổng Phí + thuế và Vòng quay để bạn thấy phần lợi nhuận bị chi phí ăn mất.
Hai kiểu chiến lược và tái cân bằng
| Kiểu | Cách hoạt động | Ví dụ mẫu |
|---|---|---|
| Theo tín hiệu | Mỗi mã vào khi có tín hiệu mua, ra khi có tín hiệu bán hoặc chạm quy tắc rủi ro (cắt lỗ, chốt lời, trailing stop, giữ tối đa n phiên). Nắm tối đa một số mã (mặc định 5), mỗi mã một phần vốn bằng nhau; nhiều tín hiệu hơn chỗ trống thì ưu tiên mã có điểm cao hơn | RSI hồi phục trong xu hướng tăng |
| Theo xếp hạng / tỷ trọng | Định kỳ (tuần, tháng, quý, năm hoặc mỗi n phiên) xếp hạng cả rổ, chọn n mã đứng đầu, chia tỷ trọng (đều, theo điểm hoặc nghịch đảo biến động) rồi mua bán để danh mục khớp tỷ trọng mới — gọi là tái cân bằng | Momentum 6-1 xoay vòng hàng tháng |
Kiểu thứ hai có thể giữ một phần tiền mặt: Momentum 6-1 đặt mỗi mã tối đa 1/10 vốn, ít mã đủ điều kiện thì phần còn lại để tiền mặt; khi bật Chỉ mua khi VNINDEX > MA200, chiến lược đứng ngoài hoàn toàn lúc thị trường dưới đường trung bình 200 phiên.
Chỉ số chuẩn
Mỗi chiến lược so với một chỉ số chuẩn (benchmark), mặc định VNINDEX, quy về cùng vốn ban đầu để so trực tiếp trên biểu đồ đường vốn. Các chỉ số Beta, Alpha trong báo cáo đo theo chỉ số chuẩn này.
Backtest dùng giá điều chỉnh — đã tính cổ tức tiền, cổ tức cổ phiếu, phát hành thêm — nên lợi nhuận của chiến lược đã gồm cổ tức. VNINDEX là chỉ số giá, không cộng cổ tức. Vì vậy chiến lược "chỉ cần mua và giữ cả rổ" cũng nhỉnh hơn VNINDEX một khoản gần bằng tỷ suất cổ tức của thị trường. Một chiến lược chỉ thắng VNINDEX 1–2 %/năm chưa chắc đã tốt hơn mua và giữ.
Lãi suất phi rủi ro
Sharpe và Sortino đo phần lợi nhuận vượt lãi suất phi rủi ro trên mỗi đơn vị rủi ro. Mặc định Studio đặt lãi suất phi rủi ro bằng 0 %; muốn so với tiền gửi ngân hàng, đặt mức lãi suất (ví dụ 5 %/năm) trong Cài đặt — Sharpe sẽ thấp đi tương ứng.
Quá khớp
Quá khớp (overfitting) là khi chiến lược — hoặc bộ tham số — được chỉnh cho vừa khít dữ liệu đã thấy, nên đẹp trên quá khứ nhưng thất bại khi thị trường đổi khác. Nó thường xảy ra khi bạn thử rất nhiều biến thể rồi giữ biến thể tốt nhất: thử đủ nhiều thì kiểu gì cũng có một biến thể đẹp nhờ may mắn.
Dấu hiệu thường gặp: ít lệnh, kết quả rất nhạy với một tham số (lệch một chút là hỏng), chỉ một hai năm gánh cả kỳ, quy tắc nhiều điều kiện "đặc thù". Studio giúp phát hiện bằng số lần thử trong hội thoại, Deflated Sharpe, độ ổn định vùng tối ưu, kiểm tra ngoài mẫu, walk-forward và Monte Carlo — xem Tối ưu và kiểm định độ vững.
Dữ liệu đã chốt và giá tạm
Nến ngày của một phiên được coi là đã chốt sau 15:05; khối ngoại, tự doanh, số lệnh có sau 19:00. Trong giờ giao dịch, bộ lọc, phân tích và phép tính nhanh của trợ lý dùng thêm giá tạm của phiên đang diễn ra; backtest chỉ dùng dữ liệu đã chốt, nên chạy lại trong ngày vẫn ra cùng kết quả. Trạng thái này hiện ở đầu Studio.
Vùng chạy cách ly
Code — dù là mẫu, do trợ lý hay bạn viết — chạy trong một vùng cách ly của trình duyệt: không truy cập mạng, không đọc được cookie, bộ nhớ hay nội dung của trang. Mỗi lần chạy dùng một tiến trình riêng và bị dừng nếu quá thời gian (2 phút cho một lần chạy chiến lược, bộ lọc hay phân tích, 5 phút cho một lượt tối ưu hay kiểm định, 1 phút cho phép tính nhanh của trợ lý), nên một vòng lặp vô tận cũng không làm treo FireAnt Terminal.
This page explains the concepts you meet on every screen of Quant AI Studio: what a backtest is, the three kinds of results, ticker baskets, why results cannot "look ahead" into the future, and how Studio simulates the Vietnamese exchanges. Read it once before reading a backtest report. Technical details on data sources, adjusted prices and order-fill rules are in Data and order-fill simulation.
What is a backtest
A backtest is a trial run of a buy–sell rule on historical data, as if you had actually traded by exactly that rule session after session: at the end of each session the signal is computed, the next session the order is placed, fees and taxes are paid, you wait for the shares to arrive in your account, and cash and holdings are recorded. The result is the equity curve (account value over time) and metrics for profit, loss and risk.
For example, with the Momentum 6-1 xoay vòng hàng tháng (Momentum 6-1 monthly rotation) template (in the template library: Mua 10 mã tăng mạnh nhất 6 tháng, đổi mỗi tháng — Buy the 10 strongest 6-month gainers, rotate monthly): at the start of each month, Studio ranks HOSE stocks with liquidity of at least VND 10 bn per session by their 6-month gain (skipping the most recent month), buys the 10 strongest in equal amounts, and sells the ones that drop out of the group — repeating this from Jan 2016 to today.
A backtest answers "what would have happened if I had done this", not "what will happen next". It is most useful for ruling out baseless ideas before you commit money: a rule that loses even to the index over 10 years, with costs properly included, is rarely worth trying with real money. Conversely, a good-looking result still needs to pass robustness validation, because it may just be luck or overfitting.
Three kinds of results: strategy, screener, analysis
Everything Studio creates — from a template, written by the Quant assistant or written by you — is an item, listed in the Của tôi (Mine) tab of the sidebar, and belongs to one of three types:
| Type | Answers the question | Data used | Result | Example templates |
|---|---|---|---|---|
| Strategy | "If I traded by this rule for many years, what would the profit, loss and risk be?" | Closed history, by default the last 10 years | The Báo cáo (Report), Giao dịch (Trades), Danh mục (Portfolio), Độ vững (Robustness) and Mã (Code) tabs | Momentum 6-1 monthly rotation; RSI recovery in an uptrend |
| Screener | "Which tickers meet the conditions today?" | About the last year, including provisional prices of the session in progress | The Kết quả (Results — table of tickers) and Mã (Code) tabs | Leading price strength (RS); Tight base near the 52-week high |
| Analysis | "In the past, how did phenomenon X play out?" | Depends on the analysis | The Kết quả (Results — figures, charts, tables, commentary) and Mã (Code) tabs | Monthly seasonality; Stock profile |
Studio's screeners differ from the real-time screener: the real-time screener uses predefined conditions and updates continuously with prices; Studio's screener is a free-form formula (multi-period conditions, combinations of financial statements, foreign-investor data, rankings…), recalculated each time you run it.
Each item contains:
- Code written with the Studio SDK — you do not need to read the code to use templates or ask the assistant.
- Versions — v1, v2, v3… Each time the assistant edits it, you save edited code, restore an older version or apply the assistant's suggestion, the item gains a version, recording its creator (Mẫu — Template, AI, Bạn — You). See Your items, versions and sharing.
- Parameters — the thresholds the code declares (number of holdings, RSI period, stop-loss level…) appear as sliders, switches, dropdowns or ticker input boxes right on the results. Changing parameters only reruns the item; it does not create a new version. See Run templates and change parameters.
- Latest run results — reopen the item and you see the previous results right away, without rerunning.
Templates are the 99 prebuilt strategies, screeners and analyses in the Thư viện mẫu (Template library), tested to run correctly on real data: 31 analyses, 33 strategies, 35 screeners. Each template comes with verified results — the results of one run on real data with default parameters — so you can preview it before running, and templates are ranked by Recommendation Score (effectiveness, clarity, appeal). 14 templates whose names are jargon also show a name that says plainly what the template does (see Plain-language template names). Using a template creates a new item of your own from it. See Template library and The 99 templates.
A conversation is a series of exchanges with the Quant assistant in the Copilot pane. One conversation can create and edit several items; each strategy run in a conversation counts as one attempt — the number used to compute the Deflated Sharpe.
Ticker baskets
Strategies, screeners and analyses run on a ticker basket. The basket is declared by the item's code; templates that let you change the basket have a Nhóm (Group) parameter or a Mã (Ticker) box right on the results; otherwise, ask the assistant to run on another basket.
| Basket | Contents |
|---|---|
| VN30, HNX30 | The index's current constituents |
| VN100, VNMidcap, VNSmallcap | The source's old lists, with many tickers delisted or moved to another exchange — do not use them to pick tickers (see Where the data is still thin) |
| Cổ phiếu HOSE (HOSE stocks), Cổ phiếu HNX (HNX stocks), Cổ phiếu UPCoM (UPCoM stocks) | Stocks on each exchange |
| Toàn bộ cổ phiếu (All stocks) | Stocks on all three exchanges |
| ETF, Chỉ số (Indices), Phái sinh (Derivatives) | ETFs; indices (including world indices); futures |
| Ticker list | For example FPT, HPG, MWG |
| Sector | By ICB sector, for example Banks |
| Watchlist | One of your watchlists, by name |
A basket usually comes with conditions, shown right in the basket label at the top of the results, for example Cổ phiếu HOSE · GTGD ≥ 10 tỷ · top 240 (HOSE stocks · trading value ≥ VND 10 bn · top 240):
- GTGD ≥ … (trading value ≥ …) — only considers tickers whose 20-session average trading value is at or above that level. In a backtest, this condition is checked at each past session: a ticker can only be bought in sessions when it is liquid enough.
- top n — keeps only the n most liquid tickers.
- Include or exclude specific tickers, a minimum price, sector filters.
Ticker limit per run by plan: Essential 250 tickers, Professional and Premium 2,000 tickers. If a shared basket (a basket name or sector) is larger than the limit, Studio automatically keeps the most liquid tickers and adds a note at the end of the results; a custom ticker list or watchlist over the limit causes an error. All templates run within the 250-ticker limit. See Plans, limits and FAQ.
Point-in-time baskets and survivorship bias
If you take today's list of stocks to backtest 10 years back, you unintentionally drop every ticker that has been delisted or moved to another exchange — usually poorly performing ones. The results therefore look better than reality. This is called survivorship bias.
Studio builds point-in-time baskets for backtests when the basket is Toàn bộ cổ phiếu (All stocks), Cổ phiếu HOSE (HOSE stocks) or a sector:
- The basket includes tickers delisted during the test period; the basket label adds theo thời điểm, n mã đã hủy niêm yết (point in time, n delisted tickers).
- Each ticker can only be bought during the time it actually belonged to the basket (for example while listed on HOSE).
- A ticker delisted while held is sold in full at its last trading session (exit reason Hủy niêm yết — Delisted).
- top n and liquidity are ranked by data within the period, not by today's liquidity.
- HOSE membership history is inferred from the tick size and is available from 12 Sep 2016; if the period starts earlier, the basket label in the report's last line reads theo thời điểm từ 09/2016 (point in time from 09/2016) (before that date, tickers that left HOSE are not included).
The other baskets — HNX, UPCoM, index-based baskets (VN30, HNX30, VN100…), ticker lists, watchlists — use the current list for the whole past. Reports of strategies run on VN30, HNX30, VN100, VNMidcap and VNSmallcap have their reliability lowered, with the reason Rổ mã lấy theo danh sách hiện tại cho cả quá khứ (thiên lệch sống sót) (The ticker basket uses the current list for the whole past (survivorship bias)); for HNX and UPCoM, the report adds a note in Ghi chú dữ liệu (Data notes). Treat long-term results on these baskets as more optimistic than reality.
Screeners and analyses always use the current ticker list (a screener only looks at today, so it has no such bias).
No looking into the future
The most common backtest mistake is accidentally using information that was not available at decision time — for example buying at today's close on a signal computed from that same close, or normalizing data with the average over all 10 years. Studio blocks this mistake in three ways:
-
Signal at the end of the session, fill in the next session. The signal is computed with data up to the end of session t; the order fills in session t+1 — by default at the open, or at the ATC price if you choose so in Settings.
Phiên t Phiên t+1 Phiên t+2 Phiên t+3đóng cửa: tín hiệu ──► khớp mua ở giá mở cửa ──► cổ phiếu chưa về (T+2) ──► bán được từ giá mở cửa(Session t close: signal ──► session t+1: buy filled at the open ──► session t+2: shares not yet arrived (T+2) ──► session t+3: can sell from the open.)
-
Rebalance on the first session of the period. A monthly rotation strategy changes its portfolio based on the signal of the first session of each month, not the last session of the month (to know that today is the last session of the month, you would need to know tomorrow's calendar).
-
Automatic check on every strategy run. Studio recomputes the signals on data truncated at two points (55 % and 80 % of the test period) and compares them with the version computed on the full data. If a day's signal changes when the later data is removed, the strategy is using future data: the report shows the red Phát hiện dùng dữ liệu tương lai (Future data use detected) panel and the reliability drops to low. Code that directly reads the next session's value is blocked as soon as it runs (error Dùng dữ liệu tương lai — Using future data).
Financial statement data is used by release date, not by period end date — the strategy does not "know" a quarter's earnings before the company publishes them. See Data and order-fill simulation.
Simulation like the Vietnamese exchanges
Studio fills orders according to Vietnamese stock trading rules, so results are close to what you would achieve trading for real:
| Rule | In the backtest |
|---|---|
| T+2 | Shares bought in session t arrive two sessions later: filled at the open, they can be sold at the earliest at the open of session t+3; filled at ATC, at the ATC of session t+2. A sell signal that arrives earlier has to wait |
| Ceiling / floor limits | HOSE ±7 %, HNX ±10 %, UPCoM ±15 %. A locked session (one price all session, closing at the limit): buys at the ceiling price do not fill, sells at the floor price do not fill — as when there are no sellers / buyers |
| 100-share lots | Volume is rounded down to lots of 100 shares |
| Liquidity | Each buy order is at most 10 % of the average trading volume of the previous 20 sessions (sell orders are not capped) |
| Fees, taxes, slippage | By default a 0.15 % fee each way, 0.1 % sell tax, 0.1 % slippage plus additional slippage based on order size relative to liquidity |
| No short selling | You can only buy and then sell shares you hold |
| Delisting | A ticker delisted while held is sold in full at its last trading session |
The default initial capital is VND 1 bn. Capital, fees, taxes, slippage, the risk-free rate and the fill method can be changed in Settings; a strategy's code can set its own values. All the rules and fill statistics for each run: Data and order-fill simulation.
A strategy rotating 10 tickers monthly may replace almost its entire portfolio several times a year. With a 0.15 % fee each way plus 0.1 % sell tax and slippage, each buy–sell round costs about 0.6 % of the value, not counting slippage from order size — 5 rounds a year is about 3 % a year. The report clearly shows total Phí + thuế (Fees + taxes) and Vòng quay (Turnover) so you can see how much return costs eat up.
Two strategy styles and rebalancing
| Style | How it works | Example template |
|---|---|---|
| Signal-based | Each ticker enters on a buy signal and exits on a sell signal or when it hits a risk rule (stop-loss, take-profit, trailing stop, maximum holding of n sessions). It holds at most a set number of tickers (default 5), each with an equal share of capital; when there are more signals than open slots, tickers with higher scores win | RSI recovery in an uptrend |
| Ranking / weight-based | Periodically (weekly, monthly, quarterly, yearly or every n sessions) it ranks the whole basket, picks the top n tickers, assigns weights (equal, by score or by inverse volatility) and then buys and sells so the portfolio matches the new weights — this is called rebalancing | Momentum 6-1 monthly rotation |
The second style can hold some cash: Momentum 6-1 caps each ticker at 1/10 of capital, so when few tickers qualify the rest stays in cash; when Chỉ mua khi VNINDEX > MA200 (Only buy when VNINDEX > MA200) is on, the strategy stays completely out of the market while it is below its 200-session moving average.
Benchmark
Each strategy is compared with a benchmark, by default VNINDEX, scaled to the same initial capital so you can compare directly on the equity curve chart. The Beta and Alpha metrics in the report are measured against this benchmark.
Backtests use adjusted prices — accounting for cash dividends, stock dividends and share issues — so the strategy's return already includes dividends. VNINDEX is a price index and does not add dividends. As a result, even a "just buy and hold the whole basket" strategy edges out VNINDEX by roughly the market's dividend yield. A strategy that beats VNINDEX by only 1–2 % a year is not necessarily better than buy and hold.
Risk-free rate
Sharpe and Sortino measure the return above the risk-free rate per unit of risk. By default Studio sets the risk-free rate to 0 %; to compare with bank deposits, set the rate (for example 5 % a year) in Settings — Sharpe will drop accordingly.
Overfitting
Overfitting is when a strategy — or a set of parameters — is tuned to fit the data already seen so tightly that it looks great on the past but fails when the market changes. It usually happens when you try many variants and keep the best one: try enough and one variant will look good by luck.
Common signs: few trades, results very sensitive to one parameter (a small change breaks it), one or two years carrying the whole period, rules with many "special-case" conditions. Studio helps you spot it with the number of attempts in the conversation, Deflated Sharpe, optimal-region stability, out-of-sample tests, walk-forward and Monte Carlo — see Optimization and robustness validation.
Closed data and provisional prices
A session's daily candle is treated as closed after 15:05; foreign-investor, proprietary-trading and order-count data are available after 19:00. During trading hours, screeners, analyses and the assistant's quick calculations also use the provisional price of the session in progress; backtests only use closed data, so rerunning during the day gives the same result. This status is shown in the Studio header.
Isolated sandbox
Code — whether a template, written by the assistant or by you — runs in an isolated sandbox in the browser: it has no network access and cannot read cookies, storage or page content. Each run uses its own process and is stopped if it takes too long (2 minutes for a strategy, screener or analysis run, 5 minutes for an optimization or validation run, 1 minute for the assistant's quick calculations), so even an infinite loop cannot freeze FireAnt Terminal.
이 페이지는 Quant AI Studio의 모든 화면에서 만나는 개념을 설명합니다. 백테스트란 무엇인지, 세 가지 결과 유형, 종목 바스켓, 결과가 미래를 "미리 볼" 수 없는 이유, Studio가 베트남 거래소를 어떻게 시뮬레이션하는지 다룹니다. 백테스트 보고서를 읽기 전에 한 번 읽어 보세요. 데이터 소스, 수정 주가, 체결 규칙에 대한 기술적 상세는 데이터와 주문 체결 시뮬레이션에 있습니다.
백테스트란
백테스트는 매매 규칙을 과거 데이터로 시험 실행하는 것입니다. 마치 그 규칙에 따라 매 세션 실제로 거래한 것처럼, 각 세션 마감 시 신호를 계산하고, 다음 세션에 주문하고, 수수료와 세금을 내고, 주식이 계좌에 입고되기를 기다리고, 현금과 포트폴리오를 기록합니다. 결과는 자산 곡선(시간에 따른 계좌 가치)과 손익, 위험 지표입니다.
Momentum 6-1 xoay vòng hàng tháng(Momentum 6-1 월간 로테이션) 템플릿(템플릿 라이브러리에서는 Mua 10 mã tăng mạnh nhất 6 tháng, đổi mỗi tháng(6개월 상승률 상위 10종목 매수, 매월 교체))을 예로 들면, 매월 초 Studio는 세션당 유동성 100억 동 이상인 HOSE 주식을 6개월 상승률(최근 1개월 제외)로 순위를 매기고, 가장 강한 10종목을 균등하게 매수하며, 그룹에서 탈락한 종목을 매도합니다. 이를 2016년 1월부터 지금까지 반복합니다.
백테스트는 "그렇게 했다면 결과가 어땠을까"에 답할 뿐, "앞으로 어떻게 될까"에 답하지 않습니다. 돈을 넣기 전에 근거 없는 아이디어를 걸러 내는 데 가장 유용합니다. 비용을 정확히 반영하고도 10년 동안 지수에 진 규칙은 실제 돈으로 시도할 가치가 거의 없습니다. 반대로 결과가 좋아도 운이나 과최적화일 수 있으므로 견고성 검증을 거쳐야 합니다.
세 가지 결과 유형: 전략, 스크리너, 분석
Studio가 만드는 모든 것(템플릿에서, Quant 어시스턴트가 작성, 또는 직접 작성)은 하나의 항목이며, 사이드바의 Của tôi(내 항목) 탭에 있고 세 유형 중 하나에 속합니다.
| 유형 | 답하는 질문 | 사용 데이터 | 결과 | 템플릿 예시 |
|---|---|---|---|---|
| 전략 | "이 규칙으로 여러 해 거래하면 손익, 위험은?" | 확정된 이력, 기본 최근 10년 | Báo cáo(보고서), Giao dịch(거래), Danh mục(포트폴리오), Độ vững(견고성), Mã(코드) 탭 | Momentum 6-1 월간 로테이션; 상승 추세 속 RSI 반등 |
| 스크리너 | "오늘 조건을 충족하는 종목은?" | 최근 약 1년, 거래 중인 세션의 잠정 가격 포함 | Kết quả(결과: 종목 표), Mã 탭 | 가격 강도 선두(RS); 52주 고점 근처의 좁은 가격 베이스 |
| 분석 | "과거에 현상 X는 어떻게 나타났나?" | 분석에 따라 다름 | Kết quả(결과: 수치, 차트, 표, 해설), Mã 탭 | 월별 계절성; 주식 프로필 |
Studio의 스크리너는 실시간 스크리너와 다릅니다. 실시간 스크리너는 미리 준비된 조건을 고르고 가격에 따라 계속 업데이트됩니다. Studio의 스크리너는 자유로운 공식(여러 기간 조건, BCTC, 외국인, 순위 결합…)이며 실행할 때마다 다시 계산합니다.
각 항목에는 다음이 있습니다.
- 코드 — Studio SDK로 작성됩니다. 템플릿을 쓰거나 어시스턴트에게 맡길 때는 코드를 읽을 필요가 없습니다.
- 버전 — v1, v2, v3… 어시스턴트가 수정하거나, 수정한 코드를 저장하거나, 이전 버전을 복원하거나, 어시스턴트의 제안을 적용할 때마다 버전이 하나 늘며, 작성자(Mẫu(템플릿), AI, Bạn(나))가 기록됩니다. 내 항목, 버전과 공유를 참조하세요.
- 매개변수 — 코드가 선언한 임계값(보유 종목 수, RSI 주기, 손절 수준…)이 결과 바로 위에 슬라이더, 스위치, 선택 상자, 종목 입력란으로 표시됩니다. 매개변수를 바꾸면 다시 실행만 하고 새 버전은 만들지 않습니다. 템플릿 실행과 매개변수 변경을 참조하세요.
- 최근 실행 결과 — 항목을 다시 열면 다시 실행하지 않아도 지난 결과가 바로 보입니다.
템플릿은 Thư viện mẫu(템플릿 라이브러리)에 미리 만들어진 99개의 전략, 스크리너, 분석으로, 실제 데이터에서 올바르게 실행되는지 확인되었습니다: 분석 31개, 전략 33개, 스크리너 35개. 각 템플릿에는 실행 전에 볼 수 있도록 검증 결과(기본 매개변수로 실제 데이터에서 한 번 실행한 결과)가 함께 있으며, 추천 점수(효과, 이해 용이성, 매력도)순으로 정렬됩니다. 이름이 전문 용어인 14개 템플릿에는 템플릿이 하는 일을 직접 설명하는 이름이 추가로 표시됩니다(템플릿의 쉬운 이름 참조). 템플릿을 사용하면 그 템플릿에서 새 항목이 만들어집니다. 템플릿 라이브러리와 99개 템플릿 목록을 참조하세요.
대화는 Copilot 영역에서 Quant 어시스턴트와 주고받은 일련의 교환입니다. 하나의 대화에서 여러 항목을 만들고 수정할 수 있으며, 대화 중 전략을 실행할 때마다 시도 한 번으로 집계됩니다. 이 숫자는 Deflated Sharpe 계산에 사용됩니다.
종목 바스켓
전략, 스크리너, 분석은 종목 바스켓에서 실행됩니다. 바스켓은 항목의 코드가 선언합니다. 바스켓을 바꿀 수 있는 템플릿은 결과 바로 위에 Nhóm(그룹) 매개변수나 Mã(종목) 입력란이 있으며, 그 외에는 어시스턴트에게 다른 바스켓으로 실행해 달라고 요청하세요.
| 바스켓 | 구성 |
|---|---|
| VN30, HNX30 | 지수의 현재 구성 종목 |
| VN100, VNMidcap, VNSmallcap | 소스의 오래된 목록으로, 많은 종목이 상장폐지되었거나 거래소를 옮김 — 종목 선정에 사용하지 않는 것이 좋음(데이터가 아직 부족한 부분 참조) |
| Cổ phiếu HOSE(HOSE 주식), Cổ phiếu HNX(HNX 주식), Cổ phiếu UPCoM(UPCoM 주식) | 각 거래소의 주 식 |
| Toàn bộ cổ phiếu(전체 주식) | 세 거래소 전체의 주식 |
| ETF, Chỉ số(지수), Phái sinh(파생상품) | ETF 펀드; 지수(세계 지수 포함); 선물 |
| 종목 목록 | 예: FPT, HPG, MWG |
| 업종 | ICB 업종 기준, 예: 은행 |
| 관심종목 | 사용자의 관심종목, 이름으로 지정 |
바스켓에는 보통 조건이 붙으며, 결과 상단의 바스켓 라벨에 바로 적힙니다. 예: Cổ phiếu HOSE · GTGD ≥ 10 tỷ · top 240(HOSE 주식 · GTGD ≥ 100억 동 · 상위 240):
- GTGD ≥ … — 20세션 평균 거래대금이 그 수준 이상인 종목만 봅니다. 백테스트에서는 이 조건을 과거의 각 세션에서 판단합니다. 종목은 유동성이 충분한 세션에만 매수될 수 있습니다.
- top n — 유동성 상위 n종목만 남깁니다.
- 특정 종목 추가 또는 제외, 최저 가격, 업종 필터.
플랜별 실행당 종목 수 제한: Essential 250종목, Professional과 Premium 2,000종목. 공통 바스켓(바스켓 이름 또는 업종)이 제한보다 크면 Studio가 유동성 상위 종목을 자동으로 남기고 결과 끝에 메모를 남깁니다. 직접 고른 종목 목록이나 관심종목이 제한을 넘으면 오류가 표시됩니다. 템플릿은 모두 250종목 제한 안에서 실행됩니다. 플랜, 제한과 FAQ를 참조하세요.
시점 기준 바스켓과 생존 편향
오늘의 주식 목록으로 10년 전부터 백테스트하면, 상장폐지되었거나 거래소를 옮긴 종목(보통 실적이 나쁜 종목)을 모두 무심코 빠뜨리게 됩니다. 그래서 결과가 실제보다 좋아 보입니다. 이 현상을 생존 편향(survivorship bias)이라고 합니다.
바스켓이 Toàn bộ cổ phiếu(전체 주식), Cổ phiếu HOSE(HOSE 주식) 또는 업종일 때 Studio는 백테스트용 시점 기준 바스켓을 만듭니다.
- 바스켓에는 검증 기간 중 상장폐지된 종목도 포함되며, 바스켓 라벨에 theo thời điểm, n mã đã hủy niêm yết(시점 기준, 상장폐지 n종목)이 추가됩니다.
- 각 종목은 실제로 바스켓에 속했던 기간(예: HOSE에 상장 중)에만 매수될 수 있습니다.
- 보유 중에 상장폐지된 종목은 마지막 거래 세션에 전량 매도됩니다(매도 사유 Hủy niêm yết(상장폐지)).
- top n과 유동성은 오늘의 유동성이 아니라 기간 중 데이터로 순위를 매깁니다.
- HOSE 소속 이력은 호가 단위로 추정하며 2016년 9월 12일부터 있습니다. 기간이 그보다 일찍 시작하면 보고서 마지막 줄의 바스켓 라벨에 theo thời điểm từ 09/2016(2016년 9월부터 시점 기준)이 표시됩니다(그 이전에는 HOSE를 떠난 종목이 없음).
나머지 바스켓 — HNX, UPCoM, 지수 바스켓(VN30, HNX30, VN100…), 종목 목록, 관심종목 — 은 과거 전체에 현재 목록을 사용합니다. VN30, HNX30, VN100, VNMidcap, VNSmallcap으로 실행한 전략의 보고서는 "과거 전체에 현재 목록으로 종목 바스켓을 구성(생존 편향)"이라는 이유와 함께 신뢰도가 낮아집니다. HNX, UPCoM은 보고서의 Ghi chú dữ liệu(데이터 메모)에 메모가 붙습니다. 이 바스켓들의 장기 결과는 실제보다 낙관적이라고 보세요.
스크리너와 분석은 항상 현재 종목 목록을 사용합니다(스크리너는 오늘만 보므로 이 편향이 없음).
미래를 미리 보지 않기
백테스트의 가장 흔한 오류는 의사 결정 시점에 아직 없던 정보를 무심코 쓰는 것입니다. 예를 들어 오늘 종가로 계산한 신호에 따라 바로 그 종가에 매수하거나, 10년 전체의 평균으로 데이터를 정규화하는 경우입니다. Studio는 세 가지 방법으로 이 오류를 막습니다.
-
세션 마감 신호, 다음 세션 체결. 신호는 세션 t 종료까지의 데이터로 계산하고, 주문은 세션 t+1에 체결됩니다 — 기본은 시가, 설정에서 선택하면 ATC 가격.
Phiên t Phiên t+1 Phiên t+2 Phiên t+3đóng cửa: tín hiệu ──► khớp mua ở giá mở cửa ──► cổ phiếu chưa về (T+2) ──► bán được từ giá mở cửa(세션 t 마감: 신호 → 세션 t+1 시가에 매수 체결 → 세션 t+2 주식 미입고(T+2) → 세션 t+3 시가부터 매도 가능)
-
기간 첫 세션에 리밸런싱. 월간 로테이션 전략은 월말 세션이 아니라 매월 첫 세션의 신호로 포트폴리오를 바꿉니다(오늘이 월말 세션인지 알려면 내일의 일정을 알아야 하기 때문).
-
전략을 실행할 때마다 자동 검사. Studio는 두 시점(검증 기간의 55%와 80%)에서 잘라 낸 데이터로 신호를 다시 계산해 전체 데이터로 계산한 결과와 비교합니다. 뒷부분 데이터를 제거했을 때 어떤 날의 신호가 바뀐다면 전략이 미래 데이터를 쓰고 있다는 뜻입니다. 보고서에 빨간 영역 Phát hiện dùng dữ liệu tương lai(미래 데이터 사용 감지)가 표시되고 신뢰도가 낮음으로 내려갑니다. 다음 세션의 값을 직접 읽는 코드는 실행 즉시 차단됩니다(Dùng dữ liệu tương lai(미래 데이터 사용) 오류).
재무제표 데이터는 기간 종료일이 아니라 공시일 기준으로 사용합니다. 전략은 기업이 공시하기 전에 분기 이익을 "알지" 못합니다. 데이터와 주문 체결 시뮬레이션을 참조하세요.
베트남 거래소와 같은 시뮬레이션
Studio는 베트남 주식 거래 규정에 따라 주문을 체결하므로, 결과가 실제 거래에서 얻을 수 있는 것에 가깝습니다.
| 규칙 | 백테스트에서 |
|---|---|
| T+2 | 세션 t에 매수한 주식은 두 세션 뒤에 입고됩니다. 시가에 체결했다면 빨라야 세션 t+3 시가에 매도할 수 있고, ATC에 체결했다면 세션 t+2의 ATC입니다. 더 일찍 온 매도 신호는 기다려야 합니다 |
| 상한가 / 하한가 제한폭 | HOSE ±7%, HNX ±10%, UPCoM ±15%. 일방 잔량 세션(하루 종일 단일 가격이고 제한폭에서 마감): 상한가 매수는 체결되지 않고 하한가 매도도 체결되지 않습니다 — 매도자 / 매수자가 없을 때와 같습니다 |
| 100주 단위 | 수량은 100주 단위로 내림 |
| 유동성 | 각 매수 주문은 직전 20세션 평균 거래량의 10%를 넘지 않음(매도 주문은 제한 없음) |
| 수수료, 세금, 슬리피지 | 기본 편도 수수료 0.15%, 매도세 0.1%, 슬리피지 0.1%에 유동성 대비 주문 크기에 따른 슬리피지 추가 |
| 공매도 불가 | 보유 중인 주식만 매수 후 매도 |
| 상장폐지 | 보유 중 상장폐지된 종목은 마지막 거래 세션에 전량 매도 |
기본 초기 자본은 10억 동입니다. 자본, 수수료, 세금, 슬리피지, 무위험 이자율, 체결 방식은 설정에서 바꿀 수 있으며, 전략 코드에서 별도 값을 지정할 수 있습니다. 전체 규칙과 실행별 체결 통계: 데이터와 주문 체결 시뮬레이션.
10종목을 매월 로테이션하는 전략은 1년에 여러 번 포트폴리오를 거의 전부 바꿀 수 있습니다. 편도 수수료 0.15%에 매도세 0.1%와 슬리피지를 더하면, 주문 크기에 따른 슬리피지를 빼고도 매수 – 매도 한 번에 가치의 약 0.6%가 듭니다. 1년에 5번이면 연 약 3%입니다. 보고서는 비용이 수익을 얼마나 깎았는지 보여 주도록 Phí + thuế(수수료 + 세금) 합계와 Vòng quay(회전율)를 명시합니다.
두 가지 전략 방식과 리밸런싱
| 방식 | 작동 방식 | 템플릿 예시 |
|---|---|---|
| 신호 기반 | 각 종목은 매수 신호가 있으면 진입하고, 매도 신호가 있거나 리스크 규칙(손절, 익절, 트레일링 스톱, 최대 n세션 보유)에 닿으면 청산합니다. 최대 종목 수(기본 5)까지 보유하며 종목마다 같은 비율의 자본을 씁니다. 빈 자리보다 신호가 많으면 점수가 높은 종목을 우선합니다 | 상승 추세 속 RSI 반등 |
| 순위 / 비중 기반 | 정기적으로(주, 월, 분기, 연 또는 n세션마다) 바스켓 전체에 순위를 매겨 상위 n종목을 고르고, 비중을 나눈 뒤(균등, 점수 기준 또는 변동성 역수) 포트폴리오가 새 비중에 맞도록 매매합니다 — 이를 리밸런싱이라고 합니다 | Momentum 6-1 월간 로테이션 |
두 번째 방식은 현금을 일부 보유할 수 있습니다. Momentum 6-1은 종목당 최대 자본의 1/10을 배정하며, 조건을 충족하는 종목이 적으면 나머지는 현금으로 둡니다. Chỉ mua khi VNINDEX > MA200(VNINDEX > MA200일 때만 매수)을 켜면 시장이 200세션 이동평균 아래일 때 전략은 완전히 시장 밖에 있습니다.
벤치마크 지수
각 전략은 벤치마크 지수(benchmark, 기본 VNINDEX)와 비교되며, 자산 곡선 차트에서 직접 비교할 수 있도록 같은 초기 자본으로 환산됩니다. 보고서의 Beta, Alpha 지표는 이 벤치마크를 기준으로 측정합니다.
백테스트는 현금 배당, 주식 배당, 유상증자를 반영한 수정 주가를 쓰므로 전략 수익에는 배당이 포함됩니다. VNINDEX는 가격 지수이며 배당을 더하지 않습니다. 그래서 "바스켓 전체를 사서 보유하기만 하는" 전략도 시장 배당수익률에 가까운 만큼 VNINDEX보다 약간 높습니다. VNINDEX를 연 1–2%만 이기는 전략은 매수 후 보유보다 낫다고 단정할 수 없습니다.
무위험 이자율
Sharpe와 Sortino는 위험 단위당 무위험 이자율을 초과하는 수익을 측정합니다. Studio는 무위험 이자율을 기본 0%로 설정합니다. 은행 예금과 비교하려면 설정에서 이자율(예: 연 5%)을 지정하세요. 그만큼 Sharpe가 낮아집니다.
과최적화
과최적화(overfitting)는 전략이나 매개변수 조합이 이미 본 데이터에 꼭 맞게 조정되어, 과거에는 좋아 보이지만 시장이 달라지면 실패하는 경우입니다. 보통 아주 많은 변형을 시도한 뒤 가장 좋은 변형을 남길 때 생깁니다. 충분히 많이 시도하면 운으로 좋아 보이는 변형이 반드시 하나쯤 나옵니다.
흔한 징후: 주문 수가 적음, 결과가 한 매개변수에 매우 민감함(조금만 바꿔도 무너짐), 한두 해가 전체 기간을 떠받침, 조건이 많은 "특수한" 규칙. Studio는 대화 중 시도 횟수, Deflated Sharpe, 최적 영역 안정성, 표본 외 검사, walk-forward, Monte Carlo로 이를 찾도록 돕습니다 — 최적화와 견고성 검증을 참조하세요.
확정 데이터와 잠정 가격
세션의 일봉은 15:05 이후 확정된 것으로 봅니다. 외국인, 자기매매, 주문 건수는 19:00 이후에 제공됩니다. 거래 시간 중에는 스크리너, 분석, 어시스턴트의 빠른 계산이 진행 중인 세션의 잠정 가격을 추가로 사용합니다. 백테스트는 확정된 데이터만 쓰므로 같은 날 다시 실행해도 같은 결과가 나옵니다. 이 상태는 Studio 상단에 표시됩니다.
격리 실행 영역
코드는 템플릿이든, 어시스턴트가 작성했든, 직접 작성했든 브라우저의 격리 영역에서 실행됩니다. 네트워크에 접근하지 못하며 페이지의 쿠키, 메모리, 내용을 읽을 수 없습니다. 각 실행은 별도 프로세스를 쓰며 시간을 초과하면 중지됩니다(전략, 스크리너, 분석 실행 1회 2분, 최적화나 검증 1회 5분, 어시스턴트의 빠른 계산 1분). 그래서 무한 루프가 생겨도 FireAnt Terminal이 멈추지 않습니다.
本页解释您在 Quant AI Studio 各个界面都会遇到的概念:什么是回测、三类结果、股票池、为什么结果不会“预知”未来、Studio 如何模拟越南交易所。阅读回测报告之前请先读一遍。有关数据来源、复权价格和成交规则的技术细节,见数据与成交模拟。
什么是回测
回测(backtest)是在历史数据上试运行一条买卖规则,就好像您每个交易时段都严格按这条规则真实交易一样:每个交易时段收盘时计算信号,下一个交易时段下单,支付费用和税,等待股票到账,记录资金和持仓。结果是资金曲线(账户价值随时间的变化)以及盈亏、风险指标。
以 Momentum 6-1 每月轮动模板为例(在模板库中名为 Mua 10 mã tăng mạnh nhất 6 tháng, đổi mỗi tháng(买入 6 个月涨幅最大的 10 只股票,每月调仓)):每月初,Studio 将每个交易时段成交额不低于 100 亿越南盾的 HOSE 股票按 6 个月涨幅(剔除最近一个月)排名,等权买入最强的 10 只,卖出跌出该组的股票——从 2016 年 1 月一直重复到现在。
回测回答的是“如果当时这么做,结果会怎样”,而不是“接下来会怎样”。它最有用的地方是在您投入资金前淘汰没有依据的想法:一条在 10 年里连指数都跑不赢的规则,即使已经正确计入成本,也很少值得用真钱尝试。反过来,漂亮的结果仍需通过稳健性检验,因为它可能只是运气或过拟合。
三类结果:策略、选股器、分析
Studio 生成的一切——无论来自模板、由 Quant 助手编写还是您自己编写——都是一个条目,位于侧边栏的 Của tôi(我的)标签页中,属于以下三类之一:
| 类型 | 回答的问题 | 使用的数据 | 结果 | 示例模板 |
|---|---|---|---|---|
| Chiến lược(策略) | “如果多年来按这条规则交易,盈亏和风险如何?” | 已收盘确认的历史数据,默认最近 10 年 | Báo cáo(报告)、Giao dịch(交易)、Danh mục(持仓)、Độ vững(稳健性)、Mã(代码)标签页 | Momentum 6-1 每月轮动;上升趋势中的 RSI 反弹 |
| Bộ lọc(选股器) | “今天哪些股票满足条件?” | 最近约一年,包括当前交易时段的临时价格 | Kết quả(结果)标签页(股票表)、Mã | 价格强度领先(RS);接近 52 周高点的紧密价格平台 |
| Phân tích(分析) | “过去现象 X 是如何发生的?” | 视分析而定 | Kết quả 标签页(数据、图表、表格、点评)、Mã | 按月季节性;个股档案 |
Studio 的选股器与实时选股器不同:实时选股器选择现成条件并随价格持续更新;Studio 的选股器是自由公式(多周期条件、结合BCTC、外资、排名……),每次运行时重新计算。
每个条目包括:
- 用 Studio SDK 编写的代码——使用模板或请助手帮忙时,您无需阅读代码。
- 版本——v1、v2、v3……每当助手修改、您保存修改后的代码、恢复旧版本或采纳助手的建议时,条目就会新增一个版本,并记录创建者(Mẫu(模板)、AI、Bạn(您))。见您的条目、版本与分享。
- 参数——代码中声明的阈值(持股数量、RSI 周期、止损水平……)会在结果上方显示为滑块、开关、下拉框或股票代码输入框。修改参数只会重新运行,不会生成新版本。见