REST, WebSocket, FIX và MT5 thường được trình bày như bốn API forex cạnh tranh. Chúng không phải vậy.

REST thường là cách sạch nhất để yêu cầu dữ liệu tài khoản, tải lịch sử hoặc gửi một lệnh thỉnh thoảng. WebSocket giữ kết nối mở để giá cả và cập nhật đơn hàng có thể đến ngay khi chúng xảy ra. FIX là một tiêu chuẩn tin nhắn tài chính được sử dụng cho việc định tuyến đơn hàng, báo cáo thực hiện và dữ liệu thị trường giữa các hệ thống giao dịch chuyên nghiệp. MT5 là một nền tảng giao dịch với nhiều API cho các công việc khác nhau.

Một nhà môi giới có thể sử dụng cả bốn. Ứng dụng di động có thể tải tài khoản qua REST, phát giá qua WebSocket, gửi đơn hàng vào MetaTrader 5 và chuyển giao rủi ro bên ngoài đến một nhà cung cấp thanh khoản qua FIX. Mỗi giao diện thuộc về một phần khác nhau của giao dịch.

Giao diệnMô hình giao tiếpPhù hợp nhấtKhông phù hợp
REST APIKhách hàng gửi yêu cầu và nhận phản hồiQuy trình đăng nhập, tài khoản, ký hiệu, lịch sử, báo cáo và lệnh tần suất thấpTruyền giá liên tục qua việc lấy dữ liệu lặp lại
WebSocket APIKhách hàng và máy chủ giữ kết nối hai chiều mởBáo giá trực tiếp, độ sâu, trạng thái đơn hàng và sự kiện tài khoảnCác truy vấn lịch sử dài và hồ sơ quản trị đơn giản
FIX APIHai hệ thống giao dịch trao đổi các tin nhắn tài chính tiêu chuẩn trong một phiên quản lýLuồng đơn hàng từ môi giới đến LP, địa điểm và tổ chứcMột API công cộng đơn giản cho ứng dụng di động bán lẻ
MT5 APIsNhiều giao diện xung quanh nền tảng MetaTrader 5Quản lý môi giới, mở rộng nền tảng, cổng, báo cáo và tự động hóa đầu cuốiMột giao thức toàn cầu độc lập với MT5

Cách mà các API này phù hợp với một hệ thống giao dịch forex

Tôi coi bốn tên này như là những lớp khác nhau.

REST và WebSocket thường nằm gần ứng dụng đối diện với nhà giao dịch. FIX thường nằm sâu hơn trong hạ tầng thực thi. MT5 có thể là nền tảng giao dịch ở giữa, nhưng nó cũng có thể kết nối với các trang web, công cụ nội bộ và các địa điểm bên ngoài thông qua các API riêng của nó.

How one forex order moves through the stack

One order. Five steps. From the trader’s app to execution and back.

RESTFIXWebSocket
Trader appBUY 100K EUR/USD
Broker coreORDER #A-18427 / EUR/USD
API gatewayWaiting
Risk enginePending
Trading platform – MT5Ready
Execution routerPending
RESTWaiting for order
Liquidity providerPrice + fill
CRM / automationAccount and client data
Venue / exchangeMarket data and venues
  1. The app sends the order to the broker through REST.
  2. The liquidity provider sends prices to the broker, and WebSocket keeps the app current.
  3. The broker checks the order and passes it to the trading platform.
  4. The execution router sends the order to the liquidity provider through FIX.
  5. The fill returns to the broker, then the app receives the confirmation through WebSocket.

Đường đi chính xác thay đổi theo từng nhà môi giới. Một số nền tảng cung cấp các lệnh giao dịch qua REST. Những nền tảng khác truyền cả yêu cầu và sự kiện qua WebSocket hoặc TCP thô. Một nhà môi giới MT5 có thể sử dụng một cổng, một cầu nối hoặc logic giao dịch nội bộ thay vì gửi từng lệnh trực tiếp đến nhà cung cấp thanh khoản.

Vì vậy, một sơ đồ nên được hiểu như một mẫu kiến trúc, không phải là một lời hứa rằng mỗi nhà môi giới đều xử lý một giao dịch theo cùng một cách.

REST API trong giao dịch forex là gì?

Một API REST tiết lộ các tài nguyên thông qua HTTP. Một khách hàng gửi một yêu cầu đến một điểm cuối, và máy chủ trả về một phản hồi.

Các cuộc gọi điển hình trông như thế này:

  • GET /accounts/417 để tải một tài khoản;
  • GET /orders?status=open để lấy đơn hàng đang mở;
  • GET /candles?symbol=EURUSD&timeframe=1h để yêu cầu các thanh lịch sử;
  • POST /orders để gửi một đơn hàng;
  • XÓA /đơn hàng/8921 để yêu cầu hủy bỏ.

Các URL và phương pháp chính xác phụ thuộc vào nhà cung cấp. Ý tưởng ổn định là yêu cầu và phản hồi. HTTP tự nó là một giao thức không trạng thái, điều này có nghĩa là mỗi yêu cầu có thể được hiểu một cách độc lập. Thông số kỹ thuật HTTP định nghĩa ngữ nghĩa phía sau các phương pháp, mã trạng thái và phản hồi.

Nơi REST hoạt động tốt

REST là một lựa chọn thực tiễn cho dữ liệu chỉ thay đổi khi được yêu cầu:

  • hồ sơ tài khoản và quyền hạn;
  • Các công cụ có sẵn và cài đặt hợp đồng;
  • các khoản tiền gửi, rút tiền và báo cáo;
  • đơn hàng lịch sử, giao dịch và nến;
  • cài đặt chiến lược;
  • tạo hoặc hủy đơn hàng khi API hỗ trợ giao dịch.

Dễ dàng để kiểm tra, ghi nhật ký, lưu trữ và tích hợp với hạ tầng web thông thường. Hầu hết các nhóm phát triển đã biết cách làm việc với HTTP và JSON.

Nơi REST bắt đầu gặp khó khăn

REST không tự nhiên chậm. Một API REST được xây dựng tốt có thể phản hồi đủ nhanh cho nhiều quy trình giao dịch. Vấn đề xuất hiện khi khách hàng phải hỏi cùng một câu hỏi hàng trăm lần:

EUR/USD đã thay đổi chưa?

Đơn hàng của tôi đã được hoàn thành chưa?

Biên độ của tôi đã thay đổi chưa?

Việc thăm dò đó tạo ra các yêu cầu lặp đi lặp lại, tiêu đề và công việc của máy chủ. Nó cũng có thể để lại khoảng trống giữa các lần thăm dò. Nếu ứng dụng yêu cầu một mức giá mỗi giây, nó không biết điều gì đã xảy ra giữa những yêu cầu đó.

Tôi sử dụng REST cho các bản chụp và lệnh. Tôi không sử dụng polling như là nguồn chính cho trạng thái giao dịch trực tiếp khi một luồng sự kiện thích hợp tồn tại.

WebSocket API trong giao dịch forex là gì?

WebSocket tạo ra một kết nối hai chiều, liên tục giữa một khách hàng và máy chủ. Sau khi bắt tay mở, một trong hai bên có thể gửi một tin nhắn mà không cần chờ đợi một yêu cầu HTTP mới. Hành vi đó được định nghĩa trong giao thức WebSocket.

Trong một ứng dụng giao dịch, khách hàng có thể đăng ký EURUSD một lần. Sau đó, máy chủ sẽ gửi từng bản cập nhật báo giá được phép qua kết nối đang mở. Dòng dữ liệu tương tự có thể chứa xác nhận đơn hàng, hoàn thành, thay đổi số dư và các sự kiện ký quỹ.

Nơi WebSocket hoạt động tốt

Một API WebSocket forex phù hợp với dữ liệu thay đổi liên tục:

  • giá mua và giá bán;
  • các bản cập nhật biểu đồ;
  • độ sâu thị trường;
  • chấp nhận đơn hàng, từ chối và thực hiện;
  • thay đổi vị trí và tài khoản;
  • Cảnh báo lề;
  • trạng thái phiên giao dịch.

Khách hàng nhận được các thay đổi thay vì phải yêu cầu liên tục. Điều này giảm thiểu việc kiểm tra và làm cho giao diện cảm thấy sống động.

Một kết nối mở là không đủ

WebSocket không làm cho một ứng dụng giao dịch trở nên đáng tin cậy chỉ bằng chính nó.

Một chiếc điện thoại chuyển đổi mạng. Một chiếc laptop ngủ. Một proxy đóng một kết nối không hoạt động. Máy chủ khởi động lại. Tin nhắn có thể ngừng đến trước khi giao diện nhận ra.

Tôi tìm kiếm năm cơ chế phục hồi:

  1. Nhịp tim. Khách hàng phải biết liệu kết nối vẫn còn sống hay không.
  2. Trạng thái dữ liệu cũ. Giao diện phải ngừng việc hiển thị một báo giá cũ như là hiện tại.
  3. Kết nối lại và đăng ký lại. Khách hàng cần khôi phục mọi luồng cần thiết.
  4. Ảnh chụp nhanh cộng với cập nhật. Sau khi kết nối lại, tải một bức ảnh REST hiện tại trước khi áp dụng các sự kiện mới.
  5. Chuỗi hoặc con trỏ. Nếu API cung cấp các định danh sự kiện, hãy sử dụng chúng để phát hiện các khoảng trống và bản sao.

FIX API trong giao dịch forex là gì?

FIX là viết tắt của Financial Information eXchange. Nó định nghĩa các thông điệp mà các hệ thống tài chính sử dụng để giao tiếp về đơn hàng, thực hiện, báo giá, dữ liệu thị trường và các phiên giao dịch.

Một đơn hàng mới, chẳng hạn, tuân theo một loại tin nhắn chung với các trường được đặt tên cho các chi tiết như công cụ, bên, số lượng, loại đơn hàng và ID đơn hàng của khách hàng.

FIX là phổ biến giữa:

  • nhà môi giới và nhà cung cấp thanh khoản;
  • các nhà môi giới và sàn giao dịch hoặc các địa điểm khác;
  • khách hàng tổ chức và môi giới;
  • hệ thống quản lý đơn hàng và hệ thống thực hiện.

Tại sao các công ty sử dụng FIX

FIX cung cấp cho cả hai bên một ngôn ngữ tài chính chung và một cách có kỷ luật để quản lý kết nối. Nó không tự động là API nhanh nhất; động cơ, mạng và thiết lập đối tác vẫn xác định hiệu suất.

Một phiên FIX theo dõi số thứ tự tin nhắn. Nếu một bên nhận được tin nhắn 208 sau tin nhắn 206, nó có thể phát hiện rằng 207 đã bị thiếu và yêu cầu gửi lại. Các tín hiệu nhịp tim và yêu cầu kiểm tra giúp cả hai bên theo dõi phiên.

Điều đó quan trọng khi các tin nhắn đại diện cho đơn đặt hàng và việc thực hiện. “Kết nối đã trở lại” là không đủ. Cả hai hệ thống cần phải đồng ý về những tin nhắn nào đã được xử lý.

Những gì FIX không giải quyết

FIX không loại bỏ công việc tích hợp.

Hai bên đối tác vẫn phải đồng ý về:

  • phiên bản FIX và các tin nhắn được hỗ trợ;
  • các trường bắt buộc, tùy chọn và tùy chỉnh;
  • tên ký hiệu và mã định danh công cụ;
  • các loại lệnh được hỗ trợ và các giá trị thời gian có hiệu lực;
  • độ chính xác về giá cả và số lượng;
  • phiên giao dịch và thời gian bảo trì;
  • các quy tắc đặt lại chuỗi và gửi lại;
  • các trường hợp kiểm tra chứng nhận;
  • bảo mật mạng và địa chỉ IP được phép.

Tôi không bao giờ chấp nhận “Hỗ trợ FIX” như một câu trả lời tích hợp hoàn chỉnh. Tôi yêu cầu các thông số kỹ thuật của bên đối tác và kế hoạch chứng nhận. Một tiêu chuẩn với các quy tắc trường khác nhau ở mỗi bên vẫn cần được ánh xạ và kiểm tra.

“MT5 API” có nghĩa là gì?

