Vì sao matplotlib quan trọng trong quant trading (không phải để “đẹp”)

23/02/2026

879 lượt đọc

Trong quant trading, đọc dữ liệu bằng bảng số thường làm người ta… tự lừa mình. Một backtest nhìn “đẹp” có thể chỉ là do bạn chưa nhìn thấy những thứ quan trọng: vùng sideway kéo dài, cú gap, giai đoạn thanh khoản yếu, hoặc drawdown âm ỉ nhưng rất dai. Chart là cách nhanh nhất để bóc lớp “ảo giác” đó.

Chương về matplotlib trong sách có một ý rất thực tế: trước khi nghĩ đến chiến lược, hãy vẽ chart. Vì chiến lược nào cũng cần “đúng môi trường”. Trend-following không hợp tài sản đi ngang; mean-reversion dễ chết trong giai đoạn breakout; intraday thì cực nhạy với biến động/khối lượng. Và chart là cách bạn nhìn thấy “regime” của thị trường trong vài giây.

Tư duy “figure + subplots” để đánh giá chiến lược như một hệ thống

Nhiều người mới làm quant hay mắc lỗi: chỉ vẽ price hoặc chỉ vẽ equity curve. Nhưng một hệ thống giao dịch phải được nhìn tối thiểu qua 3–4 góc: giá, tín hiệu, equity, drawdown, thậm chí thêm rolling volatility. Điểm hay của matplotlib là bạn tạo một “canvas” (figure) rồi chia nó thành nhiều cửa sổ (subplot) để nhìn được toàn cảnh cùng lúc.

Ví dụ workflow thực tế:

  1. Subplot 1: giá + tín hiệu (entry/exit)
  2. Subplot 2: equity curve (giá trị tài khoản theo thời gian)
  3. Subplot 3: drawdown (đo mức đau thật sự)
  4. Subplot 4: rolling volatility hoặc rolling Sharpe (để biết regime đổi chưa)

Nếu chỉ nhìn equity curve, bạn có thể bị “đánh lừa” bởi vài trade thắng lớn. Nhưng khi thêm drawdown, bạn sẽ thấy ngay chiến lược có đoạn “hấp hối” dài hay không. Đây là chỗ mà chương sách nói rất đúng: không có gì thay thế được một chart được thiết kế tử tế.

Dưới đây là khung code tối giản nhưng đúng tinh thần “xây hệ thống” (không chỉ vẽ cho vui). Bạn có thể thay dữ liệu giả bằng dữ liệu thật của VN30/VNINDEX/1 cổ phiếu bất kỳ.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# giả lập price (thay bằng dữ liệu thật của bạn)
np.random.seed(42)
n = 500
price = 100 + np.cumsum(np.random.randn(n)) # random walk
df = pd.DataFrame({"price": price})
df["ret"] = df["price"].pct_change().fillna(0)

# tín hiệu ví dụ: moving average crossover
fast = 10
slow = 30
df["ma_fast"] = df["price"].rolling(fast).mean()
df["ma_slow"] = df["price"].rolling(slow).mean()
df["signal"] = (df["ma_fast"] > df["ma_slow"]).astype(int) # 1 khi fast > slow
df["pos"] = df["signal"].shift(1).fillna(0)

# equity curve (giả sử không tính phí/slippage ở đây để minh họa)
df["strategy_ret"] = df["pos"] * df["ret"]
df["equity"] = (1 + df["strategy_ret"]).cumprod()

# drawdown
df["peak"] = df["equity"].cummax()
df["dd"] = df["equity"]/df["peak"] - 1

# vẽ 3 subplot chia sẻ trục x
fig, axes = plt.subplots(3, 1, figsize=(12, 10), sharex=True)

# 1) price + MA
axes[0].plot(df["price"], label="price")
axes[0].plot(df["ma_fast"], label=f"MA{fast}")
axes[0].plot(df["ma_slow"], label=f"MA{slow}")
axes[0].legend(loc="best")
axes[0].set_title("price và tín hiệu (moving average)")

# 2) equity curve
axes[1].plot(df["equity"], label="equity")
axes[1].legend(loc="best")
axes[1].set_title("equity curve")

# 3) drawdown
axes[2].plot(df["dd"], label="drawdown")
axes[2].legend(loc="best")
axes[2].set_title("drawdown")

plt.tight_layout()
plt.show()

