Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Скачай MetaTrader 5 для iPad и торгуй в любом месте!
Anton
52
Anton 2011.12.03 22:01 

Добрый вечер. Подскажите, пожалуйста, возможно ли запомнить в статической переменной предопределенную? Как запомнить, цену, 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("");
      }                
//----
Dmitry Fedoseev
41680
Dmitry Fedoseev 2011.12.03 22:05  
static double price_line=-1;
if(price_line==-1)price_line = line;
Anton
52
Anton 2011.12.03 22:51  

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

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

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

Про структурное программирование слышали?
Anton
52
Anton 2011.12.03 23:33  
Нет, я новичек. Вроде как догадываюсь как можно решить это... Но сколько это возьмет времени на проверку не знаю. Понимаю, что лезу сюда со своими приземленными проблемами.... Но больше некуда.
Алексей Тарабанов
7222
Алексей Тарабанов 2011.12.03 23:41  
toha153:
Нет, я новичек. Вроде как догадываюсь как можно решить это... Но сколько это возьмет времени на проверку не знаю.


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

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

Алексей Тарабанов
7222
Алексей Тарабанов 2011.12.03 23:43  

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

Dmitry Fedoseev
41680
Dmitry Fedoseev 2011.12.04 00:08  
toha153:

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

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


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

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

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

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

Спасибо!
Dmitry Fedoseev
41680
Dmitry Fedoseev 2011.12.04 00:36  
tara:

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


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

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