Создание собственных функций
Любой эксперт, как мы уже увидели в прошлом выпуске, состоит из как минимум трех функций: init(), start() и deinit(). Без понимания, что они делают, невозможно написать своего эксперта, поэтому я в следующем выпуске подробно эти функции рассмотрю.
Для начала же полезно понять, а что такое функция вообще. Допустим Вы в своей программе часто производите одни и те же действия. Вы можете в каждом месте написать код, который выполняет эти действия. Однако это неудобно и неправильно с нескольких точек зрения:
- Если вдруг Вам понадобится внести изменения в этот кусок кода, то это придется делать везде, где он используется. Существует большая вероятность, что где-то Вы забудете внести изменения, и советник будет торговать с ошибками.
- Гораздо более читабельным будет код, когда выполнение повторяющихся действий вынесено в отдельную функцию, а в соответствующих местах эта функция вызывается. В этом случае изменения (в случае необходимости) надо делать всего в одном месте и читаемость такого кода будет гораздо лучше.
Таким образом, в любой момент Вы можете описать свою функцию, которая будет выполнять определенные действия:
{
действия
}
Функция может возвращать какое значение любого из стандартных типов (int, bool, datetime, double, color, string - см. описание типов в выпуске "Настраиваем параметры нового эксперта"), либо не возвращать никакого значения (тип void).
Имя функции - это любое понятное Вам имя, которое помогает сразу же вспомнить, что делает эта функция. Имя может состоять из цифр (0-9), латинских прописных и строчных букв (а - z и А - Z, следует помнить, что буквы 'a' и 'A' - совершенно разные символы), символа подчеркивания (_). Первый символ не может быть цифрой. Также имя функции не должно совпадать с зарезервированным словом (т.е. словом, которое имеет особый смысл в языке MetaQuotes Language 4 - но об этом позже).
Пример имени функции: GetConnectionStatus.
Каждой функции могут передаваться определенные параметры. Они указываются через через запятую в круглых скобках после имени функции. Для каждого параметра указывается тип.
Приведем пример описания функции, которая вычисляет наименьшее из двух целых чисел:
{
if (a1<a2) return(a1); else return(a2);
}
Эта функция возвращает значение типа int (целое число), ее имя - GetMinValue и она имеет два входящих целочисленных параметра: a1 и a2.
Для возврата значения в вызывающую программу используется команда return(значение).
Если в каком-то месте нашего советника нам потребуется вычислить минимальное число из двух, то мы можем вызвать нашу функцию следующим образом: имя(параметры через запятую). Например: GetMinValue(10, 15).
Теперь мы знаем достаточно о функциях, чтобы перейти к подробному рассмотрению трех важнейших функций любого эксперта: init(), start() и deinit().
Все статьи по теме "Пишем советников для MetaTrader 4".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4:
Комментарии по теме "Создание собственных функций"
Как написать эксперта написано
А как написать индикатор чтобы он выводил график?
Автор: Алексей | 14.11.2006 13:54
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2,Red);
Кто подскажет Что делает эта функция?
Автор: Алексей | 14.11.2006 13:56
void SetIndexStyle( int index, int type, int style=EMPTY, int width=EMPTY, color clr=CLR_NONE)
Устанавливает новый тип, стиль, ширину и цвет для указанной линии индикатора.
Параметры:
index - Порядковый номер линии. Должен быть от 0 до 7.
type - Стиль отрисовки линии индикатора.
style - Стиль линии. Используется для линий толщиной в 1 пиксель.
Пустое значение (EMPTY) указывает, что стиль не будет изменен.
width - Ширина линии. Допустимые значения - 1,2,3,4,5. Пустое значение (EMPTY) указывает, что ширина не будет изменена.
clr - Цвет линии. Пустое значение CLR_NONE указывает, что цвет не будет изменен.
Автор: Константин | 17.11.2006 17:46
А нельзя ли весь материал в одном файле закинуть для скачки? например в формате chm или pdf
Автор: Фара | 27.11.2006 22:17
Константин, вместо "копи-паст" лучше указать источник, либо способ получения информации.
Автор: nil | 28.11.2006 19:43
А нельзя ли весь материал в одном файле закинуть для скачки? например в формате chm или pdf
Хорошая идея. Но сначала надо закончить написание цикла статей по программированию экспертов.
Константин, вместо "копи-паст" лучше указать источник, либо способ получения информации.
Я не Константин, но отвечу на Ваш вопрос.
Есть несколько источников получения информации, кроме моего блога:
1. Встроенный хэлп MetaEditor.
2. Статьи Rosh на сайте Альпари: http://www.alpari-idc.ru/ru/experts/articles/
3. Сайт разработчика MQL4:
http://www.mql4.com/ru
Автор: Андрей Ведихин | 30.11.2006 17:17
Можно ли в МетаТрейдере 4 увидеть график цены на нефть или на фьючерсы на нефть?
Автор: Алексей | 05.12.2006 18:55
Монжо. Скачайте метатрейдер с сайта ДЦ "Альпари": www.alpari-idc.ru
Вот спецификации контрактов:
http://www.alpari-idc.ru/ru/markets/cspec/
Автор: Андрей Ведихин | 08.12.2006 00:54