Хранение данных в переменных
Любой эксперт оперирует с некоторыми данными - ценами, значениями индикаторов, объемами, количеством открытых позиций и пр. Те, места, где эти данные хранятся в эксперте, называются переменными. В качестве имен переменных можно использовать цифры (0-9), латинские прописные и строчные буквы (а - z и А - Z, следует помнить, что буквы 'a' и 'A' - совершенно разные символы), символ подчеркивания (_). Первый символ не может быть цифрой. Также имя переменной не должно совпадать с зарезервированным словом (т.е. словом, которое имеет особый смысл в языке MetaQuotes Language 4 - но об этом позже).
Желательно в качестве имени переменной использовать такое, из которого сразу становится понятным предназначение переменной. Например, переменная, содержащая количество открытых позиций, может иметь такое имя: OpenPositionsNumber.
Можно создавать переменные разных типов:
- int - целое число (от -2147483648 до 2147483647);
- bool - логический тип (или ложь - false, или истина - true);
- datetime - дата и время (в формате D'YYYY.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 };
Начальные значения элементов массивов могут быть только константами. Если Вы в фигурных скобках при инициализации массива указали меньшее количество начальных значений, чем размерность массива, то недостающие элементы инициализируются нулями.
Существует несколько видов переменных: локальные, статические, внешние, глобальные переменные и формальные параметры функций. В следующем выпуске я более подробно расскажу о локальных и статических переменных.
Все статьи по теме "Пишем советников для MetaTrader 4".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4:
Комментарии по теме "Хранение данных в переменных"
а нельзя расширить вместимость блогов? А то долго ждать следующего дня....:))
Автор: igrotek | 12.07.2006 19:33
Пока всё достаточно понятно. Интересно как это всё увязать с графиками и ордерами. Надеюсь примеры будут так же хорошо описаны и показаны, как и предидущие темы по этому языку
Автор: igrotek | 12.07.2006 19:46
Я бы рад публиковать в день побольше материала, но, к сожалени, а может и к счастью у меня наблюдается катастрофическая нехватка времени. Особенно сейчас, т.к. сейчас я навожу последний штрихи в становлении Alpari (UK) в Англии. Но постараюсь как можно чаще и как можно больше выкладывать материала. В меру своих возможностей.
Автор: Андрей Ведихин | 13.07.2006 14:39
Все свои статьи я буду очень подробно объяснять на примерах. Мой блог предназначен прежде всего для начинающих, поэтому я постараюсь писать так, чтобы все было очень понятно и не надо было иметь предварительной подготовки.
Автор: Андрей Ведихин | 13.07.2006 14:42
Кто-нибудь подскажите пожалуйстаю как избавиться от ошибки 4002, которая говорит, что элемента с таким индексом в массиве не существует. Обращаюсь к массивам iHigh[], iClose[], ит.п. Хотя на графике такие свечи существуют. Ошибку исправить своими силами не получается.
Автор: Евгений | 29.02.2008 13:29