Trang chủBlogChiến Lược TradingEvent Study: Đo phản ứng của cổ phiếu quanh ngày công bố một sự kiện
Event Study: Đo phản ứng của cổ phiếu quanh ngày công bố một sự kiện
Chiến Lược Trading

Event Study: Đo phản ứng của cổ phiếu quanh ngày công bố một sự kiện

Event Study

Ngọc Hải LươngNgọc Hải Lương
22/7/2026
11 phút phút đọc
80 lượt xem

Một doanh nghiệp công bố lợi nhuận tăng 40%, nhưng cổ phiếu lại giảm ngay trong phiên hôm sau. Nhìn bảng điện, nhiều người sẽ kết luận rằng thị trường không đánh giá cao kết quả kinh doanh. Nhưng nếu đúng ngày đó VN-Index giảm 4%, còn cổ phiếu chỉ giảm 1%, thì cách nhìn lại hoàn toàn khác: cổ phiếu vẫn đang tốt hơn thị trường khoảng 3 điểm phần trăm.

Đó là lý do chỉ nhìn giá tăng hay giảm quanh ngày ra tin thường chưa đủ. Giá cổ phiếu còn chịu ảnh hưởng của thị trường chung, tâm lý ngành, lãi suất, tỷ giá và nhiều thông tin xuất hiện cùng lúc. Event Study được dùng để tách phần biến động thông thường khỏi phần phản ứng bất thường quanh một sự kiện cụ thể, chẳng hạn công bố báo cáo tài chính, chia cổ tức, thay đổi lãnh đạo, phát hành cổ phiếu, M&A hay một quyết định pháp lý. Đây là một phương pháp phổ biến trong nghiên cứu tài chính để xem thị trường đã hấp thụ thông tin vào giá như thế nào.

7ad27c7b-e2c8-4da4-94b2-1157b2c9ccab.png

Phần 1. Điều cần đo không phải cổ phiếu tăng bao nhiêu, mà là tăng khác thường đến mức nào

Giả sử một cổ phiếu tăng 5% sau khi công bố cổ tức. Con số 5% nghe khá tích cực, nhưng nó chưa nói được toàn bộ câu chuyện. Nếu VN-Index cùng ngày tăng 4,5%, phản ứng riêng của cổ phiếu thực ra không lớn. Ngược lại, cổ phiếu chỉ tăng 1% trong ngày thị trường giảm 3% lại có thể là một phản ứng rất tốt.

Cách đơn giản nhất để hiểu Event Study là lấy lợi suất cổ phiếu trừ đi lợi suất của thị trường trong cùng phiên. Phần chênh lệch này được gọi là lợi suất bất thường, hay Abnormal Return. Nếu cổ phiếu tăng 4% còn VN-Index tăng 1%, lợi suất bất thường tạm tính là 3%. Nếu cổ phiếu giảm 2% trong khi thị trường giảm 5%, lợi suất bất thường vẫn dương 3%.

Ở mức cơ bản, cách tính này đã giúp tránh một lỗi khá phổ biến: gán toàn bộ biến động của cổ phiếu cho sự kiện doanh nghiệp, trong khi phần lớn biến động có thể đến từ thị trường chung. Với nghiên cứu chuyên sâu hơn, người ta thường ước lượng mức độ nhạy của từng cổ phiếu với thị trường trong một giai đoạn trước sự kiện, thay vì mặc định cổ phiếu và chỉ số luôn biến động theo tỷ lệ một đổi một. Market Model là một trong những phương pháp thường được sử dụng để làm việc đó.

Bước quan trọng nhất không nằm ở phép tính mà nằm ở việc xác định đúng ngày sự kiện. Nếu doanh nghiệp công bố thông tin lúc 10 giờ sáng, phiên đó có thể được xem là ngày sự kiện. Nhưng nếu thông tin được đăng lúc 18 giờ, sau khi thị trường đóng cửa, phản ứng đầu tiên chỉ có thể xuất hiện vào phiên kế tiếp. Dùng ngày ký văn bản hoặc ngày báo chí đăng lại có thể làm toàn bộ kết quả lệch đi một phiên.

