Giao dịch thuật toán — bước đầu tiên cho trader bán lẻ

Xác minh lần cuối: · Nội dung luôn có giá trị
Cảnh báo rủi ro · YMYL Bài viết này chỉ mang tính giáo dục và không phải là lời khuyên đầu tư. Giao dịch trên thị trường Forex tiềm ẩn rủi ro mất vốn cao — ESMA cho biết từ 74% đến 89% tài khoản nhà đầu tư bán lẻ thua lỗ. Giao dịch ký quỹ ngoại hối dành cho cá nhân không được cấp phép tại Việt Nam; hãy tham khảo ý kiến chuyên gia tài chính được cấp phép trước khi đưa ra bất kỳ quyết định nào.

Giao dịch thuật toán (algorithmic trading) trong lĩnh vực bán lẻ thực chất là một sự hoán đổi vai trò đơn giản: trader định nghĩa quy tắc, máy tính thực thi. "Nếu đường trung bình động nhanh cắt lên đường chậm và ATR của 20 nến gần nhất đang tăng, hãy mở vị thế mua với khối lượng 1% vốn, đặt cắt lỗ (stop loss) cách 1,5 ATR bên dưới." Đó là toàn bộ định nghĩa. Mọi thứ còn lại — VPS, ngôn ngữ lập trình, framework — chỉ là giàn giáo. Vấn đề của phần lớn các dự án algo bán lẻ không phải là code, mà là kỳ vọng rằng tự động hóa có thể bù đắp cho một lợi thế mà trader thực ra không có. Không thể. Nó chỉ thua nhanh hơn và rẻ hơn mà thôi.

Trading thuật toán là gì — và chắc chắn không phải là gì

Một thuật toán là hai thứ trong một: chiến lược được định nghĩa chính xác và cơ chế kích hoạt chiến lược đó mà không bị dao động cảm xúc. Trader có thể viết ra bộ điều kiện vào lệnh, ra lệnh, quản lý rủi ro và thoát lệnh bằng ngôn ngữ không mơ hồ là đã hoàn thành một nửa công việc; phần còn lại là dịch tài liệu đó sang MQL5, Python hoặc một alert đơn giản. Trader thiếu kỷ luật này thường bắt đầu bằng việc học cú pháp lập trình, rồi sau đó mới phát hiện ra rằng không có gì cụ thể để code cả. Mọi cuốn sách nghiêm túc về giao dịch hệ thống đều lặp lại lời khuyên tương tự — hãy thực thi chiến lược bằng tay trước, tự động hóa sau — trong khi mọi khóa học cuối tuần rao bán "bot một trăm chín mươi chín đô la" đều bỏ qua điều đó. Algo cũng không phải là nguồn thu nhập thụ động thần kỳ: chiến lược hoạt động hôm nay là vì một quy luật thị trường nhất định vẫn còn tồn tại; khi quy luật đó biến mất, bot thua lỗ y như trader thủ công, chỉ khác là không có tín hiệu cảm xúc cảnh báo "có gì đó không ổn".

Các bậc thang từ alert đến tự động hóa hoàn toàn

Con đường tự nhiên đi qua bốn bậc thang. Bậc đầu tiên là alert của nền tảng giao dịch — TradingView hoặc MetaTrader — kích hoạt âm thanh hoặc gửi email khi điều kiện vào lệnh được thỏa mãn. Trader vẫn tự bấm lệnh, nhưng bị buộc phải dịch chiến lược thành quy tắc đủ chính xác để nền tảng có thể biểu đạt được. Nhiều trader bán lẻ không bao giờ rời bậc này và cũng không cần — alert cộng với kỷ luật là đủ khi số tín hiệu mỗi ngày còn ít. Bậc thứ hai là một Expert Advisor đơn giản bằng MQL5 cho MetaTrader, thường là crossover hai đường trung bình động với trailing stop hoặc breakout ATR. Một EA như vậy chỉ có hai đến bốn trăm dòng code và có thể xây dựng trong vài tuần. Bậc thứ ba là một backtester bằng Python với thư viện pandas, NumPy và backtrader; ở đây trader có thể kiểm thử hàng chục biến thể chiến lược trong một buổi chiều — chủ đề này được khám phá sâu hơn trong phần kiểm thử ngược Forex bằng Python. Bậc thứ tư và không bắt buộc là kết nối trực tiếp với nhà môi giới (broker) qua REST hoặc FIX với Interactive Brokers hoặc OANDA, không còn dùng MetaTrader như lớp trung gian nữa.

