Chỉ báo kỹ thuật
Mục lục
Tổng quan
vnstock_quant.ta gồm 58 chỉ báo kỹ thuật, từ đường trung bình động và RSI đến chỉ báo biến động và khối lượng. Nếu đã dùng vnstock_ta 1.x, bạn có thể giữ cách gọi của lớp Indicator. Một số kết quả số sẽ khác bản cũ do thay đổi công thức hoặc cách khởi tạo; xem trang chuyển đổi để biết chỉ báo nào bị ảnh hưởng.
Chuẩn bị dữ liệu đầu vào
Dữ liệu đầu vào là pandas.DataFrame có cột giá và, với một số chỉ báo, cột khối lượng:
- 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")Chỉ báo có chu kỳ 50 hoặc 200 phiên sẽ trả NaN ở đầu chuỗi cho đến khi có đủ dữ liệu để tính. Hãy kiểm tra số phiên đầu vào trước khi dùng kết quả.
Hai cách gọi chỉ báo kỹ thuật
Cách 1: Dùng lớp Indicator
Với Indicator, bạn có thể gọi hàm theo nhóm chỉ báo hoặc gọi trực tiếp tên hàm:
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 (Phân cấp logic 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()
Dùng compute() khi tên chỉ báo nằm trong tệp cấu hình hoặc được chọn lúc chương trình chạy:
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 năm nhóm
Các chỉ báo được chia thành năm nhóm:
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_chart
Sau khi tính chỉ báo kỹ thuật, bạn có thể đưa kết quả vào vnstock_chart, thư viện vẽ biểu đồ của thế hệ 5, để có biểu đồ nến kèm chỉ báo:
from vnstock import Market
from vnstock_quant import Indicator
from vnstock_chart import Chart
df = Market().equity("FPT").ohlcv(length=365, interval="1D").set_index("time")
ta = Indicator(df)
bb = ta.bbands(length=20, std=2.0)
rsi = ta.rsi(length=14)
# Bollinger Bands chồng lên khung giá, RSI ở khung riêng bên dưới
fig, axes = Chart.candle(
df,
title="FPT — Bollinger Bands và RSI(14)",
volume=False,
overlays=[
{"data": bb["BBU_20_2.0"], "color": "#2EA8F0"},
{"data": bb["BBM_20_2.0"], "color": "#FFB31A"},
{"data": bb["BBL_20_2.0"], "color": "#2EA8F0"},
],
subplots=[{"data": rsi, "color": "#8C52FF", "ylabel": "RSI"}],
)
fig.savefig("fpt_bbands_rsi.png", dpi=150, bbox_inches="tight")Cài vnstock_chart bằng pip install --extra-index-url https://vnstocks.com/api/packages vnstock-chart. Xem thêm các kiểu biểu đồ và cách đặt nhiều chỉ báo trên cùng một hình ở tài liệu vnstock_chart.
Đọc tiếp
- Chỉ số tài chính — Khám phá 100 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.
