# 8.2. Momentum Indicators (Chỉ báo động lượng)

### 8.**2.1. RSI (Relative Strength Index)**

> RSI là một chỉ báo đo lường tốc độ và biên độ của biến động giá gần đây để đánh giá liệu một tài sản đang bị mua quá nhiều (overbought) hay bán quá nhiều (oversold).
>
> RSI được tính toán dựa trên giá đóng cửa trong một khoảng thời gian nhất định (thường là 14 ngày).
>
> Chỉ số này dao động trong khoảng từ 0 đến 100.
>
> * RSI trên 70: Là vùng quá mua, tài sản có thể đã tăng giá quá nhanh và có khả năng điều chỉnh giảm.
> * RSI dưới 30: Là vùng quá bán, tài sản có thể đã giảm giá quá sâu và có khả năng phục hồi.

```python
def rsi(column: 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 |
| ----------- | ------------------------------------------------------- | ------------- | ---------------- |
| column      | Cột dữ liệu (series) chứa các giá trị để tính toán RSI. | pandas.Series |                  |
| window      | Số lượng điểm dữ liệu sử dụng trong phép tính RSI.      | int           | 14               |

**Ví dụ:**

```python
fi = client.FiinIndicator()
df['rsi'] = fi.rsi(df['close'], window=14)
print(df)
```

### 8.**2.2. RSI Divergence (Relative Strength Index Divergence)**

> **RSI divergence (RSI phân kỳ)** là sự di chuyển ngược chiều giữa giá tài sản và chỉ báo RSI, là một tín hiệu cảnh báo sớm rằng xu hướng hiện tại có thể sắp đảo chiều. Nó cho thấy sự thay đổi trong động lượng thị trường trước khi sự thay đổi đó xuất hiện rõ ràng trong biểu đồ giá. **RSI divergence** được coi là một công cụ mạnh mẽ, giúp nhà giao dịch xác định các tín hiệu đảo chiều tiềm năng, nhưng nên kết hợp với các chỉ báo khác để tăng độ chính xác.

```python
def rsi_divergence(column: pandas.core.series.Series, fast_window: int = 5, slow_window: int = 14)
```

**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ị để tính toán RSI phân kỳ. | pandas.Series |                  |
| fast\_window | Số lượng điểm dữ liệu sử dụng trong phép tính RSI nhanh.        | int           | 5                |
| slow\_window | Số lượng điểm dữ liệu sử dụng trong phép tính RSI chậm.         | int           | 14               |

**Ví dụ:**

```python
fi = client.FiinIndicator()
df['rsi_divergence'] = fi.rsi_divergence(df['close'], fast_window=5, slow_window=14)
print(df)
```

### **8.2.3. Stochastic**

> Stochastic Oscillator (Chỉ báo Dao động ngẫu nhiên) là một công cụ phân tích kỹ thuật hiệu quả, giúp đánh giá động lượng và khả năng đảo chiều của giá, xác định vùng mua/bán tiềm năng trên thị trường.
>
> Cấu tạo:
>
> * %K: Đường này so sánh giá đóng cửa hiện tại của chứng khoán với phạm vi giá cao nhất và thấp nhất trong một khoảng thời gian nhất định. Trên 80: Cho thấy chứng khoán có thể quá mua, khả năng điều chỉnh giá xuống. Dưới 20: Cho thấy chứng khoán có thể quá bán, khả năng phục hồi giá.
> * %D: Đường SMA của %K, giúp làm mượt mà các biến động ngắn hạn.

> Cả %K và %D đều dao động trong khoảng từ 0 đến 100.

```python
def stoch(high: pandas.core.series.Series, low: pandas.core.series.Series, close: pandas.core.series.Series, window: int = 14)
```

```python