Kỹ năng cần thiết và lựa chọn ngôn ngữ lập trình

Danh sách khá ngắn. Tư duy thống kê là quan trọng nhất — hiểu được sự khác biệt giữa tỷ lệ thắng (win rate), profit factor và expectancy (kỳ vọng xác suất), và biết rằng một đường cong vốn từ năm mươi giao dịch chưa chứng minh được gì. Nếu không có nền tảng này, ngay cả code sạch cũng dẫn đến kết luận kiểu "chiến lược hoạt động vì sáu giao dịch gần nhất đều thắng" — đó là giả thuyết không, không phải phân tích. Thứ hai là kiên nhẫn với chu kỳ kiểm định: ý tưởng, viết code, kiểm thử ngược (backtesting), walk-forward, ba đến sáu tháng trên demo, rồi mới đến vốn thật. Thứ ba là những kiến thức lập trình cơ bản — biến, vòng lặp, hàm, pandas DataFrame. Bạn không cần phải là kỹ sư phần mềm; chỉ cần đọc được code EA của người khác và thay đổi một tham số mà không phá vỡ phần còn lại là đủ. Việc lựa chọn ngôn ngữ phụ thuộc vào một câu hỏi: trader có ở lại trong MetaTrader hay không? MQL5 là ngôn ngữ gốc của MT5, độ trễ thực thi được đo bằng mili giây đơn lẻ, và Strategy Tester cung cấp kết quả backtest khá tốt ngay từ đầu. Python là toàn bộ thế giới ngoài MetaTrader — pandas và NumPy để xử lý dữ liệu, backtrader hoặc vectorbt cho kiểm thử ngược, REST client cho Interactive Brokers và OANDA.

Ví dụ minh họa — chiến lược đầu tiên từ ý tưởng đến backtest

Hãy lấy chiến lược crossover trên EUR/USD khung H1: mở vị thế mua khi EMA 21 cắt lên SMA 55 từ bên dưới, với điều kiện ATR của mười bốn nến gần nhất cao hơn trung bình năm mươi kỳ của nó. Cắt lỗ 1,5 ATR bên dưới điểm vào, chốt lời (take profit) 2,5 ATR bên trên, khối lượng lệnh 1% vốn. Bước một: trader thực thi thủ công bốn mươi lệnh trong MT5 trên dữ liệu sáu tháng gần nhất, tính tỷ lệ thắng và trung bình lãi/lỗ. Giả sử kết quả là 38% tỷ lệ thắng với profit factor 1,4. Bước hai: code EA trong MQL5 và chạy qua Strategy Tester trên năm năm lịch sử. Kết quả nên hội tụ về các con số thủ công, hoặc khác biệt một cách có hệ thống — trong trường hợp sau, trader biết rằng hoặc là quy tắc đã ghi sai, hoặc một phần thực thi thủ công đang được diễn giải bằng trực giác. Bước ba: cùng một EA được kiểm thử bằng Python với backtrader trên dữ liệu Dukascopy, bao gồm spread và trượt giá (slippage) thực tế. Bước bốn: walk-forward nếu các con số ổn định. Tất cả số liệu chỉ mang tính minh họa — chúng thể hiện trình tự, không phải lời hứa hẹn.

“Kẻ thù lớn nhất của một trader thuật toán là thiên kiến data-snooping. Những mô hình trông rất đẹp trong backtest thường thất bại trong giao dịch thực không phải vì chiến lược sai, mà vì trader đã tối ưu hóa nó trên chính dữ liệu mà họ dùng để đánh giá.” — Ernest P. Chan, 2013

Tại sao hầu hết các dự án algo bán lẻ đều thất bại

