MQL4语言提供了一组专门用于开发自动交易系统的交易功能。为不需要人工干预的自动交易开发的程序称为专家顾问或交易机器人。(以下简称EA)。为了在MetaEditor中创建EA,启动MQL4向导并选择“专家顾问(模板)”选项。它允许您创建具有现成事件处理函数的模板,这些函数应该通过编程的方式得到所有必要功能的补充。
交易功能只能在EA和脚本中工作。不允许指标交易。
检查执行自动交易的权限
为了发展一个可靠的EA能够在没有人为干预的情况下工作,有必要安排一组重要的检查。首先,我们应该通过编程检查是否允许交易。这是开发任何自动化系统时必不可少的基本检查。
检查在终端执行自动交易的许可
终端设置为您提供了一种能力,允许或禁止自动交易的所有程序。
您可以在终端的标准面板上切换自动交易选项:
自动交易-自动交易启用,交易功能在启动的应用程序是允许使用。
自动交易禁用,运行中的应用程序无法执行交易功能。
示例检查:
if (!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
Alert("检查终端设置是否允许自动交易!");
检查是否允许某个正在运行的专家顾问/脚本进行交易
在启动某个程序时,您可以允许或禁止对其进行自动交易。为此,在程序属性中使用特殊复选框。
示例检查:
if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
Alert("检查终端设置是否允许自动交易!");
else
{
if(!MQLInfoInteger(MQL_TRADE_ALLOWED))
Alert("程序设置中禁止自动交易 for ",FILE);
}
检查往来账户的EA脚本是否允许交易
可以在交易服务器端禁用自动交易。
示例检查:
if(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT))
Alert("该账户禁止自动交易",AccountInfoInteger(ACCOUNT_LOGIN),
" 在交易服务器端");
如果对交易帐户禁用自动交易,则不会执行EA/脚本的交易操作。
检查往来账户是否允许交易
在某些情况下,任何交易操作对于某个交易帐户都是禁用的——即手动或自动交易都不能执行。当投资者密码被用于连接到交易账户时,样本检查:
if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
Comment("该账户禁止交易",AccountInfoInteger(ACCOUNT_LOGIN),
".\n 可能是投资者的密码被用来连接到交易账户.",
"\n 请检查以下条目的终端日志",
"\n'",AccountInfoInteger(ACCOUNT_LOGIN),"': 交易已被禁用——投资者模式.");
AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)可能在以下情况下返回false:
没有与交易服务器的连接。可以使用TerminalInfoInteger(TERMINAL_CONNECTED)进行检查;
交易账户切换为只读模式(发送至存档);
在交易服务器端禁用帐户上的交易;
已以投资者模式连接到交易帐户。
网友评论