关于MQL4文件的讨论 - 页 16

 
Yurixx:

而且我希望能明确说明什么时候需要进行双重归一化。

确切地说,这里有一个明显的误解。这个函数的帮助给出了一个例子,这个函数完全没有用处。

double normalizeDouble( double value, int digits)
将浮点值四舍五入到给定的精度。返回归一化的双倍类型的值。
计算出的StopLoss和TakeProfit值,以及挂单的开盘价 必须被归一化,其值被储存在预先定义的数字 变量中。
参数。
价值 - 浮点值。
数字 - 精度格式,小数点后的位数(0-8)。
样本。
 double var1=0.123456789; Print(DoubleToStr(NormalizeDouble(var1,5),5)); // output: 0.12346

这种双重转换让我在第一次看到时感到非常困惑。事实上,当把它输出到专家顾问的日志中时,就会发现

Print( DoubleToStr( var1, 5 );
也许有一些交易函数的例子会更有参考价值,也就是说,那里才是真正需要规范化的地方。stdlib.mq4中的CompareDoubles()函数的例子也会很有参考价值(这是初学者几乎总是踩到的地方)。

// Функция корректного сравнения двух переменных типа double из библиотеки stdlib.mq4
bool CompareDoubles(double number1,double number2)
{
   if(NormalizeDouble(number1-number2,8)==0) return(true);
   else return(false); 
}
雷纳特,这不是一个选项吗?
 
既然我们在谈论这个问题,我想问一个我已经纠结了一段时间的问题。下面是一个示例代码。
int start()
  {
   double haOpen, haHigh, haLow, haClose;
   if(Bars<=10) return(0);
   ExtCountedBars=IndicatorCounted();
//---- check for possible errors
   if (ExtCountedBars<0) return(-1);
第一个return(0)和第二个return(-1)的根本区别是什么?
它是如何影响一个指标(或专家顾问)的执行的?
当返回一个负值时会发生什么?
而我是否可以写一些类似的东西。
void start()
{
  //
  //...
  //
  return;
}
 
原则上没有区别,因为返回值不被终端分析(目前)。事实上,这是一种记录方式,可以帮助程序员自己理解,在这种情况下,start()有一个非标准的终止(值减1)。
 
PSmith:
而我是否可以写成这样:
void start()
{
  //
  //...
  //
  return;
}

比如说,我最近就是这样写的。:)此外,我甚至根本不使用最终回报。似乎在文档的某个地方甚至说过,在像void这样的 函数中,最后的返回是不必要的。
 
这里有另一个问题:为什么函数
doubleiVolume( 字符串, int timeframe, int shift)
返回双倍类型的值?
 
原本不是双倍的,但在某些时候,突然发现int类型 并不总是适合存储量(例如,对一个高度波动的工具采取月度时间框架)。 在这种情况下,很容易出现溢出错误。
 

从文档(数据类型)中可以看出:整数常数可以承担从-2147483648到2147483647的 值。2002年7月,欧元兑美元:历史上每个月的最大点数,670000。即使有这个最大的勾股量,也需要3000个月,也就是250年,才能获得溢出。另一方面,数量可能进一步增长,所以这个数字在理论上并不是那么遥不可及......

 
Mathemat:

从文档(数据类型)中可以看出:整数常数可以承担从-2147483648到2147483647的 值。2002年7月,欧元兑美元:历史上每个月的最大点数,670000。即使有这个最大的勾股量,也需要3000个月,也就是250年,才能获得溢出。另一方面,数量可能进一步增长,所以这个数字在理论上并不是那么遥不可及......


我自己也问过这个问题,得到的答案正是如此。尽管这很难让人相信。但是,如果你把股票市场的报价放入MT4 ...
 
同月_DJI - 42228720!是啊...
 

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

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

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