Có hai lý do và không cái nào liên quan đến kỹ năng lập trình. Thứ nhất là không có lợi thế thị trường đáng tự động hóa — trader viết backtester, điều chỉnh tham số khớp với năm năm dữ liệu và nhận được một đường cong vốn đẹp hơn thực tế có thể tạo ra. Họ chuyển sang tài khoản thật, thua lỗ, kết luận cần "chiến lược tốt hơn" và lặp lại vòng lặp. Cách để tách biệt và xác thực một lợi thế trước khi viết dòng code đầu tiên được trình bày trong phần chiến lược giao dịch. Lý do thứ hai là không chấp nhận câu trả lời "chiến lược của bạn không có lợi thế, hãy quay lại bàn vẽ". Hầu hết các trader thích tối ưu hóa tham số quá mức hơn là thừa nhận điều đó — thuật toán sẽ không làm nhẹ bớt thông điệp đó, chỉ lặp lại nhanh hơn. Về cơ sở hạ tầng, thực tế khá bình thường: VPS tại Vultr hoặc Hetzner dao động từ năm đến hai mươi euro mỗi tháng, MetaTrader và Python đều miễn phí, dữ liệu Dukascopy cũng miễn phí. Rào cản gia nhập chỉ là vài chục euro mỗi tháng, không phải hàng nghìn. Điểm nghẽn cổ chai là thời gian và tư duy thống kê, không phải tiền bạc. Hướng dẫn thực hành về việc chạy EA trên VPS có trong phần nền tảng và công cụ trên ForexMechanics.

Lưu ý quan trọng về pháp lý tại Việt Nam: Giao dịch ngoại hối và CFD (hợp đồng chênh lệch) tại Việt Nam được điều chỉnh bởi Ngân hàng Nhà nước Việt Nam (NHNN); chỉ các tổ chức tín dụng được NHNN cấp phép mới được phép giao dịch ngoại hối hợp pháp. Giao dịch qua các broker nước ngoài không có giấy phép của NHNN tiềm ẩn rủi ro pháp lý và tài chính đáng kể cho người dùng tại Việt Nam. Nội dung bài viết này chỉ mang tính giáo dục và không phải lời khuyên đầu tư.

Bước tiếp theo của bạn

  1. Mở một cuốn nhật ký giao dịch và trong một tuần, hãy ghi lại mỗi lệnh bạn vào theo dạng quy tắc rõ ràng "nếu X và Y, thì mở Z" — loại bỏ hoàn toàn những từ như "thường thì", "có xu hướng", hoặc "tôi cảm thấy". Nếu đến cuối tuần bạn không thể diễn đạt lại bất kỳ quyết định nào thành quy tắc như vậy, có nghĩa là bạn chưa có chiến lược để tự động hóa, chỉ có một tập hợp các phản ứng theo cảm tính.
  2. Tải về MetaTrader 5 miễn phí từ nhà môi giới (broker) của bạn, mở tài khoản demo, và thiết lập ba alert trong TradingView hoặc hệ thống alert gốc của MT5 cho phiên bản đơn giản nhất của quy tắc của bạn — quan sát trong hai tuần xem các alert có kích hoạt vào đúng những thời điểm bạn sẽ chọn khi giao dịch thủ công không.
  3. Trong tuần thứ ba, đăng ký trên mql5.com, mở MetaEditor đi kèm với MT5, và viết Expert Advisor đơn giản nhất có thể — crossover EMA 21 và SMA 55 với trailing stop 1,5 ATR — dựa vào tài liệu MQL5 Reference; mục tiêu là có được EA đầu tiên chạy được trong bốn mươi đến tám mươi giờ nỗ lực, không phải EA sinh lời.
  4. Sau hai tháng, cài đặt Python 3.11 trở lên, thêm pandas, NumPy và backtrader với lệnh pip install, đi qua Backtrader Quickstart Guide, và tái tạo lại EA MQL5 thành một chiến lược backtrader. So sánh kết quả backtest trên cùng một bộ dữ liệu — chênh lệch trên vài phần trăm có nghĩa là đang có một giả định ẩn nào đó chưa được xử lý.
  5. Chỉ đến tháng thứ năm hoặc thứ sáu mới nên triển khai EA trên tài khoản demo MetaTrader được lưu trữ trên VPS tại Vultr hoặc Hetzner. Cho nó chạy ba tháng. Nếu hiệu suất demo khớp với kết quả walk-forward backtest, lúc đó mới xem xét tài khoản thật với số vốn mà nếu mất đi cũng không ảnh hưởng đến ngân sách hàng tháng của bạn — từ năm trăm đến hai nghìn euro trong lần thử đầu tiên, không nhiều hơn.
