关于MQL4文件的讨论 - 页 17

 
Yurixx:

Rosh,如果我对你的沉默理解正确的话,对于哪些情况和哪些表达式/变量需要规范化,没有明确的说法。如果是这样的话,也许可以回答一个更简单的问题:计算值的规范化形式是否为

int StLs=25。
double prc = Ask + StLs*Point;

或者我应该在实验中自己发现这个问题?

我不认为你在等待我对问题的回答。我的回答是:在这种情况下,我不做正常化处理,订单正常打开。但有一次,我加载了一个手工制作的历史,并试图在上面运行一个测试器--这时我感到很惊讶。几乎在所有情况下,都应该使用规范化,以备不时之需--无论是自己制作的指标值插入OrderSend()的价格参数中[如各种枢轴],还是EA内部的复杂计算(也不复杂)--在所有情况下,你都不能用黄油糟蹋任何东西。

但实际上,我不能给出一个明确的表述,什么时候绝对没有必要在OrderSend()中应用价格规范化。原则上,一个夜行人在半年内就会有感觉,但没有必要去找感觉,只要一直正常化就可以了。
 
另外,今天在检查帮助程序时,我在数据转换 部分发现了一组函数

,提供数据从一种格式到另一种格式的转换。

特别值得注意的是NormalizeDouble() 函数,它确保了价格表示的准确性要求。 你不能在交易操作中使用非正常化的价格,其准确性至少超过交易服务器所要求的准确性一个数字
 
也是归一化双数

double normalizeDouble( double value, int digits)
将一个浮点数舍入到指定的精度。
计算出的 StopLoss和TakeProfit值,以及挂单的开盘价 必须被归一化为精度,其值被存储在预定义的变量Digits 中。
参数。
价值 - 带浮点的值。
数字 - 一种精度格式,小数点后的数字(0-8)。
例子。
  double var1=0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),5));
// output: 0.12346
 
"例子。
  double var1=0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),5))。
//输出:0.12346"。

这些是我希望在文档中看到的例子。一切都很简单,也很容易理解。你在专家顾问或指标中插入它,就能马上看到结果。
 
你是说像这样吗?
 

Rosh,请看同一论坛的第16页,我已经写了关于这个功能和改进对它的帮助的建议。

 
现在已经固定了(将在新的构建中)。

double normalizeDouble( double value, int digits)
将一个浮点数舍入到指定的精度。
计算出的StopLoss和TakeProfit值,以及挂单的开盘价 应该被规范化为准确值,其值被存储在预定义的变量Digits 中。

参数。
价值 - 带浮点的值。
数字 - 一种精度格式,小数点后的数字(0-8)。
例子。
 double var1=0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),8));
// output: 0.12346000



这个例子演示了通过NormalizeDouble()剪切到5位数,而Print()只是简单地渲染(抱歉,这不是俄罗斯的风格)它。
 

是的,一旦字符的数量开始不同,这个例子就变得明显更有信息量。

 
bool SendFTP( string filename, string ftp_path=NULL)
将文件发送到发布窗口中指定的电子邮件地址。如果不成功,返回FALSE。
该功能在测试模式下不工作。这个函数也不能从自定义指标中调用。
要发送的文件必须位于terminal_directory/experts/files 文件夹或其子文件夹中。
如果在设置中没有指定FTP地址和/或访问密码,则不进行发送。
[...]
空白的SendMail( string subject, string some_text)
发送电子邮件到邮件标签上的设置中指定的地址。
发送可能在设置中被禁止,也可能没有指定电子邮件地址。必须调用GetLastError() 函数来获得错误信息。
[...]

观察任务:找到2个差异。
 
显然,你必须放弃,这样你才能从背后扔掉正确的答案?:)