错误、漏洞、问题 - 页 108

 
Interesting:

更加可靠?为什么在初始化时获得手柄不可靠?为什么检查必要的数据是不可靠的?更有甚者,为什么有检查就不可靠呢?

对于初学者来说,这可能不是那么容易,但随着时间的推移,一切都会变得清晰。

事实上,我是想马上弄清楚,而不是以后......我不想只是复制一些动作而不理解其含义。如果我把代码作为MQL4中的一个内置函数,我可能会添加一些额外的参数,如条数。

 

为什么会加载?

 
simpleton:

"普通数字 "是常数表达式,它也有一个类型。在这种情况下,它是int类型。

由两个子表达式相乘组成的表达式,每个都是int类型,也是int类型。这就是溢出发生的地方。

只有这样,在 变量的初始化过程中,才会发生从int表达式的类型到长类型的隐式转换。

这里的一切都很清楚。顺便说一下,在这种情况下,没有必要把每个 操作数 铸成长。我们可以只投一个,隐含地投第二个。

这就是我想说的,但用的是不太学术的语言。最主要的是警告其他观察员。

这个问题是不同的。在哪部《塔木德》中说到......。

"普通数字 "是常数表达式,也有一个类型。在这种情况下,它是int类型。

例如,如果X被设置为10000000000,那么它就变成了long 类型 为什么不是ulongdatetime 甚至是string 呢?

数字的类型是什么 255uchar 还是short ?

 
gumgum:

为什么会加载?

可能是因为GBPJPY交叉配对,在代码的某个地方有保证金的计算。IMHO
 
simpleton:

日志和代码之间似乎出现了混淆。上述代码 "干净 "地工作。而且,为了得到这样的日志,我不得不让变量A和B变成int或uint类型,而变量X变成uint类型

这里是原始代码的工作。

Build 314(2010年8月20日)。

我引用了一个不同的代码

long A = AccountInfoInteger(ACCOUNT_LOGIN);  // 661701
long B = A;
long C = 661701;

Print(" A=",A,"  B=",B,"  C=",C);

long X =(long)10000;

long L1 = A*X;
long L2 = B*X;
long L3 = C*X;

Print(" L1=",L1,"   L2=",L2,"   L3=",L3);

特别注意第一行,你的账户可能有不同的号码。查一查,把它放在 C =

再次检查了结果

2010.08.25 20:23:12     Servis (EURUSD,H1)       L1=2322042704   L2=2322042704   L3=6617010000
2010.08.25 20:23:12     Servis (EURUSD,H1)       A=661701  B=661701  C=661701

Build 314(2010年8月20日)。

 
请告诉我为什么SymbolInfoDouble(_Symbol,SYMBOL_POINT)函数 在USDCHF的小数点后给出了一个五位数的值0.00001,而这个货币对的公认值是0.0001?
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
  • www.mql5.com
Получение рыночной информации / SymbolInfoDouble - Документация по MQL5
 
rut_:
请告诉我为什么USDCHF货币对的SymbolInfoDouble(_Symbol,SYMBOL_POINT)函数 在小数点0.00001之后产生一个五位数的点值,而这个货币对的点值被接受为0.0001?

为什么你认为这个仪器有4位数字,终端清楚地显示,报价有5位数字。
 
sergey1294:
你为什么认为这个工具有4个数字,终端清楚地显示,报价有5个数字。

这个函数可以返回不同的点值,即使是五位数的账户,这完全取决于经纪人将接受的设置。

例如,一家经纪公司有如下评论

1 pips (пункт) равен:

для валютных пар с 5 знаками после запятой - минимальному изменению 4-го знака после запятой (0,0001);
для валютных пар с 3 знаками после запятой - минимальному изменению 2-го знака после запятой (0,01).

而另一个有1个点,相当于第五个数字。

 
SHOOTER777:

这就是我想说的,但用不太学术的语言。最重要的是要警告其他寻求者。

