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