Jarosław Wasiński
Giới thiệu tác giả

Jarosław Wasiński

Tổng biên tập MyBank.pl · Nhà phân tích tài chính và thị trường

Nhà phân tích và chuyên gia thực hành độc lập với hơn 20 năm kinh nghiệm trong lĩnh vực tài chính. Người sáng lập và tổng biên tập cổng thông tin MyBank.pl hoạt động từ năm 2004. Phân tích cơ bản thị trường ngoại hối và kinh tế vĩ mô từ năm 2007. Viết từ góc độ thị trường toàn cầu, chú trọng khung pháp lý quốc tế. Nội dung mang tính giáo dục; giao dịch Forex ký quỹ không được cấp phép cho nhà đầu tư cá nhân tại Việt Nam.

Nguồn và tài liệu tham khảo

  1. MetaQuotes MetaTrader 5 — Automated Trading · oficjalny opis automatycznego handlu w MetaTraderze, ścieżek pozyskania robota i miejsca strategy testera w warsztacie www.metatrader5.com ↗
  2. MetaQuotes MQL5 Reference — programming language for algorithmic trading · dokumentacja referencyjna języka MQL5 i pięciu typów aplikacji (EA, indykatory, skrypty, serwisy, biblioteki) www.mql5.com ↗
  3. Backtrader Backtrader Quickstart Guide · podręcznik startowy frameworka backtrader w Pythonie — strategie, indykatory, optymalizacja parametrów www.backtrader.com ↗
  4. BIS BIS Quarterly Review, December 2019 — FX trading rises to $6.6 trillion per day · omówienie elektronicznej egzekucji i roli niebankowych principal trading firms w obrocie walutowym — kontekst dla retail algo www.bis.org ↗

Câu hỏi thường gặp

Giao dịch thuật toán bán lẻ thực sự là gì — và chắc chắn không phải là gì?

Giao dịch thuật toán bán lẻ có nghĩa là ủy thác lớp thực thi cho máy tính: trader định nghĩa quy tắc dưới dạng điều kiện không mơ hồ ("nếu đường trung bình động 21 kỳ cắt lên đường trung bình 55 kỳ và ATR của hai mươi nến gần nhất đang tăng, hãy mở vị thế mua với khối lượng 1% vốn và trailing stop 1,5 ATR"), phần mềm nhận ra điều kiện đó và kích hoạt lệnh mà không do dự, không kiểm tra Telegram và không bị ảnh hưởng bởi giao dịch thua lỗ gần nhất. Điều mà một thuật toán chắc chắn không phải là một cỗ máy thu nhập thụ động thần kỳ trong ba chiều cùng lúc. Nó không tạo ra lợi thế vốn không tồn tại — nếu trader thua khi giao dịch thủ công, bot sẽ thua nhanh hơn với chi phí thấp hơn. Nó không bảo vệ khỏi sự thay đổi chế độ thị trường — nếu lịch sử mà nó được xây dựng trên đó là thị trường xu hướng còn hiện tại là thị trường đi ngang, đường cong vốn sẽ tan chảy hiệu quả không kém trader theo quyết định chủ quan. Và nó không sửa các lỗi logic trong bản thân chiến lược — nó chỉ mã hóa chúng một cách nhất quán hơn.

Các bậc thang thực tế từ bấm lệnh thủ công đến chạy bot trông như thế nào?

Bậc đầu tiên là alert của nền tảng trong TradingView hoặc MT5 kích hoạt âm thanh hoặc email khi điều kiện vào lệnh được thỏa mãn. Trader vẫn tự bấm lệnh, nhưng bị buộc phải dịch chiến lược thành các quy tắc rõ ràng. Bậc thứ hai là một Expert Advisor đơn giản bằng MQL5 cho MetaTrader, thường là crossover hai đường trung bình động hoặc breakout từ vùng tích lũy với trailing stop. Bậc thứ ba là backtester Python với pandas, NumPy và backtrader tính toán đường cong vốn và các chỉ số rủi ro trong một phần giây. Bậc thứ tư và không bắt buộc là kết nối trực tiếp với broker qua REST hoặc FIX với Interactive Brokers hoặc OANDA, không còn dùng MetaTrader làm lớp trung gian. Khung thời gian thực tế là mười hai đến hai mươi bốn tháng làm việc buổi tối, không phải một khóa học cuối tuần trên Udemy.