MetaTrader 5 là một nền tảng, không phải là một giao thức API. MetaQuotes liệt kê một số giao diện cho các nhà môi giới, bao gồm Manager, Gateway, Report, Server và Web APIs. Mỗi giao diện phục vụ một vai trò khác nhau trong môi trường MT5.

Quản lý API

API quản lý dành cho các công cụ quản trị và quản lý phía môi giới. Một môi giới có thể sử dụng nó để xây dựng các tiện ích nội bộ liên quan đến tài khoản, nhóm, hoạt động giao dịch và quản trị nền tảng.

Đây không phải là sản phẩm giống như khóa API của nhà giao dịch bán lẻ. Quyền truy cập, cấp phép và các hoạt động được hỗ trợ thuộc về thiết lập MetaTrader của nhà môi giới.

API Cổng

Gateway API dùng để kết nối MetaTrader 5 với các hệ thống giao dịch và nguồn dữ liệu bên ngoài. MetaQuotes mô tả các gateway như là các plug-in nền tảng xử lý tương tác với các sàn giao dịch hoặc các hệ thống kết nối khác.

Điều này gần gũi hơn nhiều với khả năng kết nối thị trường so với một điểm cuối REST hướng tới nhà giao dịch.

Web, Báo cáo và API Máy chủ

MetaQuotes mô tả Web API như một giao diện để liên kết nền tảng với các tài nguyên và dịch vụ web của một nhà môi giới. Report API mở rộng khả năng báo cáo của máy chủ. Server API cho phép các nhà điều hành nền tảng thêm các chức năng của máy chủ giao dịch và máy chủ lịch sử.

Tên của chúng có thể trông rõ ràng, nhưng phạm vi và tính khả dụng phải được kiểm tra trong giấy phép của nhà môi giới và tài liệu kỹ thuật.

MQL5

MQL5 là ngôn ngữ và môi trường lập trình được sử dụng bên trong MetaTrader 5. Các nhà giao dịch và nhà phát triển xây dựng Các cố vấn chuyên gia, chỉ báo, kịch bản và dịch vụ chạy với terminal.

Đó là lộ trình gốc cho một chiến lược tự động cần dữ liệu biểu đồ, chỉ báo và các chức năng giao dịch trong MT5. Đây không phải là một giao thức giữa nhà môi giới và nhà cung cấp thanh khoản.

Tích hợp MetaTrader 5 với Python

Bộ gói MetaTrader5 chính thức cho Python cho phép một chương trình Python đọc dữ liệu và gửi yêu cầu giao dịch thông qua một terminal MetaTrader 5. Những từ quan trọng là thông qua terminal.

Tài liệu Python chính thức cho biết gói này giao tiếp trực tiếp với terminal thông qua giao tiếp giữa các tiến trình. Nó không cung cấp cho một dịch vụ đám mây tùy ý một kết nối trực tiếp với máy chủ MT5 của nhà môi giới.

Sự phân biệt đó thay đổi việc triển khai. Một chiến lược Python cần một môi trường terminal tương thích, phiên tài khoản, giám sát và một kế hoạch cho việc khởi động lại terminal. Nó không nên được thiết kế như thể pip install MetaTrader5 tạo ra một API broker phía máy chủ.

Một đơn hàng có thể đi qua nhiều API

Giả sử một nhà giao dịch mua 100,000 đơn vị EUR/USD trong ứng dụng di động của một nhà môi giới.

  1. Ứng dụng tải tài khoản, thông số ký hiệu và quyền thông qua REST.
  2. Nó nhận được giá thầu và giá hỏi hiện tại thông qua WebSocket.
  3. Người giao dịch nhấn Mua. Ứng dụng gửi một lệnh với mã đơn hàng khách hàng duy nhất.
  4. Dịch vụ rủi ro của môi giới kiểm tra biên, giới hạn và trạng thái thị trường.
  5. Nền tảng giao dịch chấp nhận hoặc từ chối đơn hàng. Nền tảng đó có thể là MT5.
  6. Tùy thuộc vào mô hình thực thi của nhà môi giới, sự tiếp xúc bên ngoài có thể được gửi đến nhà cung cấp thanh khoản thông qua FIX, một cổng hoặc một kết nối khác.
  7. Báo cáo thực hiện được trả về qua ngăn xếp.
  8. Ứng dụng nhận đơn hàng, vị trí và số dư được cập nhật thông qua luồng sự kiện của nó.

