Содержание
Доброго времени суток!
В этом уроке мы изучим самые используемые типы данных, а также операции, которые можно с ними выполнять.
Данные бывают разными, будь то текст, целое или дробное число, логические данные, время или перечисление. Чтобы программа понимала что автор имеет в виду под одной или другой переменной, нужно им присвоить свой конкретный тип. Рассмотрим некоторые из них:
Типы данных:
- int — (сокращенно от integer) — целое число. Тип данных, который задается числам, не имеющим дробной части. Может быть отрицательным. Минимальное/максимальное значение которого может быть -2 147 483 648 / 2 147 483 647. Данный тип используется для указания номера тикета ордера, магик номера, тип ордера и т.д.
- double — дробное число. Присваивается всем переменным со знаком после запятой. Может быть отрицательным. Минимальное и максимальное значение 2.2250738585072014e-308 / 1.7976931348623158e+308, проще говоря — может быть очень большим и маленьким. В торговле применяется для определения торгового лота, цены на рынке, целей ордера, прибыли, комиссии и т.п.
- string — строка, текстовое значение. Любой текст, который вы хотите записать, хранится в стринге в кавычках. Максимальная длина записи string мне неизвестна, но я сохранял в ней пару тысяч слов и все уместилось. Стоит заметить, что длина при выводе переменной string в Print в журнал, будет обрезана до 64 символов. Данный тип данных используется в наименовании валютной пары, комментарию к ордеру, в любом текстовом лейбле на графике.
- bool — целый тип, который содержит в себе два значения: true — истина, равна 1 и false — ложь, равна 0. Сокращенно от boolean — логический. Нужен, когда нам необходимо узнать ответ какого-то логического выражения. В терминале используется для проверок: разрешена ли торговля, импорт DLL, реальный сейчас счет или демо и т.д.
- datetime — целый тип данных, который отображает время. Начинается с нуля, что эквивалентно 1970.01.01 0:00:00. Максимальное значение равно Новому Году 3000.12.31, так что на наш век объема памяти хватит. Во времени исчисляется текущее время терминала, время открытия бара, открытия или закрытия ордера и т.д.
- color — целый тип данных, хранит в себе информацию о цвете. Память элемента 4 байта, где первый не учитывается, а три остальные содержат RGB-составляющие цвета. Используется для обозначения цвета графических объектов, значков открытия, закрытия ордера, всего, что связано с цветом на графике..
Это основные типы данных Meta Trader 4, которыми я пользуюсь в 95% случаев, остальные используются крайне редко, их можно будет рассмотреть в других уроках, если будет такая необходимость.
Примеры:
Мы создадим переменную а, которая является целым числом типа int. Знак равно будет обозначать присваивание этой переменной значения, в нашем случае мы хотим, чтобы a равнялась двум. Чтобы завершить операцию, нужно поставить точку с запятой (;) в конце, иначе наше действие считается не завершенным, и компилятор выдаст ошибку.
0 |
int a = 2; |
Если же нам нужно создать переменную со значением дробного числа, то мы используем тип данных double.
0 |
double b = 3.5; |
Создать переменную без присвоения ей типа в данном языке программирования нельзя, всегда должна быть определенность в переменных. Можно создать объявленную переменную без значения, на это редактор не будет ругаться, но с точки зрения правильности кода у нее должно быть хоть какое то значение,. Поэтому если вам нужна переменная, но вы еще не знаете чему она будет равняться в будущем — приравняйте ее к нулю, впоследствии ей можно будет передать любое значение:
0 |
int a = 0; |
Переменная типа bool нужна в основном для проверки условий. В нашем случае мы задаем ее равной ложь.
0 |
bool check = false; |
Допустим мы создали переменную и по умолчанию присвоили ей значение false. Далее проверяем какое-либо условие, допустим сигнал на вход в рынок. Если этот сигнал подтверждается, то false меняем на true, а уже далее ниже по коду будет проверка на значение этой переменной и если она true — происходит открытие ордера.
Наименование переменных может быть любым, все зависит от вашего вкуса. У профессиональных программистов есть определенные правила для их создания, но как по мне — чем понятнее будет вам, тем лучше. Вы же пишите код для себя, а не для команды профессионалов, которым вам впоследствии нужно будет его передавать. Потом у вас образуется свой стиль, но нужно помнить, что наименование должно быть без пробелов. Вы не можете назвать переменную my integer, но можете использовать такой вариант: my_integer.
Также не стоит:
- называть переменные русскими и другими буквами, отличными от английского алфавита;
- делать слишком длинное название, например my_first_created_viriable_is_awesome, это неудобно. Имя не может превышать 63 знака.
- называть переменную непонятными символами, например askjrhk. Вам самим будет сложно потом понять за что она отвечает;
Нельзя:
- Использовать только цифры в наименовании переменной.
- Идентификатор не может совпадать с уже использованным, зарезервированным программным словом, предопределенной переменной или константой, например: Open, High, Ask, Volume, color, if, return, continue, OBJPROP_ANCHOR и т.д.
Стринговая переменная создается по тем же правилам, только текст обязан быть заключен в кавычки:
0 |
string text = "Я прохожу второй практический урок по программированию"; |
Переменная цвета будет отображать тот цвет, который вы возьмете из набора Web-цветов в справочнике, либо укажете сами через палитру цветов RGB. На примере ниже два цвета: красный и пользовательский коралловый.
0 1 |
color my_color1 = clrRed; color my_color2 = C'226,83,83'; |
Несколько переменных одного типа можно задавать как отдельно, объявляя каждый по очереди, либо же через запятую, не забыв в конце поставить точку с запятой.
0 1 2 |
int a1 = 1; int b1 = 2; int c1 = 3; |
или
0 |
int a1 = 1, b1 = 2, c1 = 3; |
Арифметические операции
С переменными можно совершать математические операции, такие как:
- сложение/вычитание
- умножение/деление
- изменение знака
- Определять остаток от деления
0 1 2 3 4 5 6 |
int a1 = 4, b1 = 4, c1 = 4, d1 = 4, e1 = 4, f1 = 4; a1 = a1 + 1; //равно 5 b1 = b1 - 2; //равно 2 c1 = c1 * 3; //равно 12 d1 = d1 / 2; //равно 2 e1 = -e1; //равно -4 f1 = f1%3; //равно 1 |
0 1 2 |
int a2 = 3, b2 = 4; a2++; //равно 4 b2--; //равно 3 |
Операции присваивания
Данные операции могут присваивать значение одной переменной к другой, либо присваивать к ней отдельные числа. Действия такие же, как математические, просто данный метод смотрится короче, чем предыдущий, не нужно два раза повторять одну переменную:
0 1 2 3 4 5 |
int a3 = 2, b3 = 1, c3 = 7, d3 = 8; int f3 = 3; a3 += 5; //равно 7 b3 -= f3; //равно -2 c3 *= f3; //равно 21 d3 /= 2; //равно 4 |
Рассмотрим еще пример. Чтобы проверить вычисления, вы можете воспользоваться принтом в журнал.
0 1 2 3 4 |
int a4 = 4; double b4 = 5.3; double c4 = b4/a4; //равно 1.325 double d4 = (a4 + c4) * b4; //равно 28.2225 //Print(c4 + " " + d4); |
На первом уроке мы делали принт в журнал и комментарий «Hello World», теперь мы можем не повторять эту строчку два раза, а создать переменную с этим текстом:
0 1 2 |
string q = "Hello World!"; Print(q); Comment(q); |
Принтом можно выводить математические функции в журнал, но чтобы в редактора не было предупреждений, эти данные нужно преобразовать в тип string. Т.е. если у нас целое число, равное единице, то мы должны перевести его в текст «1». Если вы скопировали принт с математического примера выше, то у вас должно быть два предупреждения, это считается некорректным.
0 1 2 3 4 5 6 7 8 |
int a5 = 2; double b5 = 2.3; bool c5 = true; datetime d5 = D'01.06.2020'; Print("a5="+IntegerToString(a5)); Print("b5="+DoubleToString(b5,1)); Print("c5="+c5); Print("d5="+TimeToString(d5,TIME_DATE|TIME_MINUTES)); |
В первом принте мы преобразуем int в string. У функции IntegerToString нет параметров, поэтому в круглых скобках мы указываем только переменную а5. Во втором примере у функции DoubleToString два параметра — первый это наша переменная, второй отображает количество знаков после запятой, в нашем случае это один знак, потому что больше и не нужно. Количество знаков после запятой в основном нужно, чтобы корректно выводить значение цены, прибыли, других расчетов.
Тип данных bool не нужно преобразовывать, если мы хотим получить текст true или false. Если же нам нужно числовое значение 1 или 0, то тогда нужно воспользоваться функцией IntegerToString.
В последнем примере мы переводим время в текст, для этого нужно первым параметром TimeToString указать нашу переменную времени, а вторым формат вывода, в нашем случае это дата (TIME_DATE) и время вплоть до минут (TIME_MINUTES).
Также нужно заметить, что если указывать данные в Print через запятую, а не через знак «+», то ошибки преобразования в редакторе не будет, но и само преобразование не выберет за вас корректное количество знаков после запятой, либо формат времени, поэтому рекомендуется делать его в любом случае.
Преобразование можно делать и наоборот — из string в int, double, time и т.д. Тут я не вижу нужны расписывать подробно, можно ознакомиться в справке.
Заключение
В этом уроке мы изучили азы математических операций и разнообразные типы данных. В будущем без них никак. Все примеры выше вы можете проверить и опробовать в приложенном файле скрипта 1.1 Data type and Arithmetic, воспользовавшись принтом или комментарием. Можно попробовать составить более сложные уравнения. После практики можете переходить к следующему уроку.
[download url=»http://www.davinci-fx.com/wp-content/uploads/2021/01/1.1-Data-type-and-Arithmetic.rar» title=»Скачать 1.1 Data type and Arithmetic.mq4″]
2 комментария. Оставить новый
А почему нет домашних заданий к урокам?)
Здравствуйте, Мари!
Потому что трейдеры это сознательные ученики 🙂
А вообще, лучший ответ в сети:
«Из-за высокой нагрузки дети меньше спят. Они засиживаются над учебниками допоздна и переживают из-за оценок, в итоге появляются проблемы со сном». 🙂