MdevTrade: Từ ý tưởng đến lúc hoàn thiện một AI Trading Agent
Mục lục

I. Câu chuyện bắt đầu từ một repo GitHub #
Mọi chuyện bắt đầu vào một buổi tối rảnh rỗi, tôi lướt GitHub và fork mã nguồn của dự án TradingAgents theo phản xạ. Thay vì dùng code if-else khô khan để quét các chỉ báo RSI hay MACD, dự án này dùng một mô hình hoàn toàn khác: Multi-Agent Personas. Nó mô phỏng một sàn giao dịch thu nhỏ ngay trong RAM máy tính. Ở đó có một gã phân tích tin tức, phe Bull và phe Bear ngồi cãi nhau chí chóe, và một Manager đứng ra chốt hạ quyết định.
Lúc đó, tôi tự hỏi: Liệu các mô hình ngôn ngữ lớn (LLM) thực sự có khả năng tổng hợp tin tức vĩ mô để dự đoán thị trường? Hay tất cả những màn suy luận sắc lẹm kia chỉ là màn “chém gió” tinh vi sinh ra từ xác suất toán học?
Để tự tìm câu trả lời, tôi quyết định bắt chước ý tưởng cốt lõi của repo này, xắn tay áo lên code lại thành một phiên bản mang tính thí nghiệm và an toàn hơn. Việc hệ thống này có làm tốt hay không thì thú thật tôi không chắc chắn, nhưng tôi đã bấm nút khởi chạy nó rồi. Cứ thử nghiệm một thời gian xem nó sẽ đốt hết tiền hay giúp tôi có lãi.
Để đêm còn kê cao gối ngủ, tôi thiết lập một bộ giới hạn rủi ro: Không đánh Margin, không đòn bẩy. Hệ thống chỉ chơi Spot theo kiểu tích lũy trung bình giá (DCA) trên Vàng token hóa (XAUT/USDT). Lý do là vì với giao dịch Spot, ngoài phí giao dịch cơ bản ra thì gần như không có bất kỳ khoản phí ẩn nào khác (như phí Funding hay lãi vay qua đêm). Điều này giúp hệ thống có thể thoải mái “ôm” tài sản dài hạn mà không lo bị “chảy máu” tài khoản.
Tôi quyết định share toàn bộ phiên bản custom này. Phía dưới đây là những gì tôi đã làm trong source code, và các kết quả nghiên cứu của tôi.
II. Nghiên cứu tính khả thi và quá trình tùy biến #
Trước khi đụng vào code, tôi ngồi đọc kỹ các tài liệu học thuật để xem ý tưởng này có đứng vững không. Năm đúc kết dưới đây định hình toàn bộ những tùy biến của dự án.
1. Vòng đời của tin tức và Điểm ngọt dự báo #
Ý tưởng ban đầu của tôi khá tham lam: dùng AI để dự báo xu hướng xa từ 2 đến 6 tháng.
Tuy nhiên, các nghiên cứu học thuật chỉ ra rằng tin tức tài chính có thời gian bán hủy rất ngắn. Việc ép mô hình dự báo quá xa sẽ khiến nó mù tịt trước các cú sốc ngoại sinh. Thay vì thú nhận “tôi không biết”, LLM sẽ chém gió bằng cách ngoại suy tuyến tính dữ liệu của ngày hôm nay sang tận tháng sau, dẫn đến thảm họa.
- Tùy biến của tôi: Tôi rút ngắn khung dự báo về mức 1 đến 4 tuần. Đây là “điểm ngọt” nơi LLM tổng hợp tâm lý thị trường tốt nhất. Ở tầng Execution, tôi dùng biên độ ATR động để hệ thống tự động chốt lời ngay trong các nhịp biến động ngắn này.
2. Loãng ngữ cảnh và Phân chia luồng tính toán #
Một cái bẫy chết người khi làm AI là ném thẳng 200 ngày nến OHLCV vào prompt, rồi hy vọng nó tự “nhìn” ra được đường SMA 200. LLM xử lý chữ rất giỏi nhưng làm toán mảng thì cực dở. Nhồi nhét một nùi số liệu vào sẽ khiến AI bị quá tải và loãng sự chú ý.
- Tùy biến của tôi: Tôi quyết định tách biệt hoàn toàn việc tính toán và việc suy luận. Trong source code của MdevTrade, agent Market Analyst không tự đi đếm nến. Nó gọi các thư viện Python chuẩn như yfinance và stockstats để tính chính xác ra các đường SMA và MACD. Sau đó, nó dịch kết quả thành câu văn trơn tru (Semantic Facts) rồi mới nạp vào prompt. Ví dụ: “Giá đang nằm trên SMA 200 với độ dốc dương, xu hướng tăng vững chắc”. Đối với giá thô, LLM chỉ nhận đúng 14 đến 30 ngày gần nhất để cảm nhận nhịp điệu vi mô.
3. Review lệnh theo chu kỳ vĩ mô #
Làm sao để dạy AI rút kinh nghiệm? Nếu bắt AI ngồi đọc lại từng lệnh 5 đô bị lỗ của ngày hôm trước trong chiến lược DCA đánh Spot lai rai, việc săm soi một lệnh lẻ tẻ là hoàn toàn vô nghĩa và phí tiền API.
- Tùy biến của tôi: Tôi chuyển sang đánh giá theo chu kỳ (Regime). Thay vì bắt AI soi từng biến động ngắn hạn, hệ thống Execution Hands sẽ tính Giá vốn trung bình (VWAP/WAC) của cả một đợt gom hàng dài ngày. Khi xu hướng đảo chiều, báo cáo tổng kết ném lại cho AI đọc sẽ trông như thế này: “Chu kỳ Tăng tháng 5 kết thúc. Giá vốn WAC là $2,650. Lợi nhuận ròng: +1.8%.” Nhờ đó, AI học được cách nhận diện hình mẫu ở bức tranh lớn hơn.
4. Đừng bao giờ tin vào độ tự tin của AI #
Có nên cho AI tự quyết định số tiền đánh mỗi lệnh (từ 5 đến 10 đô) dựa trên độ “tự tin” của tín hiệu không? Câu trả lời từ các nghiên cứu là: Tuyệt đối không.
Giới học thuật chỉ ra rằng LLM thất bại toàn tập trong việc định lượng mức độ chắc chắn. Nó được train để nói ra câu trả lời nghe thật quả quyết, nên nó thường xuyên báo “tự tin 99%” ngay cả khi đang bịa chuyện. Nếu bạn để AI tự định lượng vốn, sớm muộn gì nó cũng sẽ “all-in” vào một cái bẫy thanh khoản.
- Tùy biến của tôi: Tôi giữ vững kỷ luật Fixed DCA tại tầng thực thi. Kích thước lệnh phải được chốt cứng bằng toán học truyền thống, không bao giờ được phép để cho Portfolio Manager bẻ cong trọng số.
5. Bẫy đồng thuận giả tạo và Cấu trúc tranh biện #
Ban đầu tôi cứ tưởng là cứ cho nhiều AI vào một room chat rồi để chúng tự cãi nhau thì sẽ ra chân lý. Thực tế, các nghiên cứu chỉ ra rằng nếu để AI tranh luận quá 2 vòng, chúng sẽ rơi vào hội chứng “Đồng thuận giả tạo” – tức là tự động hùa theo nhau để giải tỏa áp lực hội thoại, hoặc bị kẹt trong một vòng lặp từ vựng luẩn quẩn.
- Tùy biến của tôi: Tôi ép quy trình tranh biện vào một khuôn khổ 2 vòng.
- Vòng 1 (Blind Phase): Phe Bull và Bear bị cách ly hoàn toàn, phải viết báo cáo độc lập để tránh hiệu ứng mỏ neo.
- Vòng 2 (Cross-Examination): Chỉ được phép tìm và đánh gục điểm yếu logic duy nhất của đối phương, cấm lặp lại văn mẫu.
- Xử lý Bế tắc: Khi dữ liệu vĩ mô quá nhiễu và 2 phe bất phân thắng bại, Research Manager không được phép “cưa đôi” kết quả. Nó bị buộc phải dùng các quy tắc Tie-Breaker cứng (như nén biên độ chốt lời ATR lại vì thị trường đang rủi ro cao, hoặc ưu tiên theo xu hướng của đường SMA 200 dài hạn).
III. Kiến trúc hệ thống: 5 Bước và 12 Agents #
Làm một thời gian, sự thật khắc nghiệt mới hiện ra: bạn không bao giờ giao quyền sinh sát tài khoản cho một hệ thống chạy bằng xác suất. LLM, xét đến cùng, chỉ là những cỗ máy tung xúc xắc trên đỉnh các trọng số nơ-ron. Lối thoát duy nhất là nhốt sự bất định đó vào bên trong tính tất định của code truyền thống.
Tham khảo ý tưởng của tác giả bản gốc, tôi cũng làm giống hệt họ: chia project thành 5 bước với 12 agents. Đây là quy trình chính của dự án. Tuy nhiên, tôi cũng đã sửa lại từng node cho phù hợp với định hướng thực chiến của mình.
Thế là toàn bộ hệ thống được chia làm hai phân hệ độc lập hoàn toàn:
1. AI Brain (Research Graph) #
Thay vì viết một cái prompt dài thò lò rồi ngồi cầu nguyện, tôi dùng StateGraph của LangGraph để điều phối luồng suy luận:
- Bước 1 - Gom dữ liệu (Data Gathering): 4 agent chạy nối tiếp (Market -> Social -> News -> Fundamentals) để thu thập dữ liệu:
- Market Analyst: Kéo dữ liệu giá bằng
yfinancevà tính toán các chỉ báo kỹ thuật như SMA và MACD bằngstockstats. - News Analyst: Kéo tin tức tài chính vĩ mô, lọc bỏ nhiễu và chỉ tập trung vào các sự kiện có khả năng tạo xu hướng từ 1 đến 4 tuần.
- Social Analyst: Đo lường các trạng thái tâm lý đám đông như Sợ hãi và Tham lam Fear and Greed từ các nền tảng như StockTwits để nắm bắt dòng tiền của Retail Trader.
- Fundamentals Analyst: Cào các dữ liệu cơ bản của tài sản bao gồm chỉ số P/E, PEG và ROE để đánh giá xem nó đang rẻ hay đắt so với giá trị thực.
[!NOTE] Tôi code node này để giữ trọn vẹn kiến trúc của tác giả gốc. Thực tế khi áp dụng cho Vàng token hóa XAUT, các chỉ số tài chính của doanh nghiệp là không tồn tại nên tôi đã thiết lập skip node này.
- Market Analyst: Kéo dữ liệu giá bằng
- Bước 2 - Tranh biện (Invest Debate): Đây là vòng tranh luận 2 hiệp. Hiệp 1 (Blind Phase): phe Bull và phe Bear độc lập viết báo cáo bảo vệ góc nhìn của mình, sử dụng dữ liệu từ bước 1 để xây dựng luận điểm (ví dụ: xu hướng giá, tâm lý đám đông). Hiệp 2 (Rebuttal Phase): 2 phe đối đầu, soi xét các lỗ hổng logic hoặc dữ liệu sai lệch trong báo cáo của đối phương. Cuối cùng, Research Manager sẽ tổng hợp lại các lập luận sắc bén nhất vào một bản báo cáo trung lập, đóng vai trò là “la bàn” cho giai đoạn ra quyết định.
- Bước 3 - Lên kế hoạch (Trading): Dựa vào báo cáo từ Manager, agent Trader sẽ đề xuất một chiến lược hành động cụ thể, xác định điểm vào lệnh, ngưỡng cắt lỗ (stop-loss) và chốt lời (take-profit) dựa trên biên độ biến động, thay vì chỉ là tín hiệu định tính.
- Bước 4 - Quản trị rủi ro (Risk Management): Kế hoạch từ Trader sẽ được kiểm soát bởi “Hội đồng Thẩm định” gồm 3 agent với 3 phong cách quản trị khác nhau: (1) Aggressive - tập trung vào tối ưu hóa lợi nhuận, (2) Conservative - nhấn mạnh bảo toàn vốn và (3) Neutral - kiểm soát tính tuân thủ. Nếu có bất kỳ sự xung đột hoặc dấu hiệu “all-in” bất thường, Portfolio Manager sẽ can thiệp để điều chỉnh quy mô lệnh hoặc hủy bỏ hoàn toàn.
- Bước 5 - Lưu trữ: AI Brain bị bịt mắt hoàn toàn về số dư ví thực tế trên Binance. Nhiệm vụ cuối cùng của Portfolio Manager chỉ là xuất kết quả thành một file JSON tĩnh lưu vào Database, chứa đúng một quyết định: LÊN, XUỐNG, hoặc ĐỨNG NGOÀI kèm theo các ghi chú giải thích.
2. Execution Hands (Binance Graph) #
Đây là một hệ thống Python truyền thống, nắm giữ API Key và quyền sinh quyền sát. Nó đọc báo cáo JSON từ AI Brain và quyết định có bắn lệnh lên sàn hay không.
Trái tim của Execution Hands là Circuit Breaker (Cầu dao tự động). Bất kể AI phân tích tự tin đến mức nào, nếu tổng danh mục (Portfolio High-Water Mark) bị âm vượt ngưỡng giới hạn -15%, Circuit Breaker sẽ tự động sập nguồn. Mọi lệnh giao dịch bị đóng băng ngay lập tức. Đây chính là cách Software 1.0 dùng logic cứng để kiểm soát Software 2.0.
Thú thật thì ở tầng Execution này tôi vẫn chưa thực sự nghiên cứu quá sâu, mọi thứ chỉ đang dừng ở mức cơ bản nhất để đảm bảo an toàn. Chắc phải đợi hôm nào nằm mơ thấy ông Bụt hiện ra độ cho cái giải pháp xịn hơn thì tôi sẽ code lại phần này!
IV. Kết luận #
Ngồi đọc các bản báo cáo hằng ngày do dàn agent này tự xuất ra, tôi thấy logic đứng vững — sắc bén, đáng tin. Nếu tự tôi ngồi xem chart và đọc tin vĩ mô lấy, có lẽ kết luận rút ra cũng chẳng khác là bao.
Với luồng suy luận chặt chẽ như vậy, linh cảm của tôi mách bảo rằng dự án này khả năng cao sẽ giúp tôi có lãi. Tuy nhiên, thực tế thì tôi vẫn đang trong giai đoạn chạy thử nghiệm, thị trường thì luôn có những cú vả không lường trước được, đặc biệt là rủi ro trượt giá Slippage khi giao dịch Spot trên những đồng tiền mã hóa có thanh khoản thấp, nên cứ phải chờ thời gian trả lời.
Dù kết quả PnL có ra sao, dự án này đã khẳng định một điều: Thành công của việc ráp AI vào sản phẩm không nằm ở việc ném bừa mọi thứ vào một cái “hộp đen prompt” rồi ngồi chắp tay cầu nguyện. Nó nằm ở nghệ thuật thiết kế kiến trúc hệ thống. Chúng ta phải dùng các khối logic cứng nhắc (như StateGraph, Circuit Breaker, Data Fetching) để giam giữ, điều hướng và ép cỗ máy xác suất kia phải làm việc theo đúng kỷ luật.
[!NOTE] Mã nguồn toàn bộ dự án được public tại: https://github.com/vinhmdev-com/mdevtrade
Đặc biệt gửi lời cảm ơn chân thành đến tác giả của dự án gốc TradingAgents vì nguồn cảm hứng và ý tưởng kiến trúc tuyệt vời.