Đăng ký thay đổi sổ lệnh
API Python bao gồm ba hàm để làm việc với sổ lệnh.
bool market_book_add(symbol)
Hàm market_book_add
đăng ký để nhận các sự kiện về thay đổi sổ lệnh cho ký hiệu được chỉ định. Tên của công cụ tài chính cần thiết được chỉ định trong một tham số không tên duy nhất.
Hàm trả về một chỉ báo thành công kiểu boolean.
Hàm này là tương tự của MarketBookAdd
. Sau khi hoàn tất làm việc với sổ lệnh, cần hủy đăng ký bằng cách gọi market_book_release
(xem thêm bên dưới).
tuple[] market_book_get(symbol)
Hàm market_book_get
yêu cầu nội dung hiện tại của sổ lệnh cho ký hiệu được chỉ định. Kết quả được trả về dưới dạng một tuple (mảng) các bản ghi BookInfo
. Mỗi mục là tương tự của cấu trúc MqlBookInfo
, và từ góc độ Python, đây là một tuple có tên với các trường "type", "price", "volume", "volume_real". Trong trường hợp có lỗi, giá trị None
được trả về.
Lưu ý rằng vì một lý do nào đó trong Python, trường này được gọi là
volume_dbl
, mặc dù trong MQL5 trường tương ứng được gọi làvolume_real
.
Để làm việc với hàm này, trước tiên bạn phải đăng ký nhận các sự kiện sổ lệnh bằng hàm market_book_add
.
Hàm này là tương tự của MarketBookGet
. Vui lòng lưu ý rằng một kịch bản Python không thể nhận trực tiếp các sự kiện OnBookEvent
và nên thăm dò nội dung của sổ lệnh trong một vòng lặp.
bool market_book_release(symbol)
Hàm market_book_release
hủy đăng ký nhận các sự kiện thay đổi sổ lệnh cho ký hiệu được chỉ định. Khi thành công, hàm trả về True
. Hàm này là tương tự của MarketBookRelease
.
Hãy xem một ví dụ đơn giản (xem MQL5/Scripts/MQL5Book/Python/eurusdbook.py
).
import MetaTrader5 as mt5
import time # kết nối gói để tạm dừng
# thiết lập kết nối với terminal MetaTrader 5
if not mt5.initialize():
print("initialize() failed, error code =", mt5.last_error())
mt5.shutdown()
quit()
# đăng ký nhận cập nhật DOM cho ký hiệu EURUSD
if mt5.market_book_add('EURUSD'):
# chạy vòng lặp 10 lần để đọc dữ liệu từ sổ lệnh
for i in range(10):
# lấy nội dung của sổ lệnh
items = mt5.market_book_get('EURUSD')
# hiển thị toàn bộ sổ lệnh trên một dòng như nguyên bản
print(items)
# giờ hiển thị từng mức giá riêng biệt dưới dạng từ điển, để rõ ràng
for it in items or []:
print(it._asdict())
# tạm dừng 5 giây trước khi yêu cầu dữ liệu tiếp theo từ sổ lệnh
time.sleep(5)
# hủy đăng ký nhận thay đổi sổ lệnh
mt5.market_book_release('EURUSD')
else:
print("mt5.market_book_add('EURUSD') failed, error code =", mt5.last_error())
# hoàn tất kết nối với terminal MetaTrader 5
mt5.shutdown()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Một ví dụ về kết quả:
(BookInfo(type=1, price=1.20036, volume=250, volume_dbl=250.0), BookInfo(type=1, price=1.20029, volume=100, volume...
{'type': 1, 'price': 1.20036, 'volume': 250, 'volume_dbl': 250.0}
{'type': 1, 'price': 1.20029, 'volume': 100, 'volume_dbl': 100.0}
{'type': 1, 'price': 1.20028, 'volume': 50, 'volume_dbl': 50.0}
{'type': 1, 'price': 1.20026, 'volume': 36, 'volume_dbl': 36.0}
{'type': 2, 'price': 1.20023, 'volume': 36, 'volume_dbl': 36.0}
{'type': 2, 'price': 1.20022, 'volume': 50, 'volume_dbl': 50.0}
{'type': 2, 'price': 1.20021, 'volume': 100, 'volume_dbl': 100.0}
{'type': 2, 'price': 1.20014, 'volume': 250, 'volume_dbl': 250.0}
(BookInfo(type=1, price=1.20035, volume=250, volume_dbl=250.0), BookInfo(type=1, price=1.20029, volume=100, volume...
{'type': 1, 'price': 1.20035, 'volume': 250, 'volume_dbl': 250.0}
{'type': 1, 'price': 1.20029, 'volume': 100, 'volume_dbl': 100.0}
{'type': 1, 'price': 1.20027, 'volume': 50, 'volume_dbl': 50.0}
{'type': 1, 'price': 1.20025, 'volume': 36, 'volume_dbl': 36.0}
{'type': 2, 'price': 1.20023, 'volume': 36, 'volume_dbl': 36.0}
{'type': 2, 'price': 1.20022, 'volume': 50, 'volume_dbl': 50.0}
{'type': 2, 'price': 1.20021, 'volume': 100, 'volume_dbl': 100.0}
{'type': 2, 'price': 1.20014, 'volume': 250, 'volume_dbl': 250.0}
(BookInfo(type=1, price=1.20037, volume=250, volume_dbl=250.0), BookInfo(type=1, price=1.20031, volume=100, volume...
{'type': 1, 'price': 1.20037, 'volume': 250, 'volume_dbl': 250.0}
{'type': 1, 'price': 1.20031, 'volume': 100, 'volume_dbl': 100.0}
{'type': 1, 'price': 1.2003, 'volume': 50, 'volume_dbl': 50.0}
{'type': 1, 'price': 1.20028, 'volume': 36, 'volume_dbl': 36.0}
{'type': 2, 'price': 1.20025, 'volume': 36, 'volume_dbl': 36.0}
{'type': 2, 'price': 1.20023, 'volume': 50, 'volume_dbl': 50.0}
{'type': 2, 'price': 1.20022, 'volume': 100, 'volume_dbl': 100.0}
{'type': 2, 'price': 1.20016, 'volume': 250, 'volume_dbl': 250.0}
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28