Thực sự tôi cần những kỹ năng gì — và điều đó khác với huyền thoại "học lập trình rồi giàu" như thế nào?

Ba điều quan trọng, theo thứ tự này. Thứ nhất, tư duy thống kê: hiểu sự khác biệt giữa tỷ lệ thắng (win rate), profit factor và expectancy (kỳ vọng), và biết rằng đường cong vốn từ năm mươi giao dịch chưa chứng minh được gì. Nếu không có nền tảng này, ngay cả code sạch cũng tạo ra kết luận như "chiến lược hoạt động vì sáu giao dịch gần nhất đều thắng" — đó là giả thuyết không, không phải phân tích. Thứ hai, kiên nhẫn với chu kỳ kiểm định: ý tưởng, viết code, kiểm thử ngược (backtesting), walk-forward, ba đến sáu tháng trên tài khoản demo, rồi mới đến một lượng vốn thật nhỏ. Chu kỳ đó kéo dài hàng tháng và hầu hết trader bỏ cuộc sau hai hoặc ba lần lặp. Thứ ba, kiến thức lập trình cơ bản: biến, vòng lặp, hàm, cấu trúc điều khiển và chút hiểu biết về pandas DataFrame. Bạn không cần là kỹ sư phần mềm — chỉ cần đọc được code EA của người khác và thay đổi tham số mà không phá vỡ phần còn lại là đủ. Huyền thoại "học Python rồi giàu" bỏ qua phần khó nhất và ít hào nhoáng nhất: có được lợi thế thị trường đáng để tự động hóa. Không có lợi thế đó, code chỉ là cách nhanh hơn để đốt hết số tiền ký quỹ.

Tại sao hầu hết các dự án algo bán lẻ thất bại — và liệu có điều kiện tiên quyết nào cải thiện cơ hội thành công không?

Các dự án algo không thất bại vì lỗi code, dù ban đầu có rất nhiều lỗi. Chúng thất bại vì không có lợi thế để tự động hóa. Trader học Python, viết backtester, điều chỉnh tham số khớp với năm năm dữ liệu và nhận được đường cong vốn đẹp hơn bất cứ điều gì có thể xảy ra trong thực tế — đây là curve fitting cổ điển. Họ chuyển sang tài khoản thật, thua lỗ, kết luận cần "chiến lược tốt hơn" và lặp lại vòng lặp. Điều kiện tiên quyết giúp cải thiện đáng kể cơ hội là sự tồn tại của một lợi thế trước khi viết dòng code đầu tiên — một quy tắc đủ đơn giản để trong giao dịch theo quyết định chủ quan hoặc trong phép toán thuần túy trên dữ liệu lịch sử, nó cho kỳ vọng dương qua nhiều chế độ thị trường, không chỉ chế độ gần nhất. Điều thứ hai phân biệt các dự án bền vững với những nỗ lực một lần là sẵn lòng chấp nhận câu trả lời "chiến lược của bạn không có lợi thế, hãy quay lại bàn vẽ" — hầu hết trader thích tối ưu hóa quá mức tham số hơn là nghe điều đó. Một thuật toán sẽ không làm nhẹ bớt thông điệp đó; nó chỉ lặp lại nhanh hơn. Về cơ sở hạ tầng, thực tế khá bình thường: VPS tại Vultr hoặc Hetzner từ năm đến hai mươi euro mỗi tháng, MetaTrader và Python đều miễn phí, dữ liệu Dukascopy cũng miễn phí. Giao dịch thực qua broker nước ngoài tại Việt Nam tiềm ẩn rủi ro pháp lý — hãy tham khảo chuyên gia tư vấn thuế và pháp lý trước khi bắt đầu.

Tìm hiểu sâu hơn · hướng dẫn đầy đủ