В статическую переменную предопределенную

 

Добрый вечер. Подскажите, пожалуйста, возможно ли запомнить в статической переменной предопределенную? Как запомнить, цену, Bid, ордер, баланс счета в конце концов? Код для примера:

/----
   double  line = ObjectGet("Price",OBJPROP_PRICE1);

   if(ObjectFind("Price")==0)
     {
       static double price_line = line; //<<<<<<<<<<<<<<<<<<<<<<<<< Здесь проблема. Работает только если вбивать вручную.
       Comment("Сейчас на: ",line," Были: ", price_line );
      } 
   else 
     {
       price_line =0;
       Comment("");
      }                
//----
 
static double price_line=-1;
if(price_line==-1)price_line = line;
 

Спасибо, работает, но обновляет значение при переключении таймфрейма.... Почему? В deinit() и init() ничего не прописано.

А, понятно почему.... А как обойти повторное присваивание?

 
toha153:
Спасибо, работает, но обновляет значение при переключении таймфрейма.... Почему? В deinit() и init() ничего не прописано.

Про структурное программирование слышали?
 
Нет, я новичек. Вроде как догадываюсь как можно решить это... Но сколько это возьмет времени на проверку не знаю. Понимаю, что лезу сюда со своими приземленными проблемами.... Но больше некуда.
 
toha153:
Нет, я новичек. Вроде как догадываюсь как можно решить это... Но сколько это возьмет времени на проверку не знаю.


Тогда, просто порекомендую - всегда объявляйте переменные сразу после заголовка функции. До любого прочего кода.

По теме (выше было тоже по ней) : конечно, можно. Только не забывать разницу между инициализацией переменной (особенно - статической) и присваивнием ей значения.

 

Если не ответил - готов дополнить.

 
toha153:

Спасибо, работает, но обновляет значение при переключении таймфрейма.... Почему? В deinit() и init() ничего не прописано.

А, понятно почему.... А как обойти повторное присваивание?


Потому что так устроено. Переключение таймфрейма подобно новому запуску индикатора. Если бы параметры менялись в окне свойств, тогда статическая переменная сохраняла свое значение. Вместо статической переменной надо использовать глобальную (GlobalVariable). В deinit() в зависимости от UninitializeReason() удалять ее или оставлять.
 
Integer:

Потому что так устроено. Переключение таймфрейма подобно новому запуску индикатора. Если бы параметры менялись в окне свойств, тогда статическая переменная сохраняла свое значение. Вместо статической переменной надо использовать глобальную (GlobalVariable). В deinit() в зависимости от UninitializeReason() удалять ее или оставлять.

Дмитрий, а Вас не напрягает инициализация статической переменной значением, полученным внутри этой же функции, но чуток раньше?
 
Integer:
Вместо статической переменной надо использовать глобальную (GlobalVariable). В deinit() в зависимости от UninitializeReason() удалять ее или оставлять.

Логика теоретически ясна. Буду разбираться практически.

Спасибо!
 
tara:

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


Не особо, но препочел бы статические переменные объявлять в самом начале функции, поскольку они являются принципиально важными элементами.

Причина обращения: