« Предыдущий пост | На главную страницу | Следующий пост »

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

Любой эксперт, как мы уже увидели в прошлом выпуске, состоит из как минимум трех функций: init(), start() и deinit(). Без понимания, что они делают, невозможно написать своего эксперта, поэтому я в следующем выпуске подробно эти функции рассмотрю.

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

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

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

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

Функция может возвращать какое значение любого из стандартных типов (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<a2) return(a1); else return(a2);
   }

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

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

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

Теперь мы знаем достаточно о функциях, чтобы перейти к подробному рассмотрению трех важнейших функций любого эксперта: init(), start() и deinit().



Все статьи по теме "Пишем советников для MetaTrader 4".

« Предыдущий пост | На главную страницу | Следующий пост »

Комментарии по теме "Создание собственных функций"

Как написать эксперта написано
А как написать индикатор чтобы он выводил график?

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2,Red);
Кто подскажет Что делает эта функция?

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 указывает, что цвет не будет изменен.

А нельзя ли весь материал в одном файле закинуть для скачки? например в формате chm или pdf

Константин, вместо "копи-паст" лучше указать источник, либо способ получения информации.

А нельзя ли весь материал в одном файле закинуть для скачки? например в формате chm или pdf

Хорошая идея. Но сначала надо закончить написание цикла статей по программированию экспертов.

Константин, вместо "копи-паст" лучше указать источник, либо способ получения информации.

Я не Константин, но отвечу на Ваш вопрос.

Есть несколько источников получения информации, кроме моего блога:

1. Встроенный хэлп MetaEditor.

2. Статьи Rosh на сайте Альпари: http://www.alpari-idc.ru/ru/experts/articles/

3. Сайт разработчика MQL4:
http://www.mql4.com/ru

Можно ли в МетаТрейдере 4 увидеть график цены на нефть или на фьючерсы на нефть?

Монжо. Скачайте метатрейдер с сайта ДЦ "Альпари": www.alpari-idc.ru

Вот спецификации контрактов:
http://www.alpari-idc.ru/ru/markets/cspec/

Разместите свой комментарий по теме "Создание собственных функций"

Подписаться на мою рассылку



Размещение статьи "Создание собственных функций" на Вашем сайте

Размещение статьи "Создание собственных функций" на Вашем сайте возможно при условии выполнениия следующих условий:

  • Запрещается изменение оригинального текста без согласия автора - Андрея Ведихина.
  • Должен быть указан первоисточник. В случае публикации в интернете Вы должны разместить следующий код гиперссылки без изменений:
  • Запрещается коммерческое использование материалов, взятых с блога "Интернет-трейдинг на форекс / forex". Доступ к ним должен быть свободным, без взимания какой-либо платы, без обязательной регистрации и/или заполнения опросного листа (анкеты) и т.д.

В случае выполнения данных условий не требуется согласия автора блога "Интернет-трейдинг на форекс / forex" на размещение статьи "Создание собственных функций" на Вашем сайте.

Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE
Котировки Forex:

Счетчики:

Авторские права © 2005-2006 Андрей Ведихин

Условия использования материалов блога "Интернет-трейдинг на форекс / forex"

Контакты с автором:


Движок сайта:
Movable Type 3.31