Sau khi xác định ngày sự kiện, chúng ta thường quan sát một khoảng thời gian ngắn xung quanh nó, chẳng hạn năm phiên trước và năm phiên sau. Phần trước sự kiện giúp kiểm tra xem giá có phản ứng sớm hay không. Phần sau sự kiện cho biết thông tin được hấp thụ ngay trong một phiên hay còn tiếp tục tác động trong những ngày tiếp theo.

Một cổ phiếu tăng mạnh từ ba phiên trước ngày công bố nhưng gần như đứng yên vào ngày chính thức có thể cho thấy thông tin đã được thị trường kỳ vọng từ trước. Một cổ phiếu chỉ phản ứng mạnh sau hai hoặc ba phiên có thể phản ánh quá trình nhà đầu tư cần thêm thời gian để đọc và đánh giá thông tin. Tuy nhiên, phản ứng trước ngày công bố không tự động đồng nghĩa với rò rỉ thông tin; giá có thể tăng vì tin đồn, dự báo của giới phân tích hoặc một yếu tố khác xảy ra cùng thời điểm.

Event Study vì thế không trả lời chắc chắn sự kiện là nguyên nhân duy nhất khiến giá biến động. Nó chỉ giúp chúng ta quan sát rõ hơn: quanh thời điểm sự kiện xuất hiện, cổ phiếu đã hành xử khác trạng thái bình thường như thế nào.

Phần 2. Thực hiện một Event Study đơn giản bằng Python và Vnstock

Ví dụ dưới đây dùng cổ phiếu FPT và VN-Index. Người dùng chỉ cần thay mã cổ phiếu và ngày công bố cần nghiên cứu. Để bài toán dễ hiểu, chúng ta sử dụng phiên bản đơn giản: lợi suất bất thường bằng lợi suất cổ phiếu trừ lợi suất VN-Index.

Theo tài liệu hiện hành, Vnstock cung cấp dữ liệu OHLCV cho cả cổ phiếu và chỉ số thông qua Market().equity()Market().index().

# Cài thư viện trên Google Colab/Jupyter:
# %pip install -q -U vnstock_data pandas matplotlib

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from vnstock_data import Market

SYMBOL = "FPT"
EVENT_DATE = "2025-07-22"   # Thay bằng ngày công bố thực tế
START_DATE = "2024-01-01"
END_DATE = "2026-01-01"
WINDOW = 5                  # Quan sát 5 phiên trước và sau sự kiện

market = Market()

# Lấy dữ liệu cổ phiếu và VN-Index
stock = market.equity(SYMBOL).ohlcv(
    start=START_DATE,
    end=END_DATE
)

vnindex = market.index("VNINDEX").ohlcv(
    start=START_DATE,
    end=END_DATE
)

def prepare_close(data, column_name):
    data = data[["time", "close"]].copy()
    data["time"] = pd.to_datetime(data["time"])
    data["close"] = pd.to_numeric(data["close"], errors="coerce")

    return (
        data.dropna()
            .sort_values("time")
            .drop_duplicates("time")
            .set_index("time")
            .rename(columns={"close": column_name})
    )

stock = prepare_close(stock, "stock_close")
vnindex = prepare_close(vnindex, "index_close")

# Ghép theo đúng ngày giao dịch
data = stock.join(vnindex, how="inner").dropna()

# Tính lợi suất ngày
data["stock_return"] = data["stock_close"].pct_change()
data["index_return"] = data["index_close"].pct_change()

# Phiên giao dịch đầu tiên bằng hoặc sau ngày công bố
event_input = pd.Timestamp(EVENT_DATE)
event_position = data.index.searchsorted(event_input)

if event_position >= len(data):
    raise ValueError("Ngày sự kiện nằm ngoài khoảng dữ liệu.")

event_trading_date = data.index[event_position]

# Đánh số phiên: -5, -4,..., 0,...,+4,+5
data["event_day"] = np.arange(len(data)) - event_position