REST không cạnh tranh với FIX trong chuỗi này. Họ hoạt động ở những ranh giới khác nhau.

Trường hợp timeout phơi bày một API yếu

Phần khó khăn của một API đơn hàng không phải là gửi yêu cầu. Mà là biết điều gì đã xảy ra khi phản hồi biến mất.

Giả sử ứng dụng gửi hướng dẫn này:

Mua EURUSD, clientOrderId = mobile-84721

Yêu cầu đã hết thời gian chờ. Có hai khả năng:

  • nhà môi giới chưa bao giờ nhận được nó;
  • nhà môi giới đã chấp nhận, nhưng phản hồi không đến được ứng dụng.

Gửi cùng một giao dịch mù quáng có thể tạo ra hai vị trí.

Một quy trình làm việc an toàn hơn là:

  1. Giữ nguyên ID đơn hàng của khách hàng.
  2. Truy vấn trạng thái đơn hàng chính thức hoặc chờ sự kiện đơn hàng.
  3. Hãy để máy chủ từ chối hoặc loại bỏ một lệnh lặp lại với cùng một ID.
  4. Giải quyết đơn hàng cuối cùng và điền hồ sơ trước khi cho phép thử lại lần nữa.

Đây là lý do tại sao tôi hỏi các nhà cung cấp API về tính đồng nhất trước khi hỏi về tỷ lệ yêu cầu tiêu đề. Một điểm cuối nhanh có thể sao chép một hành động tài chính sau thời gian chờ không phải là một điểm cuối giao dịch tốt.

REST so với WebSocket so với FIX so với MT5 theo trường hợp sử dụng

Yêu cầuGiao diện tôi sẽ kiểm tra trướcLý do
Trang web của nhà môi giới hiển thị lịch sử tài khoảnRESTTruy vấn đơn giản, xác thực quen thuộc và phản hồi rõ ràng
Danh sách theo dõi trực tiếp trong ứng dụng web hoặc di độngWebSocketBáo giá đến dưới dạng sự kiện mà không cần kiểm tra liên tục
Nhập lệnh bán lẻ từ một ứng dụng tùy chỉnhREST command cộng với trạng thái WebSocketLuồng gửi rõ ràng với xác nhận trực tiếp và cập nhật hoàn thành
Kết nối của nhà môi giới với nhà cung cấp thanh khoảnFIX hoặc kết nối đã được chứng nhận của nhà cung cấpQuy trình đặt hàng và thực hiện tiêu chuẩn giữa các hệ thống giao dịch
Quản trị nhà môi giới quanh MT5MT5 Manager APIĐược xây dựng cho các tiện ích quản lý phía nền tảng
Kết nối MT5 tùy chỉnh với một địa điểmMT5 Gateway API hoặc một thiết lập cầu/ cổng đã được kiểm traĐược thiết kế cho tính kết nối thị trường của nền tảng
Chuyên gia tư vấn chạy trên MT5MQL5Môi trường tự động hóa và kiểm tra tích hợp
Phân tích và thực hiện bằng Python thông qua một terminal MT5Gói Python MetaTrader 5Cung cấp quyền truy cập Python vào dữ liệu terminal và các chức năng giao dịch
Tập dữ liệu nghiên cứu lịch sửREST hoặc xuất dữ liệu hàng loạtDễ dàng phân trang, khoảng thời gian và truy xuất lặp lại

Bảng là một điểm khởi đầu. Lựa chọn cuối cùng phụ thuộc vào API thực tế của nhà cung cấp, giới hạn tỷ lệ, xác thực, các loại đơn hàng được hỗ trợ và các đảm bảo dịch vụ.

Câu hỏi tôi đặt ra trước khi chọn một API giao dịch forex

Dữ liệu thị trường

  • Đầu vào có tính từng tick, kết hợp hay được lấy mẫu?
  • Thời gian ghi nhận giá mua và giá bán được tạo ra tại nguồn hay khi giao hàng?
  • Có phải luồng dữ liệu bao gồm số thứ tự không?
  • Khách hàng phục hồi dữ liệu như thế nào sau khi bị ngắt kết nối?
  • Các thông số ký hiệu có được phiên bản hóa khi thay đổi cài đặt hợp đồng không?

