在最长的时间里,当大多数经纪商的货币报价为 4 位数字(或日元对为 2 位数字)时,滑点值和点值将按您的预期工作。 但是随着fractional pip经纪商的加入,需要对这些值进行调整,否则就会出现问题。 在这篇 MQL4 滑点和点值文章中了解如何对您的 Expert Advisor 进行编程以与 5 位数或小数点值经纪商一起工作。
在 OrderSend() 函数的第四个参数中找到的滑点值表示订单通过的最大点差。 如果您的经纪人是 4 位数字经纪人,则 1 点 = 1 点。 没问题。 如果您指示 3 点的滑点,您将确保在信号价格的 3 点以内成交。
但是,如果您的经纪商使用 5 位数字报价(或 3 位日元对),则 1 点 = 0.1 点。 现在这是一个问题,因为如果你为滑点输入 3,它就是 0.3,就像有 0。你冒着被重新报价的危险。 为了进行手动调整,您必须在滑点设置的末尾添加一个额外的零,将您的 3 变成 30,以保持您的 3 点滑点意图。
因此,代码自动检查 4 位或 5 位数字经纪人并自动进行适当调整非常有用。
Point值也有类似的问题。 正如我们在检查 OrderSend() 函数时所看到的,我们为止损或获利指示的点整数需要乘以点,以便将它们转换为适当的小数值。 Point 是 MQL 中的预定义变量,它返回货币的最小价格单位,具体取决于小数位数。
因此,Point = 0.0001 对于 4 个小数引号。 但最近,许多经纪商采用小数点报价,小数点后 3 位和小数点后 5 位,使得 Point = 0.00001 为 5 位小数报价。 问题在于,预期为 50 点的止损点值将被计算为 5 点。 为了进行手动调整,您必须在止损值的末尾添加一个额外的零,将 50 更改为 500,以保持您的 50 点止损意图。 因此,代码自动检查 4 位或 5 位数字经纪人并进行适当调整非常有用。
我们可以创建一个代码来自动检测小数经纪商并对滑点和 自动点。
// 全局变量
双v点;
int vSlippage;
初始化()
// 检测点和滑点的 3/5 位经纪人
如果(点 == 0.00001)
{ vPoint = 0.0001; vSlippage = 滑点 *10;}
别的 {
如果(点 == 0.001)
{ vPoint = 0.01; vSlippage = 滑点 *10;}
否则 vPoint = 点; vSlippage = 滑点;
}
然后,您将用 vPoint 替换 Point 的所有倍数,并在 OrderSend() 函数的 Slippage 参数中插入 vSlippage,如以下示例所示:
OrderSend (Symbol(), OP_BUY, Lots, Ask, vSlippage, Bid-StopLoss *vPoint, Bid+TakeProfit*vPoint, “EAName”, MagicNumber, 0, Blue)