Điểm quan trọng không phải “MA crossover” (cái này chỉ là ví dụ), mà là cách bạn đóng gói chiến lược thành một hệ thống có thể nhìn và kiểm tra. Khi bạn nhìn 3 biểu đồ cùng lúc, bạn trả lời được ngay những câu cực thực tế:

  1. equity tăng nhờ đều hay nhờ vài cú ăn may?
  2. drawdown sâu nhất là bao nhiêu? kéo dài bao lâu?
  3. giai đoạn sideway thì hệ thống bị bào mòn không?
  4. khi regime đổi (volatility tăng/giảm) thì performance có đổi không?

Đó mới là “giá trị” của matplotlib trong quant.

Trong thực tế, equity curve nên vẽ log nếu bạn nhìn dài hạn hoặc muốn so tăng trưởng theo % thay vì theo điểm. Vì tăng từ 1 lên 2 là +100%, tăng từ 100 lên 101 chỉ +1%. Nếu bạn không dùng log trong một số trường hợp, mắt bạn sẽ bị đánh lừa.

fig, ax = plt.subplots(figsize=(12, 4))
ax.plot(df["equity"])
ax.set_yscale("log")
ax.set_title("equity curve (log scale)")
plt.show()

Còn annotate thì cực hợp để “đóng đinh” các điểm quan trọng: cú rơi mạnh nhất, ngày equity lập đỉnh, hoặc điểm tín hiệu đảo chiều. Ví dụ bạn đánh dấu đáy drawdown:

dd_min_idx = df["dd"].idxmin()
fig, ax = plt.subplots(figsize=(12, 4))
ax.plot(df["dd"])
ax.annotate("max drawdown",
xy=(dd_min_idx, df.loc[dd_min_idx, "dd"]),
xytext=(dd_min_idx + 20, df["dd"].min()/2),
arrowprops=dict(facecolor="black", shrink=0.05))
ax.set_title("đánh dấu max drawdown")
plt.show()

fig.savefig("strategy_report.png", dpi=200)

Kết luận

Một chiến lược có thể có Sharpe đẹp, winrate cao, nhưng equity đi kiểu “leo dốc rồi rơi thẳng đứng” thì đó là chiến lược có tail risk. Ngược lại, một chiến lược return không quá ấn tượng nhưng drawdown kiểm soát tốt lại là thứ sống lâu. Matplotlib không tạo ra edge, nhưng nó giúp bạn nhìn thấy sự thật của hệ thống: nó kiếm tiền như thế nào, đau ở đâu, và có chịu nổi thị trường xấu không.

Nếu muốn làm bài post này “đúng vibe facebook” hơn nữa (ngắn hơn nhưng vẫn chất), nói mình sẽ rút lại thành 8–10 câu, giữ nguyên insight và ví dụ code quan trọng nhất.

Chia sẻ bài viết

Đánh giá

Hãy là người đầu tiên nhận xét bài viết này!

Đăng ký nhận tin

Nhập Email để nhận được bản tin mới nhất từ QM Capital.

Bài viết liên quan

Understanding Market Sentiment: Đọc vị thị trường để đưa ra quyết định giao dịch chính xác
21/04/2026
942 lượt đọc

Understanding Market Sentiment: Đọc vị thị trường để đưa ra quyết định giao dịch chính xác C

Trong giao dịch, rất nhiều người dành phần lớn thời gian để học cách đọc biểu đồ, học mô hình nến, học RSI, MACD, Bollinger Bands hay Fibonacci. Những thứ đó đều hữu ích. Nhưng sau một thời gian đủ dài, gần như ai cũng sẽ gặp cùng một vấn đề: biết tín hiệu nhưng vẫn vào sai lệnh, thấy mô hình đúng mà kết quả vẫn không như kỳ vọng. Lý do nằm ở chỗ thị trường không vận hành chỉ bằng kỹ thuật. Thị trường vận hành bằng kỳ vọng, định vị dòng tiền và cảm xúc tập thể. Nói cách khác, nếu chỉ đọc chart mà không đọc được tâm lý thị trường, chúng ta mới chỉ nhìn thấy “hình dạng” của giá, chứ chưa hiểu “động cơ” khiến giá vận động.

Vì sao trader thua không phải vì thiếu kiến thức, mà vì thiếu kỷ luật?
14/04/2026
393 lượt đọc

