Функции init(), start() и deinit()
Как я уже говорил в прошлых постах, любой эксперт состоит как минимум из трех функций: init(), start() и deinit(). В этом выпуске я расскажу о них подробнее.
Функция init()
Эта функция вызывается в следующих случаях:
- после присоединения советника к графику;
- после старта MetaTrader 4 и подгрузки исторических данных;
- после смены инструмента или периода графика;
- после перекомпиляции программы в редакторе MetaEditor;
- после изменения настроек эксперта;
- после смены торгового счета.
Функция start()
Функция start() запускается на каждом новом тике. Собственно это основная функция эксперта, т.к. она вызывается на каждом тике и выполняет основную работу.
Важно: Если функция start() не успела завершить свою работу до прихода следующего тика, следующий тик пропускается и функция для него не вызывается.
Функция deinit()
С помощью UninitializeReason() можно узнать причину вызова функции deinit().
Функция deinit() вызвается в следующих случаях:
- при завершении работы MetaTrader 4 или при закрытии графика (функция UninitializeReason() возвращает REASON_CHARTCLOSE);
- при удалении эксперта с графика (REASON_REMOVE);
- перед изменением инструмента графика или периода графика (REASON_CHARTCHANGE);
- при удачной перекомпиляции программы в MetaEdito (REASON_RECOMPILE)r;
- при изменении параметров эксперта (REASON_PARAMETERS);
- при переключении на другой счет (REASON_ACCOUNT).
Функция UninitializeReason() возвращает 0, если скрипт самостоятельно завершил работу.
Если в течение 2.5 секунд фукция deinit() работу не завершила, то она прерывается принудительно.
В следующем выпуске я выложу код нашего первого советника и подробно разберу каждую его строчку. После этой серии статей Вы уже сможете самостоятельно писать простейших экспертов.
Все статьи по теме "Пишем советников для MetaTrader 4".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4:
Комментарии по теме "Функции init(), start() и deinit()"
dear andrey vedikhin
i sent an email for you about partnership with alpari 4 days ago.
but you dont answer yet.
i am looking forward for your email
best regards
e-commerce manager of fara novon ict co ltd
Автор: babak tahmasebi | 05.07.2006 20:31
Уважаемый Андрей!
Как можно вывести на печать количество глобальных переменных
оператором
Print("Всего глобальных переменных: ", GlobalVariablesTotal());
Я вставил в индикатор, но так оно не работает
Заранее Вам благодарен
Автор: Алексей | 08.01.2007 21:03
Я думаю, что проблема тут в том, что Вы используете Print() в пользовательском индикаторе, в то время, как эта функция работает, видимо, только в экспертах.
Автор: Андрей Ведихин | 23.01.2007 17:58
Уважаемый Андрей!
Имеет ли значение в какую папку помещать эксперта или пользовательский индикатор в МТ4?
Я скапировал Вашего эксперта для ночной работы
(очень интресно)
В какую папку его поместить?
Автор: Алексей | 25.01.2007 19:06
Эксперты в папку:
c:\programs files\MetaTrader - Alpari\experts
Индикаторы в папку:
c:\programs files\MetaTrader - Alpari\experts\indicators
Автор: Андрей Ведихин | 30.01.2007 20:41
Скачал эксперта для ночной торговли,
но он за 5 ночей ни разу не сработал
Дифф установил на уровне 7
Что делать?
Заранее благодарен
Автор: Алексей | 01.02.2007 12:26
Уже разобрался
Проблема была во времени, так как оно не московское а другое
Автор: Алексей | 01.03.2007 08:28