错误、漏洞、问题 - 页 2556

 
Igor Makanu:

在这里,@Vict 帮助我们通过宏替换的方式,使退出操作系统的异常https://www.mql5.com/ru/forum/318246/page10#comment_12651045

,是一个普遍可行的解决方案,但...但它看起来令人毛骨悚然,令人厌恶!)))

这真是一团糟...把返回包在一个宏里--你必须知道很多变态的东西 ) 之后如何处理这样的代码......你至少应该让宏的名字更有描述性,如TRY_OR_RETURN。
 
Alexey Navoykov:
这真的是很可怕的事情。 你必须知道很多变态的东西才能把返回包在一个宏里 :) 那么如何处理这样的代码......我们至少应该让宏的名字更有描述性--TRY_OR_RETURN,等等。

)))

我看到了它的样子,但没有使用它,我是用老式的方法写的if(!myfunc()) return;在OnTick()中--代码中都是ifs ...看起来很可爱,也很有趣 ))))

 

关于交易、自动交易系统和交易策略测试的论坛

新版MetaTrader 5 build 2085:与Python的整合和策略测试器的大规模改进

Andrey Barinov, 2019.09.06 06:25

你还能解释一下为什么现在这段代码中会有一个警告吗?

这些方法有不同的特征...

class A
  {
   public:
                     A(void) {}
                    ~A(void) {}
      //===============
      void           Test(void) {}
      //===============
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+  
class B : public A
  {
   public:
                     B(void) {}
                    ~B (void) {}
      //===============
      void           Test(int a) {}
      //===============
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   B b;

   b.Test(); //deprecated behavior, hidden method calling will be disabled in a future MQL compiler versions
   b.Test(5);
//---
   return(INIT_SUCCEEDED);
  }

 

关于交易、自动交易系统和交易策略测试的论坛

新版MetaTrader 5 build 2085:与Python的整合和策略测试器的大规模改进

Andrey Barinov, 2019.09.06 06:11

在build 2136中打破了typename()。

请把它修回来。

enum eTest
  {
   TEST
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Alert(typename(eTest)); // eTest::eTest а правильно (и раньше так было) eTest
//---
   return(INIT_SUCCEEDED);
  }

类型名


 
@Ilyas

这个指标使系统崩溃。
而且随着屏幕分辨率的改变和像素的闪烁,必须重新启动电脑。
此外,如果你不调用看似无害的函数 Crash(),你就不会崩溃。
转载如下。

  • 运行指标
  • 开始改变时间框架,直到出现一些滞后现象
  • 之后,尝试最小化MT5



每次玩这个都会崩溃(6-8次)。

附加的文件:
AnyTF.mq5  10 kb
iCanvas.mqh  21 kb
 
它在LTSC上没有崩溃,记录错误:MemoryException 4424265936字节不可用,0 heapmin结果

它确实崩溃了,在又换了几个TF后,系统才勉强启动,启动轮转了100圈,以为不能启动,最好不要检查)
 
Fast235:
它在LTSC上没有崩溃,日志中的错误如下:MemoryException 4424265936字节不可用,0 heapmin结果

我又换了几个TF后还是崩溃了,系统只是勉强启动,加载轮转了100圈,我以为它不会启动,最好不要检查)

是的,崩溃是非常困难的。最好不要冒任何风险。
当然,这都是关于记忆。
如果你像这样清理内存。

int OnInit()
  {
   ChartSetInteger(0,CHART_FOREGROUND,false);
   if(erase)
      ChartSetInteger(0,CHART_SHOW,false);
   Canvas.Erase();
   Canvas.Comm("Идет загрузка всех тиков. Подождите пожалуйста");
   Canvas.Update();
   N=CopyTicks(_Symbol,ticks,COPY_TICKS_ALL,(TimeCurrent()-Weeks*7*24*60*60)*1000,INT_MAX);
   Print("Скачено "+string(N)+" тиков");
   if(N>0) N=CalculateNewTF(ticks,bars,TF);
   ArrayFree(ticks);
   Print("Сформировано "+string(N)+" баров");
   if(N>0) ShowBars(bars);
   Crash();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason) 
  {
    ArrayFree(bars); 
    if(erase) ChartSetInteger(0,CHART_SHOW,true); 
  }

它也不会崩溃。至少它没有发生在我身上。
但是,当TF被改变时,数组 必须被自动清理!

而且我不明白Crash()函数没有它有什么用,因为它只读取指标的信息。
也许,在改变TF时,这个函数的执行会减慢OnDeinit的速度,这就是为什么MT5没有时间清除内存。
我们在异步OnDeinit方面的问题已经有很长时间了。这不是好事!系统不能因为异步而崩溃...

 

为什么当你用指标滚动图表时,处理器以100%的速度加载核心?

毕竟,指标已经计算和绘制好了,按照这个想法,只需要从记忆中加载就可以了。

 
Aleksey Vyazmikin:

为什么当你用指标滚动图表时,处理器以100%的速度加载核心?

毕竟,指标的计算和绘制,根据想法,只有从内存中的负载应该是。

渲染图表时的CPU负载直接取决于显卡性能。

在显卡较弱的旧笔记本电脑上,或者在没有显卡/驱动器的服务器上,不可避免地会出现CPU负载的瞬间但短暂的飙升。

而CPU本身需要更加强大,以便毫无痕迹地吃下增加的请求。
 
Renat Fatkhullin:

渲染图表时的CPU负载与显卡性能直接相关。

在有弱卡的旧笔记本电脑上,或者在没有显卡/驱动器的服务器上,不可避免地会出现CPU负载的立即但短暂的跳跃。

而CPU本身也需要更强大的功能,以无声无息地吃掉增加的需求。

我指的是FX-8350处理器和Radeon HD 7950显卡。我没有感觉到显卡是由MT5加载的。