| Backtest Chiến Lược MA Bằng Python Golden Cross Death Cross So Sánh Buy Hold

Được viết bởi Đặng Trí Thanh vào ngày 10/08/2026 lúc 11:48 | 41 lượt xem

Backtest chiến lược MA bằng Python — Golden Cross, Death Cross, So sánh Buy & Hold

Ngày 56 – 2026-08-17 | Chuỗi Python 365 ngày | Hướng Nghiệp Dữ Liệu

Meta mô tả (SEO): Backtest MA20/MA50 Golden Cross Death Cross bằng Python. Tải giá lịch sử Stooq Binance, mô phỏng $10,000, drawdown, win rate, equity curve — Ngày 56 Python 365.

Từ khóa: backtest python, ma20 ma50, golden cross, death cross, backtest chung khoan, sma python, Python 365

Video: https://www.youtube.com/shorts/_rruPPUoHYM

Mục lục

1. [Vì sao phải backtest?](#1-vì-sao-phải-backtest)

2. [Golden Cross & Death Cross là gì?](#2-golden-cross–death-cross-là-gì)

3. [Tải dữ liệu lịch sử: Stooq + Binance Fallback](#3-tải-dữ-liệu-lịch-sử-stooq–binance-fallback)

4. [Tính SMA bằng Python thuần](#4-tính-sma-bằng-python-thuần)

5. [Tạo tín hiệu Golden Cross / Death Cross](#5-tạo-tín-hiệu-golden-cross–death-cross)

6. [Vòng lặp backtest — mô phỏng giao dịch](#6-vòng-lặp-backtest–mô-phỏng-giao-dịch)

7. [Tính chỉ số: Drawdown, Win Rate](#7-tính-chỉ-số-drawdown-win-rate)

8. [So sánh MA vs Buy & Hold](#8-so-sánh-ma-vs-buy–hold)

9. [Script Ngày 56 từng bước](#9-script-ngày-56-từng-bước)

10. [Chạy thử backtest AAPL (Apple)](#10-chạy-thử-backtest-aapl-apple)

11. [FAQ](#11-faq)

12. [Từ Ngày 55 đến 56 — Mảnh ghép hoàn chỉnh](#12-từ-ngày-55-đến-56–mảnh-ghép-hoàn-chỉnh)

13. [Kết luận](#13-kết-luận)

2. Golden Cross & Death Cross là gì?

Hai tín hiệu kinh điển trong phân tích kỹ thuật:

| Tín hiệu | Điều kiện | Hành động |

|—|—|—|

| Golden Cross ☀️ | MA nhanh (20) cắt LÊN MA chậm (50) | MUA — xu hướng tăng |

| Death Cross 💀 | MA nhanh (20) cắt XUỐNG MA chậm (50) | BÁN — xu hướng giảm |

Trực quan hóa:

Giá AAPL (2023-2024):
  $180 ┤         ╱╲        Golden Cross → MUA
  $170 ┤    ╱╲══╱──╲___     
  $160 ┤  ╱───────────╲___  Death Cross → BÁN
  $150 ┤╱                 ╲
       └──────────────────────
       MA20 (nhanh)  ····  MA50 (chậm)

4. Tính SMA bằng Python thuần

Không pandas, không numpy — chỉ Python stdlib:

def sma(values, window):
    out = [None] * len(values)
    total = 0.0
    for i, v in enumerate(values):
        total += v
        if i >= window:
            total -= values[i - window]   # ← trừ phần tử cũ
        if i >= window - 1:
            out[i] = total / window        # ← chia cho window
    return out

Tại sao code thế này?

  • O(n) — duyệt đúng 1 lần, không lặp lồng
  • Sliding window — cộng phần tử mới, trừ phần tử cũ
  • None padding — phần đầu chưa đủ dữ liệu = None
  • Ví dụ: SMA([1,2,3,4,5], window=3) → [None, None, 2.0, 3.0, 4.0]

    6. Vòng lặp backtest — mô phỏng giao dịch

    def backtest(dates, closes, sig, initial=10000.0):
        cash, shares = initial, 0.0
        equity, trades = [], []
        entry = None
    
        for i in range(len(closes)):
            if sig[i] == 1 and shares == 0:        # Tín hiệu MUA
                shares = cash / closes[i]           # Mua toàn bộ
                cash = 0.0
                entry = closes[i]
                trades.append({"date": dates[i], "type": "BUY"})
    
            elif sig[i] == -1 and shares > 0:      # Tín hiệu BÁN
                cash = shares * closes[i]           # Bán toàn bộ
                shares = 0.0
                trades.append({
                    "date": dates[i], "type": "SELL",
                    "pnl_pct": (closes[i] / entry - 1) * 100
                })
    
            equity.append(cash + shares * closes[i])  # Giá trị TK hôm nay
    
        return equity, trades

    Logic đơn giản:

    1. Có tín hiệu MUA + chưa có cổ → mua toàn bộ

    2. Có tín hiệu BÁN + đang có cổ → bán toàn bộ

    3. Mỗi ngày ghi lại equity = cash + shares × giá hiện tại

    8. So sánh MA vs Buy & Hold

    ret = (equity[-1] / equity[0] - 1) * 100    # Lợi nhuận MA
    bh = (closes[-1] / closes[0] - 1) * 100       # Buy & Hold
    print(f"MA: {ret:+.2f}%  |  Buy & Hold: {bh:+.2f}%  |  Vượt trội: {ret-bh:+.2f}%")

    Đây là câu hỏi triệu đô: Chiến lược của bạn có đánh bại được việc chỉ mua và giữ không? Nếu sau 3 năm backtest mà MA thua Buy & Hold — bạn đang phí công.

    10. Chạy thử backtest AAPL (Apple)

    python "Day 56_Backtest chien luoc MA.py"

    Kết quả mẫu (AAPL 2022-2026):

    ══════════════════════════════════════════════════════
       BACKTEST CHIẾN LƯỢC MA  |  Python 365 - Ngày 56
    ══════════════════════════════════════════════════════
      Cặp chỉ báo      : MA20 / MA50 (golden/death cross)
      Khoảng thời gian : 2022-01-03 → 2026-08-07  (1158 phiên)
      Vốn ban đầu      : $10,000
      Lợi nhuận MA     : +XX.XX%   → $XX,XXX
      Buy & Hold       : +XX.XX%
      Vượt trội        : +XX.XX%
      Drawdown tối đa  : XX.XX%
      Win rate         : XX.X%  (X/XX)
    ══════════════════════════════════════════════════════

    Ngoài ra script còn ghi file backtest_ma_log.csv với từng dòng: ngày, giá, MA20, MA50, tín hiệu, equity — để bạn phân tích sâu hơn trong Excel.

    12. Từ Ngày 55 đến 56 — Mảnh ghép hoàn chỉnh

    Chuỗi Python 365 đã đi được nửa hành trình thú vị:

    Ngày 48 → MA crossover (tín hiệu cơ bản)
    Ngày 51 → Telegram báo giá (thông báo)
    Ngày 55 → Binance đặt lệnh (thực thi)
    Ngày 56 → BACKTEST kiểm chứng (phân tích) ← HÔM NAY

    Bạn đã có đủ 4 lớp của một hệ thống trading:

    1. Phân tích — tín hiệu MA (Ngày 48)

    2. Thông báo — Telegram alert (Ngày 51)

    3. Thực thi — Binance order (Ngày 55)

    4. Kiểm chứng — Backtest (Ngày 56)

    Với 4 lớp này, bạn có thể:

  • Backtest bất kỳ chiến lược nào trước khi trade
  • Tự tin deploy bot lên VPS chạy 24/7
  • Biết chính xác expected return, drawdown, win rate
  • Đăng ký kênh YouTube Hướng Nghiệp Dữ Liệu để không bỏ lỡ bài nào!

    <a href="https://www.youtube.com/playlist?list=PLlvatcRiI_TLt4teIBQgtXBlGLAerk9Ce” target=”_blank”>▶ Playlist Python 365 · <a href="https://www.huongnghiepdulieu.com/” target=”_blank”>🌐 Website HNDL

    Đặng Trí Thanh

    Đặng Trí Thanh

    Giám đốc Công nghệ · DNT Digital · Giảng viên HNDL
    848 Bài viết
    15.4k Người theo dõi
    120k+ Lượt đọc

    Đặng Trí Thanh — Founder & CTO · Hướng Nghiệp Dữ Liệu - DNT Digital. Chuyên đào tạo và triển khai thực chiến Python, MT5 và hệ thống bot auto trading / IB cho học viên và doanh nghiệp.