# 8.1. Trend Indicators (Chỉ báo xu hướng)

### 8.1.1. **EMA (Exponential Moving Average)**

> **EMA** là đường trung bình di động được tính toán với trọng số, **gán mức độ quan trọng cao hơn cho dữ liệu giá gần hơn**. EMA phản ứng nhanh hơn với những thay đổi giá cả, giúp nhà đầu tư nắm bắt xu hướng thị trường một cách kịp thời.

```python
def ema(column: pandas.core.series.Series, window: int)
```

**Tham số**

| Tên tham số | Ý nghĩa                                                 | 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 EMA. | pandas.Series |                  |
| window      | Số lượng điểm dữ liệu sử dụng trong phép tính EMA.      | int           |                  |

Ví dụ:

```python
fi = client.FiinIndicator()
df['ema_5'] = fi.ema(df['close'], window = 5)
print(df)
```

### **8.1.2. SMA (Simple Moving Average)**

> SMA là đường trung bình di động đơn giản, là một chỉ báo được tính bằng cách **lấy trung bình cộng của giá trong một khoảng thời gian nhất định**.

```python
def sma(column: pandas.core.series.Series, window: int)
```

**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 SMA. | pandas.Series |                  |
| window      | Số lượng điểm dữ liệu sử dụng trong phép tính SMA.      | int           |                  |

Ví dụ:

```python
fi = client.FiinIndicator()
df['sma_5'] = fi.sma(df['close'], window = 5)
print(df)
```

### **8.1.3. SMMA (**&#x53;moothed Moving Averag&#x65;**)**

> Chỉ báo SMMA (Smoothed Moving Average) là **đường trung bình động trơn**, một công cụ phân tích kỹ thuật giúp làm mịn các biến động giá để xác định xu hướng dài hạn hiệu quả hơn. Nó sử dụng dữ liệu giá trong quá khứ để làm mượt các biến động ngắn hạn, tạo ra một đường xu hướng rõ ràng và ít nhiễu hơn. **SMMA** được tính toán dựa trên một khoảng thời gian dài hơn và có trọng số lớn hơn cho các dữ liệu giá gần đây hơn so với **đường trung bình di động đơn giản (SMA)**.&#x20;

```python
def smma(column: pandas.core.series.Series, window: int)
```

**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 SMMA. | pandas.Series |                  |
| window      | Số lượng điểm dữ liệu sử dụng trong phép tính SMMA.      | int           |                  |

Ví dụ:

```python
fi = client.FiinIndicator()
df['smma_20'] = fi.smma(df['close'], window = 20)
print(df)
```

### **8.1.4. WMA (Weighted Moving Average)**

> WMA là đường trung bình tỷ trọng tuyến tính. Chỉ báo này sẽ nhạy cảm hơn và có biến động sát hơn so với các biến động của giá thị trường. WMA sử dụng trọng số khác nhau cho mỗi giá trị trong chuỗi dữ liệu. Trong đó, các trọng số cao nhất sẽ được gán với giá trị mới nhất và giảm dần cho đến giá trị cũ nhất. Chính đặc tính này đã khiến đường WMA trở lên nhạy cảm hơn và “có dữ liệu mịn hơn” so với các đường trung bình động SMA hay EMA.

```python
def wma(column: pandas.core.series.Series, window: int)
```

**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 WMA. | pandas.Series |                  |
| window      | Số lượng điểm dữ liệu sử dụng trong phép tính WMA.      | int           |                  |

Ví dụ:

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

### **8.1.5. MACD (Moving Average Convergence Divergence)**

> MACD là một trong những công cụ phân tích kỹ thuật được sử dụng rộng rãi bởi các nhà giao dịch. MACD giúp đo lường động lượng, hướng và sức mạnh của một xu hướng giá.
>
> Cấu tạo:
>
> * Đường MACD: Sự khác nhau giữa đường EMA ngắn hạn (thường là 12 ngày) và đường EMA dài hạn (thường là 26 ngày).
> * Đường tín hiệu (Signal): Đường EMA của đường MACD (thường là 9 ngày).
> * Biểu đồ MACD (Histogram): Sự khác nhau giữa đường MACD và đường tín hiệu.

```python
def macd(column: pandas.core.series.Series, window_slow: int = 26, window_fast: int = 12)

def macd_signal(column: pandas.core.series.Series, window_slow: int = 26, window_fast: int = 12, window_sign: int = 9)

def macd_diff(column: pandas.core.series.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 |
| ------------ | -------------------------------------------------------------------------- | ------------- | ---------------- |
| column       | Cột dữ liệu (series) chứa các giá trị để tính toán MACD.                   | pandas.Series |                  |
| window\_slow | Số lượng điểm dữ liệu sử dụng cho đường EMA dài hạn trong tính toán MACD.  | int           | 26               |
| window\_fast | Số lượng điểm dữ liệu sử dụng cho đường EMA ngắn hạn trong tính toán MACD. | int           | 12               |
| window\_sign | Số lượng điểm dữ liệu sử dụng cho đường EMA trong tính toán MACD Signal.   | int           | 9                |

Ví dụ:

```python
fi = client.FiinIndicator()
df['macd'] = fi.macd(df['close'], window_fast=12, window_slow=26)
df['macd_signal'] = fi.macd_signal(df['close'], window_fast=12, window_slow=26, window_sign=9)
df['macd_diff'] = fi.macd_diff(df['close'], window_fast=12, window_slow=26, window_sign=9)
print(df)
```

### **8.1.6. ADX (ADXIndicator)**

> ADX là công cụ chỉ báo giao động xác định độ mạnh yếu của xu hướng. Người ta thường dùng công cụ này để xác định thị trường đang đi ngang (thị trường sideway) hay đã bắt đầu xu hướng chưa. Ban đầu, chỉ báo này được sử dụng phổ biến trong thị trường hàng hoá, sau này được mở rộng sang nhiều thị trường tài chính khác như: Chứng khoán, forex, tiền điện tử.

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

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

def adx_pos(high: pandas.core.series.Series, low: pandas.core.series.Series, close: 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 |
| ----------- | ----------------------------------------------------------------- | ------------- | ---------------- |
| low         | Cột dữ liệu chứa các giá trị cột giá thấp nhất để tính toán ADX . | pandas.Series |                  |
| high        | Cột dữ liệu chứa các giá trị cột giá cao nhất để tính toán ADX.   | pandas.Series |                  |
| close       | Cột dữ liệu chứa các giá trị cột giá đóng cửa để tính toán ADX.   | pandas.Series |                  |
| window      | Số lượng điểm dữ liệu sử dụng trong phép tính ADX.                | int           | 14               |

Ví dụ:

```python
fi = client.FiinIndicator()
df['adx'] = fi.adx(df['high'], df['low'], df['close'], window=14)
df['adx_neg'] = fi.adx_neg(df['high'], df['low'], df['close'], window=14)
df['adx_pos'] = fi.adx_pos(df['high'], df['low'], df['close'], window=14)
print(df)
```

### **8.1.7. PSAR (Parabolic Stop and Reverse)**

PSAR là một chỉ báo kỹ thuật do J. Welles Wilder Jr. phát triển, được sử dụng để xác định xu hướng giá và điểm đảo chiều trong giao dịch. PSAR nằm dưới giá khi xu hướng tăng và nằm trên giá khi xu hướng giảm, giúp nhà giao dịch xác định các mức hỗ trợ hoặc kháng cự. Khi giá vượt qua PSAR, xu hướng có thể đảo chiều. Chỉ báo này dễ sử dụng, đặc biệt hiệu quả trong thị trường có xu hướng mạnh, nhưng có thể tạo tín hiệu nhiễu trong thị trường đi ngang.

```python
def psar(self, high: pd.Series, low: pd.Series, close: pd.Series, step: float = 0.02, max_step: float = 0.2)
```

**Tham số:**

| Tên tham số | Mô tả                                                                                                                                                                                                                                                                         | Kiểu dữ liệu  | Mặc định |
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -------- |
| high        | Cột dữ liệu chứa các giá trị cột giá cao nhất.                                                                                                                                                                                                                                | pandas.Series |          |
| low         | Cột dữ liệu chứa các giá trị cột giá thấp nhất.                                                                                                                                                                                                                               | pandas.Series |          |
| close       | Cột dữ liệu chứa các giá trị cột giá đóng cửa.                                                                                                                                                                                                                                | pandas.Series |          |
| step        | Hệ số gia tốc (Acceleration Factor - AF) khởi tạo trong quá trình tính toán.Step càng nhỏ -> PSAR sẽ phản ứng chậm hơn với thay đổi giá, phù hợp cho các thị trường ít biến động.Step lớn hơn -> PSAR nhạy hơn, dễ bắt kịp các thay đổi nhưng cũng có thể tạo tín hiệu nhiễu. | float         | 0.02     |
| max\_step   | Giá trị tối đa mà hệ số gia tốc (AF) có thể đạt được.                                                                                                                                                                                                                         | float         | 0.2      |

Ví dụ:

<pre class="language-python"><code class="lang-python">fi = client.FiinIndicator()
<strong>df['psar'] = fi.psar(df['high'], df['low'], df['close'], step=0.02, max_step=0.2)
</strong><strong>print(df)
</strong></code></pre>

### **8.1.8. Ichimoku (Ichimoku Kinko Hyo)**

Ichimoku là một chỉ báo kỹ thuật do Goichi Hosoda phát triển, giúp đánh giá xu hướng, mức hỗ trợ, kháng cự và cung cấp tín hiệu mua bán trong một biểu đồ duy nhất. Chỉ báo gồm năm thành phần chính: Tenkan-sen, Kijun-sen, Senkou Span A, Senkou Span B, và Chikou Span, tạo thành "đám mây" (Kumo) thể hiện động lực thị trường. Ichimoku đặc biệt hiệu quả trong các thị trường có xu hướng rõ ràng, giúp nhà giao dịch đưa ra quyết định dựa trên sự cân bằng giá.

```python
def ichimoku_a(self, high: pd.Series, low: pd.Series, close: pd.Series, window1: int = 9, window2: int = 26, window3: int = 52) -> pd.Series: ...
def ichimoku_b(self, high: pd.Series, low: pd.Series, close: pd.Series, window1: int = 9, window2: int = 26, window3: int = 52) -> pd.Series: ...
def ichimoku_base_line(self, high: pd.Series, low: pd.Series, close: pd.Series, window1: int = 9, window2: int = 26, window3: int = 52) -> pd.Series: ...
def ichimoku_conversion_line(self, high: pd.Series, low: pd.Series, close: pd.Series, window1: int = 9, window2: int = 26, window3: int = 52) -> pd.Series: ...
def ichimoku_lagging_line(self, high: pd.Series, low: pd.Series, close: pd.Series,
    window1: int = 9, window2: int = 26, window3: int = 52) -> pd.Series: ...
