保持敬畏之心
交易是一场持久战

MQL4(51):交易前检查 - 保证金和点差

MetaTrader 平台内置了相关函数,允许您在提交订单之前,检查当前的可用保证金或账户的强制平仓水平。强制平仓水平通常指可用保证金低于某一预设百分比或特定金额时,您将无法再建立新的头寸。不过,值得注意的是,即便您不手动执行此项检查,当保证金不足以支持新订单时,系统也会自动报错并阻止订单提交,因此手动检查并非绝对必要。

一个更具实战价值的策略是,在您的EA中设定一个自定义的最低账户净值门槛。当实际账户净值跌破此门槛时,EA将暂停所有新的交易活动。为此,我们可以首先声明一个外部输入变量,例如 MinimumEquity,它代表了允许EA下单所需的最低账户净值。程序会将 MinimumEquity 的值与当前账户的实际净值进行比较。若当前净值低于设定的最低标准,则EA不会发出新的订单,并通过警报窗口提示用户具体原因。举例来说,假设账户初始资金为 $10,000,我们设定当亏损超过总净值的 20%(即净值低于 $8,000)时,便不再进行任何新的交易。相应的检查代码如下:

// 外部输入变量
extern int MinimumEquity = 8000; // 允许交易的最低账户净值

// 下单逻辑段
if(AccountEquity() > MinimumEquity) // 如果当前账户净值大于最低要求
{
    // 此处执行下单操作
}
else if(AccountEquity() <= MinimumEquity) // 如果当前账户净值不满足最低要求
{
    Alert("当前账户净值低于设定的最低值!订单未能发送。");
}

外部变量 MinimumEquity 通常放置在MQL4程序代码的起始部分。上述逻辑会安插在实际执行下单指令之前。当 AccountEquity() 函数返回的当前账户净值高于 MinimumEquity 时,订单才能被正常发送;否则,订单将被阻止,并弹出相应的警告信息。

交易前检查:点差过滤

在某些市场时段,交易品种的点差可能会显著扩大,远超其正常水平。为了规避这种不利的交易环境,您可能希望在点差过大时暂停交易。我们可以设定一个可接受的最大点差值,并在每次交易前检查当前市场的实时点差。具体实现上,我们会声明一个外部输入变量,如 MaximumSpread,然后利用 MarketInfo() 函数来获取当前的实际点差。

其代码结构与上一节介绍的最低保证金检查非常相似。下面我们将两者结合起来,展示这些检查条件如何协同工作:

// 外部输入变量
extern int MaximumSpread = 5;    // 允许交易的最大点差 (例如,5个点)
extern int MinimumEquity = 8000; // 允许交易的最低账户净值

// 组合检查逻辑
if(AccountEquity() > MinimumEquity && MarketInfo(Symbol(), MODE_SPREAD) < MaximumSpread)
{
    // 当净值和点差均满足条件时,执行下单操作
}
else // 如果任一条件不满足
{
    if(AccountEquity() <= MinimumEquity) 
    {
        Alert("当前账户净值低于设定的最低值!订单未能发送。");
    }
    if(MarketInfo(Symbol(), MODE_SPREAD) >= MaximumSpread) // 注意此处应为 >= (大于或等于)
    {
        Alert("当前市场点差高于设定的最大值!订单未能发送。");
    }
}

请注意,在实际下单之前,我们会同时进行最低净值和最大点差的检查。如果这两个条件中的任何一个未能通过(即表达式结果为 false),程序将转入 else 分支。在 else 代码块内部,我们可以进一步判断具体是哪个(或哪些)条件未被满足,并据此显示一条或多条警告信息,明确告知用户订单未能成功提交的原因。

赞(0)
未经允许不得转载:图道交易 » MQL4(51):交易前检查 - 保证金和点差
分享到