Скачать MetaTrader 5

Что ни гроб - то огурчик...

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
George
505
George  

Уважаемые господа разработчики, попытаюсь снова привлечь Ваше внимание к очередному косячку (ибо вопросы 1 и 2 так и остались висеть... зато как висят!).

Итак, документация MQL4. Проходим по ссылке и внимательно читаем подраздел Загрузка и выгрузка экспертов.

Терминал  

Тестовый эксперт. Простейший код: 

//+------------------------------------------------------------------+
//|                                         exp_test_init_deinit.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Print("<OnInit>");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Print("<OnDeinit>");
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

1. Кидаем эксперт на график:

 

пока не нажали ОК - OnInit() не сработал. Полет нормальный.

2. Жмем ОК:

 

все отлично. Функция OnInit() выполнена. 

3. Удаляем эксперт с графика:

 

ну просто душа радуется! (оказалось, радоваться рано, как ни странно...)

4. Снова устанавливаем эксперт на этот же график и, не удаляя эксперт, переключаем таймфрейм графика с М1 на H1

 

УПС! Душа болит и сердце плачет:

как видно на скриншоте, при смене таймфрейма в соответствием с документацией был вызван обработчик OnDeinit(), который, как мне думается, выполнил свою функцию (ибо напечатано <OnDeinit>)

а вот обработчик OnInit() после этого вызван не был, чему скриншот - объективное доказательство.

5. Удаляем эксперт с графика:

 

Как видим, эксперт, так и не инициализировавшись на Н1, под стук колес моментом испарился

6.  Снова устанавливаем эксперт на график (см. пп 1 и 2), закрываем терминал, не открепляя эксперт с графика, снова открываем терминал и:

 

печалька... не инициализировался. А в документации все не так...

Подняв руку вверх и произнеся волшебное заклинание "Хусим", удаляем эксперт с графика: 

 

И никаких обработчиков событий не было.

Может подскажете - что не так делал? 

Victor Nikolaev
Модератор
15412
Victor Nikolaev  
Попробуйте добавить переменную на глобальном уровне и проинициализируйте ее в инит. Изменение значение позволит точно определить что и как
George
505
George  

Спасибо, Виктор, завтра утром попробую.

Забыл ко всему вышеизложенному добавить: краш-тест проводился на машине с ОС XP SP2. На выходных буду мучить железо с W7x64. Посмотрим, а вдруг...

Mislaid
610
Mislaid  
Vinin:
Попробуйте добавить переменную на глобальном уровне и проинициализируйте ее в инит. Изменение значение позволит точно определить что и как
интересовался такой проблемой. При отсутствии тиков, эксперт, в отличии от индикатора, инициализируется только ручками.
George
505
George  
Mislaid:
интересовался такой проблемой. При отсутствии тиков, эксперт, в отличии от индикатора, инициализируется только ручками.
Тогда почему при первоначальной загрузке эксперта на график отключенного от брокера терминала никаких тиков не требуется? Я так понимаю, что для тиков есть обработчик OnTick(), а OnInit() предназначен для инициализации, которой тики не должны быть нужны. Я такого в документации не встречал
Mislaid
610
Mislaid  
PPC:
Тогда почему при первоначальной загрузке эксперта на график отключенного от брокера терминала никаких тиков не требуется? Я так понимаю, что для тиков есть обработчик OnTick(), а OnInit() предназначен для инициализации, которой тики не должны быть нужны. Я такого в документации не встречал

Такой факт. Недокументированное поведение. Не в первый раз это было.

У меня есть эксперт, в котором есть OnTick() и OnTimer(), а без тиков эксперт не инициализируется. А, вот, инициализация индикатора, происходит.

Alexey Da
Модератор
6623
Alexey Da  

Вот не представляется возможным воспроизвести описанное вами поведение.

 Инит и деинит отрабатывают четко. 

 Возможно есть какие то особенности?

