Vnstock Logo

Chỉ báo kỹ thuật

Cộng đồngỔn định. Nhóm tính năng đã ổn định: cách gọi và kết quả được giữ nhất quán giữa các bản phát hành; thay đổi ảnh hưởng tới mã đang chạy được ghi trong lịch sử phiên bản.

Mục lục

Trang dùng chung với v0.5.0

Nội dung trang này giữ nguyên từ bản v0.5.0, chưa viết riêng cho free: ví dụ chạy được nếu tên hàm không đổi. Bản gốc: /docs/vnstock_quant/tinh-toan/ta.

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 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)

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:

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

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 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ệ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_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:

Python
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