event = data[
    data["event_day"].between(-WINDOW, WINDOW)
].copy()

# Phiên bản Event Study đơn giản
event["abnormal_return"] = (
    event["stock_return"] - event["index_return"]
)

event["car"] = event["abnormal_return"].cumsum()

result = event[
    [
        "event_day",
        "stock_return",
        "index_return",
        "abnormal_return",
        "car"
    ]
].copy()

result[
    [
        "stock_return",
        "index_return",
        "abnormal_return",
        "car"
    ]
] *= 100

print("Phiên sự kiện:", event_trading_date.date())
print(result.round(2))

Kết quả sẽ cho chúng ta năm thông tin chính. event_day = 0 là phiên sự kiện. stock_return là lợi suất cổ phiếu trong phiên. index_return là lợi suất VN-Index. abnormal_return cho biết cổ phiếu tốt hơn hoặc kém hơn thị trường bao nhiêu điểm phần trăm. car là tổng phản ứng bất thường được tích lũy qua các phiên.

Giả sử bảng kết quả cho thấy cổ phiếu tạo lợi suất bất thường 2% ở ngày -1, thêm 3% tại ngày 0, rồi giảm 1% ở ngày +1. Khi đó, phản ứng tích lũy trong ba phiên là khoảng 4%. Giá có điều chỉnh sau ngày công bố, nhưng phần tích cực trước đó vẫn chưa bị xóa hết.

Để dễ quan sát, có thể vẽ hai biểu đồ: một biểu đồ thể hiện phản ứng trong từng phiên và một biểu đồ thể hiện tác động tích lũy.

# Biểu đồ Abnormal Return
plt.figure(figsize=(10, 5))
plt.bar(event["event_day"], event["abnormal_return"] * 100)
plt.axhline(0, linewidth=1)
plt.axvline(0, linestyle="--", label="Ngày sự kiện")
plt.title(f"Phản ứng bất thường quanh sự kiện – {SYMBOL}")
plt.xlabel("Phiên so với ngày sự kiện")
plt.ylabel("Abnormal Return (%)")
plt.legend()
plt.grid(alpha=0.25)
plt.show()

# Biểu đồ CAR
plt.figure(figsize=(10, 5))
plt.plot(
    event["event_day"],
    event["car"] * 100,
    marker="o"
)
plt.axhline(0, linewidth=1)
plt.axvline(0, linestyle="--", label="Ngày sự kiện")
plt.title(f"Phản ứng tích lũy quanh sự kiện – {SYMBOL}")
plt.xlabel("Phiên so với ngày sự kiện")
plt.ylabel("CAR (%)")
plt.legend()
plt.grid(alpha=0.25)
plt.show()

Đây là phiên bản đủ đơn giản để người mới có thể chạy và hiểu toàn bộ logic. Khi cần nghiên cứu nghiêm túc hơn, có thể thay phép trừ trực tiếp bằng Market Model, bổ sung chỉ số ngành, kiểm định thống kê và mở rộng từ một sự kiện sang nhiều doanh nghiệp.


Phần 3. Đọc biểu đồ thế nào để không gán mọi biến động cho tin tức?

Giả sử doanh nghiệp công bố lợi nhuận tăng 30%, nhưng cổ phiếu có lợi suất bất thường âm. Điều này không có nghĩa thị trường đang phản ứng vô lý.

Thị trường không phản ứng với con số 30% đứng riêng lẻ. Nó phản ứng với khoảng cách giữa kết quả thực tế và điều nhà đầu tư đã kỳ vọng. Lợi nhuận tăng 30% nhưng thị trường từng kỳ vọng tăng 50% vẫn có thể bị xem là thất vọng. Ngược lại, lợi nhuận giảm 10% nhưng trước đó nhà đầu tư lo ngại giảm 40% thì cổ phiếu vẫn có thể phản ứng tích cực.

Đây là lý do “tin tốt” chưa chắc khiến giá tăng và “tin xấu” chưa chắc khiến giá giảm. Một phần thông tin có thể đã được phản ánh vào giá từ nhiều tuần trước. Đến ngày công bố chính thức, điều quan trọng không còn là kết quả tốt hay xấu, mà là kết quả đó bất ngờ đến đâu.

