Lấy số lượng và danh sách các lệnh đang hoạt động
API Python cung cấp các hàm sau để làm việc với các lệnh đang hoạt động.
int orders_total()
Hàm orders_total
trả về số lượng các lệnh đang hoạt động.
Hàm này là tương tự của Orders Total
.
Thông tin chi tiết về mỗi lệnh có thể được lấy bằng hàm orders_get
, hàm này có một số tùy chọn với khả năng lọc theo ký hiệu hoặc mã lệnh. Dù bằng cách nào, hàm này trả về mảng các bộ giá trị có tên TradeOrder
(tên các trường khớp với các liệt kê ENUM_ORDER_PROPERTY_enumerations
mà không có tiền tố "ORDER_" và được chuyển thành chữ thường). Trong trường hợp xảy ra lỗi, kết quả là None
.
namedtuple[] orders_get()
namedtuple[] orders_get(symbol = "SYMBOL")
namedtuple[] orders_get(group = "PATTERN")
namedtuple[] orders_get(ticket = TICKET)
Hàm orders_get
không có tham số sẽ trả về các lệnh cho tất cả các ký hiệu.
Tham số tên tùy chọn symbol
cho phép chỉ định tên ký hiệu cụ thể để chọn lệnh.
Tham số tên tùy chọn group
được dùng để chỉ định một mẫu tìm kiếm sử dụng ký tự đại diện '*' (thay thế cho số lượng bất kỳ của bất kỳ ký tự nào, bao gồm không có ký tự tại vị trí đã cho trong mẫu) và ký tự phủ định logic '!'. Nguyên tắc hoạt động của mẫu lọc đã được mô tả trong phần Lấy thông tin về các công cụ tài chính.
Nếu tham số ticket
được chỉ định, một lệnh cụ thể sẽ được tìm kiếm.
Trong một lần gọi hàm, bạn có thể lấy tất cả các lệnh đang hoạt động. Nó là tương tự của việc sử dụng kết hợp OrdersTotal
, OrderSelect
và OrderGet
.
Trong ví dụ tiếp theo (MQL5/Scripts/MQL5Book/Python/ordersget.py
), chúng ta yêu cầu thông tin về các lệnh theo nhiều cách khác nhau.
import MetaTrader5 as mt5
import pandas as pd
pd.set_option('display.max_columns', 500) # số cột tối đa để hiển thị
pd.set_option('display.width', 1500) # chiều rộng tối đa của bảng để hiển thị
# 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())
quit()
# hiển thị thông tin về các lệnh đang hoạt động trên ký hiệu GBPUSD
orders = mt5.orders_get(symbol = "GBPUSD")
if orders is None:
print("No orders on GBPUSD, error code={}".format(mt5.last_error()))
else:
print("Total orders on GBPUSD:", len(orders))
# hiển thị tất cả các lệnh đang hoạt động
for order in orders:
print(order)
print()
# lấy danh sách các lệnh trên các ký hiệu có tên chứa "*GBP*"
gbp_orders = mt5.orders_get(group="*GBP*")
if gbp_orders is None:
print("No orders with group=\"*GBP*\", error code={}".format(mt5.last_error()))
else:
print("orders_get(group=\"*GBP*\")={}".format(len(gbp_orders)))
# hiển thị các lệnh dưới dạng bảng bằng pandas.DataFrame
df = pd.DataFrame(list(gbp_orders), columns = gbp_orders[0]._asdict().keys())
df.drop(['time_done', 'time_done_msc', 'position_id', 'position_by_id',
'reason', 'volume_initial', 'price_stoplimit'], axis = 1, inplace = True)
df['time_setup'] = pd.to_datetime(df['time_setup'], unit = 's')
print(df)
# 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
30
31
32
33
34
35
36
Kết quả mẫu như sau:
Total orders on GBPUSD: 2
TradeOrder(ticket=554733548, time_setup=1585153667, time_setup_msc=1585153667718, time_done=0, time_done_msc=0, time_expiration=0, type=3, type_time=0, ...
TradeOrder(ticket=554733621, time_setup=1585153671, time_setup_msc=1585153671419, time_done=0, time_done_msc=0, time_expiration=0, type=2, type_time=0, ...
orders_get(group="*GBP*")=4
ticket time_setup time_setup_msc type ... volume_current price_open sl tp price_current symbol comment external_id
0 554733548 2020-03-25 16:27:47 1585153667718 3 ... 0.2 1.25379 0.0 0.0 1.16803 GBPUSD
1 554733621 2020-03-25 16:27:51 1585153671419 2 ... 0.2 1.14370 0.0 0.0 1.16815 GBPUSD
2 554746664 2020-03-25 16:38:14 1585154294401 3 ... 0.2 0.93851 0.0 0.0 0.92428 EURGBP
3 554746710 2020-03-25 16:38:17 1585154297022 2 ... 0.2 0.90527 0.0 0.0 0.92449 EURGBP
2
3
4
5
6
7
8
9
10