Почему пропадают глобальные переменные?

 
Не знаю относится ли это к делу, но может эта информация не будет лишней. Переношу из МТ4 в МТ5 очень большой мультивалютный самообучаемый советник, используя библиотеку MT4Orders.mqh. Советник торгует всеми доступными у брокера парами. Теми, которыми научился торговать в "+", торгует совершая реальные сделки, а теми, что нет - торгует виртуально (учится торговать). Опыт (experience) советника хранится в глобальных переменных. В коде советника нет строк  

GlobalVariablesDelete(ИмяГлобальнойОпытаСоветника). На всякий случай посмотрел в библиотеке  MT4Orders.mqh, здесь тоже нет ни GlobalVariablesDeleteAll, ни GlobalVariablesDelete.

Запускаю советник из MetaEditor кнопкой F5, глобальные созданы, советник торгует, завершаю работу. Глобальные исчезают.  В логах никакой информации об удалении глобальных нет. Где я могу найти сведения об удалении моих глобальных? Где-то это наверное прописано? в какой момент, кто удаляет, почему удаляет?

 
Leonids Drics:
Не знаю относится ли это к делу, но может эта информация не будет лишней. Переношу из МТ4 в МТ5 очень большой мультивалютный самообучаемый советник, используя библиотеку MT4Orders.mqh. Советник торгует всеми доступными у брокера парами. Теми, которыми научился торговать в "+", торгует совершая реальные сделки, а теми, что нет - торгует виртуально (учится торговать). Опыт (experience) советника хранится в глобальных переменных. В коде советника нет строк  GlobalVariablesDeleteAll

GlobalVariablesDelete(ИмяГлобальнойОпытаСоветника). На всякий случай посмотрел в библиотеке  MT4Orders.mqh, здесь тоже нет ни GlobalVariablesDeleteAll, ни GlobalVariablesDelete.

Запускаю советник из MetaEditor кнопкой F5, глобальные созданы, советник торгует, завершаю работу. Глобальные исчезают.  В логах никакой информации об удалении глобальных нет. Где я могу найти сведения об удалении моих глобальных? Где-то это наверное прописано? в какой момент, кто удаляет, почему удаляет?

так вроде тестер мт5 - это отдельная от терминала среда (песочница), используйте запись в файл как вариант
 
Aleksey Semenov #:
так вроде тестер мт5 - это отдельная от терминала среда (песочница), используйте запись в файл как вариант

НЕ в тестере, а по F5 - "Отладка на реальных данных". Файл - не вариант, мой вопрос про глобальные.

 
Leonids Drics #:

НЕ в тестере, а по F5 - "Отладка на реальных данных". Файл - не вариант, мой вопрос про глобальные.

если трактовать прямо то - Для написания программ на MQL5 в составе торговой платформы предоставляется среда разработки MetaEditor со всеми современными инструментами для написания кода, включающими в себя шаблоны, сниппеты, отладку, профилировку, автозавершение и встроенное версионное хранилище MQL5 Storage.

+ есть целых 2 состояния по которым терминал видит что программа запущена в режиме профилировки или отладки-дебага, а значит должно запускаться изолированно в песочнице, исходя из логики, в мт4 глоб переменные с тестером общие потому что среда общая

MQL_PROFILER

MQL_DEBUG

Добро пожаловать в алготрейдинг - Справка по MetaEditor
  • www.metatrader5.com
MetaEditor — это современная среда разработки торговых стратегий, интегрированная с платформой MetaTrader. С помощью MetaEditor можно создавать...
 
Aleksey Semenov #:

... а значит должно запускаться изолированно в песочнице, исходя из логики, в мт4 глоб переменные с тестером общие потому что среда общая

MQL_PROFILER

MQL_DEBUG

Не очень понял вашу логику, почему он должен запускаться в песочнице, но: Физически советник запускается не изолированно в тестере (песочнице) а на платформе. Совершает реальные сделки, а не виртуальные а тестере, генерирует реальную прибыль/убыток.  Проверяю: папка \Tester\logs пустая, а папки \MQL5\Logs и \MQL5\Files заполнены результатами жизнедеятельности программы. Вопрос остается открытым: Что надо сделать, чтобы глобальные не пропадали? Как увидеть, в какой момент они пропадают?

 

Здравствуйте, решил попробовать воспроизвести описанную ситуацию. При запуске по F5 - "Отладка на реальных данных" такого эксперта:

int OnInit() {
  GlobalVariableSet("GB_1", 13);
  return(INIT_SUCCEEDED);
}

глобальная переменная создавалась и оставалась после удаления эксперта или после остановки отладки. Поэтому, может, все-таки где-то есть операция очистки глобальных переменных?

Можете попробовать повторить такой эксперимент у себя - будет ли у вас пропадать глобальная переменная GB_1?

 
Leonids Drics #:

Не очень понял вашу логику, почему он должен запускаться в песочнице, но: Физически советник запускается не изолированно в тестере (песочнице) а на платформе. Совершает реальные сделки, а не виртуальные а тестере, генерирует реальную прибыль/убыток.  Проверяю: папка \Tester\logs пустая, а папки \MQL5\Logs и \MQL5\Files заполнены результатами жизнедеятельности программы. Вопрос остается открытым: Что надо сделать, чтобы глобальные не пропадали? Как увидеть, в какой момент они пропадают?

Реальные сделки совершаются за реальные деньги. Ваша программа работает в песочнице. 

Глобальные переменные терминала на то так и называются. Если их не удалить после песочницы, то они напакостят в реале. 

А так, вообще, они удаляются через 30 суток с момента крайнего обращения. 

 
Yuriy Bykov #:

Здравствуйте, решил попробовать воспроизвести описанную ситуацию. При запуске по F5 - "Отладка на реальных данных" такого эксперта:

глобальная переменная создавалась и оставалась после удаления эксперта или после остановки отладки. Поэтому, может, все-таки где-то есть операция очистки глобальных переменных?

Можете попробовать повторить такой эксперимент у себя - будет ли у вас пропадать глобальная переменная GB_1?

оп, да, всё остаётся, проверил на открывшемся рынке, моё утверждение не верно, при запуске через F5 глоб переменные остаются, но только если в реальном времени на реальных данных на живом рынке, если на исторических запускать то запускается через тестер, а значит глоб переменные не сохранятся
 
Алексей Тарабанов #:

А так, вообще, они удаляются через 30 суток с момента крайнего обращения. 

Это когда? 

Какое обращение называют "крайним"?

Где у обращений "край"?

Мне казалось, с момента последнего обращения... Нет? 


 
Leonids Drics:

Запускаю советник из MetaEditor кнопкой F5, глобальные созданы, советник торгует, завершаю работу. Глобальные исчезают.  В логах никакой информации об удалении глобальных нет. Где я могу найти сведения об удалении моих глобальных? Где-то это наверное прописано? в какой момент, кто удаляет, почему удаляет?

Пара уточнений. Речь идет о глобальных переменных клиентского терминала,  доступ к которым осуществляется при помощи функций GlobalVariable...(). Также, из Справки: "Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются. Обращением к глобальной переменной считается не только установка нового значения, но и чтение значения глобальной переменной."

Тестером стратегий не пользуюсь, окно тестера закрыто. Торговля на клиентском терминале из редактора на реальных данных, а не из ex5, чтобы можно было в любой момент программу остановить и посмотреть, что там происходит. Следов жизнедеятельности программы в папках тестера нет, все следы только в папках терминала. Т.е. очевидно, что торговля НЕ в песочнице.

Первый раз заметил так. Запускал неоднократно, никаких претензий к глобальным не было.  2-3 дня (гораздо меньше 4 недель) программу не трогал. Вернулся - глобальных нет. На форум за помощью обратился, когда такое случилось во второй раз

Сегодня запускал, выгружал, пока глобальные не пропали.

Документация по MQL5: Глобальные переменные терминала
Документация по MQL5: Глобальные переменные терминала
  • www.mql5.com
Глобальные переменные терминала - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Georgiy Merts #:

Это когда? 

Какое обращение называют "крайним"?

Где у обращений "край"?

Мне казалось, с момента последнего обращения... Нет? 


Авиационная привычка. "Последний вылет" - звучит грустно, поэтому принято говорить "крайний".