Chỉ báo kỹ thuật
Mục lục
Khuyên dùng: Nên ưu tiên sử dụng Agent Guide để nạp môi trường cho AI Agent trên máy tính cục bộ. Tránh viết code thủ công hoặc dùng AI phiên bản web/Google Colab vì AI không có thông tin mới nhất về thư viện nên dễ viết sai cú pháp.
Tổng quan
Mô-đun vnstock_quant.ta cung cấp 58 chỉ báo phân tích kỹ thuật kinh điển và hiện đại, kế thừa và mở rộng trọn vẹn từ vnstock_ta phiên bản 1.x. Nhờ chuyển dịch toàn bộ thuật toán tính toán sang lõi Rust, các chỉ báo được đối chiếu với thư viện TA-Lib C 0.8.1 và dữ liệu kiểm thử của QuantConnect LEAN; tính đủ 58 chỉ báo nhanh hơn 25,9 lần so với thế hệ cũ (5.000 phiên, số đo tham khảo, đo trên máy Apple M4 (10 nhân, 16 GB RAM), một luồng, ngày 06/10/2026).
Chuẩn bị dữ liệu đầu vào
Dữ liệu đầu vào để tính toán chỉ báo kỹ thuật là một pandas.DataFrame gồm các cột giá và khối lượng tiêu chuẩn:
- Index: Nên đặt
DatetimeIndex(cột thời giantime). - Cột giá bắt buộc:
open,high,low,close(kiểu số thựcfloat64),volume(kiểu số nguyênint64hoặcfloat64). - Đối với các chỉ báo chỉ dựa trên giá đóng cửa (ví dụ SMA, RSI), DataFrame chỉ cần tối thiểu cột
close.
import pandas as pd
from vnstock import Market
# Lấy 365 phiên giao dịch gần nhất của cổ phiếu FPT
m = Market()
df = m.equity("FPT").ohlcv(length=365, interval="1D")
df = df.set_index("time")Các chỉ báo kỹ thuật có chu kỳ tính toán dài (ví dụ: SMA 50 hay SMA 200) sẽ xuất hiện các giá trị NaN ở những hàng đầu tiên do chưa tích luỹ đủ số phiên tối thiểu. Đây là quy tắc toán học hoàn toàn tự nhiên.
Hai cách gọi chỉ báo kỹ thuật
Cách 1: Hướng đối tượng qua lớp Indicator (Khuyên dùng)
Lớp Indicator hỗ trợ cả hai phong cách: gọi thông qua thuộc tính danh mục phân loại hoặc gọi phẳng trực tiếp.
from vnstock_quant import Indicator
# Khởi tạo đối tượng với dữ liệu nến
ta = Indicator(df)
# Phong cách 1: Gọi thông qua nhóm danh mục (Rõ ràng, trực quan)
sma_20 = ta.trend.sma(length=20)
rsi_14 = ta.momentum.rsi(length=14)
bbands = ta.volatility.bbands(length=14, std=2.0)
obv = ta.volume.obv()
pivots = ta.statistics.pivots()
# Phong cách 2: Gọi phẳng trực tiếp (giữ cú pháp gọi của vnstock_ta 1.x)
macd = ta.macd(fast=12, slow=26, signal=9)
st = ta.supertrend(period=10, multiplier=3.0)Kết quả trả về là một pandas.Series (đối với chỉ báo đơn đường như SMA, RSI) hoặc một pandas.DataFrame (đối với chỉ báo đa đường như MACD, Bollinger Bands, Supertrend) giữ nguyên chỉ mục thời gian của DataFrame gốc.
Cách 2: Gọi theo tên hàm thông qua compute()
Hàm compute() đặc biệt thuận tiện khi tên chỉ báo và tham số được cấu hình động từ tệp cấu hình bên ngoài hoặc do AI Agent quyết định:
from vnstock_quant import compute
# Tính RSI theo tên
rsi_series = compute(df, "rsi", length=14)
# Tính MACD theo tên với bộ tham số tuỳ chỉnh
macd_df = compute(df, "macd", fast=12, slow=26, signal=9)Danh mục 58 chỉ báo theo 5 nhóm nghiệp vụ
Thư viện quy hoạch 58 chỉ báo kỹ thuật thành 5 nhóm chức năng:
1. Xu hướng (Trend Indicators - 14 chỉ báo)
Nhận diện hướng đi chủ đạo của thị trường (tăng giá, giảm giá hoặc tích luỹ đi ngang):
| Ký hiệu | Tên đầy đủ | Mô tả |
|---|---|---|
sma | Simple Moving Average | Đường trung bình động giản đơn |
ema | Exponential Moving Average | Đường trung bình động luỹ thừa |
wma | Weighted Moving Average | Đường trung bình động có trọng số |
hma | Hull Moving Average | Đường trung bình động Hull giúp giảm độ trễ |
smma | Smoothed Moving Average | Đường trung bình động làm mượt |
alma | Arnaud Legoux Moving Average | Đường trung bình động Arnaud Legoux dùng phân phối Gauss |
vwma | Volume-Weighted Moving Average | Đường trung bình động theo khối lượng |
adx | Average Directional Index | Chỉ số định hướng trung bình xác định cường độ xu hướng |
ichimoku | Ichimoku Kinko Hyo | Hệ thống đám mây Ichimoku |
psar | Parabolic SAR | Chỉ báo điểm dừng và đảo chiều xu hướng |
supertrend | Supertrend | Chỉ báo bám sát xu hướng dựa trên độ biến động ATR |
dm | Directional Movement | Hệ thống chuyển động định hướng (+DI, -DI) |
linreg | Linear Regression | Hồi quy tuyến tính của chuỗi giá |
aroon | Aroon Indicator | Đo lường thời gian kể từ đỉnh/đáy gần nhất |
2. Động lượng (Momentum Indicators - 15 chỉ báo)
Đo lường vận tốc biến động giá và xác định các vùng quá mua (overbought) hoặc quá bán (oversold):
| Ký hiệu | Tên đầy đủ | Mô tả |
|---|---|---|
rsi | Relative Strength Index | Chỉ số sức mạnh tương đối (Wilder RSI) |
stoch | Stochastic Oscillator | Dao động ngẫu nhiên đo vị trí giá so với biên độ đỉnh-đáy |
stochrsi | Stochastic RSI | Áp dụng công thức Stochastic trên chuỗi giá trị RSI |
mom | Momentum | Đo khoảng cách giá hiện tại so với n phiên trước |
roc | Rate of Change | Tốc độ thay đổi giá theo tỷ lệ phần trăm |
ao | Awesome Oscillator | Dao động Awesome của Bill Williams, đo động lượng thị trường |
cci | Commodity Channel Index | Chỉ số kênh hàng hoá đo độ lệch so với trung bình |
willr | Williams %R | Chỉ báo phản ánh vị thế tương đối của giá đóng cửa |
tsi | True Strength Index | Chỉ số sức mạnh thực sự với 2 tầng làm mượt EMA |
cmo | Chande Momentum Oscillator | Dao động động lượng Chande |
uo | Ultimate Oscillator | Dao động tối thượng kết hợp 3 khung thời gian |
fisher | Fisher Transform | Chuyển đổi phân phối giá về phân phối chuẩn Gauss |
cg | Center of Gravity | Chỉ báo trọng tâm của chuỗi giá |
kst | Know Sure Thing | Dao động KST tổng hợp 4 chu kỳ ROC |
macd | Moving Average Convergence Divergence | Đường trung bình động hội tụ phân kỳ |
3. Biến động (Volatility Indicators - 10 chỉ báo)
Đo lường mức độ co giãn biên độ giá và nhận diện giai đoạn nén biên độ:
| Ký hiệu | Tên đầy đủ | Mô tả |
|---|---|---|
bbands | Bollinger Bands | Dải biến động trên/dưới quanh đường trung bình |
kc | Keltner Channels | Kênh Keltner dựa trên đường trung bình và ATR |
atr | Average True Range | Khoảng biến động thực tế trung bình |
stdev | Standard Deviation | Độ lệch chuẩn thống kê của chuỗi giá |
donchian | Donchian Channels | Kênh giá đỉnh cao nhất và đáy thấp nhất |
massi | Mass Index | Chỉ số khối lượng nhận diện vùng đảo chiều nén biên độ |
ui | Ulcer Index | Đo lường độ sâu và thời gian sụt giảm giá |
squeeze | TTM Squeeze | Phát hiện trạng thái tích luỹ nén chặt giữa Bollinger và Keltner |
squeeze_pro | Squeeze Pro | Bản nâng cấp đo 3 mức độ nén giá (chặt, vừa, lỏng) |
true_range | True Range | Biên độ thực tế của từng phiên giao dịch |
4. Khối lượng (Volume Indicators - 10 chỉ báo)
Kết hợp tương quan giữa biến động giá và thanh khoản giao dịch:
| Ký hiệu | Tên đầy đủ | Mô tả |
|---|---|---|
obv | On-Balance Volume | Khối lượng cân bằng tích luỹ |
cmf | Chaikin Money Flow | Dòng tiền Chaikin đo áp lực mua/bán trong kỳ |
ad | Accumulation/Distribution | Đường tích luỹ/phân phối khối lượng |
vp | Volume Profile | Phân bổ khối lượng giao dịch theo các vùng giá |
vwap | Volume-Weighted Average Price | Giá bình quân gia quyền theo khối lượng trong phiên |
pvo | Percentage Volume Oscillator | Dao động tỷ lệ phần trăm khối lượng giữa hai đường EMA |
efi | Elder's Force Index | Chỉ số lực giao dịch của Elder |
eom | Ease of Movement | Mức độ dễ dàng dịch chuyển của giá theo khối lượng |
nvi | Negative Volume Index | Chỉ số khối lượng âm phản ánh hành vi dòng tiền thông minh |
mfi | Money Flow Index | Chỉ số dòng tiền kết hợp giá và khối lượng (RSI khối lượng) |
5. Thống kê (Statistics Indicators - 9 chỉ báo)
Các giá trị thống kê hình học và điểm xoay trục quan trọng:
| Ký hiệu | Tên đầy đủ | Mô tả |
|---|---|---|
pivots | Pivot Points | Điểm xoay trục và các mức hỗ trợ/kháng cự kinh điển |
mad | Mean Absolute Deviation | Độ lệch tuyệt đối trung bình |
variance | Variance | Phương sai thống kê của chuỗi giá |
hl2 | High-Low Median Price | Giá trung vị giữa đỉnh và đáy (high + low) / 2 |
hlc3 | Typical Price | Giá điển hình (high + low + close) / 3 |
ohlc4 | Average Price | Giá trung bình phiên (open + high + low + close) / 4 |
midprice | Midprice | Giá trung vị giữa đỉnh cao nhất và đáy thấp nhất trong chu kỳ |
decreasing | Decreasing Indicator | Chuỗi logic đánh dấu các phiên giá giảm liên tiếp |
increasing | Increasing Indicator | Chuỗi logic đánh dấu các phiên giá tăng liên tiếp |
Khám phá danh mục và mức tin cậy
Bạn có thể tra cứu danh mục, tham số mặc định và chuẩn đối chiếu của mọi chỉ báo bằng hàm ta.catalog():
from vnstock_quant.ta import catalog
cat = catalog()
print(cat[["name", "group", "standard", "confidence", "access"]].head(10))Các mức tin cậy (confidence) được thẩm định khoa học:
- Mức A: Khớp hoàn toàn với thư viện C nguyên bản TA-Lib C 0.8.1 tới sai số dấu phẩy động (34 chỉ báo).
- Mức B: Khớp trong sai số cho phép với bộ kiểm thử độc lập của QuantConnect LEAN hoặc TradingView Pine Script v6 (Ichimoku, Supertrend, ADX...).
- Mức C: Kiểm định theo công thức gốc trong bài báo học thuật của tác giả phát minh.
Tải dữ liệu nhanh bằng from_vnstock
Nếu đã cài đặt tiện ích vnstock, bạn có thể lấy dữ liệu và khởi tạo Indicator trong một câu lệnh:
from vnstock_quant.ta import from_vnstock
# Tải dữ liệu và khởi tạo đối tượng Indicator tự động
ta = from_vnstock("HPG", start="2024-01-01", end="2024-12-31")
# Bắt đầu tính toán ngay lập tức
rsi = ta.rsi(length=14)
macd = ta.macd()Vẽ đồ thị kỹ thuật với vnstock_ezchart
Sau khi tính toán các chỉ báo kỹ thuật, bạn có thể kết hợp với thư viện vnstock_ezchart để vẽ biểu đồ trực quan chuyên nghiệp:
from vnstock_ezchart import Chart
# Vẽ biểu đồ giá kèm chỉ báo RSI và Bollinger Bands
chart = Chart(df)
chart.add_candlestick()
chart.add_indicator(bbands, name="Bollinger Bands")
chart.add_sub_indicator(rsi, name="RSI (14)")
chart.show()Đọc tiếp
- Chỉ số tài chính — Khám phá 99 chỉ số tài chính BCTC VAS và mô hình dòng tiền CFA.
- Đo lường rủi ro và hiệu suất — Đo lường Sharpe, Sortino, VaR và thanh khoản Amihud.
- Chuyển đổi từ vnstock_ta — Chi tiết 16 chỉ báo đã sửa lỗi so với vnstock_ta 1.x.
- Kiểm định chất lượng & hiệu năng — Báo cáo chi tiết sai số 58 chỉ báo so với TA-Lib C và kiểm định hiệu năng.