Danh mục giao dịch thật

Cách chiến lược giao dịch bằng tiền thật: số tiền theo đô la, tự động đối soát, đóng toàn bộ và kill switch.

Cập nhật lần cuối 2026-08

Tổng quan

Danh mục giao dịch là tập hợp các chiến lược được phép đặt lệnh thật. Mỗi chiến lược trong đó được gán một số tiền cố định; sau đó daemon đối soát giữ cho các vị thế do chính các chiến lược mở hội tụ về mục tiêu tổng hợp — bạn không bao giờ tự đặt những lệnh này. Nó chỉ quản lý lệnh của chính nó: vị thế bạn mở bằng tay là vô hình với nó và không bao giờ bị đụng đến.

strategy.py ──► state.json ──────────────┐
   (cron)                                ├──► reconciler.py ──► exchange
amounts     ──► portfolio_config.json ───┘

Định cỡ theo số tiền

Mỗi chiến lược trong danh mục được gán một số tiền theo đơn vị tiền tệ của tài khoản (ví dụ USD) — số tiền chiến lược dùng để giao dịch khi tín hiệu ở mức tối đa. Vị thế mục tiêu cho từng mã là tổng của tất cả chiến lược:

target[symbol] = Σ ( amount × position )

position là tín hiệu của chiến lược và có thể là số lẻ (một chiến lược điều chỉnh theo biến động có thể phát ra 0.5 hoặc 1.8). Số tiền bạn đặt chính là thứ quyết định cỡ vị thế — nó không trôi theo tài sản ròng của tài khoản. Ngoại lệ: với các chiến lược hợp đồng tương lai Đài Loan qua Capital (群益), số tiền là số lô (số hợp đồng), không phải con số theo đô la.

Không bao giờ sửa manager/portfolio_config.json bằng tay. Hãy đặt số tiền từ trang Thiết lập giao dịch trong workspace hoặc nhờ Agent; trọng số từ bộ tối ưu chỉ được áp dụng qua manager.py, vốn mặc định chạy thử (dry-run) và chỉ ghi cấu hình khi có --apply sau khi bạn xác nhận.

Bộ đối soát

Bộ đối soát là một daemon truy vấn mỗi 5 giây và thực hiện đối soát mỗi khi:

  • một chiến lược cập nhật tín hiệu của nó (state.json thay đổi)
  • bạn lưu số tiền mới trong Thiết lập giao dịch
  • kill switch được kích hoạt hoặc được gỡ bỏ
  • đã 5 phút trôi qua mà chưa đối soát — một lưới an toàn để phát hiện vị thế bị lệch và key sàn giao dịch đã hỏng
  • một lệnh TWAP hoặc kiểu thực thi tùy chỉnh kết thúc — để phần chênh còn lại hội tụ ngay trong một lượt truy vấn thay vì phải chờ lưới an toàn 5 phút

Mỗi lượt sẽ so mục tiêu với sổ của chính bot — bộ đối soát giữ sổ cái riêng, tổng tích lũy của mọi lệnh nó đã đặt (manager/orders.jsonl), thay vì đọc vị thế thô trên sàn giao dịch của tài khoản, nên vị thế bạn mở bằng tay không bao giờ bị đọc thành "đang nắm giữ" và không bao giờ bị cộng thêm hay bị đóng. Sau đó lệnh được đặt để bù khoảng chênh — mặc định là lệnh thị trường; mỗi chiến lược có thể được đặt kiểu thực thi thị trường, TWAP, chase limit hoặc tùy chỉnh trong Thiết lập giao dịch (hợp đồng tương lai Đài Loan qua Capital (群益) chỉ hỗ trợ lệnh thị trường). Chênh lệch dưới $10 được bỏ qua (hợp đồng tương lai Đài Loan thì đối soát theo lô nguyên). Một lần đảo vị thế (long → short) được tách thành một lệnh đóng chỉ-giảm cộng với một lệnh mở mới, nên tài khoản ở chế độ hedge không bao giờ giữ cả hai chiều cùng lúc.

