适用于 Python 的 MetaTrader 5 软件包函数概述
Python 中可用的 API 函数可以有条件地分为 2 组:在 MQL5 API 中有完全等效的函数和仅在 Python 中可用的函数。第二组之所以存在,部分是因为 Python 和 MetaTrader 5 之间的连接必须进行技术组织以使用应用函数。这解释了两组函数的存在的原因和目的 initialize 和 shutdown:第一个建立到终端的连接,第二个终止连接。
重要的是,在初始化过程中,可以启动所需的终端副本(如果尚未执行)并可以选择特定的交易账户。此外,还可以在已经打开的终端连接的上下文中更改交易账户:这是通过 login 函数完成的。
连接到终端后,Python 脚本可以使用 version 函数获取终端版本概述。有关终端的完整信息可通过 terminal_info 获取,该函数完全等效于三个 TerminalInfo函数,就好像它们在一次调用中结合起来一样。
下表列出了 Python 应用函数及其在 MQL5 API 中的对应函数。
Python |
MQL5 |
---|---|
last_error |
GetLastError(注意!Python 有原生错误代码) |
account_info |
AccountInfoInteger、AccountInfoDouble、 AccountInfoString |
terminal_info |
TerminalInfoInteger、TerminalInfoDouble, TerminalInfoDouble |
symbols_total |
SymbolsTotal(所有交易品种,包括自定义和禁用交易品种) |
symbols_get |
SymbolsTotal + SymbolInfo 函数 |
symbol_info |
SymbolInfoInteger、SymbolInfoDouble、 SymbolInfoString |
symbol_info_tick |
SymbolInfoTick |
symbol_select |
SymbolSelect |
market_book_add |
MarketBookAdd |
market_book_get |
MarketBookGet |
market_book_release |
MarketBookRelease |
copy_rates_from |
CopyRates(按柱线数,从日期/时间开始) |
copy_rates_from_pos |
CopyRates(按柱线数,从柱线号开始) |
copy_rates_range |
CopyRates(在日期/时间范围内) |
copy_ticks_from |
CopyTicks(按分时报价数,从指定时间开始) |
copy_ticks_range |
CopyTicksRange(在指定时间范围内) |
orders_total |
OrdersTotal |
orders_get |
OrdersTotal + OrderGet 函数 |
order_calc_margin |
OrderCalcMargin |
order_calc_profit |
OrderCalcProfit |
order_check |
OrderCheck |
order_send |
OrderSend |
positions_total |
PositionsTotal |
positions_get |
PositionsTotal + PositionGet 函数 |
history_orders_total |
HistoryOrdersTotal |
history_orders_get |
HistoryOrdersTotal + HistoryOrderGet 函数 |
history_deals_total |
HistoryDealsTotal |
history_deals_get |
HistoryDealsTotal + HistoryDealGet 函数 |
Python API 中的函数有多个特征。
如前所述,函数可以有命名参数:函数被调用时,这些参数与名称和值一起指定,在每对名称和值中,它们通过等号 = 组合在一起。命名参数的指定顺序并不重要(与位置参数不同,位置参数用于 MQL5 中,必须遵循函数原型指定的严格顺序)。
Python 函数针对 Python 原生的数据类型进行操作。这不仅包括常见的数字和字符串,还包括几种复合类型,这些有点类似于 MQL5 数组和结构。
例如,许多函数返回特殊的 Python 数据结构体:tuple 和 namedtuple。
元组是任意类型的元素序列。它可以被认为是一个数组,但与数组不同,元组的元素可以是不同的类型。也可以将元组视为一组结构体字段。
可以发现命名元组与结构体更相似,元组中的每个元素都给定了一个 ID。只有通过索引才可以访问公共元组中的元素(带方括号,如在 MQL5 中,即 [i])。但是,我们可以对命名元组应用解引用运算符(点 .),以获取它的“特性”,就像在 MQL5 结构 (tuple.field) 中一样。
此外,元组和命名元组不能在代码中编辑(即它们是常量)。
另一种流行的类型是字典:存储键和值对的关联数组,键和值的类型可以不同。可使用运算符 [] 访问字典值,而键(无论是什么类型,例如字符串)用一对方括号表示,这使得字典与数组有几分相似。一个字典不能有两对相同的键,也就是说,键始终是唯一的。特别是,使用 namedtuple._asdict() 方法可以很容易地将命名元组转换成字典。