Читать книгу Основы MQL5 программирования. Разработка технических индикаторов и торговых советников - Александр Вадимович Нечаев, Наталья Владимировна Власова - Страница 12

Глава 3. Типы данных и переменные

Оглавление

MQL5 – это C-образный язык. Он основывается на языке C++, для изучения MQL5 также актуальны знания по C++. Для разработчиков C++ изучение MQL5 будет даваться проще благодаря весьма похожему синтаксису.

В данной главе мы рассмотрим основы языка MQL5.

3.1 Основные типы данных

Для получения различных свойств, совершения любых действий в программе, используются различные типы данных. Например, данные с плавающей точкой «double, float» используются для получения цены или объема текущей позиции, данные даты и времени datetime могут быть использованы для определения времени открытия или закрытия позиций, а целые значения int, uin… обозначают количество открытых позиций.

Разные типы данных обрабатываются с разной скоростью, наиболее быстро обрабатываются целочисленные данные. Дольше всего обрабатываются строковые данные. Лучше иметь это ввиду при программировании больших программ, чтобы не перегружать ваш компьютер.

Перечень основных типов данных, с комментариями:

– Целые – типы данных используемые для получения каких-либо целых значений, например, количество открытых позиций.

– char – занимает меньше всего памяти среди всех целочисленных типов данных, 1 байт. Может иметь положительное и отрицательное значение в пределах от -128 до 127.

– unchar – Также занимает всего 1 байт памяти. Этот тип предназначен только для положительных значений, соответственно минимальное значение, это 0, максимальное это 255.

– short – Этот тип данных занимает 2 байта, может иметь как положительное так и отрицательное значение, в диапазоне от -32 768, до 32 767.

– ushort – Размер равен предыдущему типу, 2 байта. Может иметь только положительно значение от 0 до 65 535.

– Int – наиболее популярный целочисленный тип, имеет размер 4 байта. Диапазон значений от 2 147 483 648 до 2 147 483 647.

– uint – также как и все предыдущие варианты с написанием через U, этот тип может иметь только положительное значение. Размер равен 4 байта, используется для выражения от 0 до 4 294 967 295.

– long – самый объемный тип данных из целочисленных. Имеет размер 8 байт, диапазон значений от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.

– ulong – используется для положительных выражений от 0 до 18 446 744 073 709 551 615, размер 8 байт.

– Логические – это тип данных для выражения логических значений.

– bool – единственный тип логических данных. С помощью этого типа данных можно выразить значения ложь false или истина true, использующие 0 или 1 в качестве числового выражения. Это целое число размеров 1 байт.


Пример 1. Варианты значений переменных типа bool

bool var_a = false;

bool var_b = true;

bool var_c = 0;


Обратите внимание! В логических выражения вы можете применять другие целочисленные значения, компилятор не сочтет это ошибкой, в этом случае 0 будет использован как false, а остальные значения как true.

– Литералы – Как говорит нам официальная документация к компилятору «Литеральное представление состоит из трех частей, представляющих числовые значения интенсивности трех основных компонент цвета: красной (red), зеленой (green), синей (blue). Константа начинается с символа C и обрамляется одинарными кавычками. Числовые значения интенсивности компоненты цвета лежат в диапазоне от 0 до 255.»(Ссылка из справочника MQL5/Основы языка/Типы данных/Целые типы/Тип color)

– Строки – Тип данных для обозначения текстовых строк.

– string – текстовые строки в программе. Может быть применен, например, для записи комментария у ордера, для текстовых меток в панелях, для текста в кнопках и т. д.

– С плавающей точкой – это типы данных применяемых для чисел со знаком после запятой, то есть для представления значений с дробной частью. Могут использоваться для выражения объема, цены и т. д.

– double / float – рассмотрим одновременно оба типа, та как разница исключительно в размерах этих типов данных. float – занимает 4 байта памяти, double – занимает 8 байт в памяти. Тип double применяется чаще чем float, я советую использовать этот тип.

– Цвет – тип данных для хранения информации о цвете.

– color – тип данных для обозначения цвета любого элемента, занимает 4 байта памяти, обозначается в RGB формате. Могут быть представлены: литерально, целочисленно и с помощью имени web-цветов. Я обычно использую набор web-цветов. Вы можете найти его в справочнике MQL5.


Пример 2. Варианты значений переменных типа color

// – - литералы

C«192,192,192» – Серебряный


//названия цветов

clrSilver – Серебряный


// – - целочисленные представления

c0c0c0 – Серебряный


– Дата и время – тип данных для хранения информации о дате и времени.

– datetime – обозначение даты или времени в программе, начиная с 1 января 1970 года. Занимает 8 байт в памяти. Может использоваться для определения времени открытия или закрытия ордера, экспирации отложенных ордеров (то есть время истечения отложенного ордера, можно создать отложенный ордер с существованием ограниченного времени). Также этот тип данных может использоваться для регулирования свеч, то есть время открытия и закрытия.

– Перечисления – возможность выбора одного из множества вариантов в выпадающем списке.

– enum – тип данных всегда имеет размер 4 байта в отличие от С++, поэтому количество перечислений может быть отграничено объемом переменной. Используется для перечисления вариантов, например, выбор таймфрейма. Для того чтобы что бы выбрать один из вариантов все возможные варианты должны быть перечислены.


