Приветствую вас, друзья! Переменные – основа всех языков программирования, потому что неважно, какой алгоритм вы придумали, как вы его реализуете и на каком языке напишете, в итоге это все сведется к обработке переменных. В этом уроке мы разберемся с типами переменных в MQL5.
Предыдущие уроки
Что такое переменные?
Если смотреть в разрезе практики, то переменная – это участок, или блок, или ячейка памяти, которой мы даем удобное для нас имя, помещаем туда какие-то данные, и используя имя переменной, которое мы ей дали, мы можем эти данные получать, изменять или куда-то передавать.
Теперь создадим переменную:
char value_char;
Точка с запятой говорит нам об окончании оператора. Оператор может содержать в себе одну или несколько операций. В нашем случае это одна операция создания или, как принято говорить, объявления переменной типа char по имени value_char.
Имена переменных могут состоять из букв латинского алфавита, при этом заглавные и строчные буквы – разные символы, из цифр и знаков подчеркивания, не могут иметь служебных символов типа =, #, \ и так далее. Кроме того, имя переменной не может начинаться с цифры:
NAME1 namel Total_5 Paper
Mql5 унаследовал от C++ строгую типизацию переменных. Когда мы объявляем переменную, под нее сразу же выделяется некий объем памяти, зависящий от типа значения, которое будет в этой переменной храниться. И однажды задав тип переменной, в нее уже не запихнуть данные другого типа. Ну, то есть в принципе можно, но результат может быть непредсказуемым.
Теперь я расскажу, какие вообще есть типы переменных в mql5. Итак, есть числовые типы, их больше всего. Также есть строковые типы, они же символьные – просто текст. Есть специальные типы, созданные для каких-то нестандартных операций и не подходящие под описание предыдущих двух. Ну и, наконец, составные типы или пользовательские.
Числовые типы делятся на целочисленные и вещественные.
Целочисленные числовые типы
Целочисленных числовых 4 вида:
- char value_char; // 1б памяти, значения от -128 до 127, включая 0;
- short value_short; // 2б памяти, значения от -38886 до 38886, включая 0;
- int value_int; // 4б памяти;
- long value_long; // 8б памяти.
Зачем столько типов? Под каждый тип переменной выделяется разное количество памяти, и диапазон значений, хранимый в каждом типе переменной, будет различаться.
Также есть беззнаковые значения (литералы):
- uchar // 1б памяти, значения от 0 до 255;
- ushort;
- uint;
- ulong.
Памяти выделяется столько же, только значения строго положительные и 0. Английская u перед указанием типа означает unsigned, беззнаковый. Их удобно использовать для переменных, которые не могут быть отрицательными. Например, для подсчета количества ордеров и позиций на торговом счете. Если в переменную поместить значение, которое выходит за диапазон, то результат непредсказуем; точнее, он будет в пределах заданного диапазона, но при этом каким угодно.
Теоретически все это было сделано для экономии памяти. Память для переменных выделяется в оперативной памяти, которой обычно на современных компьютерах гигабайты. И разница – 2 или 4 байта – довольно сомнительная экономия. Тем не менее, в теории я могу представить себе ситуацию, когда такая бережливость может быть оправдана. Например, когда у нас очень много переменных, сложные математические расчеты, куча циклов и все это запускается на слабеньком VPS.
Но на самом деле все же большая часть типов переменных используется редко и в довольно специфических ситуациях. Чаще всего используются типы int, uint и ulong.
Тип bool
Следующий специальный тип – bool. Занимает в памяти 1 байт. Переменные типа bool еще называют логическими: они содержат в себе одно из двух значений – 1 или 0, true (правда) или же false (ложь).
bool value_ bool = true;
Создадим несколько переменных:
bool value_ bool_1 = true;
bool value_ bool_2 = false;
bool value_ bool_3 = 1;
bool value_ bool_4 = 0;
bool value_ bool_5 = -1;
bool value_ bool_6 = 777;
Первым двум переменным я присвоил значения при помощи ключевых слов true и false. Ключевые слова – это зарезервированные в языке программирования последовательности букв и цифр, которые можно использовать только по прямому назначению и никак иначе. В mql5 таких ключевых слов очень много, периодически они будут нам попадаться, и тогда я буду их пояснять.
В данном случае true – истина или 1, false – ложь или 0. А вот последние две переменные демонстрируют, что не так все просто и переменной типа bool могут быть присвоены не только 0 и 1. При этом ложью считается только 0, все остальное — это правда.
Зачем вообще нужен такой тип? Его часто используют как флаги и переключатели для работы с различными вариантами, ветвлением, а еще для проверки верности каких-либо действий или выражений.
Вещественные числовые типы
Вещественных числовых (числа с плавающей запятой или точкой) типов всего два — это float и double:
- float value_float; //4б
- double value_double; //8б
float используется довольно редко, в отличие от double. Этот тип применяется и для рыночных котировок, и для объемов сделок, и для значений прибыли и убытков и так далее.
Разница между double и float в точности после запятой. Для float максимальная точность – 24 знака после запятой, для double 53 знака.
Работа памяти компьютера больше подходит для хранения целых чисел. Дробные хранятся в памяти в виде степени целого числа. Например, 0,25 хранится как 2 во 2 степени, а вот 0,3 хранится уже не так хорошо, при изъятии его из памяти изначальное 0,3 превращается во что-то вроде 0,300000001.
Строковый тип string
Теперь рассмотрим строковые переменные типа string. В них содержатся строки текста. Это довольно сложный тип данных. Для работы со строками в mql5 существует больше десятка разных функций, с которыми мы познакомимся в других уроках.
string value_string = «йцукен»;
Я использовал операцию присвоения (=). Она говорит о том, что мы присваиваем переменной некое значение. Теперь при обращении к переменной value_string она будет возвращать нам значение «йцукен», пока мы это значение не перепишем.
Комментарии
В прошлом уроке вы уже видели комментарии. Сейчас хочу обратить внимание, что типа комментариев на самом деле два: строчный и блочный. Строчный – в виде двух идущих подряд слешей //.
Блочный комментарий выглядит по-другому. Он нужен для того, чтобы сразу комментировать целый блок кода. Ставим слеш и звездочку /*, а в конце */.
Тип enum
Специальный тип enum представляет из себя перечисление или именованное перечисление. Объявляется он немного сложнее, чем другие переменные.
Enum value_enum {num_1, num_2, num_3};
Эта запись говорит о том, что в перечислении value_enum содержатся 3 пронумерованных члена и к ним можно обращаться как по именам, так и по порядковым номерам. В mql5 целая куча предустановленных перечислений на все случаи жизни. Но этот тип мы будем разбирать в более поздних уроках.
Тип datetime
Следующий специальный тип – datetime:
datetime value_datetime;
Этот тип содержит в себе дату и время, которые хранятся в виде количества секунд, прошедших с 00:00 1 января 1970 года. Для работы с этим типом, как и с типом string, предусмотрено немало функций, и им также будет посвящен отдельный урок. При помощи переменной типа datetime можно, например, определять момент открытия нового бара или задать роботу время торговли или перерыва в торговле.
Тип color
Следующий специальный тип переменной – color:
color value_color;
Этот тип содержит в себе описание цвета. Присваивать ему значение можно тремя разными способами. Для именованных web цветов это можно сделать заданными ключевыми словами:
color value_color = clrBlue;
Сами web цвета можно посмотреть в документации mql5.
Также можно присвоить переменной значение в виде трех десятичных чисел или одним шестнадцатиричным числом. Но это не всегда удобно.
Типы color и datetime имеют смысл только для удобства представления и ввода параметров, задаваемых извне – из таблицы свойств советника или пользовательского индикатора (вкладка «Inputs»). Данные типов color и datetime представляются в виде целых чисел.
Пользовательские типы переменных
Это сложные типы данных, такие как классы и структуры. Называть их переменными или даже типами данных не совсем верно. Пользовательские типы данных тесно связаны с понятием ООП или объектно-ориентированное программирование, о котором у нас будет отдельный урок или даже несколько. Сейчас же смысла углубляться в это нет.
Объявление переменных
На этом по типам переменных у нас все. А мы перейдем к объявлению переменных. Мы уже объявляли много переменных, но дело в том, что переменные одного типа можно объявить так:
int a=3, b, c;
Print(«Переменная a=», a);
Print(«Переменная b=», b);
Print(«Переменная c=», c);
Результат: а=3, b=3, c=3.
int a, b=3, c;
Print(«Переменная a=», a);
Print(«Переменная b=», b);
Print(«Переменная c=», c);
Результат: а=1, b=3, c=3.
int a, b, c=3;
Print(«Переменная a=», a);
Print(«Переменная b=», b);
Print(«Переменная c=», c);
Результат: а=1, b=1, c=3.
При объявлении переменных в одну строку те, которые мы инициализировали явно, имеют присвоенные им значения. Те, которые не инициализировали, имеют предыдущее значение.
Код в программе выполняется слева направо. Новая строка как бы справа. В теории всю программу можно написать в одну строку.
Приведение типов
Преобразование одного типа данных в другой называется приведением типов. Оно производится неявным и явным способом. Присвоим переменной одного типа значение другого типа:
int a = с, b = 12, c=3;
char d = 120;
Print(«Переменная a=», a);
На примере Print у нас происходит неявное преобразование. Мы передаем int, компилятор уже сам преобразовывает ее в текст.
a = d;
Компилятор в данном случае не ругается. Диапазон значений a больше, чем у d.
Если d = a, мы получаем предупреждение, потому что диапазон у а больше.
Чтобы не было ошибки, можно явно преобразовать тип: d = (char)a; ошибка не исчезнет, но предупреждения не будет.
Область видимости переменной
Переменная, объявленная внутри какой-либо функции – локальная. Область видимости локальной переменной ограничена пределами функции, внутри которой она объявлена. Локальные переменные располагаются во временной области памяти соответствующей функции.
Глобальные переменные размещаются вне какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, они не локальны ни в каком блоке. Область видимости глобальных переменных – вся программа. Глобальные переменные доступны из всех функций, определенных в программе.
Модификатор input указывается перед типом данных. Изменять значение переменной с модификатором input внутри mql5-программы нельзя, такие переменные доступны только для чтения. Изменять их может только пользователь из окна свойств программы.
На этом все, всем пока!
С уважением, Дмитрий аkа Silentspec
Tlap.com
Топ Брокеров 2025 по версии TLAP
Центовые счета
Быстрый ввод и вывод
Платформа CopyFx для копирования сигналов
Отличное исполнение
На рынке с 1998 года
Низкие спреды
Быстрый ввод и вывод
Хорошее исполнение
Множество способов пополнения
С 2007 года на рынке
Счета Zero с нулевыми спредами
Система Копи-трейдинга
Хорошее исполнение
Более 500 торговых инструментов
Комиссия на пополнение 0%
Лицензия ЦБ РФ
Удобный ввод и вывод средств
Подходит для крупных трейдеров
Крупнейший форекс дилер в России
Компания – налоговый агент, выплата налогов без участия клиента
Торговля через MetaTrader 5
Форекс, фондовые индексы и нефть
Низкие спреды
Хорошее исполнение
Подходит для торговли советниками
Торговля криптовалютами
Центовые счета со стартовым лотом 0.01
Система копирования сделок Share4You
Низкие спреды
Подходит для новичков
Лучшие на рынке условия для работы с сеточниками и мартингейлом
Исполнение без вмешательства дилинга
Низкие спреды
Трейдинг Forex, CFD и Crypto
Полная прозрачность работы
Множество представительств компании, в том числе в Великобритании
На рынке с 2006 года
| ||
| ||
| ||
| ||
| ||
| ||
|