错误、漏洞、问题 - 页 1782

 
-Aleks-:

哪些是有效的?

丢掉有效数字,用随机工作来填补的规则

结果是长的,但在双数的中间计算 中,这就是重要数字丢失的地方

(数字+1)*3-1=17

 
A100:

丢掉有效数字,用随机工作来填补的规则

结果是长的,但在双数的中间计算 中,这就是重要数字丢失的地方

(数字+1)*3-1=17

谢谢你提供的信息。

然而,这些信息是很难掌握的--即数字可以是这样的,但你不能用它做计算?

下面是一个从字符串转换为数字的代码例子

long CalcY=StringToDouble("111111111111111111");
Print ("CalcY=",CalcY);

打印数字11111111111111104。

也就是说,这里没有计算,还是我错了?

是否有可能处理这些数字,或者这些是语言的限制?

 
-Aleks-:

所以这里没有计算,还是我错了?

计算是任何操作( 这里是转换)对于指定的数字,StringToDouble返回双倍数,但有精度损失

StringToInteger返回long,但在计算中不能使用双倍数的其他函数,如NormalizeDouble、MathPow等。

 
A100:

计算 - 任何操作(在此为转换)StringToDouble返回双倍数--会有精度上的损失

StringToInteger返回long,但在计算中不能使用操作double的其他函数而不损失精度,如NormalizeDouble, MathPow,

StringToInteger 在表达数字时起了作用,但随后情况变得更糟,我猜数字必须被分解成其组成部分进行数学运算......

long CalcZ=StringToInteger("111111111111111111");
Print ("CalcZ=",CalcZ);

double Test=CalcZ;
Print ("Test=",Test);

Test=1.111111111111111e+17

 

同样,它被写在帮助台中

INT_MAX

可由int类型表示的最大值

2147483647

那么如果数字大于允许的范围,StringToInteger 是如何进行转换并存储在long中的?

 
-Aleks-:

那么如果数字大于允许的范围,StringToInteger是 如何转换并存储为long的?

StringToInteger最初在LONG_MINLONG_MAX 范围内返回long(它也可以被称为StringToColobok)。

 
A100:
StringToInteger最初会返回long(还不如叫StringToBoob)。

当然,这可能是真的,但在帮助中,它是如此的糊涂

"

将一个 包含数字的字符表示的字符串转换一个int(整数)数字

"

这就是误导我的原因。

谢谢你提供的信息。

我认为上面的数字表示将不适合在图形缓冲区中使用?

 
-Aleks-:

我认为上述数字将不适合在图形缓冲器中使用?

它们被写成B'1111111111111111111111111111'。

 
A100:

我断言(并建议检查),当时间框架从M5变为M15时,没有M5 Deinit命令被发送到第一个指标(而且只发送给它--在这种情况下是M5),它不会从图表中卸载,直到用户删除EA为止。

Glory是对的,卸货工作正常。

请注意,在MT5中,指标计算核心是一个共享资源,在它自己的管理器中有一个使用计数器。 如果不同的程序或窗口以相同的参数使用该指标,一个带有使用计数器的计算副本实际上是有效的。当交易员在图表和专家顾问中使用相同的指标时,这可以节省大量的资金。

指示器管理器的设计使其在物理上以异步和延迟的方式删除指示器。而与此同时,一个新的工作副本被创建,带有新的参数,通常在旧的副本被物理删除之前被初始化。
 
Renat Fatkhullin:
指示器管理器的设计使其在物理上以异步和延迟的方式删除指示器。与此同时,一个新的工作副本被创建,并带有新的参数,通常在旧的副本被物理删除之前被初始化。

让我们简化一下这个指标

//Test_i.mq5 //Индикатор
void Prn( string f, int i = -1 ) { Print( f, "->", StringSubstr( EnumToString( Period()), 7 ), (i == -1 ? "" : ":" + i )); }
void OnInit()                    { Prn( __FUNCTION__ );         }
void OnDeinit( const int reason ) { Prn( __FUNCTION__, reason ); }
int OnCalculate( const int, const int, const int, const double& [] ) { return 0; }

让我们把Test.mq5附加到M5图表上,然后把图表周期 从M5->M15改变。

结果。

2017.02.06 00:54:20.897 OnInit->M5
2017.02.06 00:54:25.553 OnInit->M15

问题:OnDeinit->M5何时被调用?

我的回答是:永远不可能

您的上述答案:异步且有延迟

附加的文件:
Test.mq5  1 kb