5.2.1. Volatility
Mục đích: Dùng để tính độ biến động (volatility) thực tế đã xảy ra của một chuỗi giá tài sản, theo kiểu rolling (trượt) và được chuẩn hóa theo năm (annualized).
Cấu trúc hàm: volatility(x, w=, returns_type=Returns.SIMPLE)
Tham số:
x
Series
Chuỗi giá theo thời gian (Time series of prices).
w
Window / int / str
Kích thước cửa sổ trượt (rolling window):
– Ví dụ: Window(22, 10)
là tính trên cửa sổ 22 phiên, bỏ qua 10 phiên đầu để "ramp-up".
– Có thể dùng kiểu chuỗi "1m"
(1 tháng), "10d"
(10 ngày)...
– Nếu không chỉ rõ, hàm tính trên toàn bộ chuỗi.
returns_type
Returns
Kiểu lợi suất cần dùng:
– Returns.SIMPLE
: lợi suất đơn giản
– Returns.LOGARITHMIC
: lợi suất log tự nhiên
– Returns.ABSOLUTE
: thay đổi tuyệt đối
Ý nghĩa kết quả: Hàm trả về một chuỗi Series
– biểu diễn độ biến động hàng năm (annualized volatility) của giá tài sản qua các cửa sổ thời gian đã chỉ định.
Công thức tính:
Trong đó:
là lợi suất tại thời điểm (dựa trên
returns_type
).là trung bình lợi suất trong cửa sổ .
Nhân với để annualize (giả định 252 ngày giao dịch trong năm).
Nhân với 100 để ra dạng phần trăm (%).
Ví dụ mẫu tính rolling volatility với cửa sổ 22 phiên cho mã cổ phiếu HPG trên tập dữ liệu 1 năm (25/06/2024 - 25/06/2025).
from FiinQuantX import FiinSession
from FiinQuantX.timeseries.econometrics import volatility
from FiinQuantX.timeseries.helper import Window
from datetime import datetime
from dateutil.relativedelta import relativedelta
username = "REPLACE_WITH_YOUR_USERNAME"
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()
data["timestamp"] = pd.to_datetime(data["timestamp"])
data.set_index("timestamp", inplace=True)
data["vol_series_rampup"] = volatility(data["close"], w=Window(10, 5))
print(data)
Kết quả trả về:
timestamp ticker close vol_series_rampup
2024-06-26 HPG 24082.370 NaN
2024-06-27 HPG 24040.705 NaN
2024-06-28 HPG 23582.390 NaN
2024-07-01 HPG 23624.055 NaN
2024-07-02 HPG 23915.710 NaN
... ... ... ...
2025-06-20 HPG 22499.100 19.390249
2025-06-23 HPG 22374.105 19.581153
2025-06-24 HPG 22499.100 19.349245
2025-06-25 HPG 22665.760 19.047278
2025-06-26 HPG 22800.000 14.427419
Biểu đồ minh họa (tuỳ chọn)
import matplotlib.pyplot as plt
# Biểu đồ với 2 trục y
fig, ax1 = plt.subplots(figsize=(12, 5))
# Trục y bên trái: giá
ax1.plot(data.index, data['close'], label='Giá đóng cửa', color='blue')
ax1.set_ylabel('Giá cổ phiếu', color='blue')
ax1.tick_params(axis='y', labelcolor='blue')
# Trục y bên phải: volatility
ax2 = ax1.twinx()
ax2.plot(data["vol_series_rampup"].index, data["vol_series_rampup"], label='Volatility (10 phiên)', color='red')
ax2.set_ylabel('Volatility (% annualized)', color='red')
ax2.tick_params(axis='y', labelcolor='red')
# Hoàn thiện biểu đồ
plt.title('Giá HPG và Volatility tính theo rolling 10 phiên')
fig.tight_layout()
plt.grid(True)
plt.show()

Last updated