Vì sao trader thua không phải vì thiếu kiến thức, mà vì thiếu kỷ luật? C

Jesse Livermore là một trong những cái tên kinh điển nhất trong lịch sử trading. Điều khiến ông trở thành huyền thoại không chỉ nằm ở những thương vụ lớn, mà nằm ở cách ông quan sát thị trường và đúc kết ra các nguyên tắc giao dịch vượt thời gian. Dù thị trường ngày nay đã có thuật toán, dữ liệu lớn, phái sinh, margin, HFT và rất nhiều công cụ hiện đại, những bài học của Livermore vẫn còn nguyên giá trị, bởi bản chất sâu nhất của thị trường chưa từng thay đổi: con người vẫn bị chi phối bởi tham lam, sợ hãi, hy vọng và cái tôi.

Trading không phải là đoán đúng, mà là xây dựng lợi thế
14/04/2026
429 lượt đọc

Trading không phải là đoán đúng, mà là xây dựng lợi thế C

Đọc bài review của Steve Burns về cuốn The Man Who Solved the Market: Jim Simons, QM Capital thấy đây không chỉ là câu chuyện về một cá nhân xuất chúng, mà là một cách nhìn rất khác về thị trường tài chính. Jim Simons không bước vào thị trường với tư duy “hôm nay mua mã nào” hay “ngày mai thị trường tăng hay giảm”. Ông bước vào thị trường với niềm tin rằng: trong giá cả có những mẫu hình lặp lại, và nếu có đủ dữ liệu, đủ năng lực toán học, đủ công nghệ và đủ kỷ luật, con người có thể tìm ra lợi thế từ những mẫu hình đó.

Những mô hình nhiều nến đáng chú ý trong giao dịch chứng khoán và phái sinh Việt Nam - Phần 2
14/04/2026
435 lượt đọc

Những mô hình nhiều nến đáng chú ý trong giao dịch chứng khoán và phái sinh Việt Nam - Phần 2 C

Ở Phần 1, chúng ta đã nói về cách hình thành các mô hình giá phổ biến. Sang Phần 2, trọng tâm không còn là “mô hình đó trông như thế nào”, mà là mô hình nào có thể tạo tín hiệu tăng, mô hình nào cảnh báo tín hiệu giảm, và quan trọng hơn là trader nên đọc chúng ra sao trong thực chiến.

Cách hình thành các mô hình giá phổ biến trong phân tích kỹ thuật - Phần I
14/04/2026
573 lượt đọc

Cách hình thành các mô hình giá phổ biến trong phân tích kỹ thuật - Phần I C

Trong phân tích kỹ thuật, mô hình giá không chỉ là những đường kẻ trên biểu đồ. Mỗi mô hình thực chất là một “bản ghi” về tâm lý thị trường: bên mua đang mạnh lên hay yếu đi, bên bán đang phân phối hay mất kiểm soát, dòng tiền đang tích lũy hay rút ra. Khi nhìn một mô hình, điều quan trọng không phải là cố tìm cho giống hình mẫu trong sách, mà là hiểu được câu chuyện cung – cầu đang diễn ra phía sau.

Techniques for Trading Patterns: 4 Kỹ thuật quan trọng trong giao dịch chứng khoán và phái sinh Việt Nam
14/04/2026
429 lượt đọc

Techniques for Trading Patterns: 4 Kỹ thuật quan trọng trong giao dịch chứng khoán và phái sinh Việt Nam C

Trong giao dịch tài chính, đặc biệt là ở thị trường chứng khoán Việt Nam và phái sinh VN30, phần lớn trader thường bắt đầu bằng việc tìm kiếm tín hiệu vào lệnh. Họ học các mô hình giá, đường trung bình, RSI, MACD, Bollinger Bands, volume, nến Nhật và rất nhiều chỉ báo khác. Tuy nhiên, vấn đề không nằm ở việc thiếu tín hiệu. Vấn đề lớn hơn là trader không biết tín hiệu nào đáng tin, vào lệnh ở đâu, sai thì thoát ở đâu, và khi nào nên kiên nhẫn chờ giá điều chỉnh thay vì mua đuổi.

video-image

Truy Cập Miễn Phí Thư Viện Bot Tín Hiệu Giao Dịch Tự Động

Được nghiên cứu và phát triển bởi các chuyên gia từ QMTrade và cộng đồng nhà đầu tư chuyên nghiệp.

Truy cập ngay!