错误、漏洞、问题 - 页 2588

 
Aleksey Vyazmikin:

我还是不明白--你是否有需要更深入计算的预测器?我确实需要一个--日线图上的MA :)我只是提前一年进行测试,在该日期之前的交易可能会被禁止...

是的--历史的深度需要超过一年的时间。解决办法已经被找到了。现在我也要做一个3年的提前发射,并跳过他们。
 
KB并没有通过代码。它给出了这些错误
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,34) : error 279: 'ToNull' - call non-const method for constant object
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,34) : error 279: 'ToNull' - call non-const method for constant object
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(202,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(202,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(214,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(214,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(225,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(225,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(416,33) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(416,35) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(435,33) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(435,35) : error 351: 'ToNull' - access to non-static member or function

请更新KB编译器。

 
Vladimir Simakov:
等我放假回来,如果不是太麻烦的话,我会研究这个问题。但从逻辑上讲,这个错误可能是在你的代码中,而不是在mql中。顺便说一句,只是为了好玩,如果你有一个库,与什么编码一起工作呢?你确定是utf-16,但如果是utf-8呢,毕竟是最常见的。

我还没有检查过,谢谢你的提示。我将朝着这个方向挖掘。
这个库是为Ocean准备的,我所使用的类是用W来选择的,即Unicode。

按照我对编码的理解。

const char *Utf8;
const char *Ansi;
const wchar_t *Utf16;
const wchar_t *Utf32。

utf-16意味着类型为wchar_t,读取字符串的库函数返回const wchar_t*
从这一点可以看出,该函数返回一个指向utf-16编码的字符串的指针
项目 属性中,Unicode字符支持也被选中。
mql文档说,字符串在Unicode中工作。

 

我又在优化了,我不确定是否能测试这段代码的执行速度。

void OnStart()
{  datetime m_stoptime = 0;
//1.
   if(m_stoptime < TimeCurrent())
   {
      //расчеты   
   }


//2.
   MqlTick last_tick;
   if(SymbolInfoTick(_Symbol, last_tick))
   {  if(m_stoptime < last_tick.time) 
      {
         //расчеты
      }
   }

}

我怀疑变体2会更快?

如果是这样,哪里会有陷阱 - 我在OnTick()中使用 - 在优化器中搜索交易时间,寻找优化代码的方法。


ZS:我可以问如何检查速度选项1和2,很有可能编译器会优化可执行代码,测试将不正确 - 所以我问

 
Igor Makanu:

我可以问如何在速度方面检查变体1和2,有一个很大的可能性是,编译器优化了可执行代码,测试将不正确 - 所以我问

对1和2分别进行通常的测试并比较时间?)

如果时间可以忽略不计,用变体1和变体2运行同样的优化。

 
Igor Makanu:

HH:我可以问如何测试变体1和2的速度,很有可能编译器会优化可执行代码,测试不会正确 - 这就是我问的原因

https://www.mql5.com/ru/code/18804

TesterBenchmark
TesterBenchmark
  • www.mql5.com
При написании разных версий кода может возникнуть необходимость измерения влияния их на общую производительность советника в тестере. Это позволяет не только понять, насколько оптимален написанный код по сравнению с другим, но и дает предпосылки к будущей быстрой оптимизации советника. Такой подход позволяет выявить "бутылочное горлышко" в...
 
Igor Makanu:

我又在优化了,我不确定是否能测试这段代码的执行速度。

我怀疑变体2的运行速度会更快?

如果是这样,哪里会有陷阱 - 我在OnTick()中使用 - 在优化器中找到交易时间,寻找优化代码的方法。


SZZ:我可以问如何检查速度选项1和2,很有可能编译器会优化可执行代码,测试将不正确 - 所以我问

在调试模式下检查。编译器不应该在那里进行优化,虽然我不知道现实中是怎样的。
 

关于ArrayResize 的问题。我一次为几个千兆字节做了储备。然后我逐渐增加尺寸,这比最初的储备量要少。

为什么TaskManager在尺寸增加时显示内存消耗增加?

 
fxsaber:

关于ArrayResize的问题。我一次为几个千兆字节做了储备。然后我逐渐增加尺寸,这比最初的储备量要少。

为什么TaskManager在尺寸增加时显示内存消耗增加?

因为除了metatrader,还有Windows操作系统,它最终决定了几十个进程(顺便说一下,每个进程默认有4GB的地址空间)中的哪一个真正应该被分配RAM(你有多少RAM?)
 
Andrey Khatimlianskii:

对1和2分别进行正常测试并比较时间?)

如果时间可以忽略不计,用变体1和变体2运行同样的优化。

我是不是做错了什么,还是看不出有什么不同,单次运行的结果在0.1秒左右浮动。