2015.01.22 12:37:55.413 Expert Empty EURUSD,M1: loaded successfully
2015.01.22 12:37:55.520 Empty EURUSD,M1: OnInit
2015.01.22 12:37:55.520 Empty EURUSD,M1: initialized
2015.01.22 12:38:04.703 Empty EURUSD,M1: uninit reason 3
2015.01.22 12:38:04.703 Empty EURUSD,M1: OnDeinit
2015.01.22 12:38:04.932 Empty EURUSD,M5: OnInit
2015.01.22 12:38:04.932 Empty EURUSD,M5: initialized
2015.01.22 12:38:09.792 Empty EURUSD,M5: uninit reason 4
2015.01.22 12:38:09.792 Empty EURUSD,M5: OnDeinit
2015.01.22 12:38:09.819 Expert Empty EURUSD,M5: removed
2015.01.22 12:38:17.277 Expert Empty EURUSD,M1: loaded successfully
2015.01.22 12:38:21.411 Empty EURUSD,M1: OnInit
2015.01.22 12:38:21.411 Empty EURUSD,M1: initialized
2015.01.22 12:38:29.232 Empty EURUSD,M1: uninit reason 3
2015.01.22 12:38:29.232 Empty EURUSD,M1: OnDeinit
2015.01.22 12:38:29.430 Empty EURUSD,M5: OnInit
2015.01.22 12:38:29.430 Empty EURUSD,M5: initialized
2015.01.22 12:38:37.390 Empty EURUSD,M5: uninit reason 1
2015.01.22 12:38:37.390 Empty EURUSD,M5: OnDeinit
2015.01.22 12:38:37.419 Expert Empty EURUSD,M5: removed
Sergey Gridnev
5283
Sergey Gridnev  
alexvd:


 Возможно есть какие то особенности?

 

А тут не они https://www.mql5.com/ru/forum/154545 

George
505
George  
alexvd:

Вот не представляется возможным воспроизвести описанное вами поведение.

 Инит и деинит отрабатывают четко. 

 Возможно есть какие то особенности?

OC WinXP SP2. На момент теста терминал не был подключен к брокеру. Почему вскочил вопрос - отвечу: советник (естественно, не тот что в 1 посте) в связке с индикатором. При выключении терминала и последующем его включении (индюк и сов не удалялись с графика) отметил, что индюк не сигнализирует о присутствии сова на графике. Вот отсюда весь сыр-бор. Ну и последующее тестирование примитивного сова с прилагающимися  объективными скриншотами (там видно время выполнения и результаты - жмите на картинки: они будут на весь экран) подтвердило это грустное явление.

Вчера вечером на ОС Win7x64 кидал связку индюка и сова на терминал, подключенный к брокеру - т.е. тики шли регулярно. При перезагрузке терминала таких косяков не наблюдалось. Вероятно, к этому господину 

Mislaid:

Такой факт. Недокументированное поведение. Не в первый раз это было.

У меня есть эксперт, в котором есть OnTick() и OnTimer(), а без тиков эксперт не инициализируется. А, вот, инициализация индикатора, происходит.

надо прислушаться. Эксперимент продолжается...
George
505
George  
На ОС Win7x64  без тиков поведение эксперта в терминале аналогично OC WinXP SP2 (см. первый пост). Так что ОС тут ни при чем и г-н Mislaid оказался абсолютно прав. Господа разработчики, копайте глубже! Заодно  1 и 2 покопайте, ибо вопросы продолжают оставаться без ответа.
Slava
Модератор
6995
Slava  
PPC:
На ОС Win7x64  без тиков поведение эксперта в терминале аналогично OC WinXP SP2 (см. первый пост). Так что ОС тут ни при чем и г-н Mislaid оказался абсолютно прав. Господа разработчики, копайте глубже! Заодно  1 и 2 покопайте, ибо вопросы продолжают оставаться без ответа.
С каким торговым сервером Вы работаете?
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий