IOC vs FOK, lệnh thị trường và lệnh giới hạn: Các loại lệnh cho khớp lệnh forex thuật toán 04/11/2026 – Posted in: Arbitrage Software, Forex trading

BJF TRADING GROUP · KHỚP LỆNH FOREX

IOC, FOK, thị trường hay giới hạn: Chọn lệnh phù hợp với giao dịch

Chọn loại lệnh là quyết định xem bạn chấp nhận chịu điều gì: giá xấu hơn, khối lượng khớp nhỏ hơn hay không khớp chút nào. Hướng dẫn này cho thấy mỗi chỉ thị hoạt động ra sao trong sổ lệnh, trong thông điệp FIX và dưới cơ chế last look, kèm các ví dụ tính toán cho một thuật toán phải lựa chọn trong vài mili giây.

Trả lời ngắn gọn: IOC và FOK. Lệnh Immediate-or-Cancel (IOC) lấy ngay phần khối lượng có sẵn tại giá của bạn hoặc tốt hơn và hủy phần còn lại, nên có thể khớp một phần. Lệnh Fill-or-Kill (FOK) phải khớp toàn bộ ngay lập tức, nếu không sẽ bị hủy hoàn toàn, nên bạn nhận được tất cả hoặc không có gì. Hãy dùng IOC khi bất kỳ phần khối lượng nào cũng có ích, và dùng FOK khi một vị thế dở dang còn tệ hơn không có vị thế.

Loại lệnh và thời hạn hiệu lực là hai quyết định riêng biệt

Hầu hết các bảng thuật ngữ liệt kê lệnh thị trường, giới hạn, dừng, IOC và FOK như năm lựa chọn trong cùng một danh sách. Thực ra không phải vậy. Đằng sau chúng là hai câu hỏi độc lập, và thuật toán phải trả lời cả hai cho mỗi lệnh:

  • Tôi chấp nhận mức giá nào? Đó là loại lệnh: thị trường (giá bất kỳ), giới hạn (giá này hoặc tốt hơn), dừng (kích hoạt khi giá kích hoạt được giao dịch hoặc báo giá).
  • Lệnh được phép tồn tại bao lâu? Đó là thời hạn hiệu lực, hay TIF: ngay lập tức (IOC, FOK), đến hết phiên (Day), đến khi bị hủy (GTC) hoặc đến một thời điểm định sẵn (GTD).

Vì vậy, IOC và FOK không phải là lựa chọn thay thế cho lệnh giới hạn. Chúng là vòng đời gắn vào lệnh đó. “Limit IOC” và “Limit FOK” là hai chỉ thị chủ động phổ biến nhất trong forex thuật toán, và giao thức FIX giữ hai quyết định này trong hai trường riêng: OrdType (thẻ 40) và TimeInForce (thẻ 59).

GiáLoại lệnh, thẻ 40Thị trường, giới hạn, dừng, dừng giới hạn. Xác định mức giá xấu nhất bạn chấp nhận.
Thời gianThời hạn hiệu lực, thẻ 59IOC, FOK, Day, GTC, GTD. Xác định lệnh được phép chờ bao lâu.
Khối lượngQuy tắc khớpChỉ toàn bộ (FOK), khối lượng bất kỳ (IOC) hoặc khối lượng tối thiểu (thẻ 110) nếu được hỗ trợ.

Lệnh thị trường trong forex: “at market” thực sự có nghĩa là gì

Lệnh thị trường nói rằng: hãy khớp cho tôi ngay, giá là chuyện thứ yếu. Lệnh không có giới hạn, nên có độ chắc chắn khớp cao nhất nhưng không có sự bảo vệ nào về mức giá bạn nhận được. Nếu sổ lệnh đã dịch chuyển hoặc mỏng, lệnh sẽ đi qua các mức giá có sẵn cho đến khi đủ khối lượng. Chi phí đó là trượt giá, được trình bày chi tiết trong hướng dẫn cách đo lường và giảm trượt giá forex.

Forex có thêm hai chi tiết mà các giải thích dựa trên sàn giao dịch tập trung thường bỏ qua:

  • Không có một sổ lệnh trung tâm duy nhất. Broker hoặc ECN của bạn hiển thị luồng giá tổng hợp từ nhiều nhà cung cấp thanh khoản. “At market” nghĩa là mức giá tốt nhất mà nơi khớp lệnh của bạn có thể lấy từ luồng đó, không phải một giá thị trường chung cho tất cả.
  • Lệnh thị trường vẫn có vòng đời ngầm định. Nhiều nơi khớp lệnh xử lý nội bộ lệnh thị trường như IOC hoặc FOK: khớp phần có thể khớp ngay và báo cáo phần còn lại. Một số cho phép bạn thêm độ lệch tối đa, về thực chất biến lệnh thành lệnh giới hạn. Đừng giả định; hãy đọc đặc tả của nơi khớp lệnh.

Vai trò thực tế của lệnh thị trường trong thuật toán khá hẹp. Lệnh này phù hợp khi không giao dịch mới là mối nguy lớn hơn, chẳng hạn khi đóng một vị thế đã mất phần phòng hộ.

Lệnh giới hạn, giới hạn khớp ngay và lệnh dừng

Lệnh giới hạn thụ động

Lệnh giới hạn đặt cách xa giá hiện tại sẽ nằm trong sổ lệnh và chờ. Lệnh mua giới hạn dưới giá ask không lấy thanh khoản mà cung cấp thanh khoản. Bạn có thể kiếm được spread thay vì phải trả, nhưng phải chịu rủi ro hàng đợi và lựa chọn bất lợi: lệnh thụ động thường được khớp khi thị trường đang chạy xuyên qua chúng. Lệnh thụ động thường đi kèm Day, GTC hoặc GTD.

Lệnh giới hạn khớp ngay

Lệnh mua giới hạn có giá bằng hoặc cao hơn giá ask hiện tại sẽ khớp ngay như lệnh thị trường, nhưng không thể khớp vượt quá giới hạn của nó. Lệnh “giới hạn khớp ngay” (marketable limit) này là công cụ chủ lực của khớp lệnh tự động. Kết hợp với IOC, nó có nghĩa là: lấy thanh khoản ngay, đến mức giá này, và không để lại gì trong sổ lệnh.

Điểm cải thiện giá thường bị hiểu sai. Giới hạn là mức giá xấu nhất có thể chấp nhận, không phải giá khớp. Nếu bạn mua với giới hạn 1.08510 và giá ask là 1.08502, bạn nên nhận được 1.08502 hoặc các mức tiếp theo cho đến giới hạn của mình.

Lệnh dừng và lệnh dừng giới hạn

Lệnh dừng nằm im cho đến khi chạm giá kích hoạt, rồi trở thành lệnh thị trường. Lệnh dừng giới hạn thì trở thành lệnh giới hạn. Loại đầu đảm bảo kích hoạt nhưng không đảm bảo giá. Loại thứ hai chặn trần giá nhưng có thể không khớp đúng lúc thị trường nhảy giá, một đặc tính khó chịu với lệnh dừng bảo vệ. Vị trí đặt lệnh dừng cũng quan trọng: lệnh dừng lưu tại nơi khớp lệnh vẫn tồn tại khi bạn mất kết nối, còn lệnh dừng mô phỏng trong phần mềm của bạn thì không.

Thời hạn hiệu lực: danh sách đầy đủ

Chỉ thị FIX 59 Vòng đời Khớp một phần? Cách dùng điển hình
Day (trong ngày) 0 Đến khi hết phiên Có Báo giá thụ động trong một phiên xác định
GTC (Good Till Cancel) 1 Đến khi bị hủy Có Lệnh chờ vào vị thế, chốt lời và lệnh dừng
IOC (Immediate or Cancel) 3 Khớp ngay, hủy phần còn lại Có Lấy thanh khoản khi bất kỳ phần khối lượng nào cũng có ích
FOK (Fill or Kill) 4 Toàn bộ khối lượng ngay lập tức hoặc không khớp Không Vào lệnh tất cả hoặc không và các chân lệnh có khối lượng cố định
GTD (Good Till Date) 6 Đến thời điểm chỉ định (thẻ 126 hoặc 432) Có Báo giá có hạn chót cứng, chẳng hạn trước khi công bố tin tức

Các giá trị lấy từ đặc tả FIX 4.4. Các nơi khớp lệnh thường chỉ hỗ trợ một phần danh sách, và một số chỉ cho phép TIF với những loại lệnh nhất định, vì vậy quy định giao dịch của broker có giá trị cao hơn mọi bảng trong bài viết.

IOC, FOK và lệnh thị trường: một sổ lệnh, ba kết quả

Hãy xét một trường hợp cụ thể. Một thuật toán muốn mua 2,000,000 EURUSD. Giá ask tốt nhất là 1.08500, và đây là phía chào bán hiển thị khi lệnh đến:

Giá ask Khối lượng có sẵn Lũy kế
1.08500 500,000 500,000
1.08501 500,000 1,000,000
1.08503 1,000,000 2,000,000
1.08506 2,000,000 4,000,000
So sánh đường đi qua sổ lệnh của lệnh thị trường, lệnh giới hạn IOC và lệnh giới hạn FOK khi mua 2 triệu EURUSD: lệnh thị trường khớp toàn bộ tại 1.085018, IOC khớp 1 triệu tại 1.085005, còn FOK bị hủy
Cùng một sổ lệnh, ba chỉ thị. Sổ lệnh là ví dụ dựng sẵn; các phép tính là chính xác.
Chỉ thị Đã khớp Giá trung bình Chi phí so với ask tốt nhất Kết quả
Thị trường, 2M 2,000,000 1.085018 0.175 pip, khoảng $35 Hoàn tất, ở mức giá bạn không chọn
Giới hạn 1.08502 IOC, 2M 1,000,000 1.085005 0.05 pip, khoảng $5 Một nửa khối lượng, hủy 1M
Giới hạn 1.08502 FOK, 2M 0 Không $0 Bị hủy: chỉ có 1M tại hoặc dưới giới hạn
Giới hạn 1.08503 FOK, 2M 2,000,000 1.085018 0.175 pip, khoảng $35 Đã khớp: giới hạn đủ rộng

Dòng cuối cùng là chỗ tinh tế. Chỉ thêm một phần mười pip đã biến FOK từ không giao dịch thành khớp toàn bộ, với giá trung bình tốt hơn giới hạn của nó. FOK không có nghĩa là “chặt”. Nó có nghĩa là “toàn bộ khối lượng phải lọt dưới mức giá này ngay lúc này”. IOC và FOK ở cùng giới hạn nhìn thấy cùng một lượng thanh khoản. Chúng chỉ khác nhau ở cách xử lý khi thanh khoản không đủ.

Cũng không có chỉ thị nào luôn rẻ hơn. IOC $5 trông như món hời so với lệnh thị trường $35, nhưng chỉ mang về một nửa vị thế. Nếu 1M còn lại phải mua sau đó ở giá xấu hơn, phép so sánh sẽ thay đổi. Chi phí của phần khối lượng thiếu đó chính là chủ đề của phần còn lại trong hướng dẫn này.

Lệnh trông như thế nào trong FIX

Trên kết nối FIX API, bạn nêu rõ từng chỉ thị trong thông điệp NewOrderSingle (35=D). Rút gọn còn các trường quan trọng, lệnh IOC trong ví dụ trông như sau:

35=D | 11=A1001 | 55=EUR/USD | 54=1 | 38=2000000 | 40=2 | 44=1.08502 | 59=3

Đổi 59=3 thành 59=4 và cùng lệnh đó trở thành FOK. Bỏ giá và đặt 40=1 thì đó là lệnh thị trường. Phần header, checksum, dấu thời gian và các trường tài khoản được lược bỏ ở đây, và định dạng mã giao dịch khác nhau tùy nơi khớp lệnh: một số dùng ID mã dạng số.

Thẻ Trường Các giá trị bạn sẽ gặp
40 OrdType 1 Market (thị trường), 2 Limit (giới hạn), 3 Stop (dừng), 4 Stop-limit (dừng giới hạn), D Previously quoted (đã báo giá trước)
59 TimeInForce 0 Day, 1 GTC, 3 IOC, 4 FOK, 6 GTD
110 MinQty Khối lượng tối thiểu phải khớp, nếu được hỗ trợ
150 ExecType 0 New (mới), F Trade (giao dịch), 4 Canceled (đã hủy), 8 Rejected (bị từ chối), C Expired (hết hạn)
39 OrdStatus 0 New (mới), 1 Partially filled (khớp một phần), 2 Filled (đã khớp), 4 Canceled (đã hủy), 8 Rejected (bị từ chối), C Expired (hết hạn)
14 / 151 CumQty / LeavesQty Đã khớp đến nay / còn mở. LeavesQty 0 nghĩa là lệnh đã kết thúc
31 / 32 / 6 LastPx / LastQty / AvgPx Giá và khối lượng của lần khớp này / trung bình của tất cả các lần khớp

