错误、漏洞、问题 - 页 1782 1...177517761777177817791780178117821783178417851786178717881789...3184 新评论 A100 2017.02.05 19:57 #17811 -Aleks-:哪些是有效的?丢掉有效数字,用随机工作来填补的规则结果是长的,但在双数的中间计算 中,这就是重要数字丢失的地方(数字+1)*3-1=17 Aleksey Vyazmikin 2017.02.05 20:42 #17812 A100:丢掉有效数字,用随机工作来填补的规则结果是长的,但在双数的中间计算 中,这就是重要数字丢失的地方(数字+1)*3-1=17谢谢你提供的信息。然而,这些信息是很难掌握的--即数字可以是这样的,但你不能用它做计算?下面是一个从字符串转换为数字的代码例子long CalcY=StringToDouble("111111111111111111");Print ("CalcY=",CalcY);打印数字11111111111111104。也就是说,这里没有计算,还是我错了?是否有可能处理这些数字,或者这些是语言的限制? A100 2017.02.05 20:55 #17813 -Aleks-:所以这里没有计算,还是我错了? 计算是任何操作(在 这里是转换)。 对于指定的数字,StringToDouble返回双倍数,但有精度损失。StringToInteger返回long,但在计算中不能使用双倍数的其他函数,如NormalizeDouble、MathPow等。 Aleksey Vyazmikin 2017.02.05 21:04 #17814 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 Aleksey Vyazmikin 2017.02.05 21:09 #17815 同样,它被写在帮助台中 INT_MAX可由int类型表示的最大值2147483647那么如果数字大于允许的范围,StringToInteger 是如何进行转换并存储在long中的? A100 2017.02.05 21:15 #17816 -Aleks-:那么如果数字大于允许的范围,StringToInteger是 如何转换并存储为long的?StringToInteger最初在LONG_MINLONG_MAX 范围内返回long(它也可以被称为StringToColobok)。 Aleksey Vyazmikin 2017.02.05 21:19 #17817 A100: StringToInteger最初会返回long(还不如叫StringToBoob)。当然,这可能是真的,但在帮助中,它是如此的糊涂"将一个 包含数字的字符表示的字符串转换 为一个int(整数)数字。"这就是误导我的原因。谢谢你提供的信息。我认为上面的数字表示将不适合在图形缓冲区中使用? A100 2017.02.05 21:25 #17818 -Aleks-:我认为上述数字将不适合在图形缓冲器中使用?它们被写成B'1111111111111111111111111111'。 Renat Fatkhullin 2017.02.05 21:40 #17819 A100:我断言(并建议检查),当时间框架从M5变为M15时,没有M5 Deinit命令被发送到第一个指标(而且只发送给它--在这种情况下是M5),它不会从图表中卸载,直到用户删除EA为止。 Glory是对的,卸货工作正常。 请注意,在MT5中,指标计算核心是一个共享资源,在它自己的管理器中有一个使用计数器。 如果不同的程序或窗口以相同的参数使用该指标,一个带有使用计数器的计算副本实际上是有效的。当交易员在图表和专家顾问中使用相同的指标时,这可以节省大量的资金。 指示器管理器的设计使其在物理上以异步和延迟的方式删除指示器。而与此同时,一个新的工作副本被创建,带有新的参数,通常在旧的副本被物理删除之前被初始化。 A100 2017.02.05 21:58 #17820 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 Errors, bugs, questions Urgent! Metatrader5 Alert problem! New MetaTrader 4 Platform 1...177517761777177817791780178117821783178417851786178717881789...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
哪些是有效的?
丢掉有效数字,用随机工作来填补的规则
结果是长的,但在双数的中间计算 中,这就是重要数字丢失的地方
(数字+1)*3-1=17
丢掉有效数字,用随机工作来填补的规则
结果是长的,但在双数的中间计算 中,这就是重要数字丢失的地方
(数字+1)*3-1=17
谢谢你提供的信息。
然而,这些信息是很难掌握的--即数字可以是这样的,但你不能用它做计算?
下面是一个从字符串转换为数字的代码例子
Print ("CalcY=",CalcY);
打印数字11111111111111104。
也就是说,这里没有计算,还是我错了?
是否有可能处理这些数字,或者这些是语言的限制?
所以这里没有计算,还是我错了?
计算是任何操作(在 这里是转换)。 对于指定的数字,StringToDouble返回双倍数,但有精度损失。
StringToInteger返回long,但在计算中不能使用双倍数的其他函数,如NormalizeDouble、MathPow等。
计算 - 任何操作(在此为转换)。 StringToDouble返回双倍数--会有精度上的损失
StringToInteger返回long,但在计算中不能使用操作double的其他函数而不损失精度,如NormalizeDouble, MathPow,
StringToInteger 在表达数字时起了作用,但随后情况变得更糟,我猜数字必须被分解成其组成部分进行数学运算......
Print ("CalcZ=",CalcZ);
double Test=CalcZ;
Print ("Test=",Test);
Test=1.111111111111111e+17
同样,它被写在帮助台中
INT_MAX
可由int类型表示的最大值
2147483647
那么如果数字大于允许的范围,StringToInteger 是如何进行转换并存储在long中的?
那么如果数字大于允许的范围,StringToInteger是 如何转换并存储为long的?
StringToInteger最初在LONG_MINLONG_MAX 范围内返回long(它也可以被称为StringToColobok)。
StringToInteger最初会返回long(还不如叫StringToBoob)。
当然,这可能是真的,但在帮助中,它是如此的糊涂
"
将一个 包含数字的字符表示的字符串转换 为一个int(整数)数字。
"
这就是误导我的原因。
谢谢你提供的信息。
我认为上面的数字表示将不适合在图形缓冲区中使用?
我认为上述数字将不适合在图形缓冲器中使用?
它们被写成B'1111111111111111111111111111'。
我断言(并建议检查),当时间框架从M5变为M15时,没有M5 Deinit命令被发送到第一个指标(而且只发送给它--在这种情况下是M5),它不会从图表中卸载,直到用户删除EA为止。
请注意,在MT5中,指标计算核心是一个共享资源,在它自己的管理器中有一个使用计数器。 如果不同的程序或窗口以相同的参数使用该指标,一个带有使用计数器的计算副本实际上是有效的。当交易员在图表和专家顾问中使用相同的指标时,这可以节省大量的资金。
指示器管理器的设计使其在物理上以异步和延迟的方式删除指示器。而与此同时,一个新的工作副本被创建,带有新的参数,通常在旧的副本被物理删除之前被初始化。
指示器管理器的设计使其在物理上以异步和延迟的方式删除指示器。与此同时,一个新的工作副本被创建,并带有新的参数,通常在旧的副本被物理删除之前被初始化。
让我们简化一下这个指标
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何时被调用?
我的回答是:永远不可能
您的上述答案:异步且有延迟