8.4. Volume Indicators (Chỉ báo khối lượng)
8.4.1. MFI (Money Flow Index)
MFI là chỉ số phản ánh sức mạnh dòng tiền của một cổ phiếu trong một khoản thời gian nhất định, được phân tích dựa vào khối lượng giao dịch. Khoảng thời gian được xem xét theo ngày, tuần tháng, và thường tính toán theo giá trị 14 giai đoạn.
def mfi(high: pandas.core.series.Series, low: pandas.core.series.Series, close: pandas.core.series.Series, volume: pandas.core.series.Series, window: int = 14)Tham số
high
Cột dữ liệu chứa các giá trị cột giá cao nhất để tính toán MFI.
pandas.Series
low
Cột dữ liệu chứa các giá trị cột giá thấp nhất để tính toán MFI.
pandas.Series
close
Cột dữ liệu chứa các giá trị cột giá đóng cửa để tính toán MFI.
pandas.Series
volume
Cột dữ liệu chứa các giá trị cột khối lượng giao dịch để tính toán MFI.
pandas.Series
window
Số lượng điểm dữ liệu sử dụng trong phép tính MFI.
int
14
Ví dụ:
fi = client.FiinIndicator()
df['mfi'] = fi.mfi(df['high'], df['low'], df['close'], df['volume'], window=14)
print(df)8.4.2. OBV (On Balance Volume)
OBV là chỉ báo khối lượng có chức năng đo lường khối lượng giao dịch tích lũy qua các phiên, từ đó cho thấy cổ phiếu đang có xu hướng được mua hay bán. Nếu phiên hôm nay là một phiên tăng giá thì khối lượng sẽ được cộng thêm vào chỉ số OBV. Ngược lại, khối lượng sẽ được trừ ra khi hôm nay là một phiên giao dịch giảm điểm.
def obv(column: pandas.core.series.Series, volume: pandas.core.series.Series)Tham số
column
Cột dữ liệu (series) chứa các giá trị về giá để tính toán OBV.
pandas.Series
volume
Cột dữ liệu chứa các giá trị cột khối lượng giao dịch để tính toán OBV.
pandas.Series
Ví dụ:
fi = client.FiinIndicator()
df['obv'] = fi.obv(df['close'], df['volume'])
print(df)8.4.3. VWAP (Volume Weighted Adjusted Price)
VWAP là giá trung bình theo trọng số khối lượng, giá trung bình của một cổ phiếu tính theo tổng khối lượng giao dịch. VWAP được sử dụng để tính giá trung bình của một cổ phiếu trong một khoảng thời gian.
Giá bình quân gia quyền theo khối lượng giúp so sánh giá hiện tại của cổ phiếu với giá chuẩn, giúp nhà đầu tư dễ dàng quyết định thời điểm tham gia và thoát khỏi thị trường. Ngoài ra, VWAP có thể hỗ trợ các nhà đầu tư xác định cách đầu tư của họ đối với một cổ phiếu và thực hiện chiến lược giao dịch phù hợp vào đúng thời điểm.
def vwap(high: pandas.core.series.Series, low: pandas.core.series.Series, close: pandas.core.series.Series, volume: pandas.core.series.Series, window: int = 14)Tham số:
high
Cột dữ liệu chứa các giá trị cột giá cao nhất để tính toán VWAP.
pandas.Series
low
Cột dữ liệu chứa các giá trị cột giá thấp nhất để tính toán VWAP.
pandas.Series
close
Cột dữ liệu chứa các giá trị cột giá đóng cửa để tính toán VWAP.
pandas.Series
volume
Cột dữ liệu chứa các giá trị cột khối lượng giao dịch để tính toán VWAP.
pandas.Series
window
Số lượng điểm dữ liệu sử dụng trong phép tính VWAP.
int
14
Ví dụ:
fi = client.FiinIndicator()
df['vwap'] = fi.vwap(df['high'], df['low'], df['close'], df['volume'], window=14)
print(df)8.4.4. Volume Profile
Volume Profile là công cụ phân tích kỹ thuật hiển thị phân bố khối lượng giao dịch tại các mức giá khác nhau trong một giai đoạn cụ thể.
Chỉ báo giúp nhà đầu tư nhận biết các vùng giá có khối lượng giao dịch lớn (vùng giá quan trọng, hỗ trợ/kháng cự) và vùng giá ít quan tâm trên biểu đồ.
def VolumeProfile(close: pandas.Series, volume: pandas.Series, high: pandas.Series = None, low: pandas.Series = None, bins: int = 20, use_typical: bool = False)Tham số:
close
Cột giá đóng cửa dùng để xác định mức giá giao dịch.
pandas.Series
volume
Cột khối lượng giao dịch tương ứng với từng mức giá.
pandas.Series
high
Cột giá cao nhất (sử dụng khi dùng Typical Price).
pandas.Series
low
Cột giá thấp nhất (sử dụng khi dùng Typical Price).
pandas.Series
bins
Số lượng khoảng giá để chia biểu đồ Volume Profile.
int
20
use_typical
Nếu True, dùng giá Typical = (High + Low + Close)/3 thay cho Close.
bool
False
Ví dụ:
fi = client.FiinIndicator()
vp = VolumeProfile(close=data["close"], volume=data["volume"], high=data["high"], low=data["low"], bins=20, use_typical=True)
print(vp.sort_values("volume", ascending=False))8.4.5. Accumulation Distribution Line (Chaikin)
Accumulation/Distribution Line (A/D Line), hay còn gọi là Đường Tích lũy/Phân phối, là một chỉ báo kỹ thuật dựa trên khối lượng được phát triển bởi Marc Chaikin.
Chỉ báo này đo lường dòng chảy tiền tệ (Money Flow) vào hay ra khỏi một tài sản bằng cách so sánh giá đóng cửa của một kỳ so với phạm vi giá của kỳ đó, sau đó nhân với khối lượng giao dịch. Nó dựa trên nguyên tắc: khối lượng đi trước giá.
def adl(high: pandas.Series, low: pandas.Series, close: pandas.Series, volume: pandas.Series)Tham số:
high
Cột giá cao nhất của mỗi phiên.
pandas.Series
low
Cột giá thấp nhất của mỗi phiên.
pandas.Series
close
Cột giá đóng cửa, dùng để xác định vị trí giá trong phiên.
pandas.Series
volume
Cột khối lượng giao dịch trong mỗi phiên.
pandas.Series
Ví dụ:
fi = client.FiinIndicator()
df['adl'] = fi.adl(df["high"], df["low"], df["close"], df["volume"])
print(df)8.4.6. Price Volume Trend
Price Volume Trend (PVT), hay còn gọi là Xu hướng Giá Khối lượng, là một chỉ báo phân tích kỹ thuật dựa trên khối lượng. Nó được thiết kế để đo lường áp lực mua và bán bằng cách kết hợp cả sự thay đổi giá và khối lượng giao dịch.
PVT là một chỉ báo tích lũy (cumulative), tương tự như On-Balance Volume (OBV), nhưng nó được xem là chính xác hơn OBV vì nó điều chỉnh khối lượng được cộng hoặc trừ vào tổng tích lũy dựa trên phần trăm thay đổi của giá.
def pvt(close: pandas.Series, volume: pandas.Series)Tham số:
close
Cột giá đóng cửa của mỗi phiên.
pandas.Series
volume
Cột khối lượng giao dịch tương ứng.
pandas.Series
Ví dụ:
fi = client.FiinIndicator()
df['pvt'] = fi.pvt(df["close"], df["volume"])
print(vp.sort_values("volume", ascending=False))8.4.7. Point of Control (POC)
Point of Control (PoC), hay còn gọi là Điểm Kiểm soát không phải là một chỉ báo độc lập mà là một thành phần quan trọng trong chỉ báo Hồ sơ Khối lượng (Volume Profile). Chỉ báo này đề cập đến mức giá phổ biến nhất, nơi khối lượng giao dịch cao nhất diễn ra trong một khung thời gian cụ thể. Chỉ báo này được phát triển lần đầu tiên bởi Peter Steidlmayer, cựu nhà giao dịch hàng hóa và thành viên của Sàn Giao dịch Chicago (CBOT).
def poc(close: pd.Series, volume: pd.Series, high: pd.Series = None, low: pd.Series = None, bins: int = 20, use_typical: bool = False) -> pd.DataFrame: ...Tham số:
close
Cột giá đóng cửa dùng để xác định mức giá giao dịch.
pandas.Series
volume
Cột khối lượng giao dịch tương ứng với từng mức giá.
pandas.Series
high
Cột giá cao nhất (sử dụng khi dùng Typical Price).
pandas.Series
low
Cột giá thấp nhất (sử dụng khi dùng Typical Price).
pandas.Series
bins
Số lượng khoảng giá để chia biểu đồ Volume Profile.
int
20
use_typical
Nếu True, dùng giá Typical = (High + Low + Close)/3 thay cho Close.
bool
False
Ví dụ:
fi = client.FiinIndicator()
data[["poc_lower_price", "poc_upper_price", "poc_volume"]] = fi.poc(data["close"], data["volume"], data["high"], data["low"], bins=20, use_typical=True)
print(data)Dữ liệu trả ra gồm 3 cột:
poc_lower_price và poc_upper_price mang ý nghĩa là 2 đầu của khoảng giá được giao dịch nhiều nhất (VD: Tính từ ngày 2025-07-01 đến 2025-11-19, khoảng giá có khối lượng giao dịch nhiều nhất của mã MWG là từ 69113.075 đến 70218.87, tương tứng poc_lower_price = 69113.075 và poc_upper_price = 70218.87)
poc_volume: Khối lượng giao dịch của khoảng giá được giao dịch nhiều nhất tương ứng
Lưu ý:
Các tham số close, volume, high, low là những pandas.Series phải đảm bảo có độ dài bằng nhau, tính tuần tự về thời gian là như nhau.
Các tham số close, volume, high, low là những pandas.Series cũng cần đẩm bảo có tính tuần tự tăng dần theo chiều từ trên xuống dưới để đảm bảo số liệu trả ra được đúng đắn và có ý nghĩa.
Các trường "poc_lower_price", "poc_upper_price", "poc_volume" được trả ra cho mỗi dòng tương ứng với số liệu được tính rolling cho khoảng thời gian từ dòng đầu đến dòng được tính, vì vậy mặc định với tham số bins truyền vào là bao nhiêu thì bấy nhiêu dòng đầu của các pandas.Series truyền vào sẽ không có dữ liệu vì phải đảm bảo có đủ số bins dữ liệu mới chia ra được từng đấy khoảng giá. Do vậy nếu bạn muốn tính được đầy đủ số liệu kể trong khoảng thời gian mong muốn cần truyền vào thừa ra để đảm bảo có đầy đủ số liệu.
Last updated