错误、漏洞、问题 - 页 2971

 

这对静态变量来说是正确的行为吗?

当切换时间框架或改变参数时,它们的价值不会改变。

int OnInit()
  {
   static int my_int=4444;
   Print(my_int);
   my_int=9999;
   return(INIT_SUCCEEDED);
  }

启动EA并切换时间框架后的结果。

2021.02.24 16:23:27.999 Test1 (EURUSD,M1)       4444
2021.02.24 16:23:29.913 Test1 (EURUSD,M5)       9999
静态变量

这是来自帮助。

静态变量在程序执行时就存在,并在调用专门的函数OnInit() 之前被初始化一次。

因此,在每次调用OnInit()之前有一次,或者在启动之前有一次,尽管重新初始化更像是第二次运行。

这种情况也发生在测试器中吗?

全局变量的行为也是如此。

 

当切换时间框架时,专家顾问并没有重新启动,而是继续工作。

https://www.mql5.com/ru/docs/runtime/running

При смене символа или таймфрейма графика, к которому эксперт прикреплен, выгрузка и загрузка эксперта не производится. При этом последовательно вызываются обработчики OnDeinit() на старом символе/таймфрейме и OnInit() на новом символе/таймфрейме (если они есть), значения глобальных переменных и статических переменных не сбрасываются. Все события, поступившие для эксперта до завершения инициализации (функции OnInit()), пропускаются.


Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Выполнение программ - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ilyas:

当切换时间框架时,专家顾问并没有重新启动,而是继续工作。

https://www.mql5.com/ru/docs/runtime/running

我注意到一个以前在MetaTrader中没有的奇特现象。当我从图表中删除一个专家顾问时(使用其上下文菜单命令),图表在它之后关闭。以前,在删除一个专家顾问后,图表没有关闭。

 
Mihail Matkovskij:

我注意到一个以前在MetaTrader中没有的奇特现象。当我从图表中删除一个专家顾问时(使用其上下文菜单命令),图表在它之后关闭。以前,在删除专家顾问后,图表不会被关闭。

它可以在EA本身编程,用另一个EA检查...

 

在win7系统中,当对历史数据进行调试时,添加到观察中的变量不显示它们的值。当对真实数据进行调试时,一切正常。

事实证明,在添加变量时,它们不会立即显示在窗口中,而是在下次启动调试时才出现,但它们的值已经<未执行>。

 
Vladimir Pastushak:

它可能是在EA本身编程的,用另一个EA检查...

的确,把标准的EA扔在了图表上。在没有任何问题的情况下删除了它。试图在我的专家顾问的来源中找到ChartClose。我没有在任何地方找到它。从一开始,我就不打算在删除专家顾问时关闭图表。我使用标准的UI元素,如CAppDialog。也许,图表的关闭是在标准班 的某个地方写的......

 
Mihail Matkovskij:

的确,在图表上扔了一个标准的EA。在没有任何问题的情况下删除了它。试图在我的专家顾问的来源中找到ChartClose。我没有在任何地方找到它。我最初的想法是在删除专家顾问时不关闭图表。我使用标准的UI元素,如CAppDialog。也许,图表的关闭是在标准班 的某个地方写的......

找到了。CAppDialog类有一个CChart m_chart字段。

class CAppDialog : public CDialog
  {
...
protected:
   CChart            m_chart;               // object to access chart

CAppDialog被删除时(它的后代在我的Expert Advisor中使用),m_chart 析构器可能会关闭图表

//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CChart::~CChart(void)
  {
   if(m_chart_id!=-1)
      Close();
  }
//+------------------------------------------------------------------+
//| Chart close                                                      |
//+------------------------------------------------------------------+
void CChart::Close(void)
  {
   if(m_chart_id!=-1)
     {
      ChartClose(m_chart_id);
      m_chart_id=-1;
     }
  }

不幸的是,这个过程不能用调试器来跟踪。但在翻阅了CAppDialog 以及CChart 的源代码后 一切都变得清晰了。我提请开发者注意这一点。

 
Mihail Matkovskij:

找到了。CAppDialog类有CChart m_chart字段。

CAppDialog被移除(它的后代CDialog 在我的Expert Advisor中被使用),m_chart 析构器可能会关闭图表。

不幸的是,这个过程不能用调试器来跟踪。但在翻阅了CAppDialog 以及CChart 的源代码后 一切都变得清晰了。我想提请开发商注意这一点。

void CAppDialog::Destroy(const int reason)

脱离了图表,除此之外。

 

你能告诉我为什么SignalBaseTotal() 总是返回1000。

mql5.com的信号服务有一千多个广播信号,但终端只有一千多个可用。为什么?

难道说这一千多人中有一套信号,而一小时内就会有所不同吗?
Документация по MQL5: Управление сигналами / SignalBaseTotal
Документация по MQL5: Управление сигналами / SignalBaseTotal
  • www.mql5.com
SignalBaseTotal - Управление сигналами - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alain Verleyen :

当从文件保存/加载时,派生结构出现错误,没有添加新数据。

@Ilyas 你会解决这个问题吗?