```

**Tham số**

| Tham số | Mô tả                                                                                                                  | Kiểu dữ liệu  | Mặc định |
| ------- | ---------------------------------------------------------------------------------------------------------------------- | ------------- | -------- |
| high    | Cột dữ liệu chứa các giá trị cột giá cao nhất.                                                                         | pandas.Series |          |
| low     | Cột dữ liệu chứa các giá trị cột giá thấp nhất.                                                                        | pandas.Series |          |
| close   | Cột chứa dữ liệu giá đóng cửa.                                                                                         | pandas.Series |          |
| window1 | Số lượng điểm dữ liệu sử dụng cho đường Conversion Line (Tenkan-sen).                                                  | int           | 9        |
| window2 | Số lượng điểm dữ liệu sử dụng cho đường Base Line (Kijun-sen) và để dịch các đường như Chikou Span và Senkou Span A/B. | int           | 26       |
| window3 | Số lượng điểm dữ liệu sử dụng cho đường Senkou Span B.                                                                 | int           | 52       |

Ví dụ:

```python
fi = client.FiinIndicator()
df['senkou_span_a'] = fi.ichimoku_a(df['high'], df['low'], df['close'], window1 = 9, window2 = 26, window3 = 52)
df['senkou_span_b'] = fi.ichimoku_b(df['high'], df['low'], df['close'], window1 = 9, window2 = 26, window3 = 52)
df['kijun_sen'] = fi.ichimoku_base_line(df['high'], df['low'], df['close'], window1 = 9, window2 = 26, window3 = 52) 
df['tenkan_sen'] = fi.ichimoku_conversion_line(df['high'], df['low'], df['close'], window1 = 9, window2 = 26, window3 = 52)
print(df)
```

### **8.1.9. CCI (Commodity Channel Index)**

CCI là một chỉ báo kỹ thuật được Donald Lambert phát triển dùng để đo lường độ lệch của giá so với giá trị trung bình trong một khoảng thời gian, giúp xác định điều kiện quá mua hoặc quá bán. Khi CCI vượt ngưỡng 100, giá có thể đang quá mua, và khi dưới -100, giá có thể đang quá bán. Chỉ báo này phù hợp để phát hiện xu hướng mới hoặc cảnh báo sự đảo chiều tiềm năng.

```python
def cci(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 20, constant: float = 0.015) -> pd.Series: ...
```

**Tham số:**

| Tham số  | Mô tả                                                                         | Kiểu dữ liệu  | Mặc định |
| -------- | ----------------------------------------------------------------------------- | ------------- | -------- |
| high     | Cột dữ liệu chứa các giá trị cột giá cao nhất.                                | pandas.Series |          |
| low      | Cột dữ liệu chứa các giá trị cột giá thấp nhất.                               | pandas.Series |          |
| close    | Cột dữ liệu chứa các giá trị cột giá đóng cửa.                                | pandas.Series |          |
| window   | Số lượng điểm dữ liệu sử dụng cho đường SMA và Mean Deviation.                | int           | 20       |
| constant | Hằng số chuẩn hóa để đảm bảo giá trị CCI dao động trong một phạm vi xác định. | float         | 0.015    |

Ví dụ:

```python
fi = client.FiinIndicator()
df['cci'] = fi.cci(df['high'], df['low'], df['close'], window = 20, constant = 0.015)
print(df)
```

### **8.1.10. Aroon**

Aroon là một chỉ báo kỹ thuật do Tushar Chande phát triển, dùng để đo lường sức mạnh của xu hướng và xác định sự bắt đầu hoặc kết thúc của xu hướng. Chỉ báo gồm hai thành phần chính: Aroon-Up (theo dõi đỉnh cao nhất) và Aroon-Down (theo dõi đáy thấp nhất) trong một khoảng thời gian nhất định. Giá trị dao động từ 0 đến 100, với mức cao cho thấy xu hướng mạnh và mức thấp cho thấy sự yếu dần của xu hướng. Aroon đặc biệt hữu ích trong việc phát hiện các giai đoạn tích lũy hoặc đảo chiều trên thị trường.

<pre class="language-python"><code class="lang-python"><strong>def aroon(self, high: pd.Series, low: pd.Series, window: int = 25) -> pd.Series: ...
</strong>def aroon_up(self, high: pd.Series, low: pd.Series, window: int = 25) -> pd.Series: ... 
def aroon_down(self, high: pd.Series, low: pd.Series, window: int = 25) -> pd.Series: ...
</code></pre>

**Tham số:**

| 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.                 | pandas.Series |                  |
| low     | Cột dữ liệu chứa các giá trị cột giá thấp nhất.                | pandas.Series |                  |
| window  | Số lượng điểm dữ liệu sử dụng cho đường SMA và Mean Deviation. | int           | 25               |

Ví dụ:

```python
fi = client.FiinIndicator()
df['aroon'] = fi.aroon(df['high'], df['low'], window: int = 25)
df['aroon_up'] = fi.aroon_up(df['high'], df['low'], window: int = 25)
df['aroon_down'] = fi.aroon_down(df['high'], df['low'], window: int = 25)
print(df)
```

### **8.1.11. Zig Zag**

Zig Zag là một chỉ báo phổ biến giúp lọc bỏ những biến động giá nhỏ để loại bỏ nhiễu dữ liệu và nhấn mạnh xu hướng. Các nhà giao dịch thường sử dụng Zig Zag để xác nhận xu hướng, xác định ngưỡng hỗ trợ và kháng cự tiềm năng và phát hiện mô hình. Chỉ báo này được hình thành bằng cách xác định các điểm cao và thấp cục bộ quan trọng theo thứ tự xen kẽ và kết nối chúng bằng các đường thẳng, bỏ qua tất cả các điểm dữ liệu khác khỏi đầu ra của chúng. Có một số cách để tính toán các điểm dữ liệu của Zig Zag và các điều kiện theo đó hướng của nó thay đổi. Tập lệnh này sử dụng các điểm xoay làm điểm dữ liệu, là các giá trị cao nhất hoặc thấp nhất trong một số thanh xác định trước và sau chúng. Hướng chỉ đảo ngược khi một điểm xoay mới hình thành lệch khỏi điểm Zig Zag cuối cùng theo hướng ngược lại với một lượng lớn hơn hoặc bằng một tỷ lệ phần trăm được chỉ định.

<pre class="language-python"><code class="lang-python"><strong>def zigzag(self, high: pd.Series, low: pd.Series, dev_threshold: float = 5.0, depth: int = 10) -> pd.Series: ...
</strong></code></pre>

**Tham số:**

| 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.                             | pandas.Series |                  |
| low            | Cột dữ liệu chứa các giá trị cột giá thấp nhất.                            | pandas.Series |                  |
| dev\_threshold | Độ lệch phần trăm tối thiểu từ một điểm trước khi đường ​ZigZag đổi hướng. | float         | 5.0              |
| depth          | Số thanh cần thiết để phát hiện điểm pivot.                                | int           | 10               |

Ví dụ:

```python
fi = client.FiinIndicator()
df['zigzag'] = fi.zigzag(df['high'], df['low'], dev_threshold = 5.0, depth = 10)
print(df)
```

### **8.1.12.** DC (Donchian Channel)

**Donchian Channel (DC)**, hay còn gọi là **Kênh Donchian**, là một chỉ báo phân tích kỹ thuật được phát triển bởi Richard Donchian, người được mệnh danh là "Cha đẻ của giao dịch theo xu hướng" (Trend Following). Chỉ báo này được sử dụng để đo lường **biến động** và xác định **phạm vi giá** tối đa và tối thiểu của một tài sản trong một khoảng thời gian cụ thể (N kỳ).

<pre class="language-python"><code class="lang-python"><strong>def donchian_channel_hband(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 20, offset: int = 0) -> pd.Series: ...
</strong>def donchian_channel_lband(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 20, offset: int = 0) -> pd.Series: ...
def donchian_channel_mband(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 20, offset: int = 0) -> pd.Series: ...
def donchian_channel_pband(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 20, offset: int = 0) -> pd.Series: ...
def donchian_channel_wband(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 20, offset: int = 0) -> pd.Series: ...
</code></pre>

**Tham số:**

| 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.       | pandas.Series |                  |
| low     | Cột dữ liệu chứa các giá trị cột giá thấp nhất.      | pandas.Series |                  |
| close   | Cột dữ liệu chứa các giá trị cột giá đóng cửa.       | pandas.Series |                  |
| window  | Số lượng phiên được dùng để tính toán kênh Donchian. | int           | 20               |
| offset  | Số phiên dịch chuyển (nếu muốn trễ tín hiệu).        | int           | 0                |

Ví dụ:

```python
fi = client.FiinIndicator()
df['dc_high'] = fi.donchian_channel_hband(df["high"], df["low"], df["close"], window=20, offset=0)
df['dc_low'] = fi.donchian_channel_lband(df["high"], df["low"], df["close"], window=20, offset=0)
df['dc_mid'] = fi.donchian_channel_mband(df["high"], df["low"], df["close"], window=20, offset=0)
df['dc_percentage'] = fi.donchian_channel_pband(df["high"], df["low"], df["close"], window=20, offset=0)
df['dc_width'] = fi.donchian_channel_wband(df["high"], df["low"], df["close"], window=20, offset=0)
print(df)
```

### **8.1.13.** Vortex Indicator

**Vortex Indicator (VI)**, hay **Chỉ báo Lốc xoáy**, là một chỉ báo kỹ thuật dựa trên xu hướng, được phát triển bởi Etienne Botes và Douglas Siepman vào năm 2010. Nó được thiết kế để **xác định sự bắt đầu của một xu hướng mới** hoặc **xác nhận hướng đi** của xu hướng hiện tại.

Chỉ báo Vortex bao gồm hai đường dao động chính:

* **+VI (Vortex Positive)**: Đo lường sức mạnh của **xu hướng tăng** (chuyển động đi lên).
* **-VI (Vortex Negative)**: Đo lường sức mạnh của **xu hướng giảm** (chuyển động đi xuống).

```python
def vortex_indicator_pos(high: pandas.Series,  low: pandas.Series,  close: pandas.Series, window: int = 14) -> pd.Series: ...
def vortex_indicator_neg(high: pandas.Series,  low: pandas.Series,  close: pandas.Series, window: int = 14) -> pd.Series: ...
def vortex_indicator_diff(high: pandas.Series,  low: pandas.Series,  close: pandas.Series, window: int = 14) -> pd.Series: ...
```

**Tham số:**

| 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.  | pandas.Series |                  |
| low     | Cột dữ liệu chứa các giá trị cột giá thấp nhất. | pandas.Series |                  |
| close   | Cột dữ liệu chứa các giá trị cột giá đóng cửa.  | pandas.Series |                  |
| window  | Số phiên dùng để tính trung bình (chu kỳ).      | int           | 14               |

Ví dụ:

```python
fi = client.FiinIndicator()
df['vi+'] = fi.vortex_indicator_pos(df["high"], df["low"], df["close"], window=14)
df['vi+'] = fi.vortex_indicator_neg(df["high"], df["low"], df["close"], window=14)
df['vi_diff'] = fi.vortex_indicator_diff(df["high"], df["low"], df["close"], window=14)
print(df)
```

### **8.1.14.** TEMA (Triple Exponential Moving Average)

**Triple Exponential Moving Average (TEMA)**, hay **Đường Trung bình Động Hàm mũ Bậc ba**, là một chỉ báo kỹ thuật được phát triển bởi Patrick G. Mulloy vào năm 1994. Mục tiêu chính của TEMA là **giảm thiểu độ trễ (lag)** vốn có trong các đường trung bình động truyền thống như Simple Moving Average (SMA) và Exponential Moving Average (EMA), giúp chỉ báo phản ứng nhanh hơn với sự thay đổi của giá.

Mặc dù có tên là "Triple" (Bậc ba), TEMA không chỉ đơn giản là áp dụng ba lần EMA. Thay vào đó, nó sử dụng một công thức độc đáo để kết hợp EMA đơn, EMA kép (Double EMA - DEMA), và EMA bậc ba nhằm loại bỏ độ trễ.

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

**Tham số:**

| Tham số | Mô tả                                          | Kiểu dữ liệu  | Giá trị mặc định |
| ------- | ---------------------------------------------- | ------------- | ---------------- |
| close   | Cột dữ liệu chứa các giá trị cột giá đóng cửa. | pandas.Series |                  |
| window  | Số phiên dùng để tính trung bình động.         | int           | 9                |

Ví dụ:

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

### **8.1.15.** DEMA (Double Exponential Moving Average)

**DEMA** là viết tắt của **Double Exponential Moving Average** (Đường Trung bình Động Hàm mũ Kép), là một chỉ báo phân tích kỹ thuật được phát triển bởi Patrick G. Mulloy vào năm 1994.

Mục tiêu chính của DEMA là **giảm thiểu độ trễ (lag)** vốn có trong đường trung bình động hàm mũ tiêu chuẩn (EMA), giúp đường chỉ báo bám sát hành động giá hơn và cung cấp tín hiệu sớm hơn.

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

**Tham số:**

| Tham số | Mô tả                                          | Kiểu dữ liệu  | Giá trị mặc định |
| ------- | ---------------------------------------------- | ------------- | ---------------- |
| close   | Cột dữ liệu chứa các giá trị cột giá đóng cửa. | pandas.Series |                  |
| window  | Số phiên dùng để tính trung bình động.         | int           | 9                |

Ví dụ:

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

### **8.1.16.** ZLEMA (Zero Lag Exponential Moving Average)

**ZLEMA** là viết tắt của **Zero Lag Exponential Moving Average** (Đường Trung bình Động Hàm mũ Không Độ trễ). Đây là một chỉ báo phân tích kỹ thuật được thiết kế nhằm mục đích loại bỏ hoặc giảm thiểu tối đa độ trễ (lag) vốn có của các đường trung bình động truyền thống như **SMA** (Simple Moving Average) và **EMA** (Exponential Moving Average).

ZLEMA được phát triển để phản ánh sự thay đổi của giá nhanh hơn, giúp nhà giao dịch xác định sự đảo chiều hoặc tiếp diễn xu hướng một cách kịp thời hơn.

```python
def zlema(column: pandas.Series, window: int = 14)
```

**Tham số:**

| Tham số | Mô tả                                                    | Kiểu dữ liệu  | Giá trị mặc định |
| ------- | -------------------------------------------------------- | ------------- | ---------------- |
| column  | Cột dữ liệu (thường là giá đóng cửa) để tính toán ZLEMA. | pandas.Series |                  |
| window  | Số phiên dùng để tính trung bình động.                   | int           | 14               |

Ví dụ:

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

### **8.1.17.** Jurik Moving Average

**Jurik Moving Average (JMA)** là một chỉ báo phân tích kỹ thuật tiên tiến, được phát triển bởi nhà toán học **Mark Jurik**. JMA được coi là một trong những đường trung bình động (Moving Average) mạnh mẽ nhất vì nó được thiết kế để giải quyết hai vấn đề lớn của các MA truyền thống (như SMA và EMA): **độ trễ (lag)** và **nhiễu giá (noise)**.

Mục tiêu chính của JMA là bám sát giá một cách chặt chẽ nhất có thể nhưng vẫn giữ được độ mượt mà.

```python
def jma(price: pandas.Series, length: int = 7, phase: int = 50, power: int = 2)
```

**Tham số:**

| 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).                                                               | pandas.Series |                  |
| length  | Độ dài chu kỳ tính toán JMA.                                                                      | int           | 7                |
| phase   | Điều chỉnh độ nhạy (từ -100 đến +100): giá trị dương khiến JMA tiến gần giá hơn, âm làm mượt hơn. | int           | 50               |
| power   | Mức độ “phản ứng” của bộ lọc (power cao → phản ứng nhanh hơn).                                    | int           | 2                |

Ví dụ:

```python
fi = client.FiinIndicator()
df['jma'] = fi.jma(df["close"], length=7, phase=50, power=2)
print(df)
```

### **8.1.18.** Hull Moving Average

**Hull Moving Average (HMA)** là một chỉ báo đường trung bình động (Moving Average) được thiết kế bởi Alan Hull vào năm 2005. Mục đích của HMA là giảm thiểu độ trễ (lag) của các MA truyền thống như SMA và EMA, đồng thời vẫn giữ được độ mượt cần thiết để lọc bỏ nhiễu giá.

HMA đạt được sự cân bằng này thông qua một công thức tính toán phức tạp.

```python
def hma(close: pandas.Series, period: int = 9)
```

**Tham số:**

| Tham số | Mô tả                                       | Kiểu dữ liệu  | Giá trị mặc định |
| ------- | ------------------------------------------- | ------------- | ---------------- |
| close   | Chuỗi giá đầu vào (thường là giá đóng cửa). | pandas.Series |                  |
| period  | Số chu kỳ tính HMA (>= 2).                  | int           | 9                |

Ví dụ:

```python
fi = client.FiinIndicator()
df['hma'] = fi.hma(df["close"], period=9)
print(df)
```

### **8.1.19.** Fractal Adaptive Moving Average

**Fractal Adaptive Moving Average (FRAMA)** là một loại đường trung bình động (Moving Average) thông minh được phát triển bởi **John Ehlers**. Điểm độc đáo của FRAMA là khả năng **tự động điều chỉnh hệ số làm mượt (smoothing factor)** dựa trên **kích thước Fractal (Fractal Dimension)** của hành động giá.

FRAMA giải quyết được vấn đề nan giải của các MA truyền thống: làm thế nào để vừa phản ứng nhanh với các xu hướng mạnh (giảm độ trễ) vừa lọc nhiễu hiệu quả trong thị trường đi ngang (tăng độ mượt).

```python
def frama(df: pandas.DataFrame, window: int = 16)
```

**Tham số:**

| Tham số | Mô tả                                    | Kiểu dữ liệu     | Giá trị mặc định |
| ------- | ---------------------------------------- | ---------------- | ---------------- |
| df      | Dataframe đầu vào                        | pandas.DataFrame |                  |
| window  | Số phiên dùng để tính FRAMA (phải chẵn). | int              | 16               |

Ví dụ:

```python
fi = client.FiinIndicator()
df['frama'] = fi.frama(df, window=16)
print(df)
```

### **8.1.20.** Arnaud Legoux Moving Average

**Arnaud Legoux Moving Average (ALMA)** là một chỉ báo đường trung bình động (Moving Average) được phát triển bởi Arnaud Legoux và Dimitrios Kouzis-Loukas nhằm giải quyết nhược điểm cố hữu của các MA truyền thống: sự đánh đổi giữa **độ trễ (lag)** và **độ mượt (smoothness)**.

ALMA nổi bật vì nó có thể giảm thiểu độ trễ một cách hiệu quả mà vẫn duy trì độ mượt cao, giúp nhà giao dịch xác định xu hướng nhanh hơn và giảm tín hiệu nhiễu.

```python
def alma(column: pandas.Series, period: int = 9, offset: float = 0.85, sigma: float = 6)
```

**Tham số:**

| Tham số | Mô tả                                          | Kiểu dữ liệu  | Giá trị mặc định |
| ------- | ---------------------------------------------- | ------------- | ---------------- |
| column  | Chuỗi giá đầu vào (thường là Close).           | pandas.Series |                  |
| period  | Số phiên dùng để tính ALMA.                    | int           | 9                |
| offset  | Vị trí trọng tâm (0 → đầu, 1 → cuối).          | float         | 0.85             |
| sigma   | Độ rộng của hàm Gaussian (điều chỉnh độ mượt). | float         | 6.0              |

Ví dụ:

```python
fi = client.FiinIndicator()
df['alma'] = fi.alma(df["close"], period=9, offset=0.85, sigma=6.0)
print(df)
```

### **8.1.21.** TRIX

TRIX là chỉ báo động lượng được tính bằng **tỷ lệ thay đổi (%ROC)** của **Triple EMA** (EMA của EMA của EMA).\
Chỉ báo giúp xác định xu hướng trung hạn và loại bỏ nhiễu bằng cách làm mượt dữ liệu ba lần liên tiếp.

```python
def trix(column: pd.Series, window: int = 18) -> pd.Series: ...
```

**Tham số:**

| Tham số | Mô tả                                                     | Kiểu dữ liệu  | Giá trị mặc định |
| ------- | --------------------------------------------------------- | ------------- | ---------------- |
| column  | Chuỗi giá đầu vào (thường là Close).                      | pandas.Series |                  |
| period  | Số lượng điểm dữ liệu sử dụng trong phép tính Triple EMA. | int           | 18               |

Ví dụ:

```python
fi = client.FiinIndicator()
df["trix_18"] = fi.trix(df["close"], period=18)
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.1.-trend-indicators-chi-bao-xu-huong.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.
