# 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.

```python
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ố**

| Tên tham số | Mô tả                                                                   | Kiểu dữ liệu  | Giá trị mặc định |
| ----------- | ----------------------------------------------------------------------- | ------------- | ---------------- |
| 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ụ:

```python
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.

```python
def obv(column: pandas.core.series.Series, volume: pandas.core.series.Series)
```

**Tham số**

| Tên tham số | Mô tả                                                                   | Kiểu dữ liệu  | Giá trị mặc định |
| ----------- | ----------------------------------------------------------------------- | ------------- | ---------------- |
| 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ụ:

```python
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.

```python
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ố:**<br>

| Tên tham số | Mô tả                                                                    | Kiểu dữ liệu  | Giá trị mặc định |
| ----------- | ------------------------------------------------------------------------ | ------------- | ---------------- |
| 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ụ:

```python
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 đồ.

```python
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ố:**

| Tên tham số  | Mô tả                                                                   | Kiểu dữ liệu  | Giá trị mặc định |
| ------------ | ----------------------------------------------------------------------- | ------------- | ---------------- |
| 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ụ:

```python
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á**.

```python
def adl(high: pandas.Series, low: pandas.Series, close: pandas.Series, volume: pandas.Series)
```

**Tham số:**<br>

| Tên tham số | Mô tả                                                      | Kiểu dữ liệu  | Giá trị mặc định |
| ----------- | ---------------------------------------------------------- | ------------- | ---------------- |
| 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ụ:

```python
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á**.

```python
def pvt(close: pandas.Series, volume: pandas.Series)
```

**Tham số:**<br>

| Tên tham số | Mô tả                               | Kiểu dữ liệu  | Giá trị mặc định |
| ----------- | ----------------------------------- | ------------- | ---------------- |
| 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ụ:

```python
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).

```python
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ố:**

| Tên tham số  | Mô tả                                                                   | Kiểu dữ liệu  | Giá trị mặc định |
| ------------ | ----------------------------------------------------------------------- | ------------- | ---------------- |
| 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ụ:

```python
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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fiinquant.vn/ham-va-cong-thuc/8.-danh-sach-chi-so-ta/8.4.-volume-indicators-chi-bao-khoi-luong.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
