错误、漏洞、问题 - 页 1781 1...177417751776177717781779178017811782178317841785178617871788...3184 新评论 A100 2017.02.05 12:33 #17801 不稳定的性能指示器位置路径。 \Indicators\Test_i.ex5专家顾问的目标路径:\Experts\Test.ex5脚本位置路径。 \Scripts\Test_s.ex5步骤的顺序。将'Test_s.ex5'脚本多次连接到M15图表(欧元兑美元符号)。结果。2017.02.05 15:17:59.076 在启动时第一次附加 2017.02.05 15:18:03.293 在启动时第二次附加的 2017.02.05 15:18:07.760 第三次启动时加入了 2017.02.05 15:18:07.778 OnInit 2017.02.05 15:18:07.781 OnDeinit:1 2017.02.05 15:18:16.891 开机 第四次加入连接的结果是不同的。它们不应该是不同的,但结果是随机的:带有OnInit/OnDeinit的行可能从第1次出现,或者从第10次出现。//Test_i.mq5 //Индикаторvoid OnInit() { Print( __FUNCTION__ ); }void OnDeinit( const int reason ) { Print( __FUNCTION__, ":", reason ); }int OnCalculate( const int, const int, const int, const double& [] ) { return 0; }//Test_s.mq5 //Скрипт#import "..\\Experts\\Test.ex5" void OnInit();#importvoid OnStart(){ Print( __FUNCTION__ ); OnInit();}附上专家文件(实际上是作为一个库使用),这里的代码https://www.mql5.com/ru/forum/1111/page1801#comment_4059227 Ошибки, баги, вопросы www.mql5.com Форум алго-трейдеров MQL5 附加的文件: Test.mq5 1 kb Errors, bugs, questions mql5语言的特点、微妙之处以及技巧 [解决]当从不同工作时间段的指标中调用/创建指标时,指标不能正确实例化。 Aleksey Vyazmikin 2017.02.05 15:57 #17802 我不明白这个错误是我的还是终端的。 在第五位数void OnStart() {double A=1.11111;double B=1.11111;double C=1.11111;long CalcX=NormalizeDouble(A,Digits)*MathPow(10,(Digits+1)*3-1)+NormalizeDouble(B,Digits)*MathPow(10,(Digits+1)*2-1)+NormalizeDouble(C,Digits)*MathPow(10,(Digits+1)*1-1);Print ("CalcX=",CalcX); }打印 CalcX=111111111111111111111104 预期值 CalcX=1111111111111111111111111111 11 Slava 2017.02.05 16:24 #17803 A100:改变图表周期时函数调用的顺序不正确指标位置路径:Indicators\Test_i.ex5专家的路径:\Experts\Test.ex5行动的顺序。将专家顾问'Test.ex5'附加到M5图表上(符号GBPUSD)。将图表周期改为M15将图表周期改为M30从图表中删除专家顾问 显示日志。这样你就可以看到时间框架。 这里需要补充的是,在图表中 添加指标 和从图表中删除指标都是非同步的操作。 此外,当时间框架被改变时,指标不会立即从这个时间框架中卸载。并在新的时间框架上创建一个新的指标副本。我看到你在构造器-解构器中的打印,你认为解构器是立即被调用的吗?不,你错了。当指标被卸载时,析构器被调用,指标被删除后几秒钟内才会被卸载 A100 2017.02.05 17:12 #17804 Slawa: 显示日志。所以你可以看到时机。 需要补充的是,向图表 中添加指标 和从图表中删除指标是非同步操作。 此外,当你改变时间框架时,指标将不会立即从这个时间框架中卸载。并在新的时间框架上创建一个新的指标副本。我看到你在构造器-解构器中的打印,你认为解构器是立即被调用的吗?不,你错了。当指标被卸载时,析构函数被调用,并且在移除指标后的几秒钟内,指标才被卸载。假设各步骤之间有足够的时间(图形周期变化)。2017.02.05 19:49:49.984 I::I->M5 #第1步:加入 2017.02.05 19:49:49.984 OnInit->M5 2017.02.05 19:51:39.853 I::I->M15 #第2步:周期变化M5->M15 2017.02.05 19:51:39.853 OnInit->M152017.02.05 19:53:29.813 OnDeinit->M15:3 #第三步:周期变化M15->M30 2017.02.05 19:53:29.813 I::~I->M15 2017.02.05 19:53:29.864 I::I->M30 2017.02.05 19:53:29.864 OnInit->M30 2017.02.05 19:54:03.245 OnDeinit->M30:3 #第4步:周期变化M30->H1 2017.02.05 19:54:03.245 i::~i->m30 2017.02.05 19:54:03.286 i::i->h1 2017.02.05 19:54:03.286 OnInit->H12017.02.05 19:55:02.984 I::I->H4 #第5步:H1->H4时期的变化 2017。02.02.05 19:55:02.984 OnInit->H4 2017.02.05 19:55:02.984 OnDeinit->H1:3 2017.02.05 19:55:02.984 I::~I->H1 2017.02.05 19:55:50.697 I::I->D1 #第6步:周期变化H4->D1 2017.02.05 19:55:50.697 OnInit->D1 2017.02.05 19:55:50.697 OnDeinit->H4:3 2017.02.05 19:55:50.697 i::~i->h42017.02.05 19:56:11.122 OnDeinit->M5:1#第7步:删除 2017.02.05 19:56:11.122 I::~I->M52017.02.05 19:56:11.122 OnDeinit->D1:1 2017.02.05 19:56:11.123 I::~I->D1非同步性只影响到一个步骤中函数调用的不同顺序(如步骤#3和#5中看到的)。正如你所看到的,所有随后的图表周期变化,除了第一个(步骤#2:两个输出行),都是预期的(类似于步骤#3:四个输出行)。而且,为什么第一个图表周期的变化应该与其他所有的不同?它如何更好/更坏?为什么第2步的两行缺失的输出(而且只有这一行)会移到第7步(用红色标出)? Errors, bugs, questions PREDICT time period Synchronise Windows local time A100 2017.02.05 17:15 #17805 -Aleks-:我不明白这个错误是我的还是终端的。打印 CalcX=111111111111111111111104 预期值 CalcX=1111111111111111111111111111 11 如果双数中的有效小数的数量>DBL_DIG=15,正常的规则就不起作用了 Slava 2017.02.05 17:39 #17806 A100:假设各步骤之间有足够的时间(图形周期变化)。2017.02.05 19:49:49.984 I::I->M5 #step1: join 2017.02.05 19:49:49.984 OnInit->M5 2017.02.05 19:51:39.853 I::I->M15 #第2步:周期变化M5->M15 2017.02.05 19:51:39.853 OnInit->M152017.02.05 19:53:29.813 OnDeinit->M15:3 #第三步:周期变化M15->M30 2017.02.05 19:53:29.813 I::~I->M15 2017.02.05 19:53:29.864 I::I->M30 2017.02.05 19:53:29.864 OnInit->M30 2017.02.05 19:54:03.245 OnDeinit->M30:3 #第4步:周期变化M30->H1 2017.02.05 19:54:03.245 i::~i->m30 2017.02.05 19:54:03.286 i::i->h1 2017.02.05 19:54:03.286 OnInit->H12017.02.05 19:55:02.984 I::I->H4 #第5步:H1->H4时期的变化 2017。02.02.05 19:55:02.984 OnInit->H4 2017.02.05 19:55:02.984 OnDeinit->H1:3 2017.02.05 19:55:02.984 I::~I->H1 2017.02.05 19:55:50.697 I::I->D1 #第6步:周期变化H4->D1 2017.02.05 19:55:50.697 OnInit->D1 2017.02.05 19:55:50.697 OnDeinit->H4:3 2017.02.05 19:55:50.697 i::~i->h42017.02.05 19:56:11.122 OnDeinit->M5:1 #第7步:删除 2017.02.05 19:56:11.122 I::~I->M52017.02.05 19:56:11.122 OnDeinit->D1:1 2017.02.05 19:56:11.123 I::~I->D1非同步性只影响一个步骤内函数调用的不同顺序(如在步骤#3和#5看到的)。我们可以看到,除了第一个步骤(第2步)之外,图表的所有后续周期变化都如期发生(与第3步类似)。为什么第一个时期的变化应该与所有其他时期不同?它如何更好/更坏? 让我再试着解释一下 在M5图表上有某种指标。当你把时间框架从M5改为M15时,同一指标的第二个副本会被创建。一条命令被发送到两个指示器上--第一个是M5 Deinit,第二个是M15 Init。同时,我们不知道这些命令中的哪一个会在另一个之前被执行--线程之间存在着经典的竞赛。 此后,第一个指标的使用计数器将减少。在使用计数器变为零后的几秒钟内,该指标将从图表中卸载。这时,该指标的全局对象的析构器将被称为 A100 2017.02.05 18:14 #17807 Slawa: 让我再试着解释一下 在M5图表中,有一个特定的指标。当你把时间框架从M5改为M15时,同一指标的第二个副本会被创建。一条命令被发送到两个指示器上--第一个是M5 Deinit,第二个是M15 Init。同时,我们不知道这些命令中的哪一个会在另一个之前被执行--不同线程之间存在着经典的竞赛。 此后,第一个指标的使用计数器将减少。在使用计数器变为零后的几秒钟内,该指标将从图表中卸载。该指标的全局对象的析构器将被称为我断言(并建议检查),当时间框架从M5变为M15时,没有M5 Deinit命令被发送到第一个指标(而且只发给它--在这种情况下是M5),它不会从图表中卸载,直到用户删除EA为止。 如果'Test_i.ex5'中的结构 I被排除在外(没有影响),输出被简化。 2017.02.05 20:49:06.842 OnInit->M5 2017.02.05 20:49:21.253 OnInit->M15(*)周期变化M5->M15: M5指标未卸下2017.02.05 20:56:40.001 OnDeinit->M15:3 周期变化M15->M30:M15 指标 立即 卸载 2017.02.05 20:56:40.132 OnInit->M30自(*)以来已超过5分钟,但M5指示器未 被卸下从图表中删除专家顾问2017.02.05 20:57:35.176 OnDeinit->M5:1 只有在删除专家顾问,M5指标才会被卸载2017.02.05 20:57:35.177 OnDeinit->M30:1 Errors, bugs, questions EuroX2.ex4有什么意见? EuroX2.ex4 any comments? [删除] 2017.02.05 19:05 #17808 Slawa: 让我再试着解释一下 在M5图表中,有一个特定的指标。当你把时间框架从M5改为M15时,同一指标的第二个副本就会产生。一条命令被发送到两个指示器上--第一个是M5 Deinit,第二个是M15 Init。同时,我们不知道这些命令中的哪一个会在另一个之前被执行--不同线程之间存在着经典的竞赛。 此后,第一个指标的使用计数器将减少。在使用计数器变为零后的几秒钟内,该指标将从图表中卸载。这时,该指标的全局对象的析构器将被调用 你能解释一下我们正在谈论的是哪条线吗?一个符号的所有指标不是在一个线程中起作用吗? Maxim Kuznetsov 2017.02.05 19:16 #17809 Vladimir Gribachev:安装比尔-威廉姆斯指标时出现的故障我把分形 - 它确实设置AO - ADX被设置建立1031 在改变/MQx/Indicators目录结构时,菜单不更新的问题已经存在几百年了 :-)这个错误是如此古老,以至于它已经被认为是一个功能,习惯吧......可用性是用方块螺栓大锤敲打的,但数字π算得最快:-) Aleksey Vyazmikin 2017.02.05 19:39 #17810 A100: 如果双数的有效小数位数>DBL_DIG=15,那么正常的规则就不起作用了哪些是有效的?在帮助文件中说,long的最大值是9223372036854775807 - 我显然没有达到这个值。 1...177417751776177717781779178017811782178317841785178617871788...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不稳定的性能
步骤的顺序。将'Test_s.ex5'脚本多次连接到M15图表(欧元兑美元符号)。
结果。
2017.02.05 15:17:59.076 在启动时第一次附加
2017.02.05 15:18:03.293 在启动时第二次附加的
2017.02.05 15:18:07.760 第三次启动时加入了
2017.02.05 15:18:07.778 OnInit
2017.02.05 15:18:07.781 OnDeinit:1
2017.02.05 15:18:16.891 开机 第四次加入
连接的结果是不同的。它们不应该是不同的,但结果是随机的:带有OnInit/OnDeinit的行可能从第1次出现,或者从第10次出现。
void OnInit() { Print( __FUNCTION__ ); }
void OnDeinit( const int reason ) { Print( __FUNCTION__, ":", reason ); }
int OnCalculate( const int, const int, const int, const double& [] ) { return 0; }
#import "..\\Experts\\Test.ex5"
void OnInit();
#import
void OnStart()
{
Print( __FUNCTION__ );
OnInit();
}
附上专家文件(实际上是作为一个库使用),这里的代码https://www.mql5.com/ru/forum/1111/page1801#comment_4059227
我不明白这个错误是我的还是终端的。
在第五位数{
double A=1.11111;
double B=1.11111;
double C=1.11111;
long CalcX=
NormalizeDouble(A,Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(B,Digits)*MathPow(10,(Digits+1)*2-1)+
NormalizeDouble(C,Digits)*MathPow(10,(Digits+1)*1-1);
Print ("CalcX=",CalcX);
}
打印 CalcX=111111111111111111111104 预期值 CalcX=1111111111111111111111111111 11
改变图表周期时函数调用的顺序不正确
行动的顺序。
这里需要补充的是,在图表中 添加指标 和从图表中删除指标都是非同步的操作。
此外,当时间框架被改变时,指标不会立即从这个时间框架中卸载。并在新的时间框架上创建一个新的指标副本。我看到你在构造器-解构器中的打印,你认为解构器是立即被调用的吗?不,你错了。当指标被卸载时,析构器被调用,指标被删除后几秒钟内才会被卸载
显示日志。所以你可以看到时机。
需要补充的是,向图表 中添加指标 和从图表中删除指标是非同步操作。
此外,当你改变时间框架时,指标将不会立即从这个时间框架中卸载。并在新的时间框架上创建一个新的指标副本。我看到你在构造器-解构器中的打印,你认为解构器是立即被调用的吗?不,你错了。当指标被卸载时,析构函数被调用,并且在移除指标后的几秒钟内,指标才被卸载。
假设各步骤之间有足够的时间(图形周期变化)。
2017.02.05 19:49:49.984 I::I->M5 #第1步:加入
2017.02.05 19:49:49.984 OnInit->M5
2017.02.05 19:51:39.853 I::I->M15 #第2步:周期变化M5->M15
2017.02.05 19:51:39.853 OnInit->M15
2017.02.05 19:53:29.813 OnDeinit->M15:3 #第三步:周期变化M15->M30
2017.02.05 19:53:29.813 I::~I->M15
2017.02.05 19:53:29.864 I::I->M30
2017.02.05 19:53:29.864 OnInit->M30
2017.02.05 19:54:03.245 OnDeinit->M30:3 #第4步:周期变化M30->H1
2017.02.05 19:54:03.245 i::~i->m30
2017.02.05 19:54:03.286 i::i->h1
2017.02.05 19:54:03.286 OnInit->H1
2017.02.05 19:55:02.984 I::I->H4 #第5步:H1->H4时期的变化
2017。02.02.05 19:55:02.984 OnInit->H4
2017.02.05 19:55:02.984 OnDeinit->H1:3
2017.02.05 19:55:02.984 I::~I->H1
2017.02.05 19:55:50.697 I::I->D1 #第6步:周期变化H4->D1
2017.02.05 19:55:50.697 OnInit->D1
2017.02.05 19:55:50.697 OnDeinit->H4:3
2017.02.05 19:55:50.697 i::~i->h4
2017.02.05 19:56:11.122 OnDeinit->M5:1#第7步:删除
2017.02.05 19:56:11.122 I::~I->M5
2017.02.05 19:56:11.122 OnDeinit->D1:1
2017.02.05 19:56:11.123 I::~I->D1
非同步性只影响到一个步骤中函数调用的不同顺序(如步骤#3和#5中看到的)。
正如你所看到的,所有随后的图表周期变化,除了第一个(步骤#2:两个输出行),都是预期的(类似于步骤#3:四个输出行)。而且,为什么第一个图表周期的变化应该与其他所有的不同?它如何更好/更坏?为什么第2步的两行缺失的输出(而且只有这一行)会移到第7步(用红色标出)?
我不明白这个错误是我的还是终端的。
打印 CalcX=111111111111111111111104 预期值 CalcX=1111111111111111111111111111 11
假设各步骤之间有足够的时间(图形周期变化)。
2017.02.05 19:49:49.984 I::I->M5 #step1: join
2017.02.05 19:49:49.984 OnInit->M5
2017.02.05 19:51:39.853 I::I->M15 #第2步:周期变化M5->M15
2017.02.05 19:51:39.853 OnInit->M15
2017.02.05 19:53:29.813 OnDeinit->M15:3 #第三步:周期变化M15->M30
2017.02.05 19:53:29.813 I::~I->M15
2017.02.05 19:53:29.864 I::I->M30
2017.02.05 19:53:29.864 OnInit->M30
2017.02.05 19:54:03.245 OnDeinit->M30:3 #第4步:周期变化M30->H1
2017.02.05 19:54:03.245 i::~i->m30
2017.02.05 19:54:03.286 i::i->h1
2017.02.05 19:54:03.286 OnInit->H1
2017.02.05 19:55:02.984 I::I->H4 #第5步:H1->H4时期的变化
2017。02.02.05 19:55:02.984 OnInit->H4
2017.02.05 19:55:02.984 OnDeinit->H1:3
2017.02.05 19:55:02.984 I::~I->H1
2017.02.05 19:55:50.697 I::I->D1 #第6步:周期变化H4->D1
2017.02.05 19:55:50.697 OnInit->D1
2017.02.05 19:55:50.697 OnDeinit->H4:3
2017.02.05 19:55:50.697 i::~i->h4
2017.02.05 19:56:11.122 OnDeinit->M5:1 #第7步:删除
2017.02.05 19:56:11.122 I::~I->M5
2017.02.05 19:56:11.122 OnDeinit->D1:1
2017.02.05 19:56:11.123 I::~I->D1
非同步性只影响一个步骤内函数调用的不同顺序(如在步骤#3和#5看到的)。
我们可以看到,除了第一个步骤(第2步)之外,图表的所有后续周期变化都如期发生(与第3步类似)。为什么第一个时期的变化应该与所有其他时期不同?它如何更好/更坏?
在M5图表上有某种指标。当你把时间框架从M5改为M15时,同一指标的第二个副本会被创建。一条命令被发送到两个指示器上--第一个是M5 Deinit,第二个是M15 Init。同时,我们不知道这些命令中的哪一个会在另一个之前被执行--线程之间存在着经典的竞赛。
此后,第一个指标的使用计数器将减少。在使用计数器变为零后的几秒钟内,该指标将从图表中卸载。这时,该指标的全局对象的析构器将被称为
让我再试着解释一下
在M5图表中,有一个特定的指标。当你把时间框架从M5改为M15时,同一指标的第二个副本会被创建。一条命令被发送到两个指示器上--第一个是M5 Deinit,第二个是M15 Init。同时,我们不知道这些命令中的哪一个会在另一个之前被执行--不同线程之间存在着经典的竞赛。
此后,第一个指标的使用计数器将减少。在使用计数器变为零后的几秒钟内,该指标将从图表中卸载。该指标的全局对象的析构器将被称为
我断言(并建议检查),当时间框架从M5变为M15时,没有M5 Deinit命令被发送到第一个指标(而且只发给它--在这种情况下是M5),它不会从图表中卸载,直到用户删除EA为止。
如果'Test_i.ex5'中的结构 I被排除在外(没有影响),输出被简化。
2017.02.05 20:49:06.842 OnInit->M5
2017.02.05 20:49:21.253 OnInit->M15(*)周期变化M5->M15: M5指标未卸下
2017.02.05 20:56:40.001 OnDeinit->M15:3 周期变化M15->M30:M15 指标 立即 卸载
2017.02.05 20:56:40.132 OnInit->M30
自(*)以来已超过5分钟,但M5指示器未 被卸下
从图表中删除专家顾问
2017.02.05 20:57:35.176 OnDeinit->M5:1 只有在删除专家顾问
,M5指标才会被卸载2017.02.05 20:57:35.177 OnDeinit->M30:1
让我再试着解释一下
在M5图表中,有一个特定的指标。当你把时间框架从M5改为M15时,同一指标的第二个副本就会产生。一条命令被发送到两个指示器上--第一个是M5 Deinit,第二个是M15 Init。同时,我们不知道这些命令中的哪一个会在另一个之前被执行--不同线程之间存在着经典的竞赛。
此后,第一个指标的使用计数器将减少。在使用计数器变为零后的几秒钟内,该指标将从图表中卸载。这时,该指标的全局对象的析构器将被调用
安装比尔-威廉姆斯指标时出现的故障
我把分形 - 它确实
设置AO - ADX被设置
建立1031
如果双数的有效小数位数>DBL_DIG=15,那么正常的规则就不起作用了
哪些是有效的?
在帮助文件中说,long的最大值是9223372036854775807 - 我显然没有达到这个值。