Phần khó không phải là gửi lệnh mà là đọc phản hồi. Một lệnh IOC có thể tạo ra một chuỗi ExecutionReport (35=8), và cách báo cáo phần còn lại tùy thuộc vào nơi khớp lệnh.

Vòng đời FIX của một lệnh IOC 2 triệu: NewOrderSingle, hai báo cáo khớp lệnh với CumQty tăng lên 1 triệu, sau đó là báo cáo hủy hoặc hết hạn cho 1 triệu còn lại với LeavesQty bằng 0, và thuật toán chỉ phòng hộ phần khối lượng đã khớp
Lệnh IOC chỉ hoàn tất khi LeavesQty về 0. Vị thế của bạn là CumQty, không bao giờ là khối lượng bạn yêu cầu.

Một số nơi khớp lệnh gửi thêm một xác nhận (150=0) trước các lần khớp. Nơi khác chỉ gửi một lần khớp tổng hợp. Các phiên FIX 4.2 dùng giá trị ExecType cho lần khớp (1 và 2) khác với FIX 4.3 trở lên (F). Vì vậy, một bộ xử lý vững chắc dựa vào CumQty, LeavesQty và OrdStatus, chứ không dựa vào số lượng thông điệp cố định. Bài giải thích chi tiết về giao thức FIX trình bày lớp phiên bên dưới các thông điệp này.

Thanh khoản toàn khối lượng và last look: vì sao forex khác biệt

Các giải thích về thị trường chứng khoán giả định có một sổ lệnh giới hạn trung tâm, nơi giá chào hiển thị là chắc chắn. Các nơi khớp lệnh forex có thể hoạt động khác ở hai điểm ảnh hưởng trực tiếp đến IOC và FOK.

Thanh khoản có thể quét và thanh khoản toàn khối lượng. Trong sổ lệnh có thể quét, một lệnh có thể lấy nhiều mức từ nhiều nhà cung cấp, như ví dụ ở trên. Với báo giá toàn khối lượng, nhà cung cấp đưa ra một giá cho toàn bộ khối lượng và các bậc không cộng dồn, nên lệnh FOK 2M phải được đối chiếu với bậc 2M, không phải tổng các báo giá 1M. Do đó, cùng một cách hiển thị độ sâu có thể mang ý nghĩa khác nhau.

Last look. Khi nhà cung cấp áp dụng last look, lệnh của bạn là một yêu cầu mà họ vẫn có thể từ chối sau một khoảng giữ ngắn. Lệnh FOK có thể bị từ chối dù sổ lệnh hiển thị đủ khối lượng tại thời điểm bạn gửi, và lệnh IOC có thể quay về với khối lượng nhỏ hơn hiển thị. FX Global Code (Bộ quy tắc ứng xử toàn cầu về ngoại hối) yêu cầu các nhà cung cấp sử dụng last look công bố thực hành này cho khách hàng, vì vậy hãy yêu cầu bản công bố đó. Các từ chối do last look chỉ xuất hiện trong nhật ký nếu bạn ghi lại chúng. Cơ chế này được trình bày trong hướng dẫn về khớp lệnh của broker, A-book, B-book và last look.

Vì sao điều này quan trọng với việc đo lường: một lệnh chủ động trên nơi khớp lệnh có last look có thể cho thống kê trượt giá rất đẹp, vì chỉ những lần khớp có lợi cho nhà cung cấp mới nằm trong mẫu. Trượt giá trung bình thấp kết hợp với tỷ lệ từ chối cao không phải là khớp lệnh tốt.

Đặt giá giới hạn ở đâu: mô hình tính toán

Với IOC hoặc FOK, tham số then chốt không phải là TIF mà là giá giới hạn. Đặt ở báo giá hiện tại thì hầu hết tín hiệu sẽ bị lỡ. Không đặt giới hạn thì những lần khớp tệ nhất sẽ ăn mòn lợi thế. Giữa hai cực đó có một đáp án tính toán được.

Hãy xét một tín hiệu ngắn hạn có lợi thế kỳ vọng 1.2 pip sau hoa hồng, tính từ giá tín hiệu. Từ lúc có tín hiệu đến lúc lệnh tới nơi khớp lệnh, giá sẽ dịch chuyển. Giả sử có hai trạng thái: trong 80% trường hợp giá trôi ngược bạn khoảng 0.2 pip (độ lệch chuẩn 0.3 pip), và trong 20% trường hợp một biến động nhanh đẩy giá đi khoảng 2 pip (độ lệch chuẩn 1 pip). Các đầu vào này chỉ mang tính minh họa. Trên thực tế, bạn ước tính chúng từ nhật ký lệnh của chính mình.

Mô hình minh họa: số pip ròng kỳ vọng trên mỗi tín hiệu tăng theo dung sai giới hạn, đạt đỉnh gần 0.82 pip ở dung sai khoảng 1.2 pip, rồi giảm còn 0.64 pip với lệnh thị trường không giới hạn, trong khi tỷ lệ khớp tăng từ 21 phần trăm lên 100 phần trăm
Mô hình minh họa, không phải kết quả giao dịch: lợi thế 1.2 pip và độ trôi giá hai trạng thái. Lệnh khớp khi độ trôi nằm trong dung sai.
Dung sai giới hạn so với giá tín hiệu Tỷ lệ khớp Ròng trung bình mỗi lần khớp Ròng kỳ vọng mỗi tín hiệu
0 pip (giới hạn tại giá tín hiệu) 20.7% 1.38 pip 0.29 pip
0.3 pip 51.3% 1.18 pip 0.61 pip
0.6 pip 74.3% 1.05 pip 0.78 pip
1.2 pip (bằng lợi thế) 84.2% 0.98 pip 0.82 pip
2.0 pip 90.0% 0.89 pip 0.80 pip
Không giới hạn (lệnh thị trường) 100% 0.64 pip 0.64 pip

Ba kết luận sau đúng cả ngoài phạm vi ví dụ này:

  • Giới hạn tốt nhất là giá hòa vốn, không phải báo giá. Lần khớp nào vẫn còn lợi nhuận kỳ vọng dương đều đáng nhận. Trong mô hình này, điểm cực đại nằm đúng chỗ dung sai bằng lợi thế, vì lần khớp biên tiếp theo chỉ kiếm được bằng không.
  • Đường cong phẳng ở gần đỉnh. Từ 0.8 đến 2 pip, lợi nhuận kỳ vọng hầu như không đổi. Bạn không cần dung sai chính xác tuyệt đối, nhưng nhất định phải có dung sai.
  • Giá khớp trung bình là mục tiêu dễ gây hiểu lầm. Giới hạn chặt nhất có giá tốt nhất trên mỗi lần khớp (1.38 pip) và kết quả tệ nhất trên mỗi tín hiệu (0.29 pip), vì 79% tín hiệu không bao giờ được giao dịch.

Mô hình bỏ qua hiệu ứng hàng đợi và giả định toàn bộ khối lượng được khớp khi chạm giới hạn. Với lệnh lớn hơn, hãy tính lại bằng độ sâu thực tế, vì giới hạn còn quyết định lượng khối lượng có thể lọt vào. Hãy kiểm tra các giả định bằng dữ liệu: hướng dẫn về khoảng cách giữa backtest và khớp lệnh thực cho thấy cách đưa thời gian khớp lệnh vào kiểm thử.

Xử lý khớp một phần mà không tạo ra rủi ro mới

Khớp một phần không phải là lỗi, nhưng là một trạng thái mới mà thuật toán phải có quy tắc xử lý. FOK tránh trạng thái này khi vào lệnh; IOC chuyển vấn đề sang logic của bạn. Hãy quyết định chính sách trước khi chạy thực:

Chính sách phần còn lại Khi nào phù hợp Rủi ro cần kiểm soát
Chấp nhận và quản lý phần đã khớp Vào lệnh có lợi thế không phụ thuộc khối lượng Vị thế quá nhỏ để bù chi phí cố định
Gửi lại phần còn lại ở giá mới Tín hiệu còn hiệu lực, lợi thế vẫn trên dung sai Đuổi giá. Giới hạn số lần thử lại và kiểm tra lại lợi thế mỗi lần
Phòng hộ hoặc hoàn tất ở nơi khớp lệnh khác Giao dịch nhiều chân Bước lot khác nhau và thêm một khả năng không khớp
Đóng phần đã khớp Lần khớp dưới khối lượng khả thi Trả spread hai lần

Giao dịch hai chân cần cẩn trọng nhất. Giả sử một giao dịch phòng hộ mua 2M tại nơi khớp lệnh A bằng IOC và bán tại nơi khớp lệnh B. Nếu A chỉ khớp 1M mà thuật toán vẫn bán đủ 2M như kế hoạch, nó sẽ giữ một vị thế bán mở 1M. Với khoảng $100 mỗi pip trên mỗi triệu EURUSD, biến động 10 pip ngược vị thế đó sẽ tốn $1,000, dễ dàng vượt quá lợi thế của nhiều giao dịch. Quy tắc rất đơn giản: xác định khối lượng chân thứ hai từ CumQty của chân thứ nhất, không bao giờ từ khối lượng yêu cầu.

Cũng hãy quy đổi về lưới khối lượng của nơi khớp lệnh thứ hai. Nếu chân một khớp 1,370,000 và nơi khớp lệnh B nhận bước 100,000, bạn có thể phòng hộ 1,400,000 hoặc 1,300,000, chứ không phải đúng khối lượng đó. Hãy đặt quy tắc cho phần dư này và coi phần dư chưa phòng hộ là một hạn mức rủi ro.

FOK ở chân thứ nhất loại bỏ sự chênh lệch khối lượng nhưng tạo ra nhiều trường hợp không giao dịch hơn. FOK ở chân thứ hai thường là lựa chọn kém: khi chân thứ nhất đã khớp, một lệnh phòng hộ bị hủy sẽ để bạn phơi nhiễm hoàn toàn. Chân thứ hai chính là nơi sự chắc chắn khớp lệnh đáng để trả tiền.

Lệnh nào cho chiến lược nào

Sơ đồ quyết định chọn loại lệnh: nếu vị thế phải thay đổi ngay, dùng lệnh thị trường hoặc IOC rộng; nếu khớp một phần vô ích, dùng FOK; nếu lấy thanh khoản với bất kỳ khối lượng hữu ích nào, dùng giới hạn IOC; nếu không, đặt lệnh giới hạn thụ động với Day, GTC hoặc GTD
Điểm khởi đầu cho quyết định. Quy định của nơi khớp lệnh và dữ liệu khớp của bạn mới có tiếng nói cuối cùng.
Tình huống Mặc định hợp lý Lý do
Vào lệnh arbitrage độ trễ Giới hạn IOC tại giá hòa vốn Lợi thế phân rã trong vài mili giây; khớp một phần vẫn có lãi và giới hạn chặn rủi ro đuôi
Chân thứ nhất của cặp phòng hộ Giới hạn FOK hoặc IOC với phòng hộ theo CumQty FOK bảo vệ khối lượng; IOC tăng tỷ lệ khớp nhưng cần logic tốt hơn
Chân thứ hai, khi chân thứ nhất đã khớp Thị trường hoặc IOC rộng Không được phòng hộ là rủi ro lớn hơn
Vào lệnh theo tin tức Giới hạn IOC, khối lượng nhỏ Spread và độ sâu thay đổi nhanh, còn lệnh thị trường không có trần giá
Thoát khẩn cấp hoặc stop-out Thị trường hoặc IOC rộng, lặp lại đến khi hết vị thế Sự chắc chắn là trên hết; FOK có thể để vị thế còn mở
Giao dịch cặp hoặc thống kê Giới hạn IOC hoặc giới hạn thụ động ngắn hạn Thời gian nắm giữ dài hơn, nên spread phải trả quan trọng hơn tốc độ
Thu spread và tái cân bằng Giới hạn thụ động, Day hoặc GTD Bạn được trả tiền cho việc chờ đợi, và phải hủy lệnh trước tin tức và rollover

Khớp lệnh còn phụ thuộc vào thời điểm. Quanh rollover và tin tức, spread giãn rộng và độ sâu mỏng đi, nên một giới hạn khớp tốt vào trưa London có thể thất bại hoặc trở nên đắt đỏ trong các khung giờ đó. Hãy để dung sai và khối lượng phụ thuộc vào spread hiện tại thay vì cố định cả ngày. Bạn có thể tìm hiểu sâu hơn về các chiến lược nhạy với tốc độ trong hướng dẫn về arbitrage độ trễ.

Bảy bước cấu hình khớp lệnh

1
Định giá giao dịch bị lỡ. Xác định cái giá của việc không khớp. Với lệnh vào tùy chọn, cái giá đó bằng không; với lệnh phòng hộ hoặc lệnh thoát, đó là rủi ro mở.
2
Tính mức giá xấu nhất có thể chấp nhận. Lấy lợi thế kỳ vọng, trừ hoa hồng và biên an toàn, rồi đặt giới hạn tại mức hòa vốn đó.
3
Chọn vòng đời. Dùng IOC hoặc FOK để lấy thanh khoản và Day, GTC hoặc GTD cho lệnh chờ.
4
Đặt mức khớp hữu ích nhỏ nhất. Dùng FOK, hoặc khối lượng tối thiểu nếu được hỗ trợ, khi các lần khớp nhỏ không bù nổi chi phí cố định.
5
Viết quy tắc cho phần còn lại. Xác định việc thử lại, số lần thử tối đa và cách xử lý mọi phần dư chưa phòng hộ.
6
Xác nhận quy định của nơi khớp lệnh. Kiểm tra các cặp loại lệnh và TIF được hỗ trợ, bước khối lượng, cách báo cáo phần còn lại và việc có áp dụng last look hay không.
7
Ghi nhật ký và xem xét. Ghi lại mọi lệnh, kể cả lệnh bị từ chối và bị hủy, và điều chỉnh giới hạn từ dữ liệu khớp thực tế.

Những sai lầm thường gặp khi xử lý lệnh tự động

  • Giả định khối lượng yêu cầu đã được khớp. Vị thế phải được lấy từ báo cáo khớp lệnh, không phải từ lệnh bạn đã gửi.
  • Coi FOK bị hủy là lỗi hệ thống. Đó là kết quả bình thường. Cảnh báo cho từng trường hợp sẽ khiến bạn quen bỏ qua cảnh báo; hãy cảnh báo theo tỷ lệ.
  • Thử lại cùng một giá trong vòng lặp. Nếu giá đã dịch chuyển, lần thử lại cũng thất bại, và thử lại quá nhanh có thể vi phạm giới hạn thông điệp. Hãy định giá lại hoặc dừng.
  • Bỏ qua trạng thái không xác định. Khi không có phản hồi, lệnh có thể vẫn đang hoạt động hoặc đã khớp. Hãy truy vấn bằng OrderStatusRequest (35=H) hoặc đối chiếu vị thế sau khi kết nối lại, trước khi gửi lệnh thay thế.
  • Dùng lại giá trị ClOrdID. Thẻ 11 duy nhất cho mỗi lệnh, kể cả mỗi lần thử lại, là điều giúp việc đối chiếu khả thi.
  • Dùng giá cũ để tính giới hạn. Giới hạn tính từ báo giá trễ sẽ quá chặt hoặc quá rộng rãi. Nguồn giá nhanh giúp dung sai có ý nghĩa.
  • Kiểm thử với khớp lệnh hoàn hảo. Backtest khớp mọi lệnh đầy đủ tại báo giá không thể phân biệt lệnh thị trường, IOC và FOK. Hãy mô hình hóa độ sâu và từ chối, hoặc forward-test với khối lượng nhỏ.
  • Mang cài đặt từ nơi khớp lệnh này sang nơi khác. Dung sai tinh chỉnh trên một broker nói lên rất ít về broker khác, vì độ sâu, last look và độ trễ đều khác nhau.

Cần đo lường những gì

Chọn loại lệnh là câu hỏi thực nghiệm, và chỉ một nhật ký đầy đủ mới trả lời được. Báo cáo nên bao gồm tín hiệu và các lần thử, không chỉ các giao dịch đã hoàn tất.

Chỉ số Định nghĩa Điều nó cho bạn biết
Tỷ lệ khớp Khối lượng đã khớp / khối lượng yêu cầu Quá thấp nghĩa là giới hạn chặt hoặc độ sâu mỏng
Tỷ lệ từ chối Lệnh bị từ chối hoặc bị hủy / lệnh đã gửi Tăng đột ngột gợi ý có thay đổi về thanh khoản hoặc broker
Trượt giá Giá khớp trừ giá tham chiếu tại thời điểm tín hiệu, có dấu Chi phí khớp lệnh trên mỗi giao dịch đã khớp
Thời gian khứ hồi Từ khi gửi lệnh đến báo cáo khớp lệnh đầu tiên Nơi khớp lệnh có đang chậm đi không, theo giờ trong ngày
Ròng mỗi tín hiệu Tổng kết quả / tất cả tín hiệu, kể cả tín hiệu bị lỡ Con số nên dùng để xác định dung sai

