# 5.1.1. Annualize

Mục đích: chuyển đổi chuỗi thời gian các giá trị (ví dụ: lợi suất) thành giá trị thường niên (annualized), dựa trên tần suất quan sát trong chuỗi thời gian đó.

Cấu trúc hàm: annualize(x)

Trong đó:

* **x**: `Series` — chuỗi thời gian (TimeSeries - Series có index là dạng datetime) các giá trị như lợi suất, biến động (volatility), hoặc bất kỳ số liệu nào cần annualize.
* **Return**: `Series` — chuỗi thời gian đã được annualize.

Cơ chế:

* Tự động **ước lượng tần suất mẫu (sample frequency)** của chuỗi `x`, ví dụ: hàng ngày, hàng tuần, hàng tháng,...
* Sau đó tính **hệ số annualization** phù hợp và áp dụng công thức:

$$
Y_t = X_t . \sqrt{F}
$$

* Trong đó:
  * $$Y_t$$ là giá trị thường niên tại thời điểm 𝑡
  * $$X_t$$ là giá trị gốc tại thời điểm 𝑡
  * F là hệ số annualization (Annualization Factor)

Bảng hệ số annualization

| Kỳ quan sát          | Hệ số annualization (F) |
| -------------------- | ----------------------- |
| Daily (hàng ngày)    | 252                     |
| Weekly (hàng tuần)   | 52                      |
| Bi-Weekly            | 26                      |
| Monthly (hàng tháng) | 12                      |
| Quarterly (quý)      | 4                       |
| Annually (năm)       | 1                       |

Hàm này thường được dùng khi bạn có chuỗi thời gian là **returns hoặc volatility**, và bạn muốn:

* So sánh lợi suất thường niên giữa các cổ phiếu
* Tính độ biến động thường niên (annualized volatility)
* Chuẩn hóa dữ liệu để đưa vào mô hình tài chính

Nếu `returns(prices)` là chuỗi lợi suất hàng ngày, thì `annualized_returns` sẽ là lợi suất thường niên.

Lưu ý:

* Hàm `annualize()` sử dụng phương pháp **nhận diện tự động** tần suất dữ liệu (bằng cách đo khoảng cách giữa các `timestamp`) — bạn không cần cung cấp thông tin này.
* Trong thực tế, công thức annualization được dùng phổ biến nhất để **annualize volatility** (vì bản chất biến động cần được chuẩn hóa theo thời gian).

Ví dụ mẫu tính annualize return và annualize volatility của mã cổ phiếu HPG trong vòng 1 năm từ 24/06/2024 - 24/06/2025:

<pre class="language-python"><code class="lang-python">import pandas as pd

from FiinQuantX import FiinSession
from FiinQuantX.timeseries.econometrics import annualize
from datetime import datetime
from dateutil.relativedelta import relativedelta

<strong>username = "REPLACE_WITH_YOUR_USERNAME"
</strong>password = "REPLACE_WITH_YOUR_PASSWORD"

client = FiinSession(
    username=username,
    password=password
).login()

# Lấy dữ liệu giá đóng cửa 1 năm EOD của HPG
data = client.Fetch_Trading_Data(
    realtime=False,
    tickers="HPG",
    fields=["close"],
    adjusted=True,
    by="1d",
    from_date=(datetime.now() - relativedelta(years=1)).strftime("%Y-%m-%d")
).get_data()

# tính daily return
data["daily_return"] = data["close"] / data["close"].shift(1) - 1

# Đưa timestamp về dạng index để dùng trong hàm annyalize
data["timestamp"] = pd.to_datetime(data["timestamp"])
data.set_index("timestamp", inplace=True)

# Tính annualize returns
data["annualized_return"] = annualize(data["daily_return"])
print(data)
</code></pre>

Kết quả trả ra (code chạy tại ngày 25/06/2025)

```
 timestamp  ticker    close  daily_return  annualized_return
 2024-06-25 HPG       28700.0         NaN                NaN
 2024-06-26 HPG       28900.0    0.006969           0.110624
 2024-06-27 HPG       28850.0   -0.001730          -0.027465
 2024-06-28 HPG       28300.0   -0.019064          -0.302634
 2024-07-01 HPG       28350.0    0.001767           0.028047
 ...        ...           ...         ...                ...
 2025-06-18 HPG       27150.0    0.011173           0.177369
 2025-06-19 HPG       26900.0   -0.009208          -0.146174
 2025-06-20 HPG       27000.0    0.003717           0.059013
 2025-06-23 HPG       26850.0   -0.005556          -0.088192
 2025-06-24 HPG       27000.0    0.005587           0.088684
```

Biểu đồ minh họa (tuỳ chọn)

```python
import matplotlib.pyplot as plt

data = data.reset_index()
fig, ax1 = plt.subplots(figsize=(12, 6))

ax2 = ax1.twinx()
ax1.plot(data['timestamp'], data['close'], 'b-', label='Close Price')
ax2.plot(data['timestamp'], data['annualized_return'], 'g-', label='Annualized Return')

ax1.set_xlabel('Ngày')
ax1.set_ylabel('Giá đóng cửa (VND)', color='b')
ax2.set_ylabel('Lợi suất năm hoá (%)', color='g')
plt.title('Giá đóng cửa (VND) & Lợi suất năm hoá (%) của HPG của HPG')
plt.grid(True)
plt.show()
```

<figure><img src="https://3318188420-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fkme4XYjWbuM3iRJzUu9r%2Fuploads%2F63y0WKlErK6OGt2YbcPZ%2Fimage.png?alt=media&#x26;token=0ea880d3-8b55-48b1-9eb2-a840852a0f4e" alt=""><figcaption></figcaption></figure>
