获取有关金融工具的信息
MetaTrader5 软件包的函数组提供有关金融工具的信息。
symbol_info 函数以命名元组结构体的形式返回关于一个金融工具的信息。
namedtuple symbol_info(symbol)
所需金融工具的名称在 symbol 参数中指定。
一次调用边提供了使用三个 MQL5 函数 SymbolInfoInteger、 SymbolInfoDouble, 和 SymbolInfoString 以及所有特性所能够获得的所有信息。命名元组中字段的名称与指定函数中使用的枚举元素的名称相同,但没有 "SYMBOL_" 前缀,并且是小写的。
如果出现错误,该函数将返回 None。
注意!为确保成功执行函数,必须在 Market Watch 中选择请求的交易品种。这可以在 Python 中通过调用 symbol_select 来完成(见下文)。
示例 (MQL5/Scripts/MQL5Book/Python/eurjpy.py):
import MetaTrader5 as mt5
|
结果:
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 ... |
bool symbol_select(symbol, enable = None)
symbol_select 函数将指定的交易品种添加到 Market Watch 或删除该交易品种。交易品种在第一个参数中指定。第二个参数作为 True 或 False 传递,分别表示显示或隐藏交易品种。
如果省略了第二个可选的未命名参数,那么根据 Python 的类型转换规则,bool(none) 相当于 False。
该函数类似于 SymbolSelect。
int symbols_total()
symbols_total 函数返回 MetaTrader 5 终端中所有金融工具的数量,将自定义交易品种和当前未显示在 Market Watch 窗口中的交易品种考虑在内。该函数类似于 SymbolsTotal(false)。
接下来,symbols_get 函数返回一个元组数组,其中包含所有金融工具或收藏的金融工具的信息,这些金融工具的名称与可选命名参数 group 中的指定筛选条件匹配。
tuple[] symbols_get(group = "PATTERN")
数组元组中的每个元素都是一个命名元组,具有全套的交易品种特性(我们在上面描述 symbol_info 函数的上下文中看到了类似的元组)。
由于只有一个参数,所以在调用函数时可以省略它的名称。
如果出现错误,该函数将返回一个特殊值 None。
group 参数允许你按名称选择交易品种,也可以在搜索字符串的开头和/或结尾使用替换(通配符)字符 * 。'*' 表示 0 个或任意数量的字符。因此,你可以搜索名称中出现的子字符串,该子字符串在指定片段之前或之后带有任意数量的其他字符。例如,"EUR*" 表示以 "EUR" 开头且具有任何扩展名(或仅 "EUR")的交易品种。"*EUR*" 筛选器将返回名称中任意位置处包含 "EUR" 子字符串的交易品种。
此外,group 参数可包含由逗号分隔的多个条件。可以使用 '*' 将每个条件指定为一个掩码。要排除交易品种,可以使用逻辑非交易品种 '!'。在这种情况下,所有条件都按顺序应用,即首先需要指定包含条件,然后指定排除条件。例如,group="*, !*EUR*" 意味着我们需要首先选择所有交易品种,然后排除名称中(任意位置处)包含 "EUR" 的交易品种。
例如,要显示除 4 种主要外汇货币之外的交叉货币汇率相关信息,可以运行以下查询:
crosses = mt5.symbols_get(group = "*,!*USD*,!*EUR*,!*JPY*,!*GBP*")
|
结果示例:
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... |
symbol_info_tick 函数可用于获取指定金融工具最近的分时报价。
tuple symbol_info_tick(symbol)
唯一的强制参数指定金融工具的名称。
该信息作为一个元组返回,其字段与 MqlTick 结构中的字段相同。该函数类似于 SymbolInfoTick。
None 如果发生错误,则不返回任何值。
为使该函数正常工作,必须在 Market Watch 中启用该交易品种。我们在 MQL5/Scripts/MQL5Book/Python/gbpusdtick.py 脚本中进行演示。
import MetaTrader5 as mt5
|
结果应如下所示:
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 |