Hãy chia các số liệu này theo mã, nơi khớp lệnh, giờ và loại lệnh, rồi so sánh kết quả trước và sau mỗi thay đổi. SharpTrader hiển thị lệnh và thống kê hiệu suất với PnL, trượt giá và thời gian khớp lệnh, một nền tảng thực tế cho kiểu đánh giá này. Những loại lệnh và giá trị TIF khả dụng trong một thiết lập cụ thể phụ thuộc vào connector và broker, vì vậy hãy xác nhận cho tài khoản của bạn.

Xây dựng khớp lệnh dựa trên dữ liệu của chính bạn

SharpTrader kết nối với broker qua FIX API và các giao thức khác, chạy các chiến lược arbitrage và phi arbitrage, đồng thời ghi lại trượt giá và thời gian khớp lệnh cho từng lệnh. Để tinh chỉnh tham số theo dữ liệu đó, SharpTrader Optimizer sẽ tự động hóa việc tìm kiếm.

Khám phá SharpTraderSharpTrader Optimizer

Máy quét chênh lệch giá miễn phí + khóa học email ngắn

Nhận liên kết máy quét miễn phí và vài email ngắn, thực tế từ Boris: chênh lệch giá thực sự có ý nghĩa gì sau chi phí, cách kiểm thử chiến lược trước khi mạo hiểm tiền thật và công cụ nào phù hợp với thị trường của bạn. Không thổi phồng. Email được gửi bằng tiếng Anh.

Khi gửi, bạn đồng ý nhận email từ BJF Trading Group về công cụ arbitrage và phần mềm giao dịch. Bạn có thể hủy đăng ký bất cứ lúc nào. Xem Chính sách quyền riêng tư của chúng tôi.

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

Sự khác nhau giữa IOC và FOK là gì?

Cả hai đều thực hiện ngay và không bao giờ nằm chờ trong sổ lệnh. IOC chấp nhận khớp một phần và hủy phần chưa khớp. FOK yêu cầu toàn bộ khối lượng phải khớp cùng lúc, nếu không cả lệnh bị hủy và không có giao dịch nào diễn ra.

FOK có tốt hơn IOC không?

Nói chung không loại nào tốt hơn. FOK phù hợp với các giao dịch mà vị thế dở dang là vô ích hoặc làm phức tạp việc phòng hộ. IOC thường giao dịch nhiều hơn, vì một phần khối lượng được thực hiện, nhưng thuật toán của bạn phải xử lý đúng các lần khớp một phần.

Lệnh FOK có thể khớp một phần không?

Không. Theo định nghĩa, lệnh FOK hoặc khớp toàn bộ hoặc không khớp gì. Nếu bạn thấy khớp một phần, lệnh đó không phải FOK thực sự tại nơi khớp lệnh đó, vì vậy hãy kiểm tra cách broker ánh xạ chỉ thị này.

Điều gì xảy ra với phần chưa khớp của lệnh IOC?

Phần đó bị hủy ngay và không bao giờ nằm chờ trong sổ lệnh. Trên FIX, bạn nhận được báo cáo khớp lệnh đóng lệnh, thường ở trạng thái Canceled hoặc Expired tùy nơi khớp lệnh, với LeavesQty bằng 0.

Lệnh thị trường có giống lệnh IOC không?

Không hoàn toàn. Lệnh thị trường không có giới hạn giá, còn IOC thường có. Nhiều nơi khớp lệnh chạy lệnh thị trường theo cách của IOC hoặc FOK, nên vòng đời có thể giống nhau, nhưng chỉ giới hạn mới bảo vệ được giá.

Giá trị FIX của IOC và FOK là gì?

Trong trường TimeInForce, thẻ 59, IOC là 3 và FOK là 4. Loại lệnh được đặt riêng ở thẻ 40, trong đó 1 là thị trường và 2 là giới hạn.

Tất cả broker forex đều hỗ trợ IOC và FOK không?

Không. Việc hỗ trợ phụ thuộc vào broker, nền tảng và loại kết nối. Kết nối FIX API thường cho nhiều quyền kiểm soát hơn, nhưng mỗi nơi khớp lệnh công bố danh sách riêng các tổ hợp loại lệnh và thời hạn hiệu lực được chấp nhận.

Bài viết này mang tính giáo dục và không phải là tư vấn đầu tư. Sổ lệnh và mô hình là ví dụ minh họa, không phải kết quả giao dịch. Giao dịch ngoại hối tiềm ẩn rủi ro thua lỗ đáng kể.