Vnstock Logo

Chỉ báo kỹ thuật

Mở rộng

Mục lục

Agent Guide Notebook minh hoạ

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 gian time).
  • Cột giá bắt buộc: open, high, low, close (kiểu số thực float64), volume (kiểu số nguyên int64 hoặc float64).
  • Đố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.
Python
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")
Hiện tượng NaN ở đầu chuỗi (Warm-up period)

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.

Python
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:

Python
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ệuTên đầy đủMô tả
smaSimple Moving AverageĐường trung bình động giản đơn
emaExponential Moving AverageĐường trung bình động luỹ thừa
wmaWeighted Moving AverageĐường trung bình động có trọng số
hmaHull Moving AverageĐường trung bình động Hull giúp giảm độ trễ
smmaSmoothed Moving AverageĐường trung bình động làm mượt
almaArnaud Legoux Moving AverageĐường trung bình động Arnaud Legoux dùng phân phối Gauss
vwmaVolume-Weighted Moving AverageĐường trung bình động theo khối lượng
adxAverage Directional IndexChỉ số định hướng trung bình xác định cường độ xu hướng
ichimokuIchimoku Kinko HyoHệ thống đám mây Ichimoku
psarParabolic SARChỉ báo điểm dừng và đảo chiều xu hướng
supertrendSupertrendChỉ báo bám sát xu hướng dựa trên độ biến động ATR
dmDirectional MovementHệ thống chuyển động định hướng (+DI, -DI)
linregLinear RegressionHồi quy tuyến tính của chuỗi giá
aroonAroon 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ệuTên đầy đủMô tả
rsiRelative Strength IndexChỉ số sức mạnh tương đối (Wilder RSI)
stochStochastic OscillatorDao động ngẫu nhiên đo vị trí giá so với biên độ đỉnh-đáy
stochrsiStochastic RSIÁp dụng công thức Stochastic trên chuỗi giá trị RSI
momMomentumĐo khoảng cách giá hiện tại so với n phiên trước
rocRate of ChangeTốc độ thay đổi giá theo tỷ lệ phần trăm
aoAwesome OscillatorDao động Awesome của Bill Williams, đo động lượng thị trường
cciCommodity Channel IndexChỉ số kênh hàng hoá đo độ lệch so với trung bình
willrWilliams %RChỉ báo phản ánh vị thế tương đối của giá đóng cửa
tsiTrue Strength IndexChỉ số sức mạnh thực sự với 2 tầng làm mượt EMA
cmoChande Momentum OscillatorDao động động lượng Chande
uoUltimate OscillatorDao động tối thượng kết hợp 3 khung thời gian
fisherFisher TransformChuyển đổi phân phối giá về phân phối chuẩn Gauss
cgCenter of GravityChỉ báo trọng tâm của chuỗi giá
kstKnow Sure ThingDao động KST tổng hợp 4 chu kỳ ROC
macdMoving 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ệuTên đầy đủMô tả
bbandsBollinger BandsDải biến động trên/dưới quanh đường trung bình
kcKeltner ChannelsKênh Keltner dựa trên đường trung bình và ATR
atrAverage True RangeKhoảng biến động thực tế trung bình
stdevStandard DeviationĐộ lệch chuẩn thống kê của chuỗi giá
donchianDonchian ChannelsKênh giá đỉnh cao nhất và đáy thấp nhất
massiMass IndexChỉ số khối lượng nhận diện vùng đảo chiều nén biên độ
uiUlcer IndexĐo lường độ sâu và thời gian sụt giảm giá
squeezeTTM SqueezePhát hiện trạng thái tích luỹ nén chặt giữa Bollinger và Keltner
squeeze_proSqueeze ProBản nâng cấp đo 3 mức độ nén giá (chặt, vừa, lỏng)
true_rangeTrue RangeBiê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ệuTên đầy đủMô tả
obvOn-Balance VolumeKhối lượng cân bằng tích luỹ
cmfChaikin Money FlowDòng tiền Chaikin đo áp lực mua/bán trong kỳ
adAccumulation/DistributionĐường tích luỹ/phân phối khối lượng
vpVolume ProfilePhân bổ khối lượng giao dịch theo các vùng giá
vwapVolume-Weighted Average PriceGiá bình quân gia quyền theo khối lượng trong phiên
pvoPercentage Volume OscillatorDao động tỷ lệ phần trăm khối lượng giữa hai đường EMA
efiElder's Force IndexChỉ số lực giao dịch của Elder
eomEase of MovementMức độ dễ dàng dịch chuyển của giá theo khối lượng
nviNegative Volume IndexChỉ số khối lượng âm phản ánh hành vi dòng tiền thông minh
mfiMoney Flow IndexChỉ 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ệuTên đầy đủMô tả
pivotsPivot PointsĐiểm xoay trục và các mức hỗ trợ/kháng cự kinh điển
madMean Absolute DeviationĐộ lệch tuyệt đối trung bình
varianceVariancePhương sai thống kê của chuỗi giá
hl2High-Low Median PriceGiá trung vị giữa đỉnh và đáy (high + low) / 2
hlc3Typical PriceGiá điển hình (high + low + close) / 3
ohlc4Average PriceGiá trung bình phiên (open + high + low + close) / 4
midpriceMidpriceGiá trung vị giữa đỉnh cao nhất và đáy thấp nhất trong chu kỳ
decreasingDecreasing IndicatorChuỗi logic đánh dấu các phiên giá giảm liên tiếp
increasingIncreasing IndicatorChuỗ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():

Python
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:

Python
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:

Python
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