Phân tích kỹ thuật & backtest chiến lược chứng khoán bằng AI
Hướng dẫn dùng AI đọc 141 chỉ báo kỹ thuật, quét tín hiệu trên 1.700 mã, nhận diện 61 mẫu nến và backtest chiến lược với mô phỏng T+2.5 Việt Nam.
⏱ Đọc 14 phút · 🔴 Nâng cao · 🔧 Yêu cầu: FinLens Premium
Đọc giá trị chỉ báo thực — đừng để AI đoán
Thay vì để AI ước tính RSI hay MACD từ kiến thức chung, dùng signals_indicator_values để lấy giá trị tính toán thực tế trên giá điều chỉnh với đủ warmup period:
Cho tôi giá trị RSI(14), MACD(12,26,9) và MFI(14) của HPG hiện tại — và 10 phiên gần nhất để thấy xu hướng
→ signals_indicator_values, N=10 — giá trị thực tính trên adjusted close, đủ warmup
OBV của FPT đang tăng hay giảm trong 20 phiên qua? Có xác nhận xu hướng giá không?
→ indicator_values OBV + so sánh với price action
Quét tín hiệu trên toàn thị trường
Công cụ signals_screen quét toàn bộ 1.700 mã theo rule bạn định nghĩa — có thể kết hợp điều kiện kỹ thuật với bộ lọc cơ bản:
Tìm tất cả cổ phiếu HOSE có RSI < 30 trong 3 phiên gần nhất và giá cắt lên MA20 — danh sách mã và chỉ báo kèm theo
→ screen: exchange=HOSE, rules=[RSI<30, price_cross_up_MA20], days=3
Quét mã có RSI vượt 50 từ bên dưới trong 5 phiên qua, lọc thêm ROE > 15% và P/E < 20 và thanh khoản > 10 tỷ/ngày — mã nào phù hợp nhất?
→ screen kỹ thuật + bộ lọc cơ bản đồng thời — tín hiệu kỹ thuật trên nền tảng tốt
Trong ngành ngân hàng, mã nào đang có MACD golden cross trong 5 phiên gần nhất và volume tăng bất thường?
→ screen lọc sector + MACD cross + volume spike
Lọc thêm theo Sức mạnh tương đối (RS)
signals_screen có 4 bộ lọc RS: min_rs_rating (RS của mã), min_rs_vs_industry (leader trong ngành), min_industry_rs (breadth ngành) và min_sector_rs (momentum ngành) — kết quả trả kèm cả 4 giá trị. Ghép chúng để chỉ giữ mã mạnh trong ngành đang trend. Xem đầy đủ ở Bài 15 · Sức mạnh ngành (RS).
Tìm mã có RSI cắt lên 50 trong 5 phiên qua, RS của mã ≥ 80 và là leader trong ngành (RS nội bộ ngành ≥ 75), thanh khoản > 10 tỷ/ngày
→ screen: rule RSI + min_rs_rating=80 + min_rs_vs_industry=75 + min_avg_value_bil=10
Phát hiện mẫu hình giá
Công cụ signals_detect_patterns nhận dạng ~38 mẫu hình đặt tên sẵn (hoặc mẫu tùy ý bạn định nghĩa). Với hai/ba đỉnh-đáy, vai-đầu-vai, tam giác, nêm, chữ nhật, mẫu mở rộng, kim cương, các loại cờ, đáy tròn, cốc tay cầm và đỉnh tròn, công cụ xác định mẫu bằng luật trên giá và cho biết mẫu đang hình thành, đã xác nhận hay thất bại, kèm mức giá xác nhận. Nhóm mẫu theo nến gồm khoảng trống giá (kèm trạng thái đã lấp hay chưa), đáy/đỉnh đảo, đáy/đỉnh ống và sừng trên nến tuần, và cú sập rồi hồi. Ba mẫu còn lại (chữ V đáy, chữ V đỉnh, nền phẳng) trả độ khớp hình dáng 0–1. Mẫu "đang hình thành" chưa phải mẫu hoàn chỉnh; với tam giác, nêm, chữ nhật và đỉnh tròn, hướng của mẫu do phiên phá vỡ quyết định chứ không do tên mẫu.
HPG có đang hình thành mẫu hình 2 đáy (double bottom) không? Quét thêm các mẫu hình tích cực khác nếu có
→ detect_patterns: HPG, mẫu "double_bottom" + tất cả mẫu bullish
Kiểm tra xem VIC có mẫu hình vai-đầu-vai (head and shoulders) đang hình thành không — ngưỡng breakdown là đâu?
→ detect_patterns "head_shoulders" — trả trạng thái, mức xác nhận (viền cổ) + khoảng cách % tới mức đó
FPT có đang nằm trong tam giác hay kênh ngang nào không? Hai đường trên/dưới đang ở mức giá nào, đã phá vỡ chưa?
→ detect_patterns nhóm tam giác / nêm / chữ nhật — trả hai mức upper_level, lower_level và hướng phá vỡ nếu đã xảy ra
MWG còn khoảng trống giá (gap) nào chưa được lấp không? Hai mép của khoảng trống ở mức giá nào?
→ detect_patterns "gap_up", "gap_down" — trả hai mép khoảng trống và trạng thái đã lấp hay chưa
Quét mẫu hình trên toàn thị trường
Với các mẫu xác định bằng luật, signals_screen nhận thẳng danh sách tên mẫu và trả các mã có mẫu vừa được xác nhận trong N phiên gần nhất hoặc đang hình thành, kèm mức xác nhận và khoảng cách % từ giá hiện tại tới mức đó. Kết hợp được với mọi bộ lọc sàn, ngành, thanh khoản, RS và cơ bản. Kết quả mô tả trạng thái tại phiên mới nhất, không dùng để backtest.
Trong 5 phiên gần nhất, mã nào thanh khoản trên 20 tỷ/ngày vừa xác nhận mẫu 2 đáy, cốc tay cầm hoặc cờ tăng?
→ screen: patterns=["double_bottom","cup_handle","bull_flag"], pattern_states=["confirmed"], signal_within_days=5, min_avg_value_bil=20
Ngành ngân hàng có mã nào đang hình thành tam giác tăng hoặc vai-đầu-vai ngược mà giá chỉ còn cách mức xác nhận dưới 3% không?
→ screen: icb_code ngân hàng, patterns=["ascending_triangle","inv_head_shoulders"], pattern_states=["forming"] — đọc distance_pct của từng mẫu
Mẫu nến Nhật — tín hiệu đảo chiều ngắn hạn
Công cụ signals_candle_patterns quét cả 61 mẫu nến TA-Lib, trả tên tiếng Việt + hướng bullish/bearish:
VNM tuần này xuất hiện mẫu nến gì đáng chú ý? Có tín hiệu đảo chiều không?
→ candle_patterns: VNM, days=5 — danh sách mẫu có tín hiệu + tên tiếng Việt
FPT có xuất hiện mẫu Búa (Hammer) hoặc Nhấn chìm tăng (Bullish Engulfing) trong 10 phiên qua không?
→ lọc theo mẫu cụ thể + hướng bullish
Cấu trúc giá — Hỗ trợ & Kháng cự
Xu hướng hiện tại của HPG thế nào? Các mức hỗ trợ và kháng cự gần nhất ở đâu? Đang cách giá hiện tại bao nhiêu %?
→ market_structure: trend từ pivot, S/R levels kèm khoảng cách %, đỉnh/đáy 52 tuần
FPT vừa phá vỡ kháng cự. Cấu trúc giá xác nhận breakout không? Mức kháng cự tiếp theo ở đâu?
→ market_structure — pivot points, % cách mức S/R tiếp theo, xu hướng trending/ranging
Thống kê sau tín hiệu — win rate thực tế
Công cụ signals_event_study tổng hợp mỗi lần tín hiệu xuất hiện trong lịch sử — 5, 10, 20 phiên sau giá thay đổi thế nào, so với baseline mua ngẫu nhiên:
Mỗi khi RSI của HPG chạm dưới 30 rồi vượt lên lại, 20 phiên sau giá thường tăng bao nhiêu %? Win rate là bao nhiêu? So với mua ngẫu nhiên?
→ event_study: mỗi event = RSI cross up 30, thống kê return 5/10/20 phiên + win rate + baseline
Backtest chiến lược — mô phỏng T+2.5 VN
Mô phỏng T+2.5 đặc thù thị trường Việt Nam
Tham số t_plus=2 mô phỏng quy tắc thanh toán T+2.5 VN — tín hiệu bán chỉ thực hiện được sau khi cổ phiếu đủ ngày nắm giữ. Backtest sẽ thực tế hơn nhiều so với bỏ qua yếu tố này.
Bốn cách đóng vị thế, dùng riêng hay kết hợp
Ngoài rule exit bạn tự mô tả, signals_backtest có bốn cơ chế thoát đặt sẵn:
| Tham số | Thoát khi nào | Ví dụ |
|---|---|---|
sl_stop | Giá giảm bao nhiêu % từ giá vào | 0.07 = cắt lỗ 7% |
tp_stop | Giá tăng bao nhiêu % từ giá vào | 0.15 = chốt lời 15% |
tsl_stop + tsl_th | Giá rời đỉnh đạt được kể từ lúc mua bao nhiêu %, và chỉ bật sau khi đã lãi quá ngưỡng | tsl_stop=0.08 kèm tsl_th=0.1 = lãi 10% mới bắt đầu trail 8% |
td_stop | Đã giữ đủ bao nhiêu phiên giao dịch, bất kể lãi lỗ | 20 = giữ tối đa 20 phiên |
Thêm stop_exit_price chọn mô hình khớp khi stop kích hoạt: "stop" (mặc định) là
có lệnh stop chờ sẵn trên thị trường, "close" là không có lệnh chờ nên chỉ hành
động theo giá đóng cửa. Không chế độ nào thận trọng hơn chế độ nào, và hai chế độ
cho kết quả lệch nhau đáng kể — chọn theo cách bạn giao dịch thật rồi giữ nguyên.
Ví dụ đo được ở Cập nhật tính năng.
Backtest MA20 cross trên HPG 5 năm: cắt lỗ 7% từ giá vào, lãi 10% thì bắt đầu trail 8% khỏi đỉnh, và giữ tối đa 25 phiên — kết quả so với không đặt stop nào?
→ backtest: sl_stop=0.07, tsl_stop=0.08, tsl_th=0.1, td_stop=25
Backtest chiến lược MA20/50 cross trên HPG trong 5 năm — so với mua-hold HPG, Sharpe và max drawdown là bao nhiêu?
→ backtest: HPG, rule=MA20 cross MA50, 5 năm, so buy-hold, kèm danh sách lệnh
Backtest RSI(14) < 30 → mua, > 70 → bán trên HPG, FPT và VNM trong 3 năm qua với t_plus=2 — mã nào chiến lược này hoạt động tốt nhất?
→ backtest 3 mã cùng rule, t_plus=2 mô phỏng T+2.5, so sánh Sharpe/Sortino/drawdown
Tối ưu tham số — tránh overfit
Cảnh báo overfit tự động
FinLens tự động chia dữ liệu train/test 70/30 và cảnh báo khi Sharpe in-sample cao nhưng out-of-sample thấp — dấu hiệu overfit rõ ràng. Luôn kiểm tra OOS metrics trước khi dùng tham số tối ưu.
Cảnh báo này còn xét số lệnh của từng tổ hợp, và số lệnh cùng tỷ lệ thắng trong kết quả tối ưu đã được sửa: trước đây hai chỉ số đó luôn trống nên cảnh báo bật cho mọi dòng và thành vô nghĩa. Xem Cập nhật tính năng.
Tối ưu tham số MA short (5–30) × MA long (20–80) cho chiến lược cross trên FPT 3 năm — chia train/test 70/30, top 5 tổ hợp tốt nhất và cảnh báo overfit
→ optimize: grid search ≤200 combo, IS/OOS Sharpe side-by-side, best_spec để dùng ngay trong backtest
Tối ưu chiến lược RSI(window 7–21) × MA(window 10–50) trên VCB trong 5 năm — tham số nào cho Sharpe OOS cao nhất?
→ optimize 2 tham số đồng thời, lấy best_spec OOS-first (không phải IS-first)
Kiểm định walk-forward — nghiêm hơn chia train/test một lần
Chia train/test một lần chỉ trả lời câu "tham số tốt nhất của một đoạn duy nhất là
gì" — câu đó gần như luôn cho ra số đẹp. Bật walk_forward (2–6 fold, mặc định tắt)
để hỏi câu đáng hỏi hơn: "nếu tái tối ưu định kỳ trong quá khứ thì ngoài mẫu ra sao".
Mỗi fold chọn lại tham số chỉ từ dữ liệu tính đến mốc của fold đó rồi đo trên đoạn ngay sau, nên không fold nào được biết trước tương lai của mình. Kết quả cho biết bao nhiêu bộ tham số khác nhau từng thắng và bao nhiêu fold dương ngoài mẫu.
Tối ưu MA window 10/20/50/100 cho chiến lược cross trên HPG, 15 năm dữ liệu, kiểm định walk-forward 4 fold — tham số có ổn định qua các fold không?
→ optimize: walk_forward=4, years=15 — cần lịch sử dài, dữ liệu ngắn sẽ bị từ chối kèm ghi chú
Tham số ổn định không có nghĩa chiến lược tốt
Đây là hai chuyện khác nhau: một bộ tham số có thể thắng cả 4 fold mà kết quả ngoài mẫu của chính 4 fold đó vẫn trải từ dương sâu sang âm sâu. Hãy đọc cả hai con số — số fold mà bộ tham số thắng, và số fold dương ngoài mẫu. Ví dụ đo được ở Cập nhật tính năng.
Tối ưu dưới chính sách rủi ro cố định
signals_optimize nhận cả nhóm sl_stop / tp_stop / tsl_stop / tsl_th /
td_stop / stop_exit_price, và áp y như nhau cho mọi tổ hợp trong lưới. Các
mức này không được tối ưu — chúng là chính sách rủi ro bạn chọn, không phải biến
để máy dò.
Việc này đổi kết quả thật sự: cùng một lưới MA trên cùng một mã và cùng khoảng thời gian, bảng xếp hạng khi không áp stop và khi áp cắt lỗ kèm trailing cho ra tổ hợp đứng đầu khác nhau. Tối ưu mà không áp chính sách rủi ro mình sẽ dùng thật thì chọn sai tham số.
Tối ưu MA window 10/20/50/100 trên HPG 8 năm, áp cho mọi tổ hợp cắt lỗ 7% + trailing 8% + giữ tối đa 25 phiên — tổ hợp nào đứng đầu, và có khác với khi không áp stop không?
→ optimize 2 lần: một lần trần, một lần với sl_stop/tsl_stop/td_stop — so bảng xếp hạng
Bài liên quan
Sức mạnh Ngành & RS Rating
Lọc mã leader trong ngành đang trend bằng 4 bộ lọc RS của signals_screen.
Smart Money & Khối Ngoại
Kết hợp tín hiệu kỹ thuật với xác nhận từ dòng tiền để tăng độ chính xác.
Cập nhật tính năng
Trailing stop, giữ tối đa N phiên, walk-forward — và những thay đổi làm số liệu khác trước.
Mẫu hình giá: soi một mã, quét toàn thị trường
38 mẫu theo luật và theo hình dáng, trạng thái đang hình thành hay đã xác nhận, mức xác nhận.
Bộ lọc cổ phiếu theo danh mục trường
Sàng lọc theo điều kiện tự chọn trên hàng trăm trường và xếp hạng theo một chỉ tiêu.
Xem tất cả 31 bài hướng dẫn
Chuỗi đầy đủ từ cơ bản đến nâng cao.
Câu hỏi thường gặp
Làm sao để backtest chiến lược chứng khoán Việt Nam bằng AI?
Công cụ signals_backtest của FinLens MCP chạy backtest long-only cho một hoặc nhiều mã theo rule do nhà đầu tư mô tả bằng ngôn ngữ tự nhiên, ví dụ MA20 cắt MA50 hoặc RSI(14) dưới 30 thì mua và trên 70 thì bán. Kết quả trả về so sánh với chiến lược mua và nắm giữ, kèm Sharpe, Sortino, max drawdown và danh sách lệnh đã khớp. Nhà đầu tư chỉ cần yêu cầu AI backtest chiến lược trên mã và khung thời gian mong muốn, không cần viết code.
Backtest của FinLens MCP có mô phỏng quy tắc T+2.5 của Việt Nam không?
Có. Tham số t_plus=2 trong signals_backtest mô phỏng quy tắc thanh toán T+2.5 của thị trường Việt Nam: tín hiệu bán chỉ được thực hiện sau khi cổ phiếu đủ ngày nắm giữ. Bật tham số này giúp kết quả backtest sát thực tế hơn nhiều so với việc bỏ qua độ trễ thanh toán, đặc biệt với các chiến lược giao dịch ngắn hạn.
Làm sao quét toàn thị trường tìm cổ phiếu có RSI dưới 30 hoặc MACD golden cross?
Công cụ signals_screen của FinLens MCP quét toàn bộ 1.700 mã theo rule kỹ thuật do người dùng định nghĩa, chẳng hạn RSI dưới 30 trong 3 phiên gần nhất, giá cắt lên MA20, hoặc MACD golden cross kèm volume tăng bất thường. Bộ lọc kỹ thuật có thể kết hợp đồng thời với tiêu chí cơ bản như ROE trên 15%, P/E dưới 20 và thanh khoản trên 10 tỷ đồng mỗi ngày. Ngoài ra còn có 4 bộ lọc sức mạnh tương đối là min_rs_rating, min_rs_vs_industry, min_industry_rs và min_sector_rs để chỉ giữ lại mã dẫn dắt trong ngành đang có xu hướng tăng.
Làm sao tránh overfit khi tối ưu tham số chiến lược giao dịch?
Công cụ signals_optimize của FinLens MCP chạy grid search tối đa 200 tổ hợp tham số và tự động chia dữ liệu train/test theo tỷ lệ 70/30, hiển thị Sharpe in-sample và out-of-sample cạnh nhau kèm cảnh báo khi out-of-sample kém xa in-sample. Phép kiểm nghiêm hơn là bật walk_forward từ 2 đến 6 fold: mỗi fold chọn lại tham số chỉ từ dữ liệu tính đến mốc của fold đó rồi đo trên đoạn ngay sau, nên không fold nào biết trước tương lai của mình. Nguyên tắc an toàn là chọn best_spec theo kết quả out-of-sample thay vì in-sample, rồi đưa tham số đó vào signals_backtest để kiểm chứng lại.
Trailing stop là gì và backtest cắt lỗ theo đỉnh trên cổ phiếu Việt Nam thế nào?
Trailing stop là cắt lỗ đo từ đỉnh giá đã đạt được kể từ lúc mua, khác với cắt lỗ thường vốn đo từ giá vào. Trong signals_backtest của FinLens MCP, tham số tsl_stop nhận mức phần trăm rời đỉnh, ví dụ 0.08 là thoát khi giá giảm 8% khỏi đỉnh, và tsl_th là ngưỡng lãi để trailing bắt đầu có tác dụng, ví dụ 0.1 đọc là lãi 10% mới bắt đầu trail. Có thể kết hợp thêm td_stop để giữ tối đa một số phiên giao dịch rồi thoát bất kể lãi lỗ. Kết quả quá khứ không đảm bảo tương lai.
Cập nhật lần cuối