Ошибки, баги, вопросы - страница 3627

 

Почему на демо счетах от MQ значительно увеличился спред?

Интересно, это для разнообразия, или изменилось нечто большее?

 

Вопрос к разработчикам. Запрещает ли директива export инлайн функции, если #property library не используется?

void Func() export
{
  static int i = 0;
  
  Print(i++);
}

void OnTick()
{
  Func();
}
Учебник по MQL5: Расширенные средства языка / Разработка и подключение библиотек двоичных форматов / Создание ex5-библиотек и export функций
Учебник по MQL5: Расширенные средства языка / Разработка и подключение библиотек двоичных форматов / Создание ex5-библиотек и export функций
  • www.mql5.com
Для описания библиотеки следует добавить в исходный код главного (компилируемого) модуля директиву #property library (обычно, в начало файла)...
 
Aleksey Vyazmikin #:

Почему на демо счетах от MQ значительно увеличился спред?

Подтверждаю изменения (желтый - средний спред за пять прошедших дней).

Спред заметно вырос с 24.03.2025 12:11.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2025.03.26 05:30

Вопрос к разработчикам. Запрещает ли директива export инлайн функции, если #property library не используется?

void Func() export
{
  static int i = 0;
  
  Print(i++);
}

void OnTick()
{
  Func();
}

Как в функции определить, что она вызвана из ex5-библиотеки (#property library + #import) или напрямую (исходник включен)?

Или есть способ узнать, что код компилируется в EX5-библиотеку, а не в EX5-программу?
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
  • www.mql5.com
Константы, для получения информации о выполняющейся mql5-программе, перечислены в ENUM_MQL_INFO_INTEGER и ENUM_MQL_INFO_STRING. Для функции...
 
Andrei Iakovlev #:

Попробуйте ChartRedraw() сразу после ChartSetSymbolPeriod().

Толку нет. Всё равно не будет работать.

Специально записал скринкаст еще раз показать.

Реальный баг МТ4.

 

Igor Zakharev #:

В МТ4 судя по всему не исправна функция ChartSetSymbolPeriod()


Код в OnInit() игнорирует и не меняет ТФ чарта (в переменную res отдает true - то-есть что выполнена успешно).


Видео пруф на тестовом советнике. Притом и с периодом подставленым может не работать. Как-то странно это.

 
Igor Zakharev #:

Толку нет. Всё равно не будет работать.

Специально записал скринкаст еще раз показать.

Реальный баг МТ4.

 


Вы создаете не явную рекурсию:

робот запускается и вызывает ОнИнит

Далее вызывается  ChartSetSymbolPeriod() 

В справке четко написано - Изменение фин инструмента или периода графика вызовет переинициализацию эксперта.

То есть после вызова  ChartSetSymbolPeriod() эксперт перезапускается и снова в ОнИнит вызывает ChartSetSymbolPeriod() и так до бесконечности.

 
Vladimir Pastushak #:


Вы создаете не явную рекурсию:

робот запускается и вызывает ОнИнит

Далее вызывается  ChartSetSymbolPeriod() 

В справке четко написано - Изменение фин инструмента или периода графика выховет переинициализацию

То есть после вызова  ChartSetSymbolPeriod() эксперт перезапускается и снова вызывает ChartSetSymbolPeriod() и так до бесконечности.

Спасибо за ответ.

Да, ок, это понятно. Но там же брейкпоинт стоит в коде, и после его прохождения ТФ чарта не меняется. То-есть суть не в зацикливании(оно прерывается точкой останова), суть в том, что происходит на точке останова. По идее на этот же брейкпоинт возврат будет когда ТФ чарта будет изменен. Но этого не происходит.

Посмотрите на видео - DeInit() не срабатывает после той функции, это баг МТ4.

 
Igor Zakharev #:

Спасибо за ответ.

Да, ок, это понятно. Но там же брейкпоинт стоит в коде, и после его прохождения ТФ чарта не меняется. То-есть суть не в зацикливании(оно прерывается точкой останова), суть в том, что происходит на точке останова. По идее на этот же брейкпоинт возврат будет когда ТФ чарта будет изменен. Но этого не происходит.

Я не пользуюсь Дебаггером Профилировщиком. 

 
Igor Zakharev #:

Спасибо за ответ.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   ::Print(" >>> OnInit");
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   ChartSetSymbolPeriod(0, _Symbol, PERIOD_M1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ::Print(" >>> OnDeinit");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+


Все работает правильно как и должно:


2025.03.27 23:13:34.862 Test GBPUSD,M1: initialized

2025.03.27 23:13:34.862 Test GBPUSD,M1:  >>> OnInit

2025.03.27 23:13:33.914 Test GBPUSD,H1:  >>> OnDeinit

2025.03.27 23:13:33.914 Test GBPUSD,H1: uninit reason 3

2025.03.27 23:13:23.142 Test GBPUSD,H1: initialized

2025.03.27 23:13:23.142 Test GBPUSD,H1:  >>> OnInit

2025.03.27 23:13:21.080 Expert Test GBPUSD,H1: loaded successfully


 
Vladimir Pastushak #:


Все работает правильно как и должно:


2025.03.27 23:13:34.862 Test GBPUSD,M1: initialized

2025.03.27 23:13:34.862 Test GBPUSD,M1:  >>> OnInit

2025.03.27 23:13:33.914 Test GBPUSD,H1:  >>> OnDeinit

2025.03.27 23:13:33.914 Test GBPUSD,H1: uninit reason 3

2025.03.27 23:13:23.142 Test GBPUSD,H1: initialized

2025.03.27 23:13:23.142 Test GBPUSD,H1:  >>> OnInit

2025.03.27 23:13:21.080 Expert Test GBPUSD,H1: loaded successfully


Но ТФ и с вашим кодом на отладке всё равно не меняет, баг остается. Речь же идет об отладчике в примере на всех видео :) Без отладчика конечно иначе - если просто на график накинуть. Нужно что бы отладчик поправили,  ChartSetSymbolPeriod() именно в том контексте не исправно работает.

Может заметят это и исправят.