Khi không đọc được vị thế từ sàn: sự cố tạm thời của sàn (hết thời gian chờ, quá tải, bảo trì) chỉ khiến các vòng đó bị bỏ qua và giao dịch tự tiếp tục khi đọc lại được; nếu không kết nối được liên tục 30 phút, bạn sẽ được thông báo. Bộ đối soát chỉ kích hoạt kill switch khi key hết hiệu lực, thiếu quyền, IP không nằm trong danh sách cho phép, gặp lỗi không xác định 3 lần liên tiếp, hoặc phát hiện tài khoản không khớp khi khởi động, khi kết nối lại sau gián đoạn hoặc khi đổi key — và kill switch này không bao giờ tự gỡ; gỡ hay không do bạn quyết định.

Đóng toàn bộ vị thế

Bấm Tạm dừng giao dịch trong workspace, hộp thoại sẽ đưa ra hai lựa chọn: Tạm dừng mở vị thế mới chỉ kích hoạt kill switch; Tạm dừng và đóng vị thế (hoặc python3 manager/flatten.py) sẽ đóng bằng lệnh thị trường các vị thế do chiến lược mở — chỉ những gì nằm trên sổ của chính bot, nên vị thế bạn mở bằng tay được để yên, và ở giao ngay chỉ bán những đồng đang do chiến lược quản lý, không bao giờ đụng đến phần nắm giữ khác của bạn. Đây là nút khẩn cấp, không phải công cụ quản lý danh mục:

  • Kill switch được kích hoạt trước, nên không có gì mở lại sau khi đóng hết — giao dịch vẫn tạm dừng cho đến khi bạn bấm Bắt đầu giao dịch.
  • Vị thế nhỏ hơn mức tối thiểu của sàn giao dịch thì không thể đóng — phần dư nhỏ được ghi log và để lại.
  • Mỗi lần đóng đều được ghi vào lịch sử lệnh kèm mức khớp đã được sàn xác nhận.

Kill Switch (HALT)

Khi kill switch đang bật, mọi lệnh mở thêm vị thế đều bị từ chối ngay ở tầng code. Lệnh đóng vị thế, cắt lỗ / chốt lời và hủy lệnh vẫn đi qua — trạng thái dừng không bao giờ nhốt một vị thế mà bạn đang muốn giảm.

Nó được bật bởi Tạm dừng giao dịch trong workspace (bao gồm cả Tạm dừng và đóng vị thế), bởi việc bảo Agent ngừng giao dịch, hoặc tự động khi có lỗi key hoặc quyền, lỗi không xác định 3 lần liên tiếp, hoặc phát hiện tài khoản không khớp khi khởi động, khi kết nối lại sau gián đoạn hoặc khi đổi key (sự cố tạm thời của sàn không kích hoạt nó — giao dịch tự tiếp tục khi sàn hoạt động lại). Nó không bao giờ tự gỡ — giao dịch chỉ tiếp tục khi bạn bấm Bắt đầu giao dịch hoặc yêu cầu Agent tiếp tục một cách rõ ràng. Bắt đầu giao dịch cũng có hai lựa chọn: Bắt đầu và bắt kịp vị thế sẽ đặt lệnh thị trường ngay để khớp với tín hiệu hiện tại của từng chiến lược; Bắt đầu, chờ tín hiệu mới thì không đặt lệnh nào lúc này — mỗi chiến lược chỉ bắt đầu giao dịch ở lần vào, ra hoặc đảo vị thế kế tiếp. Mọi lần thử đặt lệnh và mọi lần bị từ chối đều được ghi vào nhật ký kiểm toán.

Lịch sử lệnh & mức khớp

Mọi lệnh đã thực thi đều được nối vào manager/orders.jsonl kèm các chân lệnh — giá khớp và khối lượng đã thực thi được sàn xác nhận của từng chân riêng lẻ. Một lần đảo vị thế ghi hai chân: chân đóng mang giá thoát, chân mở mang giá vào.

Thất bại một phần cũng được ghi lại: nếu chân đóng của một lần đảo vị thế đã khớp nhưng chân mở thất bại, bản ghi vẫn được giữ và đánh dấu là thất bại — lịch sử không bao giờ giấu một lệnh đã làm dịch chuyển tiền thật. Tab Lịch sử lệnh trong workspace hiển thị tệp này.