Баг в функции OrderSend() ? - страница 6

 
tara:

А что тогда Static? Это, скорее - Fatalic...
Почему static не работает? У меня везде работает. Фаталик, нафталик, не может быть! Я всегда в себе ошибки ищу и сам на себя обижаюсь!
 
borilunad:
Почему static не работает? У меня везде работает. Фаталик, нафталик, не может быть! Я всегда в себе ошибки ищу и сам на себя обижаюсь!
Потому, что он не предусматривает инициализацию переменной при рестарте программы, а ОБЯЗАН.
 
Кстати, все статические данные в MQL4 болеют той же болезнью. Напоминаю: все массивы - статичны:)
 
tara:
Потому, что он не предусматривает инициализацию переменной при рестарте программы, а ОБЯЗАН.
Правильно, как в любой функции, хоть в локальной, static вначале представляется с каким-нибудь значением, потом уже сравнивается. Правда, поначалу употреблял без понятия, проверяя в действии, а потом уже приходит понимание. Сразу всё понять невозможно, и не всё так легко сразу раскладывается по полочкам. :)  А массивы я не трогаю, много возни с ними для меня!
 
granit77:
Есть еще программисты, которые могут это подтвердить? Одного голоса маловато будет.
Виктор, я не программист, к сожалению. Любитель ...
 
tara:

Можете просто поменять какой-нибудь параметр. Реакция будет только после первого тика нового бара на установленном ТФ.

Да Вы ведь сами недоумевали,- почему на старших ТФ работа советника необъяснима:)



Интересно, связь между первым тиком нового бара рабочего ТФ и тестером... ну в упор не замечаю.. Тестер, это тестер. А график.. это уже график.. (имею ввиду не тестер, а тот же демо или реал).

 К тому же, в учебнике сказано.. " Если нет явной инициализации, то статическая переменная инициализируется нулем ".

 Получается, не нужно, как Вы сказали, Алексей,  в ИНИТе присваивать значение 0 переменной lastBarTime. Она и  так нулём будет при старте программы.

 
hoz:


Интересно, связь между первым тиком нового бара рабочего ТФ и тестером... ну в упор не замечаю.. Тестер, это тестер. А график.. это уже график.. (имею ввиду не тестер, а тот же демо или реал).

 К тому же, в учебнике сказано.. " Если нет явной инициализации, то статическая переменная инициализируется нулем ".

 Получается, не нужно, как Вы сказали, Алексей,  в ИНИТе присваивать значение 0 переменной lastBarTime. Она и  так нулём будет при старте программы.


Нет, не будет. Баг такой :)
 

 Хотя вот этот момент (из учебника) мне не совсем понятен:

" Статические переменные инициализируются однократно перед вызовом специализированной функции init(), то есть при выходе из функции, внутри которой объявлена статическая переменная, значение этой переменной не теряется.

 Причём здесь, " перед вызовом спец. функции init() ", а после " т.е. при выходе из пользовательской функции (судя по содержанию), в которой объявлена статичекая переменная? "

 Функция, в которой объявлена статическая переменная может быть в конце программы.. т.е. в конце кода или где-н. ещё. А функция init() запускается один раз сразу перед запуском программы. Получается нестыковка. Как может переменная инициализироваться перед функцией init() ?

 
hoz:

 Хотя вот этот момент (из учебника) мне не совсем понятен:

" Статические переменные инициализируются однократно перед вызовом специализированной функции init(), то есть при выходе из функции, внутри которой объявлена статическая переменная, значение этой переменной не теряется.

 Причём здесь, " перед вызовом спец. функции init() ", а после " т.е. при выходе из пользовательской функции (судя по содержанию), в которой объявлена статичекая переменная? "

 Функция, в которой объявлена статическая переменная может быть в конце программы.. т.е. в конце кода или где-н. ещё. А функция init() запускается один раз сразу перед запуском программы. Получается нестыковка. Как может переменная инициализироваться перед функцией init() ?

Ну, если Вам интересно - все ныне используемые режимы управления памятью были впервые реализованы в языке PL/1. Их четыре: Automatic, Dynamic, Static и Based. Си появился после и полностью принял эти стандарты.

 
Пойду-ка я спатки:)
Причина обращения: