Форум » Синтаксис языка » Нет ясности с временем » Ответить

Нет ясности с временем

Максим: if(OrderType()==OP_BUY) { or_bye=1; if((Bid>OrderOpenPrice()+ot)&&(trailUp<(Bid-ot))) trailUp=Bid-ot;//двигаем уровень трейлинг стопа if(Bid<=trailUp) OrderClose(OrderTicket(),OrderLots(),Bid,3,Aqua);//закрываемся } Нетрудно заметить, что в приведённом кусочке кода пять раз используется Bid. Вопрос в следующем: может ли Bid измениться в процессе выполнения этого кусочка кода? При каждом вызове Bid советник обращается к серверу брокера или нет? А ещё когда вызываем функции OrderOpenPrice(), OrderTicket(), OrderLots() тоже каждый раз обращаемся к серверу брокера или OrderSelect всю информацию об ордере получает одним пакетиком и функции OrderOpenPrice(), OrderTicket(), OrderLots() пользуются данными, которые уже лежат на моём компьютере?

Ответов - 2

Scriptong: Максим пишет: Нетрудно заметить, что в приведённом кусочке кода пять раз используется Bid. Вопрос в следующем: может ли Bid измениться в процессе выполнения этого кусочка кода? При каждом вызове Bid советник обращается к серверу брокера или нет? Такое обращение к Bid позволительно, т.к. это немного необычная обычная переменная (только для чтения), значение которой присваивается терминалом на входе в функцию start или после вызова функции RefreshRates(). Обращение к серверу не производится. Вообще все, что не связано с таймсериями и торговыми операциями, не производит обращение к серверу. К примеру, Open[1] - это обращение только к имеющимся данным, а iOpen(NULL, 0, 1) - к серверу, если такой информации нет на компьютере. С другой стороны, когда в коде используется неоднократное обращение к каким-то данным, то в таких случаях неплохо бы кешировать данные. Например, если бы вместо Bid использовался вызов функции AccountFreeMargin(), то сначала следует присвоить значение функции переменной, а потом производить все необходимые действия с этой переменной: double margin = AccountFreeMargin(); if (margin > 0) { ... } if (margin == 0) { ... } Такой подход, во-первых, позволит увеличить быстродействие программы, а, во-вторых, гарантирует, что в любом месте выражения вы оперируете неизменными данными.

SK: Максим пишет: Вопрос в следующем: может ли Bid измениться в процессе выполнения этого кусочка кода? При каждом вызове Bid советник обращается к серверу брокера или нет? Ответы на подобные вопросы лучше искать в: справке к МТ 4 http://docs.mql4.com/ru/ и учебнике http://book.mql4.com/ru/content Например, здесь: http://docs.mql4.com/ru/predefined/variables http://docs.mql4.com/ru/predefined/variables/bid и здесь: http://book.mql4.com/ru/variables/predefined



полная версия страницы