Пример 3. Варианты значений переменных типа enum

// – -Пример 1.Перечисление ENUM_TIMEFRAMES хранит в себе список таймсерий торгового терминала.


ENUM_TIMEFRAMES SignalPeriod = PERIOD_D1;


// – -Пример 2. Если тип позиции определен как длинная позиция, закроем ее.

POSITION_TYPE_BUY – это значение enum POSITION_TYPE для функции PositionGetInteger (…);


// – —

(PositionGetInteger (POSITION_TYPE) == POSITION_TYPE_BUY) {


ClosePosition (PositionTicket);

}


3.2 Область видимости и время жизни переменных

Переменные в рамках MQL5 программ могут быть разделены на три типа

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


Пример 4. Пример локальной переменной

void Function ()

{

int Variable = 12345;

double SecondVariable = 1.23;

bool ThirdVariable = true;

}


– Глобальные переменные – это переменные, которые созданы на одном уровне с функциями, то есть на глобальном уровне. Они будут существовать до момента деинициализации приложения.

– Глобальные переменные терминала – это переменные, которые могут быть созданы в любом приложении, но их время жизни не заканчивается деинициализацией создавшего их приложения. Глобальные переменные терминала используются для общего использования из разных приложений. Базовым примером работы с глобальными переменными терминала может быть использование выгрузки сложных и объемных расчетов из одного продукта, их отправки в глобальные переменные. Далее этими данными смогут пользоваться все остальные продукты. Это хороший инструмент оптимизации работы масштабных проектов, состоящих из нескольких десятков приложений, работающих в одной связке.

3.3 Операции и выражения

– Выражения – Выражения оканчиваются точкой с запятой. Выражения могут быть длинными или короткими и не зависимо от величины выражения, любое будет оканчиваться точкой с запятой. Одно выражение может занимать несколько строк или наоборот в одной строке может быть несколько выражений.

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


– Арифметические операции – это любые арифметические операции, связанные с умножением или делением, а также сложением или вычитанием.


Пример 5. Логические операции

Сумма величин a = b + c;

Вычитание величин a = b – 10;

Умножение величин a = b * 2;

Частное от деления a = b / c;

Остаток от деления minutes = time % 60;


– Инкремент (увеличение на единицу) и декремент (уменьшение на единицу), этот тип операций также можно отнести к арифметическим, однако они заслуживают, чтобы мы рассмотрели этот тип операций отдельно. Это очень популярные операции, они легко заменяются арифметическими или операциями присваивания, однако использование инкремента и декремента обычно удобнее.

Пример 6. Инкременты

//синтаксис операций инкремента и декремента

++a// префиксный инкремент (преинкремент)


a++; // постфиксный инкремент (постинкремент)


– a; // префиксный декремент (предекремент)


a – ; // постфиксный декремент (постдекремент)


– Операции присваивания – это операции, позволяющие присвоить некоторое значения, выполняются над двумя операндами, причем левый может представлять только, например, переменную.


Пример 7. Присваивание

Присваивание значения a переменной b a = b;


Следующие операции объединяют арифметические или побитовые операции с операцией присваивания:


Пример 8. Арифметика с присваиванием

Увеличение значения переменной a на b a += b;

Уменьшение значения переменной a на b a -= b;

Умножение значения переменной a на b a *= b;

Деление значения переменной a на b a /= b;

Остаток от деления значения переменной a на b a %= b;


– Операции отношения – отношения используются для сравнения двух значений между собой. Этими значениями могут быть числа, переменные, константы, результаты вычислений выражений. В операциях отношений может быть два варианта: true, представлено любым ненулевым значение (ИСТИНА); false, представлено значением 0 (ЛОЖЬ).


Пример 9. Отношение переменных

true, если a равно b a == b;

true, если a не равно b a!= b;

true, если a меньше b a <b;

true, если a больше b a> b;

true, если a меньше или равно b a <= b;

true, если a больше или равно b a> = b;


– Логические операции – этот тип похож на операции отношения, но имеет более сложную структуру. Если операторы отношения используются для проверки условия: ложь или истина. Иногда, необходимо протестировать несколько условий одновременно. Например, узнать есть ли хоть одно истинное значение из множества. Также иногда нам нужно знать, является ли хоть одно из нескольких условий истинным.

Существует три вида логических операций:

 Логическое отрицание – обозначается с помощью восклицательного знака»!».


Пример 10. Логическое отрицание

if (a!= b) DoSomething ();


if (!MQLInfoInteger (MQL_TESTER)) DoSomething ();


– Логическая операция «или» – обозначается с помощью двух вертикальных линий "||». Возвращает true или выполняет последующее действие в случае выполнения одного из указанных условий. То есть необходимо выполнение хотя бы одного из условий.


Пример 11. Логическая операция «или»

if (a == 0 || b == 0) OpenNewPosition ();


– Логическая операция «и» – обозначается с помощью "&&». Используется в случаях, когда несколько условий должны быть соблюдены одновременно. То есть необходимо одновременное выполнение всех поставленных условий.


Пример 12. Логическая операция «и»

if (a == 0 && b == 0) DoSomething ();


Основы MQL5 программирования. Разработка технических индикаторов и торговых советников

Подняться наверх