Bài viết gần đây
-
Quản lý CRM toàn diện: Từ lead đến học viên trung thành
Tháng 8 16, 2026 -
Auto Trading MQL5: Xây Dựng Bot Giao Dịch Tự Động Trên MetaTrader 5
Tháng 8 15, 2026
| Thực Hành Buổi 18: Bot Swing Trading Hoàn Chỉnh Dự Án 2
Được viết bởi Đặng Trí Thanh vào ngày 27/06/2026 lúc 20:32 | 25 lượt xem
Dự án 2 hoàn thiện ở buổi 18 — Bot Swing Trading kết hợp Trend Following và Breakout, đối lập hoàn toàn với phong cách Scalping ở Dự án 1.
Khung Bot Swing hoàn chỉnh
if xu_huong_manh and breakout_tang:
vao_lenh_mua(sl=gia_vao * 0.95, tp=gia_vao * 1.15) # SL/TP rộng hơn scalping nhiều
So sánh trực tiếp Dự án 1 (Scalping) và Dự án 2 (Swing) giúp học viên hiểu rõ: không có chiến lược “tốt nhất tuyệt đối”, chỉ có chiến lược phù hợp với khung thời gian và tâm lý chịu đựng rủi ro của từng người.
📌 Muốn tự tay xây dựng Bot Auto Trading hoàn chỉnh bằng Python?
Khóa Vibe Code Python Bot Auto Trading (K11) tại Hướng Nghiệp Dữ Liệu — 24 buổi đi từ nền tảng Python đến triển khai Bot thật trên VPS, có Coaching 1-1 trong 1 năm.
📞 Hotline/Zalo: 0927 909 257
Mở rộng — Tại sao Swing khác Scalping?
Bot Swing Trading trong Dự án 2 kết hợp Trend Following và Breakout, đối lập với Scalping ở Dự án 1. Hiểu rõ sự khác biệt giúp chọn phong cách phù hợp với khung thời gian và tâm lý của bạn.
| Tiêu chí | Scalping (Dự án 1) | Swing (Dự án 2) |
|---|---|---|
| Khung thời gian | M1–M15 | H1–H4/D1 |
| Thời gian giữ lệnh | Giây–phút | Vài giờ–vài ngày |
| SL/TP | Chặt, nhỏ | Rộng, nhiều |
| Số lệnh/ngày | Nhiều | Ít |
| Rủi ro chính | Phí + nhiễu | Giữ qua đêm, gap |
Mở rộng — Logic vào lệnh Swing
Bot swing chỉ vào khi xu hướng mạnh và có breakout xác nhận, đúng tinh thần Dự án 2.
# [SWING SIGNAL - PYTHON]
def swing_signal(close, ema_fast, ema_slow, breakout_level, volume_ma):
trend_up = ema_fast > ema_slow
breakout = close > breakout_level
volume_ok = volume > volume_ma * 1.2
if trend_up and breakout and volume_ok:
return "BUY"
return "WAIT"
Mở rộng — Quản lý lệnh và vốn
Vì SL/TP rộng hơn, position sizing cần tính kỹ để rủi ro mỗi lệnh không vượt ngân sách.
# [SIZING - PYTHON]
def lot_size(equity, risk_pct, sl_distance):
risk_amount = equity * risk_pct
return risk_amount / sl_distance
- Rủi ro mỗi lệnh 1–2% tài khoản.
- Kết hợp trailing stop để giữ lợi nhuận khi xu hướng kéo dài.
- Chỉ giữ lệnh theo kế hoạch, không “biến” swing thành giữ mãi.
Mở rộng — Backtest và tinh chỉnh
# [BACKTEST - PYTHON]
def backtest_swing(df, signal_col, returns, sl, tp):
# mô phỏng đơn giản: vào theo tín hiệu, thoát SL/TP
pnl = []
for i in range(len(df)):
if signal_col[i] == "BUY":
pnl.append(tp if ... else sl)
return sum(pnl)
So sánh kết quả swing với scalping trên cùng dữ liệu để chọn phong cách phù hợp với tâm lý và khung giờ của bạn.
FAQ mở rộng
Phong cách nào dễ học hơn? Swing ít lệnh hơn, dễ quản lý hơn cho người mới; scalping đòi hỏi kỷ luật và tốc độ cao.
Có cần theo dõi liên tục không? Swing có thể kiểm tra vài lần/ngày, phù hợp người đi làm.
Học ở đâu? Khóa Vibe Code Python Bot Auto Trading (K11) — 24 buổi từ nền tảng đến triển khai Bot trên VPS, coaching 1-1. Hotline/Zalo: 0927 909 257.
Mở rộng — Vòng đời một lệnh Swing
Hiểu vòng đời lệnh giúp bot quản lý chính xác từ vào đến thoát.
# [VÒNG ĐỜI LỆNH - PYTHON]
STATES = ["SIGNAL", "OPENED", "TRAILING", "EXITED", "STOPPED"]
# Mỗi trạng thái có điều kiện chuyển rõ ràng
# SIGNAL -> OPENED khi lệnh khớp
# OPENED -> TRAILING khi giá có lợi nhuận +2R
# TRAILING -> EXITED khi chạm trailing
# OPENED/TRAILING -> STOPPED khi chạm SL
Mở rộng — Trend Following + Breakout kết hợp
Dự án 2 không chỉ dùng một kỹ thuật mà kết hợp hai tín hiệu bổ trợ nhau.
- Trend Following: Chỉ giao dịch theo xu hướng lớn (EMA200, EMA50).
- Breakout: Vào lệnh khi giá phá vùng kháng cự với volume xác nhận.
- Khi hai tín hiệu đồng thuận → chất lượng lệnh cao hơn.
# [KẾT HỢP - PYTHON]
def swing_combined(close, ema50, ema200, resistance, volume, vol_ma):
trend_up = ema50 > ema200 and close > ema200
breakout = close > resistance
vol_ok = volume > vol_ma * 1.2
return trend_up and breakout and vol_ok
Mở rộng — Quản lý tâm lý khi chạy bot swing
- Đặt kỳ vọng lợi nhuận thực tế — swing có chuỗi lệnh thua.
- Theo dõi drawdown thay vì từng lệnh lẻ.
- Không tăng lot sau khi thua (martingale rủi ro cao).
- Kiểm tra bot định kỳ, cập nhật theo điều kiện thị trường.
FAQ mở rộng 2
Swing phù hợp với ai? Người có công việc bận rộn, không theo dõi liên tục, chấp nhận giữ lệnh lâu.
Dự án 2 có cần VPS không? Có thể chạy trên máy cá nhân khi thời gian giữ lệnh dài, nhưng VPS ổn định hơn.
Học ở đâu? Khóa Vibe Code Python Bot Auto Trading (K11) — Hotline/Zalo: 0927 909 257.
Mở rộng — Ví dụ bot swing hoàn chỉnh (khung)
Dưới đây là khung bot swing kết hợp Trend Following và Breakout như Dự án 2.
# [BOT SWING - PYTHON]
class SwingBot:
def __init__(self, equity=10000, risk_pct=0.02):
self.equity = equity
self.risk_pct = risk_pct
self.position = None
def on_bar(self, close, ema50, ema200, resistance, volume, vol_ma):
if self.position:
self.manage(self.position, close)
return
if swing_combined(close, ema50, ema200, resistance, volume, vol_ma):
self.open_buy(close)
def open_buy(self, price):
sl = price * 0.95 # SL rộng hơn scalping nhiều
tp = price * 1.15 # TP xa hơn
lot = lot_size(self.equity, self.risk_pct, price - sl)
self.position = {"sl": sl, "tp": tp, "lot": lot}
Mở rộng — Trailing stop theo xu hướng
Swing cần trailing để giữ lợi nhuận khi xu hướng kéo dài, không chốt sớm.
# [TRAILING - PYTHON]
def trailing_stop(position, price, trail_pct=0.03):
new_sl = price * (1 - trail_pct)
if new_sl > position["sl"]:
position["sl"] = new_sl # chỉ tăng SL, không giảm
return position
Mở rộng — Đo lường kết quả Dự án 1 vs Dự án 2
| Chỉ số | Scalping (D1) | Swing (D2) |
|---|---|---|
| Số lệnh/tuần | ~50 | ~5 |
| Win rate | Thấp hơn | Cao hơn |
| Profit factor | ~1.1 | ~1.5 |
| Thời gian theo dõi | Liên tục | Ít |
| Độ khó tâm lý | Cao | Trung bình |
FAQ mở rộng 3
Có nên chạy cả 2 bot cùng lúc? Có thể, nhưng tách vốn và theo dõi riêng để đánh giá hiệu quả từng phong cách.
Bài học lớn nhất từ Dự án 2? Không có chiến lược “tốt nhất tuyệt đối” — chỉ có chiến lược phù hợp với khung thời gian và tâm lý của bạn.
Học ở đâu? Khóa Vibe Code Python Bot Auto Trading (K11) — 24 buổi, coaching 1-1. Hotline/Zalo: 0927 909 257.
Mở rộng — Phân tích multi-timeframe cho swing
Swing thường dùng đa khung: D1 xác định xu hướng, H4 xác định điểm vào.
# [MULTI-TF - PYTHON]
def swing_mtf(d1_close, h4_close, d1_ema200, h4_ema50):
d1_trend_up = d1_close > d1_ema200
h4_trend_up = h4_close > h4_ema50
if d1_trend_up and h4_trend_up:
return "BUY"
if not d1_trend_up and not h4_trend_up:
return "SELL"
return "WAIT" # xu hướng mâu thuẫn
Mở rộng — Quản lý nhiều lệnh swing
- Giới hạn số vị thế mở đồng thời.
- Mỗi lệnh có SL/TP riêng theo kế hoạch.
- Tổng rủi ro các lệnh không vượt ngân sách.
# [QUẢN LÝ POS - PYTHON]
def total_risk(positions, equity):
return sum(p.risk_amount for p in positions) / equity
# Giới hạn tổng rủi ro < 6% tài khoản
if total_risk(positions, equity) > 0.06:
block_new_positions()
Mở rộng — Theo dõi và báo cáo swing
# [REPORT SWING - PYTHON]
def swing_report(trades, equity):
wins = trades[trades.pnl > 0]
avg_win = wins.pnl.mean()
avg_loss = trades[trades.pnl <= 0].pnl.mean()
return {
"expectancy": trades.pnl.mean() / equity,
"avg_win": avg_win,
"avg_loss": avg_loss,
"num": len(trades),
}
FAQ mở rộng 4
Dùng khung nào cho swing? H4 + D1 là cân bằng phổ biến; có thể thêm W1 cho xu hướng dài.
Bao lâu xem lại bot swing? Hàng ngày kiểm tra trạng thái, hàng tuần đánh giá báo cáo.
Học ở đâu? Khóa Vibe Code Python Bot Auto Trading (K11) — Hotline/Zalo: 0927 909 257.
Mở rộng — Phân tích tâm lý và kỷ luật swing
Swing đòi hỏi kỷ luật khác scalping: chấp nhận thời gian giữ lệnh lâu và không can thiệp thường xuyên.
- Không đóng lệnh sớm vì “sợ” — tin vào kế hoạch.
- Không dời SL xa hơn để “cứu” lệnh thua.
- Theo dõi kết quả theo tuần/tháng, không theo từng lệnh.
# [KỶ LUẬT - PYTHON]
def check_discipline(trades):
# phát hiện dời SL bất thường
moved_sl = trades[trades.sl_moved == True]
if len(moved_sl) > 0:
print("Cảnh báo: phát hiện dời SL — kiểm tra kỷ luật")
Mở rộng — So sánh tổng quan Dự án 1 vs Dự án 2
Hai dự án giúp học viên hiểu: không có chiến lược “tốt nhất tuyệt đối”, chỉ có chiến lược phù hợp với khung thời gian và tâm lý.
| Khung | Scalping | Swing |
|---|---|---|
| Tần suất | Cao | Thấp |
| Thời gian | Giây-phút | Ngày |
| Tâm lý | Áp lực cao | Kiên nhẫn |
| Phù hợp | Chuyên nghiệp full-time | Người đi làm |
FAQ mở rộng 5
Có thể chuyển từ scalping sang swing không? Hoàn toàn được — thực ra nhiều người thấy swing dễ quản lý hơn.
Bài học cốt lõi của Dự án 2? Trend + Breakout + kỷ luật quản lý lệnh tạo nên bot swing bền vững.
Học ở đâu? Khóa Vibe Code Python Bot Auto Trading (K11) — Hotline/Zalo: 0927 909 257.
Mở rộng — Kiểm thử bot swing trước khi live
Một bot swing chất lượng phải qua các bước kiểm thử nghiêm túc.
# [KIỂM THỬ - PYTHON]
def validate_bot(bot, data):
results = {
"backtest_pf": bot.backtest(data).profit_factor,
"forward_win": bot.forward_test(data).win_rate,
"max_dd": bot.max_drawdown,
}
if results["backtest_pf"] < 1.2 or results["forward_win"] < 0.45:
return "CHƯA ĐẠT"
return "SẴN SÀNG LIVE NHỎ"
Mở rộng — Vận hành bot trên VPS
- Chọn VPS ổn định gần sàn/broker.
- Cài đặt Python + các thư viện cần thiết.
- Chạy bot dưới service/PM2 tự khởi động lại.
- Gửi cảnh báo Telegram khi bot dừng hoặc lỗi.
# [VPS - BASH]
# pm2 start bot_swing.py --name swing_bot
# pm2 save
# pm2 startup
Mở rộng — Báo cáo hàng tháng và cải tiến
# [BÁO CÁO THÁNG - PYTHON]
def monthly_report(trades):
return {
"trades": len(trades),
"win_rate": (trades.pnl > 0).mean(),
"profit_factor": pf(trades),
"max_dd": max_drawdown(trades),
"net_pnl": trades.pnl.sum(),
"avg_hold_hours": trades.hold_hours.mean(),
}
Đánh giá hàng tháng giúp phát hiện sớm chiến lược hết hiệu quả và điều chỉnh kịp thời.
FAQ mở rộng 6
VPS có cần cấu hình mạnh không? Bot swing nhẹ; VPS rẻ là đủ, quan trọng độ ổn định và uptime.
Khi nào nên thay đổi chiến lược? Khi profit factor giảm liên tục vài tháng hoặc drawdown vượt ngưỡng.
Học ở đâu? Khóa Vibe Code Python Bot Auto Trading (K11) — 24 buổi, triển khai Bot trên VPS, coaching 1-1. Hotline/Zalo: 0927 909 257.
Mở rộng — Các câu hỏi thực hành Bot Swing
- Vì sao SL/TP của swing rộng hơn scalping?
- Trend Following và Breakout kết hợp thế nào?
- Multi-timeframe dùng khung nào?
- Làm sao quản lý tổng rủi ro nhiều lệnh?
- Khi nào coi bot swing “đủ tốt” để live?
Mở rộng — Bảng checklist triển khai
| Bước | Nội dung | Trạng thái |
|---|---|---|
| 1 | Xác định khung H4/D1 và xu hướng | ☐ |
| 2 | Viết tín hiệu Trend + Breakout | ☐ |
| 3 | Sizing với rủi ro 1–2%/lệnh | ☐ |
| 4 | Trailing stop quản lý lợi nhuận | ☐ |
| 5 | Backtest + forward test | ☐ |
| 6 | Deploy VPS + cảnh báo | ☐ |
Mở rộng — Kết luận cuối cùng Dự án 2
Bot Swing Trading (Dự án 2) hoàn thiện bài học: kết hợp Trend Following và Breakout, quản lý lệnh với SL/TP rộng, sizing và multi-timeframe. Đối lập với Scalping ở Dự án 1, swing phù hợp người đi làm và giúp bạn hiểu: không có chiến lược tốt nhất tuyệt đối — chỉ có chiến lược phù hợp với khung thời gian và tâm lý của bạn.
📖 Vibe Code Python Bot Auto Trading (K11) · Hotline/Zalo: 0927 909 257 · Lịch khai giảng
Mở rộng — Ví dụ nâng cao: kết hợp nhiều tín hiệu
Swing hiệu quả khi nhiều tín hiệu đồng thuận: xu hướng, breakout, volume và tâm lý thị trường.
# [NHIỀU TÍN HIỆU - PYTHON]
def score_signal(df):
score = 0
if df.trend_up: score += 1
if df.breakout: score += 1
if df.volume_ok: score += 1
if df.above_vwap: score += 1
return score
# Chỉ vào lệnh khi score >= 3 (đồng thuận mạnh)
if score_signal(df) >= 3:
open_position()
Mở rộng — Quản lý thời gian giữ lệnh
- Đặt khung thời gian tối đa giữ lệnh (time stop).
- Thoát khi xu hướng yếu dù chưa chạm SL/TP.
- Tránh giữ lệnh qua sự kiện lớn (tin tức, FOMC).
# [TIME STOP - PYTHON]
def check_time_stop(position, max_hold_hours=72):
hold = (datetime.now() - position.opened_at).total_seconds() / 3600
if hold > max_hold_hours:
close_position(position, reason="TIME_STOP")
Mở rộng — Cộng đồng và nguồn học
- Tham gia cộng đồng HNDL để trao đổi kinh nghiệm.
- Theo dõi các buổi thực hành K11 để hiểu quy trình.
- Đọc tài liệu và thực hành từng bước, không vội.
FAQ mở rộng 7
Bao nhiêu tín hiệu đồng thuận là đủ? Tùy chiến lược; 3/4 là điểm cân bằng tốt giữa chất lượng và tần suất.
Time stop có cần thiết không? Có — tránh giữ lệnh vô thời hạn khi xu hướng không diễn ra.
Học ở đâu? Khóa Vibe Code Python Bot Auto Trading (K11) — Hotline/Zalo: 0927 909 257.
Mở rộng — Ví dụ thực tế một chuỗi lệnh swing
Minh họa cách bot xử lý chuỗi lệnh: thắng, thua, và quản lý drawdown.
# [CHUỖI LỆNH - PYTHON]
trades_pnl = [120, -80, 150, -60, 200, -100, 90, -70]
equity = 10000
peak = 10000
for pnl in trades_pnl:
equity += pnl
peak = max(peak, equity)
dd = (peak - equity) / peak
print(f"P&L {pnl:+} | equity {equity:.0f} | DD {dd:.2%}")
Mở rộng — Tâm lý khi chuỗi lệnh thua
- Chuỗi thua là bình thường — đừng đổi chiến lược vội.
- Tin vào kỳ vọng dương và quản lý vốn.
- Giảm lot khi drawdown vượt ngưỡng, không tăng.
# [GIẢM RỦI RO - PYTHON]
def dynamic_lot(equity, peak):
dd = (peak - equity) / peak
if dd > 0.05:
return BASE_LOT * 0.5 # giảm nửa khi DD > 5%
if dd > 0.10:
return BASE_LOT * 0.25
return BASE_LOT
FAQ mở rộng 8
Bao lâu mới hồi phục sau drawdown? Tùy chiến lược; quan trọng là drawdown nhỏ hơn tốc độ tăng trưởng.
Có nên dừng hẳn khi thua? Chỉ dừng khi chiến lược hết hiệu quả (kiểm chứng bằng số liệu), không vì cảm xúc.
Học ở đâu? Khóa Vibe Code Python Bot Auto Trading (K11) — Hotline/Zalo: 0927 909 257.
Bot giao dịch tự động và vai trò của thực hành buổi 18
Bot giao dịch tự động (trading bot) thực thi lệnh theo lập trình, loại bỏ cảm xúc và đảm bảo kỷ luật. Thực Hành Buổi 18 là một phần quan trọng trong hệ thống, giúp nhà đầu tư kiểm soát toàn bộ quy trình từ tín hiệu đến lệnh thực tế.
Bài viết này phân tích chi tiết về thực hành buổi 18: kiến trúc hệ thống, cách xây dựng, quản lý rủi ro, và những sai lầm phổ biến khiến bot thua lỗ.
| Thành phần | Chức năng | Ví dụ |
|---|---|---|
| Thu thập dữ liệu | Lấy giá realtime | Binance API, MT5 |
| Xử lý tín hiệu | Tính toán điểm vào/ra | Python strategy |
| Quản lý lệnh | Đặt/sửa/đóng lệnh | python-binance, MT5 |
| Quản lý vốn | Tính khối lượng theo rủi ro | risk module |
| Cảnh báo | Thông báo kết quả | Telegram Bot |
Kiến trúc một bot giao dịch chuẩn
Một bot tốt không chỉ gồm phần sinh tín hiệu mà còn có lớp quản lý lệnh, quản lý vốn và giám sát lỗi. Tách lớp giúp bạn dễ kiểm thử và nâng cấp từng phần mà không phá vỡ toàn hệ thống.
# Vòng lặp chính của bot
import time
while True:
price = get_price()
signal = strategy(price)
if signal == 'BUY':
open_position()
elif signal == 'SELL':
close_position()
time.sleep(60)
Quản lý rủi ro — yếu tố sống còn
| Nguyên tắc | Mô tả | Áp dụng |
|---|---|---|
| Rủi ro cố định/lệnh | Không mạo hiểm quá 1-2% | Tính lot tự động |
| Dừng lỗ bắt buộc | Giới hạn thua mỗi lệnh | Stop loss luôn bật |
| Không gồng lỗ | Cắt lỗ ngay khi sai | Đóng lệnh theo điều kiện |
| Phân bổ vốn | Không dồn hết vào 1 cặp | Đa dạng hóa tài sản |
| Backtest trước | Kiểm chứng trước khi live | Backtest ít nhất 1 năm |
Dù chiến lược tốt đến đâu, nếu quản lý rủi ro kém thì tài khoản vẫn có thể cháy. Hãy coi quản lý vốn là phần quan trọng nhất của hệ thống.
Các sai lầm khiến bot thua lỗ
Sai lầm phổ biến nhất là tin vào backtest đẹp mà quên chi phí giao dịch và trượt giá. Một bot lời 10% trong backtest có thể lỗ ngoài thực tế nếu không tính spread, phí và độ trễ khớp lệnh.
Sai lầm thứ hai là chạy bot mà không giám sát. Bot có thể dừng do mất mạng, hết API credit hoặc lỗi logic. Cần có cảnh báo Telegram và log đầy đủ.
Mẹo vận hành bot ổn định 24/7
Để bot chạy liên tục, hãy dùng VPS thay vì máy cá nhân, cấu hình tự khởi động lại khi crash, và đặt log có xoay vòng để tránh đầy ổ cứng.
Câu hỏi thường gặp về thực hành buổi 18
Bot thực hành buổi 18 có chắc chắn sinh lời không?
Không có bot nào chắc chắn sinh lời. Bot chỉ thực thi kỷ luật theo chiến lược. Lợi nhuận phụ thuộc chất lượng chiến lược và quản lý rủi ro.
Cần kiến thức gì để tự xây bot?
Cần Python cơ bản, hiểu API sàn giao dịch và khái niệm thị trường. Bạn có thể học theo lộ trình từ phân tích dữ liệu đến tự động hóa.
Có nên chạy bot với tiền thật ngay không?
Không. Hãy chạy demo ít nhất vài tuần, đối chiếu kết quả, rồi mới dùng vốn nhỏ thật.
Kết luận
Thực Hành Buổi 18 giúp bạn giao dịch kỷ luật và tiết kiệm thời gian, nhưng cần được xây dựng đúng chuẩn: dữ liệu sạch, backtest trung thực, quản lý rủi ro chặt chẽ và giám sát thường xuyên. Hãy bắt đầu nhỏ và tối ưu dần.
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.