АвторСообщение



Пост N: 27
Зарегистрирован: 05.03.12
ссылка на сообщение  Отправлено: 14.03.12 21:54. Заголовок: Нет ясности с временем



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() пользуются данными, которые уже лежат на моём компьютере?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]


постоянный участник


Пост N: 349
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 14.03.12 23:11. Заголовок: Максим пишет: Нетру..


Максим пишет:

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



Такое обращение к Bid позволительно, т.к. это немного необычная обычная переменная (только для чтения), значение которой присваивается терминалом на входе в функцию start или после вызова функции RefreshRates(). Обращение к серверу не производится. Вообще все, что не связано с таймсериями и торговыми операциями, не производит обращение к серверу. К примеру, Open[1] - это обращение только к имеющимся данным, а iOpen(NULL, 0, 1) - к серверу, если такой информации нет на компьютере.

С другой стороны, когда в коде используется неоднократное обращение к каким-то данным, то в таких случаях неплохо бы кешировать данные. Например, если бы вместо Bid использовался вызов функции AccountFreeMargin(), то сначала следует присвоить значение функции переменной, а потом производить все необходимые действия с этой переменной:

 цитата:
double margin = AccountFreeMargin();
if (margin > 0)
{
...
}
if (margin == 0)
{
...
}



Такой подход, во-первых, позволит увеличить быстродействие программы, а, во-вторых, гарантирует, что в любом месте выражения вы оперируете неизменными данными.

Спасибо: 0 
ПрофильЦитата Ответить
Автор




Пост N: 984
Зарегистрирован: 21.05.06
Откуда: Украина, Днепропетровск
ссылка на сообщение  Отправлено: 14.03.12 23:20. Заголовок: Ответы на подобные в..


Максим пишет:
 цитата:
Вопрос в следующем: может ли 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

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 11
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет