新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1294

 
ANDREY:

大家好!

我正在尝试将mql4转为mql5。

问题:为什么mql5计算并显示一些我不知道的表达式,比如2.99999999-(减去)05,而不是当前价格和Hay 变量值之间的差值,这应该是<1(像mql4)

我怎样才能使mql5正确地计算出这些数值之间的差异?我使用 NormalizeDouble()对所有数值进行了归一化 处理,但上述数值

值显示不变。这对我来说很奇怪,因为这两个值都是二进制类型的。

感谢大家的帮助。


2.9999999999-(减)05=2.9999999999/100000=0.00002999999数学中就是这样做的。

-(减)05就是除以10的五次方。

 
IndependentMK:

又见面了。
请注意一个新手的问题。
我需要指出代码中的错误,因为在测试器中,专家顾问并没有打开订单...
编译器没有显示任何错误或警告,在日志中也是如此,没有任何错误......。

它没有打开是因为其中一个条件没有得到满足。

它是

while(MA_Smoth_B > MA_Smoth_S)

或这个

if(MA_Simpl_B_Op < MA_Simpl_S_Op && MA_Simpl_B_Cl > MA_Simpl_S_Cl)

评论出两个闪光点//,你就会知道是哪一个。这就是你发现错误的方法。

 
Александр:

2.9999999999-(减)05=2.9999999999/100000=0.0000299999999数学中就是这样做的。

-(减)05就是除以10的五次方。

谢谢你的回答,但是为什么程序不计算价格1.33671和Hay 1.33664之间的差额,而不计算表达式,应该是0.00007,而是输出表达式?

同时,当我用常数1. 33664 SymbolInfoDouble(Symbol(),SYMBOL_BID)-1.33664)替换1.33664的Hay 变量时,程序计算出这些数值之间的实际差异,即0.00007。事实上,代码中的Hay 变量取的是前一个tick上的订单的开盘价值,是 一个1.33664 的双倍

提前感谢您的帮助。

 
ANDREY:

谢谢你的回答,但是为什么程序不计算价格值1.33671和Hay 1.33664之间的差额,而不计算表达式,应该是0.00007,而是输出表达式?

提前感谢您的提示。

DoubleToString()。这不是关于MQL5的问题,这是关于日志中真实值的不正确输出。这对MQL4同样适用。

Документация по MQL5: Преобразование данных / DoubleToString
Документация по MQL5: Преобразование данных / DoubleToString
  • www.mql5.com
[in]  Формат точности. Если значение digits лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой. Если значение digits лежит в диапазоне от -1 до -16, то...
 
Artyom Trishkin:

DoubleToString()。而且这不是关于MQL5的问题,而是关于日志中真实值的不正确输出。这也同样适用于MQL4,程度完全相同。

明白了。谢谢你。我以前从未遇到过这样的问题。现在我将知道。

我不太清楚精确格式对我的代码意味着什么。在我看来,它是小数点后的数字。
但在MT4中,在完全相同的代码中(除了OrderSend),如果我没有记错的话,Print函数总是输出两个价格值之间的实际差值,即小于1的数字(0.00000),0后面有5位小数。

 
ANDREY:

明白了。谢谢你。我以前从未遇到过这种情况。现在我就知道了。

我还不太清楚准确率格式对我的代码意味着什么。在我看来,它是小数点后的数字。
但在MT4中,在完全相同的代码中(除了OrderSend),如果我没有记错的话,Print函数总是输出两个价格值之间的实际差值,即小于1的数字(0.00000),0后面有5位小数。

真实的数据值被打印在各个地方。它只是实数表示的不同格式。如果终端没有指定输出格式,它自己决定哪种格式更方便。当然,这是以你知道所有的数字表示格式为前提的。

这一切都在帮助中。

 
Artyom Trishkin:

真实的数据值到处显示。它只是一种表示实数的不同格式。如果终端没有指定输出格式,它决定哪种格式更方便。当然,这要假设你知道所有的数字格式。

一切都在帮助中。

那么,MT4和MT5对实数的表示有不同的格式?
我应该在mql5帮助中阅读什么来处理这个问题?

谢谢你的帮助。

 
Michail_David:
你好,各位专家。我需要你的帮助来纠正这个指标。该指标的实质如下。计算相对于前一栏的价格上涨幅度。对于零需要一个星条。就是说,开盘价等于收盘价。编译时没有错误,但测试时在第80行20个字符处出现错误。信号线 的画法也不正确。但我认为这就是主缓冲区计算不正确的原因。请帮助我解决这个问题。

好的。看来在这里只有少数人得到帮助。

 
Michail_David:

好的。看来在这里只有少数人得到帮助。

试试这个。

//--- typical price and its moving average
   for(i=0; i<rates_total-1; i++)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
 
Vitaly Muzichenko:

试试这个。

谢谢你,维塔利。但在ExtTempBuffer[i]=NormalizeDouble((close[i]-open[i])/Point(),2);这一行,我仍然得到一个错误。