错误、漏洞、问题 - 页 221 1...214215216217218219220221222223224225226227228...3184 新评论 Yedelkin 2010.12.05 18:48 #2201 vikulin: 这是相同的结果!这些点的输入参数是相同的!"。 请解释。我不明白 "这些点的输入参数是相同的"。根据我对优化器工作原理的理解,每一个通道都对应着一组独特的输入参数。或者你的意思是,当使用遗传算法 时,可能会有这样的情况:一组独特的输入参数可以被优化器处理几次? ...嗯,是的,这正是你所说的。然后发现所有后续的 "来自缓存 "的点都是虚构的,扭曲了优化结果的视觉感知? AIRAT SAFIN 2010.12.06 02:32 #2202 sultanm: 很奇怪。这已经是第三次了。图上有两个数值接近的点,但结果中只有一个。 提示:请按要求的值排序,不要忘记显示表格的垂直滚动条。 Aleksandr Chugunov 2010.12.06 09:23 #2203 这个问题会不会得到解决?这是我第三次谈论这个问题了,但没有任何反应!我想这是我的责任。 Alexey Da 2010.12.06 10:39 #2204 vikulin:顺便说一下,在我看来,如果选择了重新报价的建模,那么这个缓存就不应该被使用。开发人员对此有什么看法?还有一个错误:当我的遗传算法 超过10496时,图表开始不正确地显示--垂直方向上它的比例正确,你可以理解为找到了更高的结果,但水平方向上它没有更新。 请写信给Servicedesk。而在第2点是对完整的信息感兴趣。EA,终端构建,优化设置... Igor Volodin 2010.12.06 12:23 #2205 代码。int symbols = SymbolsTotal(false); for (int i=0; i<symbols; i++) { Print("Символ №"+i+" значение="+SymbolName(i,false)); }在终端,结果是2010.12.06 13:18:49 Expert (EURUSD,H1) Символ №11 значение=GBPJPY 2010.12.06 13:18:49 Expert (EURUSD,H1) Символ №10 значение=GBPCHF 2010.12.06 13:18:49 Expert (EURUSD,H1) Символ №9 значение=EURJPY 2010.12.06 13:18:49 Expert (EURUSD,H1) Символ №8 значение=EURCHF 2010.12.06 13:18:49 Expert (EURUSD,H1) Символ №7 значение=EURAUD 2010.12.06 13:18:49 Expert (EURUSD,H1) Символ №6 значение=EURGBP 2010.12.06 13:18:49 Expert (EURUSD,H1) Символ №5 значение=AUDUSD 2010.12.06 13:18:49 Expert (EURUSD,H1) Символ №4 значение=USDCAD 2010.12.06 13:18:49 Expert (EURUSD,H1) Символ №3 значение=USDJPY 2010.12.06 13:18:49 Expert (EURUSD,H1) Символ №2 значение=USDCHF 2010.12.06 13:18:49 Expert (EURUSD,H1) Символ №1 значение=GBPUSD 2010.12.06 13:18:49 Expert (EURUSD,H1) Символ №0 значение=EURUSD测试者的结果。2010.12.06 13:21:20 Core 1 2010.11.01 00:00:00 Символ №11 значение=USDJPY 2010.12.06 13:21:20 Core 1 2010.11.01 00:00:00 Символ №10 значение=USDCHF 2010.12.06 13:21:20 Core 1 2010.11.01 00:00:00 Символ №9 значение=USDCAD 2010.12.06 13:21:20 Core 1 2010.11.01 00:00:00 Символ №8 значение=GBPUSD 2010.12.06 13:21:20 Core 1 2010.11.01 00:00:00 Символ №7 значение=GBPJPY 2010.12.06 13:21:20 Core 1 2010.11.01 00:00:00 Символ №6 значение=GBPCHF 2010.12.06 13:21:20 Core 1 2010.11.01 00:00:00 Символ №5 значение=EURUSD 2010.12.06 13:21:20 Core 1 2010.11.01 00:00:00 Символ №4 значение=EURJPY 2010.12.06 13:21:20 Core 1 2010.11.01 00:00:00 Символ №3 значение=EURGBP 2010.12.06 13:21:20 Core 1 2010.11.01 00:00:00 Символ №2 значение=EURCHF 2010.12.06 13:21:20 Core 1 2010.11.01 00:00:00 Символ №1 значение=EURAUD 2010.12.06 13:21:20 Core 1 2010.11.01 00:00:00 Символ №0 значение=AUDUSD SymbolName(i)函数的所有优点都消失了 vyv 2010.12.06 15:16 #2206 vyv:对开发商的请求。虽然MT5的工作正在沸腾,而且仍在进行修改,但如果能扩大优化通道的数量,那就非常好。据我所知,这么多任务的解决方案是为大约10 000个变体找到的,可能多一点或少一点。在一个处理器上搜索了几个小时,已经找到了最好的变体。MQL5+OP+Multicore测试的多功能性让你看到使用MT5工具可以解决的任务的新视野(如搜索模式)。但麻烦就在这里。你网站上发布的文章有一个遗传算法的例子https://www.mql5.com/ru/articles/55,它花了3^100的正向蛮力来解决100条的搜索问题--嗯,这比LongInt多一点:),而17000次迭代就能找到解决方案。遗传算法可以为比LongInt多得多的变体找到解决方案。而这种限制是完全没有根据的,是过时的。好吧,除了在MT5的这个最后阶段,将很难做到这一点。对开发者有一个非常大的要求,如果不是太困难的话,请使通过的次数至少为2^LongInt(2的幂)。 有人能给我一个答案吗? Igor Volodin 2010.12.06 17:11 #2207 代码。//+------------------------------------------------------------------+ //| testInd.mq5 | //| | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "" #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- int handle1 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); // int handle2 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //абсолютно идентичные параметры if(handle1 == INVALID_HANDLE) { Print("Error Creating Handles for indicators",GetLastError()); } else { Print("Handle1 ="+handle1); } if(handle2 == INVALID_HANDLE) { Print("Error Creating Handles for indicators",GetLastError()); } else { Print("Handle2 ="+handle2); } IndicatorRelease(handle2); handle2 = INVALID_HANDLE; //добавил для "надежности" handle2 = iMA(NULL,0,33,0,MODE_LWMA, PRICE_CLOSE); //другой период if(handle2 == INVALID_HANDLE) { Print("Error Creating Handles for indicators",GetLastError()); } else { Print("Измененный? Handle2 ="+handle2); //все обращения к данным handle2 возвращают данные с handle1 } //--- return(0); } 日志。2010.12.06 18:07:52:52 testInd (EURUSD,H1) 修改了?Handle2 =10 2010.12.06 18:07:52 testInd (EURUSD,H1) Handle2 =10 2010.12.06 18:07:52 testInd (EURUSD,H1) Handle1 =10因此,对handle2的所有数据调用都等同于对handle1的调用,尽管周期改变了。当专家顾问运行时,有可能创建 具有相同特征的指标,这种对一个手柄的优化是合理的,但这种将一个手柄 "粘 "在一个变量上的做法是非常令人讨厌的。P.S. 我已经找到了原因。这个错误是优化到一个手柄号的结果。IndicatorRelease(handle2); //уменьшает счетчик хендлов на единицу и в итоге следующий созданный хэндл(с любой переменной) - опять 10 Alexey Da 2010.12.06 18:39 #2208 Vigor:代码。日志。 2010.12.06 18:07:52 testInd (EURUSD,H1) 修改了?Handle2 =10 2010.12.06 18:07:52 testInd (EURUSD,H1) Handle2 =10 2010.12.06 18:07:52 testInd (EURUSD,H1) Handle1 =10因此,所有对handle2的调用都等于对handle1的调用,尽管周期改变了。在EA的运行过程中,我们不能排除创建具有相同特征的指标,这种对一个手柄的优化是合理的,但这种将一个手柄 "粘 "在一个变量上的做法是非常令人讨厌的。P.S. 我已经找到了原因。这是一个错误--优化到一个手柄号码的后果。你为什么认为这是一个错误? Igor Volodin 2010.12.06 22:16 #2209 alexvd:你为什么认为这是一个错误? 很好。这是一个特点。但是,你应该更清楚地了解一个人。 如果用户从界面上输入MA的周期值,为指标创建句柄并使用指标缓冲区的值,那么在创建了(例如,我在这个表格中的默认设置)2个具有相同特征的指标(它们的句柄存储在对象包装中)后,由于这个特征,他/她会收到第一个指标的句柄编号。 以下是一个可能的事件链。 情况1.它删除了第一个指标(并且程序执行IndicatorRelease);结果是第二个指标不能自动工作--缓冲区复制错误。 情况2。它删除了第二个指示器(程序做IndicatorRelease),手轮计数器减少。第一个人做得很好。它创建了第三个 具有不同周期的指标。它接收处理数+1,即刚刚删除的指标的处理数。最后,最糟糕的是,成功 创建的具有不同 周期的 第三个指标,将第一个 指标的值(仍未删除)提供给缓冲区。 处理号码的胶合功能,导致在删除两个胶合的一个,然后创建新的时,会出现含糊不清的情况。//+------------------------------------------------------------------+ //| testInd.mq5 | //| | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "" #property link "http://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- int handle1 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); // int handle2 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //абсолютно идентичные параметры if(handle1 == INVALID_HANDLE) { Print("Error Creating Handles for indicators",GetLastError()); } else { Print("Handle1 ="+handle1); } if(handle2 == INVALID_HANDLE) { Print("Error Creating Handles for indicators",GetLastError()); } else { Print("Handle2 ="+handle2); } IndicatorRelease(handle2); handle3 = iMA(NULL,0,33,0,MODE_LWMA, PRICE_CLOSE); //другой период if(handle3 == INVALID_HANDLE) { Print("Error Creating Handles for indicators",GetLastError()); } else { Print("Новый handle3 ="+handle3); //все обращения к данным handle3 возвращают данные с handle1 } //--- return(0); } Sergey Chalyshev 2010.12.06 23:16 #2210 vyv: 有人能为我解答吗?这里已经谈过了。https://www.mql5.com/ru/forum/1997/page6/#comment_31644也许把问题移到那里会更好--一个建议。 Оптимизация в Тестере стратегий www.mql5.com из которых ТОЛЬКО 546 ms было затрачено именно на тестирование эксперта. 1...214215216217218219220221222223224225226227228...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这是相同的结果!这些点的输入参数是相同的!"。
请解释。我不明白 "这些点的输入参数是相同的"。根据我对优化器工作原理的理解,每一个通道都对应着一组独特的输入参数。或者你的意思是,当使用遗传算法 时,可能会有这样的情况:一组独特的输入参数可以被优化器处理几次?
...嗯,是的,这正是你所说的。然后发现所有后续的 "来自缓存 "的点都是虚构的,扭曲了优化结果的视觉感知?
很奇怪。这已经是第三次了。图上有两个数值接近的点,但结果中只有一个。
提示:请按要求的值排序,不要忘记显示表格的垂直滚动条。
这个问题会不会得到解决?
这是我第三次谈论这个问题了,但没有任何反应!我想这是我的责任。
顺便说一下,在我看来,如果选择了重新报价的建模,那么这个缓存就不应该被使用。开发人员对此有什么看法?
还有一个错误:当我的遗传算法 超过10496时,图表开始不正确地显示--垂直方向上它的比例正确,你可以理解为找到了更高的结果,但水平方向上它没有更新。
在终端,结果是
测试者的结果。
SymbolName(i)函数的所有优点都消失了
对开发商的请求。虽然MT5的工作正在沸腾,而且仍在进行修改,但如果能扩大优化通道的数量,那就非常好。
据我所知,这么多任务的解决方案是为大约10 000个变体找到的,可能多一点或少一点。在一个处理器上搜索了几个小时,已经找到了最好的变体。
MQL5+OP+Multicore测试的多功能性让你看到使用MT5工具可以解决的任务的新视野(如搜索模式)。
但麻烦就在这里。![](https://c.mql5.com/3/3/6jt95p.JPG)
你网站上发布的文章有一个遗传算法的例子https://www.mql5.com/ru/articles/55,它花了3^100的正向蛮力来解决100条的搜索问题--嗯,这比LongInt多一点:),而17000次迭代就能找到解决方案。遗传算法可以为比LongInt多得多的变体找到解决方案。而这种限制是完全没有根据的,是过时的。好吧,除了在MT5的这个最后阶段,将很难做到这一点。
对开发者有一个非常大的要求,如果不是太困难的话,请使通过的次数至少为2^LongInt(2的幂)。
代码。
日志。
2010.12.06 18:07:52:52 testInd (EURUSD,H1) 修改了?Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle1 =10
因此,对handle2的所有数据调用都等同于对handle1的调用,尽管周期改变了。
当专家顾问运行时,有可能创建 具有相同特征的指标,这种对一个手柄的优化是合理的,但这种将一个手柄 "粘 "在一个变量上的做法是非常令人讨厌的。
P.S. 我已经找到了原因。这个错误是优化到一个手柄号的结果。
IndicatorRelease(handle2); //уменьшает счетчик хендлов на единицу и в итоге следующий созданный хэндл(с любой переменной) - опять 10
代码。
日志。
2010.12.06 18:07:52 testInd (EURUSD,H1) 修改了?Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle1 =10
因此,所有对handle2的调用都等于对handle1的调用,尽管周期改变了。
在EA的运行过程中,我们不能排除创建具有相同特征的指标,这种对一个手柄的优化是合理的,但这种将一个手柄 "粘 "在一个变量上的做法是非常令人讨厌的。
P.S. 我已经找到了原因。这是一个错误--优化到一个手柄号码的后果。
你为什么认为这是一个错误?
你为什么认为这是一个错误?
如果用户从界面上输入MA的周期值,为指标创建句柄并使用指标缓冲区的值,那么在创建了(例如,我在这个表格中的默认设置)2个具有相同特征的指标(它们的句柄存储在对象包装中)后,由于这个特征,他/她会收到第一个指标的句柄编号。
以下是一个可能的事件链。
情况1.它删除了第一个指标(并且程序执行IndicatorRelease);结果是第二个指标不能自动工作--缓冲区复制错误。
情况2。它删除了第二个指示器(程序做IndicatorRelease),手轮计数器减少。第一个人做得很好。它创建了第三个 具有不同周期的指标。它接收处理数+1,即刚刚删除的指标的处理数。最后,最糟糕的是,成功 创建的具有不同 周期的 第三个指标,将第一个 指标的值(仍未删除)提供给缓冲区。
处理号码的胶合功能,导致在删除两个胶合的一个,然后创建新的时,会出现含糊不清的情况。
有人能为我解答吗?
这里已经谈过了。https://www.mql5.com/ru/forum/1997/page6/#comment_31644
也许把问题移到那里会更好--一个建议。