带有 NormalizeDouble 异常的 MQL4 MathMax/MathMin

问题描述 投票:0回答:1

在 MQL4 EA 中,使用计算的移动平均线作为止损,我使用 MathMax 和 Min 来确保我不会太接近。结果有点不对劲,所以我输入了

Print()
以获取详细信息:

stoploss=MathMax(NormalizeDouble(Ask+(minstoplevel*Point),Digits),NormalizeDouble(MA_Line,Digits));
Print("Sell SLCalc = "+NormalizeDouble(Ask+(minstoplevel*Point),Digits)+", MA_Line = "+NormalizeDouble(MA_Line,Digits),", Max is ",MathMax(NormalizeDouble(Ask+(minstoplevel*Point),Digits),NormalizeDouble(MA_Line,Digits)));

结果:

2023.03.24 16:46:36.607 2022.07.18 03:14:29  MA1 GBPUSD,M1: Sell SLCalc = 1.18836, MA_Line = 1.18835, Max is 1.1884

我期待 Max 具有相同的 5 位数精度。为什么 MathMax 函数对结果进行四舍五入,当我指定函数的点而不是 pip 时?

这似乎是一个很小的差异,但这就是外汇的世界,一个小的舍入误差可能会阻止我出局或让我保持长期趋势。此外,我只是希望事情能像宣传的那样工作,或者理解为什么他们不这样做。

mql4 forex mt4
1个回答
0
投票

您的代码本身没有任何问题,但是通过打印您将它们转换为

string
的值。您应该在打印函数周围使用 DoubleToString(),如下所示:

Print("Sell SLCalc = "+DoubleToString(Ask+(minstoplevel*Point),Digits)+", MA_Line = "+DoubleToString(MA_Line,Digits),", Max is ",DoubleToString(MathMax(NormalizeDouble(Ask+(minstoplevel*Point),Digits),NormalizeDouble(MA_Line,Digits)),Digits));
© www.soinside.com 2019 - 2024. All rights reserved.