VN30F1M giảm mạnh thì hôm sau có hồi không? Dữ liệu từ 2017

· · Nghiên cứu thị trường

VN30F1M giảm mạnh thì hôm sau có hồi không? Dữ liệu từ 2017

> Tóm tắt nhanh: Sau 86 phiên giảm mạnh, phiên kế tiếp tăng trung bình +0,25%, nhỉnh hơn mức +0,09% của mọi phiên. Tuy vậy t-stat chỉ 0,99 nên chưa tách được khỏi may rủi. Nếu có hồi thì nó đến trong giờ giao dịch, vì lúc mở cửa giá thường còn bị đạp thêm một nhịp.

"Sau cú sập là nhịp hồi kỹ thuật." Câu này anh em trên diễn đàn gõ nhiều đến mức thành câu chào buổi tối. Hôm nào VN30F1M đỏ lòm là y như rằng có người vào hỏi mai long được chưa.

Câu cửa miệng nào nghe xuôi tai quá thì mình đều muốn đem ra đo, tính hơi cứng đầu. Lần này câu hỏi khá gọn: sau một phiên giảm (hoặc tăng) mạnh bất thường, phiên kế tiếp có xu hướng hồi lại hay đi tiếp? Nếu có hồi thì phần hồi đến lúc mở cửa hay trong phiên?

Đáp án ngắn trước cho anh em bận: có nhỉnh lên thật, nhưng nhỉnh trong vùng nhiễu. Chỗ đáng xem hơn lại nằm ở thời điểm giá hồi.

> Góc người mới (biết rồi thì lướt qua) > - VN30F1M: hợp đồng tương lai trên chỉ số VN30, đáo hạn tháng gần nhất. Không sở hữu cổ phiếu, chỉ ăn chênh lệch, long (cược tăng) hay short (cược giảm) đều được, mua bán trong ngày. > - Điểm và tiền: giá tính bằng điểm, mỗi điểm chạy là 100.000 đồng lãi/lỗ cho 1 hợp đồng, như biết giá mỗi ký là ra tiền chợ. > - σ (độ lệch chuẩn): mức "lắc" bình thường của giá. Xe buýt thường xê dịch 2 phút mà hôm nay trễ 4 phút là trễ "2σ", bất thường với chính tuyến đó. > - Khoảng trống (gap): chênh lệch giữa giá mở cửa hôm nay và giá đóng cửa hôm qua, tức phần giá chạy "qua đêm" lúc mình ngủ. > - t-stat: tín hiệu to hơn tiếng ồn bao nhiêu lần. Khoảng 2 trở lên thì khó đổ cho may, dưới 1 thì gần như là nhiễu. > - p-value: nếu thật ra không có hiệu ứng gì, xác suất vẫn thấy chênh lệch cỡ này do may là bao nhiêu. Dưới 0,05 mới bắt đầu đáng nghi.

Vì sao "sập xong là hồi" nghe hợp lý, và vì sao nó có thể sai

Phe tin có lý lẽ khá thuyết phục. Phái sinh Việt Nam có đòn bẩy, nhà đầu tư cá nhân chiếm tỷ trọng lớn. Một phiên rơi mạnh kéo theo hàng loạt lệnh cắt lỗ và bán cưỡng bức do thiếu ký quỹ. Những người này bán vì buộc phải bán, họ không có nhận định gì mới. Kiểu bán đó dễ đẩy giá đi quá đà, sang hôm sau áp lực bán cạn thì giá bật lại. Giống buổi chợ chiều có người cần về sớm, đổ đồng bán rẻ cả sạp, sáng mai giá lại về như cũ.

Ngược lại, nếu cú sập đến từ tin xấu thật, thị trường thường không tiêu hóa hết trong một buổi chiều. Người phản ứng chậm (quỹ cần họp, người đọc tin muộn) sẽ bán tiếp vào hôm sau, tạo quán tính. Biên độ ±7% còn có thể "chặn" một cú rơi lẽ ra sâu hơn, khiến phần chưa rơi hết dồn sang phiên kế tiếp.

Hai lực kéo ngược chiều nhau như vậy, muốn biết bên nào thắng thì phải đếm.

Mình đo thế nào

