Любой эксперт оперирует снекоторыми данными ценами, значениями индикаторов, объемами, количеством открытых позиций ипр.Те,места, где эти данные хранятся вэксперте, называются переменными. Вкачестве имен переменных можно использовать цифры (0-9), латинские прописные истрочные буквы (а zиА Z,следует помнить, что буквы a иA совершенно разные символы), символ подчеркивания (_). Первый символ неможет быть цифрой. Также имя переменной недолжно совпадать сзарезервированным словом (т.е. словом, которое имеет особый смысл вязыке MetaQuotes Language 4 нообэтом позже).
Желательно вкачестве имени переменной использовать такое, изкоторого сразу становится понятным предназначение переменной. Например, переменная, содержащая количество открытых позиций, может иметь такое имя: OpenPositionsNumber.
- Можно создавать переменные разных типов:
- int целое число (от-2147483648до2147483647);
- bool логический тип (или ложь false, или истина true);
- datetime дата ивремя (вформате DYYYY.MM.DD HH:MM:SS);
- color цвет (оформате ярасскажу вследующих выпусках);
- double вещественное число (-1.7נ10-308до 1.7נ10308, точность 15значащих цифр);
- string заключенная вдвойные кавычки строка (например, это строка).
Перед использованием переменной еенадо объявить. Это можно сделать несколькими способами:
тип имя;
или
тип имя = начальное_значение;
Примеры объявлений переменных:
int Count;
datetime InitialDate = D'2006.07.12 00:00';
string ip_address = "127.0.0.1";
В дальнейшем для того, чтобы обратиться кзначению переменной, надо будет просто указать ееимя:
i = 5 + Count;
Иногда требуется сохранить неодно значение, аопределенное количество взаимосвязанных значений. Например, значение индикатора натекущем баре, напредыдущем баре,
, N-баров назад. Для таких целей существуют массивы. Массив это индексированная совокупность однотипных данных.
Предположим, что унас вэксперте есть такое описание массива Prices:
double Prices[50];
Это означает, что массив-переменная Prices предоставляет доступ к50элементам типа double. Для доступа кi-му элементу надо указать Prices[i]. Нумерация элементов начинается снуля изаканчивается 49-м элементов (внашем случае).
Если Выпопробуете обратиться кэлементу вне этого диапазона, тобудет зафиксирована ошибка ERR_ARRAY_INDEX_OUT_OF_RANGE (4002), которую можно получить при помощи функции GetLastError().
В случае необходимости можно использовать нетолько одномерные массивы (укоторых только один индекс), ноимногомерные массивы.
Пример описания двухмерного массива, состоящего изшести массивов, каждый изкоторых состоит из50элементов:
int mas[6] [50];
При описании массива можно вфигурных скобках задать начальные значения для каждого элемента:
int a[4][4] = { 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4 };
Начальные значения элементов массивов могут быть только константами. Если Вывфигурных скобках при инициализации массива указали меньшее количество начальных значений, чем размерность массива, тонедостающие элементы инициализируются нулями.
Локальные истатические переменные
- Единственным нераскрытом моментом остались области видимости переменных. Дело втом, что переменные бывают нескольких типов:
- локальные переменные,
- статические переменные,
- глобальные переменные,
- внешние переменные,
- параметры функций.
Локальные переменные
Если переменная объявлена впределах какой-нибудь функции, тоона является локальной переменной ивидна только впределах этой функции. Запределами этой функции кэтой переменной обращаться нельзя.
Инициализация (присвоение начального значения) локальной переменной происходит каждый раз при вызове функции. Присваиваемое начальное значение может быть как константой, так ивыражением.
Пример объявления иинициализации локальной переменной:
int CalcFactorial(int n)
{
int i = 0;
...
}
Cтатические переменные
Статические переменные объявляются директивой static. Они инициализируются только один раз при первом вызове функции исохраняют свое значение даже после выхода изфункции. Вследующий раз при новом вызове функции статические переменные будут иметь тоже значение, которое они имели перед выходом изфункции впослений раз.
Статические переменные объявляются впределах описания функции ипоэтому доступны для использования только впределах той функции, вкоторой они объявлены.
Пример объявления статической переменной:
int GetOpenPositionsNumber()
{
static int Count = 0;
...
}
Внешние переменные
Мы уже сталкивались свнешними переменными, когда описывали параметры эксперта MAPeriod иLotsNumber вкоде нашего первого эксперта.
Внешние переменные описываются спомощью зарезервированного слова extern:
extern int MAPeriod=13;
extern double LotsNumber=1.0;
Внешние переменные немогут быть массивами.
Внешние переменные это параметры эксперта, которые можно изменять.
Прикрепите эксперт кграфику. Для этого нажмите правую кнопку мыши наназвании эксперта вокне Навигатор ивпоявившемся контекстном меню выберите Присоединить кграфику. Появится окно свойств эксперта. Вовкладке Входные параметры Выможете изменить значения внешних переменных, описанных вэксперте (см.рис.1).