Nếu CAR bắt đầu tăng mạnh từ trước ngày sự kiện, có thể thị trường đã dự đoán trước thông tin. Cũng có thể giới đầu tư đang giao dịch theo tin đồn hoặc theo những dữ liệu hoạt động đã xuất hiện trước báo cáo. Event Study cho thấy thời điểm phản ứng, nhưng chưa đủ để xác định chính xác nguyên nhân.

Nếu CAR tăng mạnh ở ngày 0 rồi nhanh chóng quay về mức cũ, đó có thể là một phản ứng quá mức ban đầu. Nhưng cũng có thể nhà đầu tư đọc kỹ báo cáo hơn và phát hiện chất lượng lợi nhuận không tốt như tiêu đề. Ví dụ, lợi nhuận tăng nhờ bán tài sản hoặc ghi nhận khoản thu bất thường sẽ được đánh giá khác với lợi nhuận tăng nhờ hoạt động kinh doanh cốt lõi.

Nếu CAR tiếp tục đi lên trong nhiều phiên sau công bố, thị trường có thể đang hấp thụ thông tin chậm. Nhưng cửa sổ càng dài, càng khó khẳng định biến động vẫn đến từ sự kiện ban đầu, bởi trong khoảng thời gian đó có thể xuất hiện thêm tin về ngành, thị trường hoặc chính doanh nghiệp. Các nghiên cứu gần đây cũng nhấn mạnh rằng Event Study truyền thống cần được diễn giải thận trọng hơn trong giai đoạn biến động mạnh hoặc khi kéo dài thời gian quan sát.

Với thị trường Việt Nam, còn một điểm cần lưu ý là biên độ giá và thanh khoản. Một thông tin tiêu cực mạnh có thể khiến cổ phiếu giảm hết biên độ và dư bán lớn. Khi đó, phản ứng không thể hiện hết trong một ngày mà kéo dài sang nhiều phiên. Ngược lại, một cổ phiếu thanh khoản thấp có thể tăng mạnh chỉ từ vài lệnh mua lớn, nên lợi suất bất thường cao chưa chắc đại diện cho đánh giá của toàn thị trường.

Dữ liệu giá cũng phải được kiểm tra các ngày chia cổ tức, phát hành thêm hoặc điều chỉnh kỹ thuật. Nếu giá giảm vì cổ phiếu giao dịch không hưởng quyền mà dữ liệu chưa được xử lý phù hợp, chương trình có thể hiểu nhầm đó là phản ứng tiêu cực với sự kiện.

Một sự kiện riêng lẻ chỉ cho chúng ta một câu chuyện cụ thể. Muốn trả lời câu hỏi rộng hơn như “cổ phiếu Việt Nam thường phản ứng thế nào sau khi công bố lợi nhuận vượt kế hoạch?”, cần thu thập nhiều lần công bố của nhiều doanh nghiệp rồi tính phản ứng trung bình. Khi đó, kết quả mới bớt phụ thuộc vào một cổ phiếu hoặc một giai đoạn đặc biệt.

Giá trị lớn nhất của Event Study không nằm ở việc dự báo chắc chắn cổ phiếu sẽ tăng hay giảm sau tin. Nó nằm ở việc thay những nhận xét cảm tính như “ra tin là bị bán”, “chia cổ tức thì giá sẽ tăng” hay “lợi nhuận tốt thì cổ phiếu phải lên” bằng một câu hỏi có thể đo được:

Sau khi loại phần biến động của thị trường chung, cổ phiếu thực sự đã phản ứng như thế nào quanh ngày công bố?

Đôi khi cổ phiếu giảm giá nhưng vẫn phản ứng tốt hơn thị trường. Đôi khi giá tăng mạnh nhưng phần lớn chỉ là đi theo VN-Index. Và đôi khi sự kiện được công bố hôm nay, nhưng thị trường đã định giá nó từ nhiều phiên trước.