Dữ liệu là VN30F1M ghép thành chuỗi liên tục, từ nến 1 phút gộp thành nến ngày, giai đoạn 01/09/2017 đến 07/10/2026. Những ngày đổi hợp đồng đáo hạn (thứ Năm tuần thứ ba) và ngày đổi nguồn dữ liệu bị bỏ lợi suất đóng->đóng, vì giá nhảy ở mấy ngày đó là do đổi hợp đồng chứ thị trường không thật sự biến động. Sau khi lọc còn 2.032 phiên dùng được.

Một phiên được gọi là "sốc" khi trị tuyệt đối lợi suất hôm đó lớn hơn hoặc bằng 2 lần độ lệch chuẩn của 20 phiên trước. Đo theo σ cho công bằng: cùng một mức rơi, giữa mùa sóng to là chuyện thường, lúc thị trường đang ru ngủ mới là sốc. Để dễ hình dung, độ lệch chuẩn 20 phiên trung bình cả mẫu là 1,27%. Theo định nghĩa này có 86 phiên giảm mạnh và 81 phiên tăng mạnh. Với mỗi phiên, mình xem lợi suất phiên kế tiếp, rồi tách nó thành khoảng trống lúc mở cửa và phần chạy từ mở cửa đến đóng cửa.

Kết quả

Mốc so sánh trước đã

Cái sai phổ biến nhất khi kiểm tra kiểu này là quên mốc. Thị trường đi lên theo thời gian, nên "sau sập thì hôm sau tăng" có thể chỉ vì ngày nào cũng hơi nghiêng về tăng.

Lợi suất phiên kế tiếp (đóng->đóng) theo loại phiên hôm nay

| Nhóm | Số mẫu | Trung bình | Trung vị | Tỷ lệ dương | t-stat | |:---|---:|---:|---:|---:|---:| | Sau phiên giảm mạnh | 86 | +0,245% | +0,202% | 62,8% | 0,99 | | Sau phiên tăng mạnh | 81 | +0,145% | +0,067% | 55,6% | 1,10 | | Mọi phiên | 2.032 | +0,086% | +0,092% | 54,6% | 2,72 |

Dòng cuối là mốc: tính trên mọi phiên, phiên kế tiếp tăng trung bình +0,086%, tỷ lệ phiên tăng 54,6%, t-stat 2,72. Độ nghiêng dương này nhỏ nhưng khá chắc, nhờ số mẫu lớn.

Sau 86 phiên giảm mạnh, phiên kế tiếp tăng trung bình +0,245%, trung vị (con số đứng giữa khi xếp từ thấp đến cao) +0,202%, và 62,8% số lần là tăng. Trung vị cũng dương, nên con số trung bình không phải do một hai phiên hồi khủng kéo lên.

Quy ra tiền ở mức giá cuối mẫu 1.880,2 điểm, mức hồi trung bình đó tương đương khoảng +4,6 điểm, cỡ 460.200 đồng/hợp đồng.

Nghe thì ngon. Có điều t-stat chỉ 0,99, và khi so trực tiếp với nhóm mọi phiên bằng kiểm định Welch, p-value là 0,526. Dịch ra lời thường: chênh lệch này hoàn toàn có thể do tung đồng xu mà ra. Khoảng tin cậy 95% bằng bootstrap (lấy mẫu lại hàng nghìn lần để xem trung bình xê dịch cỡ nào) chạy từ -0,25% đến +0,70%, cắt qua số 0 rất ngọt.

Phía tăng mạnh còn nhạt hơn: phiên kế tiếp trung bình +0,145%, trung vị chỉ +0,067%, tỷ lệ tăng 55,6%, p-value so với mốc là 0,664. Không có dấu hiệu "tăng mạnh xong thì chỉnh", cũng không thấy quán tính rõ ràng.

Chia nhỏ theo độ mạnh của phiên hôm nay

