Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Авторизуйся на MQL5.community с помощью OpenID. Это удобно!
utadrak
56
utadrak 2012.10.11 21:38 

Добрый день!


Обнаружил такую проблему.

1. Имеется советник с внешним параметром и какая-либо статическая переменная в теле какой-либо подпрограммы.

2. Статическая переменная в подпрограмме изменяется.

3. После этого изменяется параметр советника.

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


Кто сталкивался - есть ли способы лечения?

PS. Это баг или фича? :-)

Файлы:
Алексей Тарабанов
7220
Алексей Тарабанов 2012.10.11 21:45  
uts:

Добрый день!


Обнаружил такую проблему.

1. Имеется советник с внешним параметром и какая-либо статическая переменная в теле какой-либо подпрограммы.

2. Статическая переменная в подпрограмме изменяется.

3. После этого изменяется параметр советника.

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


Кто сталкивался - есть ли способы лечения?

PS. Это баг или фича? :-)


Любой баг, это - фича :)

Я из-за этого стал внутренние статические переменные делать глобальными(не все, конечно) . И функция ReInit() у меня теперь присутствует,- часть init, которая исполняется при необходимости "рестарта" start(каламбур)

Алексей Тарабанов
7220
Алексей Тарабанов 2012.10.11 21:53  

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

Лекарство: Ручная инициализация, в том числе - ВСЕХ массивов(они статичны).

utadrak
56
utadrak 2012.10.11 22:44  
tara:

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

Лекарство: Ручная инициализация, в том числе - ВСЕХ массивов(они статичны).


Стал пробовать по Вашей наводке и обнаружил, что глобальные параметры тоже не переиницализирцются при смене внешнего параметра :-(

Глобальные параметры можно переинициализировать только в init(). Таким образом, получается, что локальные статические переменные вообще идут лесом, т.к. при наличии внешних параметров, предполагающих переинициализацию всего советника, они становятся неактульны.

Известно ли, что по этому поводу говорят разработчики - это как-то будет исправляться или так фичей и останется?

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

Как-то ну очень грустно :-(. Не эстетично это как-то вместо локальных статических использовать глобальные. Может я все-таки чего-то не догоняю?


Ничего не понимаю (с) "Следствие ведут Колобки"

Файлы:
Рустам
3601
Рустам 2012.10.12 01:41  
Это явный баг, зарегистрируйтесь на форуме MQL5 и напишите заявку в сервис дек (будет такой пункт в вашем профайле)
Андрей
1890
Андрей 2012.10.12 06:30  
Баг- не баг, а раз проблема обнаружила себя один раз- нужно быть готовым к тому,
что даже если что-то починят- оно может потом опять сломаться в будущем.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий