Суббота, 04.05.2024, 03:45 Вы вошли как Гость | Группа "Гости" | RSS | Главная | Создаем собственные функции. | Мой профиль | Выход | Вход
Вы смотрели фильм-расследование Алексея Навального "Дворец президента"?
Всего ответов: 2
» Меню сайта

» РАЗНОЕ

» Календарь
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Создаем собственные функции.

Для начала же полезно понять, а что такое функция вообще. Допустим Вы в своей программе часто производите одни и те же действия. Вы можете в каждом месте написать код, который выполняет эти действия. Однако это неудобно и неправильно с нескольких точек зрения:

  • Если вдруг Вам понадобится внести изменения в этот кусок кода, то это придется делать везде, где он используется. Существует большая вероятность, что где-то Вы забудете внести изменения, и советник будет торговать с ошибками.
  • Гораздо более читабельным будет код, когда выполнение повторяющихся действий вынесено в отдельную функцию, а в соответствующих местах эта функция вызывается. В этом случае изменения (в случае необходимости) надо делать всего в одном месте и читаемость такого кода будет гораздо лучше.

Таким образом, в любой момент Вы можете описать свою функцию, которая будет выполнять определенные действия:

тип имя ( параметры )
 {
 действия
 }


Функция может возвращать какое значение любого из стандартных типов (int, bool, datetime, double, color, string — см. описание типов в выпуске «Настраиваем параметры нового эксперта»), либо не возвращать никакого значения (тип void).

Имя функции — это любое понятное Вам имя, которое помогает сразу же вспомнить, что делает эта функция. Имя может состоять из цифр (0-9), латинских прописных и строчных букв (а — z и А — Z, следует помнить, что буквы ’a’ и ’A’ — совершенно разные символы), символа подчеркивания (_). Первый символ не может быть цифрой. Также имя функции не должно совпадать с зарезервированным словом (т.е. словом, которое имеет особый смысл в языке MetaQuotes Language 4 — но об этом позже).

Пример имени функции: GetConnectionStatus.

Каждой функции могут передаваться определенные параметры. Они указываются через через запятую в круглых скобках после имени функции. Для каждого параметра указывается тип.

Приведем пример описания функции, которая вычисляет наименьшее из двух целых чисел:

int GetMinValue(int a1, int a2)
 {
 if (a1

Эта функция возвращает значение типа int (целое число), ее имя — GetMinValue и она имеет два входящих целочисленных параметра: a1 и a2.

Для возврата значения в вызывающую программу используется команда return(значение).

Если в каком-то месте нашего советника нам потребуется вычислить минимальное число из двух, то мы можем вызвать нашу функцию следующим образом: имя(параметры через запятую). Например: GetMinValue(10, 15).

Функции 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() работу не завершила, то она прерывается принудительно.

» Поиск


гороскоп
» Мини-чат

» Наш опрос
Оцените мой сайт
Всего ответов: 46

» Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • » Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0


    Copyright MyCorp © 2024
    Бесплатный хостинг uCoz