这个问题是不同的。哪部《塔木德》中说:"......"。

"普通数字 "是常数表达式,它也有一个类型。在这种情况下,它是int类型。

例如,如果X被设置为10000000000,那么它就变成了long 类型 为什么不是ulongdatetime 甚至是string 呢?

数字的类型是什么 255uchar 还是short ?

常数10000000000已经是long类型。

我应该怎么说呢?普通语言有后缀-修饰符,允许你指定常量的类型而不使用显式类型转换。对于MQL5,我只发现它用于浮动。因此,如果没有明确的类型转换,就不可能定义ucar, ushort, uint, ulong, char, short和long类型的常量(如果常量值适合int类型)。

常数255有一个int类型。你可以在类型描述中找到一些东西,例如,字符常数被声明为具有ushort类型。还有关于日期时间类型、颜色类型、布尔类型、双倍类型和字符串类型的常量信息。

你可以尝试打印常量类型的大小,只要引入sizeof操作(但为什么要引入,请向某个开发人员解释)。

void OnStart()
{
  Print("sizeof true                = ", sizeof true);
  Print("sizeof 'a'                 = ", sizeof 'a');
  Print("sizeof 255                 = ", sizeof 255);
  Print("sizeof 200000000           = ", sizeof 20000000);
  Print("sizeof 10000000000         = ", sizeof 10000000000);
  Print("sizeof C'128,128,128'      = ", sizeof C'128,128,128');
  Print("sizeof D'2004.01.01 00:00' = ", sizeof D'2004.01.01 00:00');
  Print("sizeof 1.0f                = ", sizeof 1.0 f);
  Print("sizeof 1.0                 = ", sizeof 1.0);
  Print("sizeof \"Xa!\"               = ", sizeof "Xa!");
  Print("sizeof \"Xa-xa-xa!!!\"       = ", sizeof "Xa-xa-xa!!!");
}

/* Вывод в лог (хронология - сверху вниз):
GF      0       1 (EURUSD,M15)  02:03:23        sizeof true                = 1
IS      0       1 (EURUSD,M15)  02:03:23        sizeof 'a'                 = 2
LF      0       1 (EURUSD,M15)  02:03:23        sizeof 255                 = 4
JI      0       1 (EURUSD,M15)  02:03:23        sizeof 200000000           = 4
EQ      0       1 (EURUSD,M15)  02:03:23        sizeof 10000000000         = 8
DG      0       1 (EURUSD,M15)  02:03:23        sizeof C'128,128,128'      = 4
JN      0       1 (EURUSD,M15)  02:03:23        sizeof D'2004.01.01 00:00' = 8
GE      0       1 (EURUSD,M15)  02:03:23        sizeof 1.0f                = 4
GR      0       1 (EURUSD,M15)  02:03:23        sizeof 1.0                 = 8
QJ      0       1 (EURUSD,M15)  02:03:23        sizeof "Xa!"               = 12
ER      0       1 (EURUSD,M15)  02:03:23        sizeof "Xa-xa-xa!!!"       = 12
*/

一般来说,在后缀中,只有f对双常数起作用,将其修改为浮动,这可以从这类常数的sizeof-type看出。

这里,是我能找到的唯一合理使用sizeof操作的地方。:)

 
SHOOTER777:

我给了你一个不同的代码

特别注意第一行,你的账户上可能有一个不同的号码。查一查,把它放在 C =

再次检查了结果

Build 314(2010年8月20日)。

不,我没有和你一样的效果。我只需要检查MT5的比特版本。我有64位的版本,你的是什么?

顺便问一下,我所测试的修改后的代码是否给你带来了和我一样的结果?

如果是的话,那么我所看到的和那个关于值的 "原点 "的错误非常相似--也就是说,根据进一步计算所依据的值最初来自哪里,代码会有不同的表现(包括正确和不正确)。