Lấy thông tin về các công cụ tài chính
Nhóm các hàm của gói MetaTrader5 cung cấp thông tin về các công cụ tài chính.
Hàm symbol_info
trả về thông tin về một công cụ tài chính dưới dạng cấu trúc named tuple.
namedtuple symbol_info(symbol)
Tên của công cụ tài chính mong muốn được chỉ định trong tham số symbol
.
Một lần gọi cung cấp tất cả thông tin có thể thu thập bằng ba hàm MQL5 là SymbolInfoInteger
(xem thêm tại đây), SymbolInfoDouble
(xem thêm tại đây), và SymbolInfoString
(xem thêm tại đây) với tất cả các thuộc tính. Tên của các trường trong named tuple giống với tên của các phần tử liệt kê được sử dụng trong các hàm đã chỉ định nhưng không có tiền tố "SYMBOL_" và ở dạng chữ thường.
Trong trường hợp xảy ra lỗi, hàm trả về None
.
Chú ý! Để đảm bảo hàm thực thi thành công, biểu tượng được yêu cầu phải được chọn trong
Market Watch
. Điều này có thể được thực hiện từ Python bằng cách gọisymbol_select
(xem thêm ở phần sau).
Ví dụ (MQL5/Scripts/MQL5Book/Python/eurjpy.py
):
import MetaTrader5 as mt5
# thiết lập kết nối tới terminal MetaTrader 5
if not mt5.initialize():
print("initialize() failed, error code =", mt5.last_error())
quit()
# đảm bảo EURJPY có mặt trong Market Watch, nếu không thì hủy thuật toán
selected = mt5.symbol_select("EURJPY", True)
if not selected:
print("Failed to select EURJPY")
mt5.shutdown()
quit()
# hiển thị các thuộc tính của biểu tượng EURJPY
symbol_info = mt5.symbol_info("EURJPY")
if symbol_info != None:
# hiển thị dữ liệu dưới dạng nguyên bản (tuple)
print(symbol_info)
# xuất một vài thuộc tính cụ thể
print("EURJPY: spread =", symbol_info.spread, ", digits =", symbol_info.digits)
# xuất các thuộc tính biểu tượng dưới dạng từ điển
print("Show symbol_info(\"EURJPY\")._asdict():")
symbol_info_dict = mt5.symbol_info("EURJPY")._asdict()
for prop in symbol_info_dict:
print(" {}={}".format(prop, symbol_info_dict[prop]))
# hoàn tất kết nối tớ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
Kết quả:
SymbolInfo(custom=False, chart_mode=0, select=True, visible=True, session_deals=0, session_buy_orders=0, session_sell_orders=0, ...
EURJPY: spread = 17, digits = 3
Show symbol_info()._asdict():
custom=False
chart_mode=0
select=True
visible=True
...
time=1585069682
digits=3
spread=17
spread_float=True
ticks_bookdepth=10
trade_calc_mode=0
trade_mode=4
...
trade_exemode=1
swap_mode=1
swap_rollover3days=3
margin_hedged_use_leg=False
expiration_mode=7
filling_mode=1
order_mode=127
order_gtc_mode=0
...
bid=120.024
ask=120.041
last=0.0
...
point=0.001
trade_tick_value=0.8977708350166538
trade_tick_value_profit=0.8977708350166538
trade_tick_value_loss=0.8978272580355541
trade_tick_size=0.001
trade_contract_size=100000.0
...
volume_min=0.01
volume_max=500.0
volume_step=0.01
volume_limit=0.0
swap_long=-0.2
swap_short=-1.2
margin_initial=0.0
margin_maintenance=0.0
margin_hedged=100000.0
...
currency_base=EUR
currency_profit=JPY
currency_margin=EUR
...
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
bool symbol_select(symbol, enable = None)
Hàm symbol_select
thêm biểu tượng được chỉ định vào Market Watch
hoặc xóa nó đi. Biểu tượng được chỉ định trong tham số đầu tiên. Tham số thứ hai được truyền là True
hoặc False
, lần lượt có nghĩa là hiển thị hoặc ẩn biểu tượng.
Nếu tham số thứ hai không bắt buộc bị bỏ qua, thì theo quy tắc ép kiểu của Python, bool(none)
tương đương với False
.
Hàm này là một tương tự của SymbolSelect
(xem thêm tại đây).
int symbols_total()
Hàm symbols_total
trả về số lượng tất cả các công cụ trong terminal MetaTrader 5, bao gồm cả các biểu tượng tùy chỉnh và những biểu tượng hiện không được hiển thị trong cửa sổ Market Watch
. Đây là tương tự của hàm SymbolsTotal(false)
(xem thêm tại đây).
Hàm symbols_get
tiếp theo trả về một mảng các tuple chứa thông tin về tất cả các công cụ hoặc các công cụ yêu thích với tên khớp với bộ lọc được chỉ định trong tham số có tên tùy chọn group
.
tuple[] symbols_get(group = "PATTERN")
Mỗi phần tử trong mảng tuple là một named tuple với tập hợp đầy đủ các thuộc tính của biểu tượng (chúng ta đã thấy một tuple tương tự ở trên trong phần mô tả của hàm symbol_info
).
Vì chỉ có một tham số, tên của nó có thể được bỏ qua khi gọi hàm.
Trong trường hợp xảy ra lỗi, hàm sẽ trả về giá trị đặc biệt là None
.
Tham số group
cho phép bạn chọn các biểu tượng theo tên, tùy chọn sử dụng ký tự thay thế (wildcard) '' ở đầu và/hoặc cuối chuỗi tìm kiếm. '' có nghĩa là 0 hoặc bất kỳ số lượng ký tự nào. Do đó, bạn có thể tổ chức tìm kiếm một chuỗi con xuất hiện trong tên với số lượng ký tự bất kỳ trước hoặc sau đoạn được chỉ định. Ví dụ, "EUR*" có nghĩa là các biểu tượng bắt đầu bằng "EUR" và có bất kỳ phần mở rộng tên nào (hoặc chỉ là "EUR"). Bộ lọc "EUR" sẽ trả về các biểu tượng có tên chứa chuỗi con "EUR" ở bất kỳ vị trí nào.
Ngoài ra, tham số group
có thể chứa nhiều điều kiện được phân tách bằng dấu phẩy. Mỗi điều kiện có thể được chỉ định dưới dạng mặt nạ sử dụng '*'. Để loại trừ các biểu tượng, bạn có thể sử dụng dấu phủ định logic '!'. Trong trường hợp này, tất cả các điều kiện được áp dụng tuần tự, tức là trước tiên cần chỉ định các điều kiện bao gồm, sau đó là các điều kiện loại trừ. Ví dụ, group="*, !*EUR*"
có nghĩa là chúng ta cần chọn tất cả các biểu tượng trước, sau đó loại bỏ những biểu tượng có chứa "EUR" trong tên (ở bất kỳ đâu).
Ví dụ, để hiển thị thông tin về tỷ giá chéo, ngoại trừ 4 loại tiền tệ Forex chính, bạn có thể chạy truy vấn sau:
crosses = mt5.symbols_get(group = "*,!*USD*,!*EUR*,!*JPY*,!*GBP*")
print('len(*,!*USD*,!*EUR*,!*JPY*,!*GBP*):', len(crosses)) # kích thước của mảng kết quả - số lượng tỷ giá chéo
for s in crosses:
print(s.name, ":", s)
2
3
4
Ví dụ về kết quả:
len(*,!*USD*,!*EUR*,!*JPY*,!*GBP*): 10
AUDCAD : SymbolInfo(custom=False, chart_mode=0, select=True, visible=True, session_deals=0, session_buy_orders=0, session...
AUDCHF : SymbolInfo(custom=False, chart_mode=0, select=True, visible=True, session_deals=0, session_buy_orders=0, session...
AUDNZD : SymbolInfo(custom=False, chart_mode=0, select=True, visible=True, session_deals=0, session_buy_orders=0, session...
CADCHF : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi...
NZDCAD : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi...
NZDCHF : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi...
NZDSGD : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi...
CADMXN : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi...
CHFMXN : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi...
NZDMXN : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi...
2
3
4
5
6
7
8
9
10
11
Hàm symbol_info_tick
có thể được sử dụng để lấy tick cuối cùng cho công cụ tài chính được chỉ định.
tuple symbol_info_tick(symbol)
Tham số bắt buộc duy nhất chỉ định tên của công cụ tài chính.
Thông tin được trả về dưới dạng tuple với các trường giống như trong cấu trúc MqlTick
. Hàm này là một tương tự của SymbolInfoTick
(xem thêm tại đây).
None
được trả về nếu xảy ra lỗi.
Để hàm hoạt động bình thường, biểu tượng phải được bật trong Market Watch
. Hãy thể hiện điều này trong script MQL5/Scripts/MQL5Book/Python/gbpusdtick.py
.
import MetaTrader5 as mt5
# thiết lập kết nối tới terminal MetaTrader 5
if not mt5.initialize():
print("initialize() failed, error code =", mt5.last_error())
quit()
# cố gắng thêm biểu tượng GBPUSD vào Market Watch
selected=mt5.symbol_select("GBPUSD", True)
if not selected:
print("Failed to select GBPUSD")
mt5.shutdown()
quit()
# hiển thị tick cuối cùng của biểu tượng GBPUSD dưới dạng tuple
lasttick = mt5.symbol_info_tick("GBPUSD")
print(lasttick)
# hiển thị giá trị của các trường tick dưới dạng từ điển
print("Show symbol_info_tick(\"GBPUSD\")._asdict():")
symbol_info_tick_dict = lasttick._asdict()
for prop in symbol_info_tick_dict:
print(" {}={}".format(prop, symbol_info_tick_dict[prop]))
# hoàn tất kết nối tớ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
Kết quả sẽ như sau:
Tick(time=1585070338, bid=1.17264, ask=1.17279, last=0.0, volume=0, time_msc=1585070338728, flags=2, volume_real=0.0)
Show symbol_info_tick._asdict():
time=1585070338
bid=1.17264
ask=1.17279
last=0.0
volume=0
time_msc=1585070338728
flags=2
volume_real=0.0
2
3
4
5
6
7
8
9
10