Đơn hàng

  • Có mã đơn hàng khách hàng duy nhất không?
  • Các lệnh tạo và hủy có phải là idempotent không?
  • Có phải API có thể báo cáo các lệnh thực hiện một phần và nhiều báo cáo thực hiện không?
  • Đâu là bản ghi có thẩm quyền sau khi hết thời gian chờ?
  • Các đơn hàng bị từ chối, hết hạn và được thay thế được biểu diễn như thế nào?

Hoạt động

  • Các giới hạn về yêu cầu, đăng ký và kết nối là gì?
  • Các môi trường demo và live có hành vi tương đương nhau không?
  • Có trang trạng thái và thông báo bảo trì đã lên lịch không?
  • Có thể liên kết các nhật ký giữa khách hàng, nhà môi giới và địa điểm không?
  • Các thay đổi lớn được phiên bản hóa và thông báo như thế nào?

An ninh

  • Các quyền nào có thể bị giới hạn theo ứng dụng hoặc mã thông báo?
  • Những thông tin xác thực được thay đổi và thu hồi như thế nào?
  • Có hỗ trợ danh sách cho phép IP, TLS và thông tin xác thực sản xuất riêng biệt không?
  • Có một dịch vụ nào có thể đọc dữ liệu mà không cần nhận quyền giao dịch không?
  • Có phải mọi hành động được cấp quyền đều được ghi vào nhật ký kiểm toán không?

Các câu trả lời cho tôi biết nhiều hơn nhãn trên API. Hai API REST có thể khác nhau hơn về chất lượng thực tế so với REST và WebSocket.

Những điều một nhà môi giới nên quyết định trước khi tích hợp

Một dự án API thường trở nên khó khăn khi quyền sở hữu không rõ ràng.

Xác định những điểm này trước khi phát triển bắt đầu:

  1. Hệ thống ghi chép. Hệ thống nào sở hữu đơn hàng, hoàn thành, số dư và vị trí?
  2. Thứ tự sự kiện. Các bản sao, tin nhắn muộn và cập nhật không theo thứ tự được xử lý như thế nào?
  3. Khôi phục. Bức ảnh nào được tải sau khi kết nối lại, và từ con trỏ nào các sự kiện tiếp tục?
  4. Ranh giới rủi ro. Những kiểm tra nào được thực hiện trước khi một đơn hàng đến nền tảng hoặc địa điểm?
  5. Mô hình ký hiệu. Ai lập bản đồ tên, kích thước hợp đồng, phiên và độ chính xác giá?
  6. Đường dẫn kiểm toán. Có thể hỗ trợ theo dõi một hành động của khách hàng từ ứng dụng đến báo cáo thực hiện cuối cùng không?

Đây là nơi một quyết định nền tảng trở thành quyết định vận hành. Hệ thống môi giới của Quadcode mang lại nền tảng giao dịch, ứng dụng khách hàng, CRM, văn phòng hỗ trợ, rủi ro và tích hợp vào một môi trường duy nhất. Kết nối REST, streaming, MT5 hoặc thanh khoản cần thiết vẫn nên được viết vào thiết kế giải pháp và được kiểm tra theo các luồng đặt hàng của chính nhà môi giới.

Câu trả lời cuối cùng

Sử dụng REST cho các yêu cầu rõ ràng, ảnh chụp và hồ sơ. Sử dụng WebSocket khi ứng dụng phải nhận các thay đổi trực tiếp. Sử dụng FIX cho giao tiếp giao dịch tiêu chuẩn hóa giữa các hệ thống chuyên nghiệp. Sử dụng giao diện MT5 thích hợp khi MetaTrader 5 là một phần của nền tảng.

Các sản phẩm forex hầu hết cần một sự kết hợp. Sau một sự cố mạng, một kiến trúc vững chắc có thể trả lời ba câu hỏi: Đơn hàng có được nhận không? Nó có được thực hiện không? Mọi hệ thống kết nối hiện tại có đồng ý với kết quả không?