Quản lý tín hiệu
Nhóm các hàm được thiết kế để quản lý tín hiệu giao dịch. Các hàm này cho phép:
- Lấy thông tin về các tín hiệu giao dịch có sẵn để sao chép,
- Đọc hoặc thiết lập cài đặt sao chép tín hiệu giao dịch,
- Thực hiện đăng ký tín hiệu và hủy đăng ký bằng ngôn ngữ MQL5.
Hàm | Hành động |
---|---|
SignalBaseGetDouble | Trả về giá trị thuộc tính kiểu double cho tín hiệu đã chọn |
SignalBaseGetInteger | Trả về giá trị thuộc tính kiểu integer cho tín hiệu đã chọn |
SignalBaseGetString | Trả về giá trị thuộc tính kiểu string cho tín hiệu đã chọn |
SignalBaseSelect | Chọn tín hiệu để làm việc từ cơ sở dữ liệu tín hiệu giao dịch có sẵn trong terminal |
SignalBaseTotal | Trả về tổng số tín hiệu có sẵn trong terminal |
SignalInfoGetDouble | Trả về giá trị thuộc tính kiểu double từ cài đặt sao chép tín hiệu giao dịch |
SignalInfoGetInteger | Trả về giá trị thuộc tính kiểu integer từ cài đặt sao chép tín hiệu giao dịch |
SignalInfoGetString | Trả về giá trị thuộc tính kiểu string từ cài đặt sao chép tín hiệu giao dịch |
SignalInfoSetDouble | Thiết lập giá trị thuộc tính kiểu double trong cài đặt sao chép tín hiệu giao dịch |
SignalInfoSetInteger | Thiết lập giá trị thuộc tính kiểu integer trong cài đặt sao chép tín hiệu giao dịch |
SignalSubscribe | Thực hiện đăng ký sao chép tín hiệu giao dịch |
SignalUnsubscribe | Hủy đăng ký sao chép tín hiệu giao dịch |
Kiểm tra kết nối mạng
Như bạn đã biết, nền tảng MetaTrader 5 là một hệ thống phân tán bao gồm nhiều thành phần liên kết. Ngoài terminal khách hàng và máy chủ môi giới, nó còn bao gồm cộng đồng MQL5, Market, dịch vụ đám mây và nhiều thứ khác. Thực tế, phần khách hàng cũng được phân tán, bao gồm terminal và các tác nhân kiểm tra (testing agents) có thể được triển khai trên nhiều máy tính trong mạng cục bộ. Trong trường hợp này, kết nối giữa bất kỳ liên kết nào cũng có thể bị gián đoạn vì một lý do nào đó. Mặc dù cơ sở hạ tầng MetaTrader 5 cố gắng tự động khôi phục chức năng của nó, nhưng không phải lúc nào cũng có thể thực hiện điều này nhanh chóng.
Do đó, trong các chương trình MQL, cần tính đến khả năng mất kết nối. API MQL5 cho phép kiểm soát các kết nối quan trọng nhất: với máy chủ giao dịch và cộng đồng MQL5. Các thuộc tính sau có sẵn trong TerminalInfoInteger
.
Bảng mô tả các thuộc tính
Định danh | Mô tả |
---|---|
TERMINAL_CONNECTED | Kết nối với máy chủ giao dịch |
TERMINAL_PING_LAST | Ping cuối cùng được biết đến với máy chủ giao dịch, tính bằng micro giây |
TERMINAL_COMMUNITY_ACCOUNT | Sự có sẵn dữ liệu ủy quyền của MQL5.community trong terminal |
TERMINAL_COMMUNITY_CONNECTION | Kết nối với MQL5.community |
TERMINAL_MQID | Sự có sẵn của MetaQuotes ID để gửi thông báo đẩy |
Tất cả các thuộc tính trừ TERMINAL_PING_LAST
là các cờ boolean. TERMINAL_PING_LAST
chứa giá trị kiểu int
.
Ngoài kết nối, một chương trình MQL thường cần đảm bảo rằng dữ liệu nó có là cập nhật. Đặc biệt, cờ TERMINAL_CONNECTED
được kiểm tra chưa chắc đã có nghĩa là các báo giá bạn quan tâm đã được đồng bộ với máy chủ. Để làm điều này, bạn cần kiểm tra thêm SymbolIsSynchronized
hoặc SeriesInfoInteger(..., SERIES_SYNCHRONIZED)
. Các tính năng này sẽ được thảo luận trong chương về chuỗi thời gian.
Hàm TerminalInfoDouble
hỗ trợ một thuộc tính thú vị khác: TERMINAL_RETRANSMISSION
. Nó biểu thị phần trăm gói tin mạng được gửi lại trong giao thức TCP/IP cho tất cả các ứng dụng và dịch vụ đang chạy trên máy tính này. Ngay cả trên mạng nhanh nhất và được cấu hình đúng cách, đôi khi mất gói tin vẫn xảy ra và kết quả là không có xác nhận giao gói giữa người nhận và người gửi. Trong những trường hợp như vậy, gói tin bị mất sẽ được gửi lại. Bản thân terminal không đếm chỉ số TERMINAL_RETRANSMISSION
mà yêu cầu nó từ hệ điều hành mỗi phút một lần.
Giá trị cao của chỉ số này có thể cho thấy các vấn đề bên ngoài (kết nối Internet, nhà cung cấp của bạn, mạng cục bộ hoặc vấn đề máy tính), điều này có thể làm giảm chất lượng kết nối của terminal.
Nếu có kết nối được xác nhận với cộng đồng (TERMINAL_COMMUNITY_CONNECTION
), một chương trình MQL có thể truy vấn số dư hiện tại của người dùng bằng cách gọi TerminalInfoDouble(TERMINAL_COMMUNITY_BALANCE)
. Điều này cho phép sử dụng đăng ký tự động vào các tín hiệu giao dịch trả phí (tài liệu API có sẵn trên trang web mql5.com).
Hãy kiểm tra các thuộc tính được liệt kê bằng script EnvConnection.mq5
.
void OnStart()
{
PRTF(TerminalInfoInteger(TERMINAL_CONNECTED));
PRTF(TerminalInfoInteger(TERMINAL_PING_LAST));
PRTF(TerminalInfoInteger(TERMINAL_COMMUNITY_ACCOUNT));
PRTF(TerminalInfoInteger(TERMINAL_COMMUNITY_CONNECTION));
PRTF(TerminalInfoInteger(TERMINAL_MQID));
PRTF(TerminalInfoDouble(TERMINAL_RETRANSMISSION));
PRTF(TerminalInfoDouble(TERMINAL_COMMUNITY_BALANCE));
}
2
3
4
5
6
7
8
9
10
Dưới đây là ví dụ về nhật ký (các giá trị sẽ khớp với cài đặt của bạn).
TerminalInfoInteger(TERMINAL_CONNECTED)=1 / ok
TerminalInfoInteger(TERMINAL_PING_LAST)=49082 / ok
TerminalInfoInteger(TERMINAL_COMMUNITY_ACCOUNT)=0 / ok
TerminalInfoInteger(TERMINAL_COMMUNITY_CONNECTION)=0 / ok
TerminalInfoInteger(TERMINAL_MQID)=0 / ok
TerminalInfoDouble(TERMINAL_RETRANSMISSION)=0.0 / ok
TerminalInfoDouble(TERMINAL_COMMUNITY_BALANCE)=0.0 / ok
2
3
4
5
6
7