![Lợi suất trung bình phiên kế tiếp theo độ lớn biến động hôm nay](https://quantvn.com/blog-assets/vn30f1m-sau-phien-giam-manh/buckets.png)

Hình 1: Lợi suất trung bình phiên kế tiếp theo độ lớn biến động hôm nay

Trục ngang chia phiên hôm nay thành sáu nhóm theo σ, rơi mạnh nhất bên trái, tăng mạnh nhất bên phải. Mỗi cột là lợi suất trung bình phiên kế tiếp, vạch dọc trên cột là khoảng tin cậy, vạch càng dài thì càng mù mờ.

Hình có một dáng nhẹ: đi từ trái vào giữa, các cột thấp dần, xuống chỉ còn +0,022% ở nhóm +1σ…+2σ. Hôm nay càng đỏ thì hôm sau càng hơi nghiêng về xanh. Có điều hai cột ngoài cùng, nơi mình quan tâm nhất, lại có thanh lỗi dài nhất vì đó là hai nhóm ít phiên nhất. Thanh lỗi các nhóm chồng lên nhau gần như toàn bộ, nên dáng thì có mà bằng chứng thì chưa.

Phần hồi đến lúc nào: mở cửa hay trong phiên?

Đây là phần mình thấy đáng tiền nhất của cả nghiên cứu.

Tách lợi suất phiên kế tiếp sau phiên giảm mạnh thành hai mảnh, khoảng trống lúc mở cửa trung bình là -0,218%, còn phần chạy từ mở cửa đến đóng cửa là +0,472%.

Quy ra tiền: lúc mở cửa giá thường bị đạp thêm khoảng 4,1 điểm (cỡ 410.700 đồng/hợp đồng, bất lợi cho người long), rồi trong phiên kéo lên khoảng 8,9 điểm (cỡ 886.800 đồng).

Câu chuyện này khác hẳn hình dung "sáng mai mở cửa xanh". Qua đêm, áp lực bán vẫn còn, giá mở thấp hơn đóng cửa hôm qua, ai long từ chiều hôm sập là phải gồng thêm một nhịp. Phần hồi, nếu có, đến sau khi mở cửa. Điều này khớp với cơ chế bán cưỡng bức: đợt bán cuối dồn vào đầu phiên rồi mới cạn.

Bên tăng mạnh thì ngược lại, khoảng trống +0,131% còn phần trong phiên chỉ +0,013%. Hôm sau thường mở cửa cao hơn chút rồi đi ngang.

Cũng phải nói rõ: mình chỉ có trung bình của hai mảnh này, chưa có t-stat riêng cho từng mảnh. Đây là một quan sát hợp lý về cơ chế, chưa phải kết luận đã kiểm định.

Nhìn xa hơn: 10 phiên sau

![Lợi suất cộng dồn trung bình trong 10 phiên sau ngày sự kiện](https://quantvn.com/blog-assets/vn30f1m-sau-phien-giam-manh/paths.png)

Hình 2: Lợi suất cộng dồn trung bình trong 10 phiên sau ngày sự kiện

Mỗi đường là lợi suất cộng dồn trung bình kể từ ngày sự kiện, đường nét đứt là mốc mọi phiên. Đường sau phiên giảm mạnh nằm trên mốc, đến cuối cửa sổ lên +0,93% so với +0,57% của mốc.

Chi tiết làm mình bớt hào hứng là đường sau phiên tăng mạnh cũng nằm trên mốc, kết thúc ở +1,02%. Cả sau sập lẫn sau bùng nổ đều đi lên tốt hơn bình thường, nên rất có thể cái đang được đo là "giai đoạn biến động mạnh thì sau đó hay có sóng", chưa chắc là hiệu ứng hồi riêng sau cú sập.

Qua từng giai đoạn

![Hiệu ứng có ổn định qua các giai đoạn không?](https://quantvn.com/blog-assets/vn30f1m-sau-phien-giam-manh/eras.png)

Hình 3: Hiệu ứng có ổn định qua các giai đoạn không?

Chia mẫu làm ba giai đoạn thì mỗi giai đoạn chỉ còn vài chục phiên giảm mạnh, nên đừng đọc từng cột quá kỹ. Dấu thì nhất quán, phiên kế tiếp sau giảm mạnh dương ở cả ba. Riêng giai đoạn 2017-2020, thời kỳ có tháng 3/2020, hiệu ứng gần như biến mất với +0,021%.

Độ lớn ở hai giai đoạn sau thì nhảy hẳn lên, lần lượt +0,455% và +0,287%. Một hiệu ứng mà lúc có lúc không tùy thời kỳ thì khó dựa vào.

Chỗ mình có thể sai

Điểm yếu lớn nhất là các phiên sốc dồn cục. Nhìn tám phiên giảm sâu nhất trong mẫu:

8 phiên giảm sâu nhất trong mẫu và diễn biến sau đó

| Ngày | Lợi suất hôm đó | Phiên kế tiếp | 5 phiên sau | |:---|---:|---:|---:| | 03/04/2025 | nan | nan | +2,99% | | 09/03/2026 | nan | nan | +4,84% | | 28/01/2021 | -7,00% | +6,99% | +10,79% | | 23/03/2020 | -6,99% | +0,14% | -6,69% | | 09/03/2020 | nan | nan | -13,17% | | 08/04/2025 | nan | nan | +10,71% | | 27/07/2020 | -6,98% | +4,23% | +4,35% | | 12/03/2020 | nan | nan | -2,06% |

Nhiều phiên dồn vào tháng 3/2020 và tháng 4/2025. Những ô "nan" là ngày lợi suất đóng->đóng bị loại theo quy tắc ở trên (theo mình hiểu là trùng ngày đổi hợp đồng hoặc đổi nguồn dữ liệu), chỉ còn giữ cột 5 phiên sau.

Hai phiên chạm sàn trong bảng cho thấy độ lệch giữa các lần. Phiên 28/01/2021 rơi kịch biên độ rồi hôm sau bật +6,99%. Còn 23/03/2020 cũng rơi sát sàn mà hôm sau chỉ +0,14%, và 5 phiên sau vẫn -6,69%.

Khi sự kiện dồn cục như vậy, số "câu chuyện độc lập" thực chất ít hơn nhiều so với số phiên đếm được, và t-stat ở trên thật ra còn lạc quan.

Kế đến là chưa trừ phí và trượt giá. Đúng những phiên sau sập là lúc sổ lệnh mỏng, chênh lệch mua bán rộng, vào lệnh đầu phiên dễ bị khớp xấu.

Cuối cùng, ngưỡng 2σ và cửa sổ 20 phiên là mình tự chọn. Ngưỡng chặt hơn hay cửa sổ dài hơn có thể ra con số khác. Mình chưa thử, và nếu thử chục cách rồi chỉ khoe cách đẹp nhất thì lại thành tự lừa mình.

Code để anh em tự chạy

Toàn bộ phần tính toán và vẽ hai hình chính nằm dưới đây.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter

# daily: DataFrame index = ngày, cột open, high, low, close và
#   ret    = lợi suất đóng->đóng (để NaN ở ngày đổi hợp đồng đáo hạn)
#   ret_oc = close / open - 1
# Ví dụ: daily = pd.read_csv("vn30f1m_daily.csv", index_col="date", parse_dates=True)

BLUE, ORANGE, NEUTRAL, INK2, AXIS = "#2a78d6", "#eb6834", "#b4b2a9", "#52514e", "#c3c2b7"
DOWN, UP, ALL = "Sau phiên giảm mạnh", "Sau phiên tăng mạnh", "Mọi phiên"
BINS = [-np.inf, -2, -1, 0, 1, 2, np.inf]
LABELS = ["≤ −2σ", "−2σ…−1σ", "−1σ…0", "0…+1σ", "+1σ…+2σ", "≥ +2σ"]
pct_axis = lambda ax, decimals=1: ax.yaxis.set_major_formatter(FuncFormatter(lambda v, _: f"{v*100:.{decimals}f}%"))
zero_line = lambda ax: ax.axhline(0, color=AXIS, linewidth=1)


def summarize(x) -> dict:
    """Số mẫu, trung bình, trung vị, tỷ lệ dương và t-stat của một chuỗi lợi suất."""
    x = pd.Series(x, dtype=float).dropna()
    n = len(x)
    std = x.std(ddof=1) if n > 1 else np.nan
    se = std / np.sqrt(n) if n > 1 else np.nan
    return {
        "n": n,
        "mean": x.mean(),
        "median": x.median(),
        "std": std,
        "win_rate": (x > 0).mean() if n else np.nan,
        "t_stat": x.mean() / se if n > 1 and se > 0 else np.nan,
        "ci95": 1.96 * se,
    }


def label_shock_days(daily: pd.DataFrame, k: float = 2.0, lookback: int = 20) -> pd.DataFrame:
    """Đánh dấu phiên 'sốc': lợi suất hôm nay vượt k lần độ lệch chuẩn của 20 phiên TRƯỚC đó."""
    d = daily.copy()
    d["ret_f"] = d["ret"].fillna(d["ret_oc"])  # ngày đổi hợp đồng: dùng mở->đóng thay cho đóng->đóng
    d["vol20"] = d["ret_f"].rolling(lookback, min_periods=15).std().shift(1)
    d["z"] = d["ret"] / d["vol20"]
    d["next_ret"] = d["ret"].shift(-1)                                   # phiên kế tiếp, đóng->đóng
    d["next_gap"] = (d["open"].shift(-1) / d["close"] - 1).where(d["next_ret"].notna())  # khoảng trống qua đêm
    d["next_oc"] = d["ret_oc"].shift(-1)                                 # phần trong phiên, mở->đóng
    d["event"] = np.select([d["z"] >= k, d["z"] <= -k], [UP, DOWN], "Phiên bình thường")
    d.loc[d["z"].isna(), "event"] = None
    return d


def next_day_by_bucket(d: pd.DataFrame) -> pd.DataFrame:
    """Thống kê lợi suất phiên kế tiếp theo từng nhóm độ lớn biến động hôm nay (tính bằng σ)."""
    d = d.dropna(subset=["z", "next_ret"]).copy()
    d["bucket"] = pd.cut(d["z"], BINS, labels=LABELS)
    return pd.DataFrame({b: summarize(g["next_ret"]) for b, g in d.groupby("bucket", observed=True)}).T


def forward_path(d: pd.DataFrame, mask: pd.Series, horizon: int = 10) -> pd.Series:
    """Lợi suất cộng dồn trung bình từ phiên 1 đến phiên `horizon` sau các ngày thỏa `mask`."""
    fwd = pd.concat({h: d["ret_f"].shift(-h) for h in range(1, horizon + 1)}, axis=1).cumsum(axis=1)
    return pd.concat([pd.Series({0: 0.0}), fwd[mask].mean()])


def plot_buckets(tab: pd.DataFrame):
    fig, ax = plt.subplots(figsize=(8.4, 4.6))
    x = np.arange(len(tab))
    colors = [ORANGE if i == 0 else BLUE if i == len(tab) - 1 else NEUTRAL for i in x]
    ax.bar(x, tab["mean"], color=colors, width=0.6, zorder=2)
    ax.errorbar(x, tab["mean"], yerr=tab["ci95"], fmt="none", ecolor=INK2, elinewidth=1, capsize=3, zorder=3)
    ax.set_xticks(x, [f"{b}\n{int(n)} phiên" for b, n in zip(tab.index, tab["n"])])
    zero_line(ax)
    pct_axis(ax, decimals=2)
    ax.set_xlabel("Lợi suất hôm nay so với độ lệch chuẩn 20 phiên trước (σ)")
    ax.set_title("Lợi suất trung bình phiên kế tiếp (thanh lỗi = khoảng tin cậy 95%)")
    return fig


def plot_paths(paths: dict[str, pd.Series]):
    fig, ax = plt.subplots(figsize=(8.4, 4.6))
    for (name, s), color in zip(paths.items(), [ORANGE, BLUE, NEUTRAL]):
        ax.plot(s.index, s.values, color=color, marker="o", ms=4, ls="--" if name == ALL else "-", label=name)
        ax.annotate(name, (s.index[-1], s.values[-1]), xytext=(8, 0), textcoords="offset points",
                    va="center", color=INK2, fontsize=9.5)
    zero_line(ax)
    pct_axis(ax, decimals=1)
    ax.set_xlim(-0.3, len(s) + 2.6)
    ax.set_xticks(range(0, len(s)))
    ax.set_xlabel("Số phiên sau ngày sự kiện")
    ax.set_title("Lợi suất cộng dồn trung bình sau ngày sự kiện")
    ax.legend(loc="upper left")
    return fig


d = label_shock_days(daily, k=2.0)
print(next_day_by_bucket(d)[["n", "mean", "win_rate", "t_stat"]])
plot_buckets(next_day_by_bucket(d)).savefig("buckets.png", dpi=150)
paths = {DOWN: forward_path(d, d["event"] == DOWN), UP: forward_path(d, d["event"] == UP),
         ALL: forward_path(d, d["event"].notna())}
plot_paths(paths).savefig("paths.png", dpi=150)

Hàm label_shock_days lấy lợi suất từng ngày, tính độ lệch chuẩn của 20 phiên trước ngày đó (dịch đi một ngày để không nhìn trộm hôm nay), rồi chia lợi suất hôm nay cho con số đó ra điểm z. Điểm z vượt ngưỡng k theo chiều dương là tăng mạnh, theo chiều âm là giảm mạnh, và hàm cũng tạo sẵn ba cột cho phiên kế tiếp: đóng->đóng, khoảng trống qua đêm (mở cửa mai chia đóng cửa nay) và phần mở->đóng. next_day_by_bucket xếp các phiên vào sáu nhóm theo z, rồi gọi summarize để tính số mẫu, trung bình, trung vị, tỷ lệ tăng, t-stat và nửa độ rộng khoảng tin cậy từ sai số chuẩn cho từng nhóm. forward_path cộng dồn lợi suất các phiên sau mỗi ngày sự kiện rồi lấy trung bình, ra các đường trong hình 10 phiên.

Vậy dùng được gì khi giao dịch?

Mình coi kết quả này là gió, chưa đủ làm buồm. Sau một phiên sập, phiên kế tiếp hơi nghiêng về phía hồi, đủ để không vội short đuổi theo đúng lúc giá vừa rơi sâu, nhưng chưa đủ để long mù quáng. Bài học thực tế nhất nằm ở phần tách khoảng trống: giá mở cửa hôm sau trung bình còn tệ hơn giá đóng cửa hôm sập, nên ôm lệnh bắt đáy qua đêm từ chiều hôm sập là trả thêm tiền để gánh rủi ro qua đêm.

Phái sinh có đòn bẩy, phiên sau cú sập thường biên độ rộng, phí cộng trượt giá có thể nuốt sạch vài điểm lợi thế, còn ai đánh cổ phiếu cơ sở thì vướng T+2, không xoay kịp trong phiên.

Hỏi đáp

Tỷ lệ tăng sau sập cao hơn hẳn ngày thường, sao bác vẫn bảo là nhiễu? Vì mẫu chỉ có vài chục lần, lại dồn cục theo vài đợt khủng hoảng. Kiểm định so trực tiếp với mốc cho p-value cách xa mốc 0,05, nghĩa là chênh lệch cỡ này xảy ra do may là chuyện bình thường. Thắng mấy ván bài liền trong một bữa nhậu cũng chưa đủ chứng minh mình giỏi.

Biên độ ±7% có làm sai kết quả không? Có thể. Những phiên chạm sàn như hai phiên ở trên bị chặn lại, phần chưa rơi hết có thể dồn sang hôm sau, góp phần vào khoảng trống âm lúc mở cửa. Mình chưa tách riêng nhóm chạm trần/sàn, đó là chỗ đáng kiểm tra tiếp.

Thế sao không thử luôn chiến lược mua lúc mở cửa phiên sau sập, bán ATC (lệnh khớp ở giá đóng cửa)? Phần mở->đóng dương rõ đúng là gợi ý hướng đó, và đây là biến thể mình thấy đáng tự thử nhất: tính t-stat riêng cho phần mở->đóng, trừ phí và trượt giá thực tế, rồi chạy lại với ngưỡng chặt hơn 2σ. Qua được cả ba bước mà vẫn dương thì mới đáng bàn tiếp.

Kết

"Sau cú sập là nhịp hồi" không sai hẳn: sau 86 cú giảm mạnh, phiên kế tiếp tăng trung bình +0,245%, so với +0,086% của mọi phiên. Nhưng với t-stat 0,99 thì đó vẫn là câu cửa miệng có chút cơ sở, chưa thành quy luật. Thứ đáng nhớ hơn là trật tự: qua đêm còn bị đạp thêm, phần hồi nếu có thì đến trong phiên.

Bài viết chỉ nhằm mục đích nghiên cứu và chia sẻ kiến thức, không phải khuyến nghị đầu tư.

---

Muốn tự kiểm chứng một ý tưởng như thế này? Bạn có thể dựng chiến lược, backtest và chạy paper trading ngay trên nền tảng QuantVN. Xem thêm các nghiên cứu khác về phái sinh trong bài tổng hợp Chứng khoán phái sinh VN30F1M: dữ liệu nói gì.