Bài viết gần đây
-
Bot Telegram báo giá crypto — Python, Binance, cảnh báo ngưỡng
Tháng 8 9, 2026 -
Gọi API Claude và OpenAI bằng Python — AI vào app của bạn
Tháng 8 9, 2026
| 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?
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ể:
Đă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
Weekly Digest — Nhận Bản Tin Hàng Tuần
Nhận các bài viết phân tích kỹ thuật chuyên sâu, thuật toán giao dịch tự động (Trading Bot) và các giải pháp công nghệ mới nhất từ Hướng Nghiệp Dữ Liệu.
Đặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Giảng viên HNDLĐặ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.