def stoch_signal(high: pandas.core.series.Series, low: pandas.core.series.Series, close: pandas.core.series.Series, window: int = 14, smooth_window: int = 3)
```

**Tham số**

| Tên tham số    | Mô tả                                                                                             | Kiểu dữ liệu  | Giá trị mặc định |
| -------------- | ------------------------------------------------------------------------------------------------- | ------------- | ---------------- |
| low            | Cột dữ liệu chứa các giá trị cột giá thấp nhất để tính toán Stochastic.                           | pandas.Series |                  |
| high           | Cột dữ liệu chứa các giá trị cột giá cao nhất để tính toán Stochastic.                            | pandas.Series |                  |
| close          | Cột dữ liệu chứa các giá trị cột giá đóng cửa để tính toán Stochastic.                            | pandas.Series |                  |
| window         | Số lượng điểm dữ liệu sử dụng trong phép tính Stochastic.                                         | int           | 14               |
| smooth\_window | Số lượng điểm dữ liệu sử dụng trong phép tính Stochastic Signal bằng cách lấy SMA của Stochastic. | int           | 3                |

Ví dụ:

```python
fi = client.FiinIndicator()
df['stoch'] = fi.stoch(df['high'], df['low'], df['close'], window=14)
df['stoch_signal'] = fi.stoch_signal(df['high'], df['low'], df['close'], window=14, smooth_window=3)
print(df)
```

### **8.2.4.** AO (Awesome Oscillator)

> **Awesome Oscillator (AO)** là một chỉ báo kỹ thuật về **động lượng thị trường** (market momentum) được phát triển bởi nhà phân tích tài chính **Bill Williams**. Chỉ báo này được trình bày dưới dạng một biểu đồ **histogram** (biểu đồ cột) dao động **xung quanh đường Zero**. AO so sánh động lượng ngắn hạn (SMA5) với động lượng dài hạn (SMA34) để đánh giá sức mạnh của xu hướng hiện tại và dự đoán các khả năng đảo chiều.

```python
def awesome_oscillator(high: pandas.Series, low: pandas.Series, window1: int = 5, window2: int = 34)
```

**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 Awesome Oscillator.  | 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 Awesome Oscillator. | pandas.Series |                  |
| window1     | Số kỳ dùng để tính trung bình ngắn hạn (thường là 5).                           | int           | 5                |
| window2     | Số kỳ dùng để tính trung bình dài hạn (thường là 34).                           | int           | 34               |

Ví dụ:

```python
fi = client.FiinIndicator()
df['ao'] = fi.awesome_oscillator(df['high'], df['low'], window1=5, window2=34)
print(df)
```

### **8.2.5.** PPO (The Percentage Price Oscillator)

> **Percentage Price Oscillator (PPO)** là một chỉ báo động lượng kỹ thuật (technical momentum indicator) đo lường **sự khác biệt phần trăm** giữa hai đường trung bình động (Moving Averages).
>
> Chỉ báo này rất giống với chỉ báo **MACD (Moving Average Convergence Divergence)**, nhưng thay vì đo lường sự khác biệt tuyệt đối (giá trị tuyệt đối) giữa hai đường trung bình động, PPO biểu thị sự khác biệt đó dưới dạng **phần trăm** của đường trung bình động dài hạn.

```python
def ppo(close: pandas.Series, window_slow: int = 26, window_fast: int = 12, window_sign: int = 9)
def ppo_hist(close: pandas.Series, window_slow: int = 26, window_fast: int = 12, window_sign: int = 9)
def ppo_signal(close: pandas.Series, window_slow: int = 26, window_fast: int = 12, window_sign: int = 9)
```

**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 của tài sản dùng để tính PPO.   | pandas.Series |                  |
| window\_slow | Số kỳ của EMA chậm (thường là 26).               | int           | 26               |
| window\_fast | Số kỳ của EMA nhanh (thường là 12).              | int           | 12               |
| window\_sign | Số kỳ dùng để tính đường tín hiệu (Signal line). | int           | 9                |

Ví dụ:

```python
fi = client.FiinIndicator()
df['ppo'] = fi.ppo(df['close'], window_slow=26, window_fast=12, window_sign=9)
df['ppo_hist'] = fi.ppo_hist(df['close'], window_slow=26, window_fast=12, window_sign=9)
df['ppo_signal'] = fi.ppo_signal(df['close'], window_slow=26, window_fast=12, window_sign=9)
print(df)
```

### **8.2.6.** ROC (Rate of Change)

> **Rate of Change (ROC)**, hay còn gọi là **Tỷ lệ Thay đổi**, là một **chỉ báo động lượng (momentum oscillator)** quan trọng trong phân tích kỹ thuật.
>
> Nó đo lường **tốc độ** mà giá của một tài sản đang thay đổi bằng cách xác định **phần trăm thay đổi** của giá trong một khoảng thời gian xác định (n kỳ) so với giá hiện tại. ROC giúp nhà giao dịch đánh giá sức mạnh của xu hướng và dự đoán các khả năng đảo chiều.

```python
def roc(close: pandas.Series, window: int = 9)
```

**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 của tài sản dùng để tính tốc độ thay đổi. | pandas.Series |                  |
| window      | Số kỳ lùi về trước để so sánh thay đổi giá.                | int           | 9                |

Ví dụ:

```python
fi = client.FiinIndicator()
df['roc'] = fi.roc(df['close'], window=9)
print(df)
```

### **8.2.7.** UO (Ultimate Oscillator)

> **Ultimate Oscillator (UO)** là một **chỉ báo động lượng kỹ thuật** được phát triển bởi Larry Williams vào năm 1976. Thiết kế cốt lõi của nó là đo lường động lượng đồng thời trên **ba khung thời gian khác nhau**, giúp giảm thiểu sự biến động và số lượng tín hiệu phân kỳ sai thường thấy ở các bộ dao động chỉ dùng một chu kỳ.
>
> Chỉ báo UO dao động trong khoảng từ **0 đến 100** và chủ yếu được sử dụng để xác định các điều kiện **quá mua/quá bán** cũng như tạo ra các tín hiệu đảo chiều dựa trên **phân kỳ**.

```python
def ultimate_oscillator(high: pandas.Series, low: pandas.Series, close: pandas.Series, window1: int = 7, window2: int = 14, window3: int = 28, weight1: float = 4.0, weight2: float = 2.0, weight3: float = 1.0)
```

**Tham số**

| Tên tham số | Mô tả                                                        | Kiểu dữ liệu  | Giá trị mặc định |
| ----------- | ------------------------------------------------------------ | ------------- | ---------------- |
| high        | Cột giá cao nhất trong phiên, dùng để tính biên độ dao động. | pandas.Series |                  |
| low         | Cột giá thấp nhất trong phiên.                               | pandas.Series |                  |
| close       | Cột giá đóng cửa của tài sản.                                | pandas.Series |                  |
| window1     | Số kỳ ngắn hạn để tính trung bình (thường là 7).             | int           | 7                |
| window2     | Số kỳ trung hạn (thường là 14).                              | int           | 14               |
| window3     | Số kỳ dài hạn (thường là 28).                                | int           | 28               |
| weight1     | Trọng số cho chu kỳ ngắn hạn.                                | float         | 4.0              |
| weight2     | Trọng số cho chu kỳ trung hạn.                               | float         | 2.0              |
| weight3     | Trọng số cho chu kỳ dài hạn.                                 | float         | 1.0              |

Ví dụ:

```python
fi = client.FiinIndicator()
df['uo'] = fi.ultimate_oscillator(df["high"], df["low"], df["close"], window1=7, window2=14, window3=28, weight1=4.0, weight2=2.0, weight3=1.0)
print(df)
```

### **8.2.8.** Williams %R

> **Williams %R (Williams Percentage Range)** là một **chỉ báo động lượng kỹ thuật** được phát triển bởi Larry Williams. Nó là một bộ dao động có giới hạn, tương tự như Stochastic Oscillator, được sử dụng chủ yếu để xác định các điều kiện **quá mua (overbought)** và **quá bán (oversold)** trên thị trường.
>
> Chỉ báo này đo lường vị trí giá đóng cửa hiện tại so với phạm vi giá cao nhất và thấp nhất trong một khoảng thời gian nhất định (thường là 14 kỳ).

```python
def williams_r(high: pandas.Series, low: pandas.Series, close: pandas.Series, lbp: int = 14)
```

**Tham số**

| Tên tham số | Mô tả                                                        | Kiểu dữ liệu  | Giá trị mặc định |
| ----------- | ------------------------------------------------------------ | ------------- | ---------------- |
| high        | Cột giá cao nhất trong phiên, dùng để tính biên độ dao động. | pandas.Series |                  |
| low         | Cột giá thấp nhất trong phiên.                               | pandas.Series |                  |
| close       | Cột giá đóng cửa của tài sản.                                | pandas.Series |                  |
| lbp         | Số kỳ dùng để tính biên độ giá (lookback period).            | int           | 14               |

Ví dụ:

```python
fi = client.FiinIndicator()
df['WilliamsR'] = fi.williams_r(df["high"], df["low"], df["close"], lbp=14)
print(df)
```

### **8.2.9.** PMO (Price Momentum Oscillator)

> **PMO (Price Momentum Oscillator)** là chỉ báo động lượng được phát triển bởi **Carl Swenlin**, dùng để đo **tốc độ thay đổi giá** tương tự như MACD nhưng được **làm mượt hai lần (double-smoothed)** nhằm giảm nhiễu và phản ánh **sức mạnh xu hướng rõ ràng hơn**.
>
> PMO được xây dựng dựa trên tỷ lệ thay đổi giá (%ROC), sau đó áp dụng **EMA hai lần** để tính ra giá trị dao động mượt mà hơn, giúp nhà đầu tư xác định các **tín hiệu mua – bán** dựa trên giao cắt giữa PMO và đường tín hiệu (Signal Line).

```python
def pmo(close: pandas.Series, smoothing: int = 35, double_smoothing: int = 20, signal: int = 10)
```

**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 của tài sản.              | pandas.Series |                  |
| smoothing         | Số kỳ làm mượt đầu tiên cho %ROC (EMA 1).  | int           | 35               |
| double\_smoothing | Số kỳ làm mượt thứ hai cho PMO (EMA 2).    | int           | 20               |
| signal            | Số kỳ dùng để tính đường tín hiệu của PMO. | int           | 10               |

Ví dụ:

```python
fi = client.FiinIndicator()
df['pmo'] = fi.pmo(df["close"], smoothing=35, double_smoothing=20, signal=10)
print(df)
```

### **8.2.10.** MOM (Momentum)

> **Momentum** là chỉ báo đo **tốc độ thay đổi giá** trong một khoảng thời gian nhất định. Nó cho biết giá hiện tại **cao hơn hoặc thấp hơn bao nhiêu** so với giá của *n* phiên trước.
>
> Chỉ báo này giúp xác định **sức mạnh xu hướng** và **các tín hiệu đảo chiều** khi động lượng tăng hoặc giảm đột ngột.

```python
def mom(close: pandas.Series, period: int = 10, relative: 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 của tài sản.                                   | pandas.Series |                  |
| period      | Số phiên dùng để so sánh                                        | int           | 10               |
| relative    | Nếu True → tính Momentum %, nếu False → tính Momentum tuyệt đối | bool          | False            |

Ví dụ:

```python
fi = client.FiinIndicator()
df['mom'] = fi.mom(df["close"], period=10, relative=False)
print(df)
```

### **8.2.11.** (APO) Absolute Price Oscillator

> **Absolute Price Oscillator (APO)** là một chỉ báo động lượng (momentum oscillator) trong phân tích kỹ thuật được sử dụng để đo lường **sự khác biệt tuyệt đối** giữa hai đường trung bình động hàm mũ (EMA) có chu kỳ khác nhau.
>
> APO về cơ bản là **giống hệt** với đường **MACD** (Moving Average Convergence Divergence) về mặt công thức, ngoại trừ việc MACD thường đi kèm với Đường Tín hiệu (Signal Line) và Biểu đồ Histogram, còn APO thì thường chỉ tập trung vào sự khác biệt tuyệt đối giữa hai đường EMA.

```python
def apo(price: pandas.Series, fast_period: int = 10, slow_period: int = 20)
```

**Tham số**

| Tên tham số  | Mô tả                                           | Kiểu dữ liệu  | Giá trị mặc định |
| ------------ | ----------------------------------------------- | ------------- | ---------------- |
| price        | Chuỗi giá (thường là giá đóng cửa) của tài sản. | pandas.Series |                  |
| fast\_period | Số phiên tính EMA nhanh                         | int           | 10               |
| slow\_period | Số phiên tính EMA chậm                          | int           | 20               |

Ví dụ:

```python
fi = client.FiinIndicator()
df['apo'] = fi.apo(df["close"], fast_period=10, slow_period=20)
print(df)
```

### **8.2.12.** Coppock Curve

> **Coppock Curve** (còn được gọi là Tỷ lệ Thay đổi Khối lượng Tích lũy - Coppock Guide) là một chỉ báo phân tích kỹ thuật theo đà (momentum indicator) được thiết kế để nhận diện các **điểm mua vào dài hạn** đối với các chỉ số thị trường chứng khoán.
>
> Trong đó:
>
> * **ROC short**: Tốc độ thay đổi giá 11 kỳ
> * **ROC long**: Tốc độ thay đổi giá 14 kỳ
> * **WMA**: Trung bình động có trọng số (Weighted Moving Average) với độ dài 10
>
> Coppock Curve thường được dùng để nhận diện tín hiệu:
>
> * **Mua** khi Coppock từ âm → dương (cross up 0)
> * **Cảnh báo giảm** khi Coppock tạo đỉnh và giảm lại

```python
def coppock_curve(close: pd.Series, roc_short: int = 11, roc_long: int = 14, wma_length: int = 10) -> pd.Series: ...
```

**Tham số**

| Tên tham số | Mô tả                                           | Kiểu dữ liệu  | Giá trị mặc định |
| ----------- | ----------------------------------------------- | ------------- | ---------------- |
| close       | Chuỗi giá (thường là giá đóng cửa) của tài sản. | pandas.Series |                  |
| roc\_short  | Chu kỳ ROC ngắn hạn                             | int           | 11               |
| roc\_long   | Chu kỳ ROC dài hạn                              | int           | 14               |
| wma\_length | Chu kỳ WMA của tổng ROC                         | int           | 10               |

Ví dụ:

```python
fi = client.FiinIndicator()
df["coppock_curve"] = fi.coppock_curve(close=df["close"], roc_short=11, roc_long=14, wma_length=10)
print(df)
```


---

# 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.2.-momentum-indicators-chi-bao-dong-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.
