Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Некоторые основные понятия




Итак, предметом нашего интереса является программа, написанная на языке MQL4. Перед тем как мы приступим к детальному изучению правил построения программ, необходимо обозначить основные понятия, характеризующие программу и её взаимоотношения с информационной средой. Известно, что клиентский терминал MetaTrader 4 работает в интерактивном режиме. Ситуация на финансовом рынке постоянно меняется, и это находит своё отражение на графиках финансовых инструментов в клиентском терминале. Информацию об изменениях цен на рынке в клиентский терминал приносят тики.

Понятие тика

 

Тик — это событие, характеризующееся новой ценой по финансовому инструменту в некоторый момент времени.

Поставщиком тиков для каждого клиентского терминала является сервер, установленный в дилинговом центре. В зависимости от ситуации на рынке тики могут поступать часто или редко, но каждый из них несёт новую котировку - стоимость единицы одной валюты, выраженную в единицах другой валюты.

Прикладная программа, работающая в составе клиентского терминала, может находиться в работе в течение длительного периода, например, несколько дней или недель. Каждая прикладная программа исполняется в соответствии с правилами, установленными для программ определённого вида. Эксперт, например, не работает всё время безостановочно. Обычно эксперт запускается в работу в момент, когда приходит новый тик. По этой причине мы охарактеризовали тик не просто как новую котировку, а как событие, которое обрабатывается клиентским терминалом.

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

Понятие управления

 

Говоря о последовательности выполнения кода в программе и её взаимодействии с клиентским терминалом, мы будем использовать термин "управление".

Управление — это процесс выполнения действий, предопределённых алгоритмом программы и свойствами клиентского терминала. Управление может передаваться внутри программы от одной программной строки к другой, а также между программой и клиентским терминалом.

Передача управления больше всего напоминает передачу права произносить речь на собрании от одного оратора к другому в нашей обычной жизни. Подобно тому, как ораторы выступают на собрании и передают друг другу слово, клиентский терминал и программа передают друг другу управление. Причём клиентский терминал играет главенствующую роль. Его статус выше, чем у программы, так же как полномочия председателя собрания выше, чем у рядового оратора.

Пока программа не запущена в работу, управление находится в ведении клиентского терминала. В момент, когда появляется новый тик, клиентский терминал передаёт управление программе. С этого момента начинается исполнение программного кода.

Клиентский терминал, передавший управление программе, не останавливает свою работу. Он продолжает полноценно работать в течение всего времени, пока он запущен на компьютере. Программа же может начать работать только в тот момент, когда клиентский терминал передал ей управление (подобно тому, как председатель собрания управляет собранием всё время, а текущий оратор держит слово только в течение ограниченного времени).

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

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

 


Рис. 2. Передача управления в программе

 

Программа, получившая управление от клиентского терминала (исполняющаяся программа), начинает выполнять некоторые действия в соответствии с заложенным в неё алгоритмом. Программа содержит программные строки; общий порядок исполнения программы состоит в последовательной передаче управления от одной строки к другой в направлении сверху вниз. Что и по каким правилам может быть написано в этих строках, будет подробно рассмотрено в последующем изложении.

Здесь же важно подчеркнуть, что каждый логически завершённый фрагмент исполняется - например, производятся какие-либо математические вычисления, выводится текст сообщения на экран, формируется торговый приказ и пр. До тех пор пока текущий фрагмент программы не выполнен, он удерживает управление. После того как он выполнен полностью, управление передаётся следующему фрагменту. Таким образом, управление внутри программы передаётся от одного логически завершённого фрагмента к другому по мере их исполнения. Когда будет исполнен последний фрагмент, программа передаст (вернёт) управление клиентскому терминалу.

 

Понятие комментария

 

Программа состоит из двух видов записей: тех, которые составляют собственно программу, и тех, которые являются лишь пояснительным текстом к ней.

Комментарий - это необязательная и неисполняемая часть программы.

Комментарий - это необязательная часть программы. Готовая программа будет работать в соответствии с заложенным в неё кодом независимо от того, есть в ней комментарии или нет. Однако комментарии очень облегчают понимание кода программы. Они могут быть однострочными и многострочными. Однострочный комментарий - это любая последовательность символов, перед которой стоят две косые черты (//). Признак однострочного комментария заканчивается вместе с переводом строки. Многострочный комментарий начинается символами /* и заканчивается символами */ (см. рис. 3).

Комментарии используются для пояснения кода программы. Хорошая программа всегда содержит комментарии.


Рис. 3. Примеры комментариев в программе.

 

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

Константы и переменные

 

Понятия "константа" и "переменная" рассматриваются в одном разделе, потому что эти понятия очень близки по своей сущности.

Понятие константы

 

Константа — это составная часть программы; объект, имеющий значение.

Понятие "константа" в программе аналогично тому же понятию, используемому в математических уравнениях. Это — неизменная величина. Для более полного описания сущности константы, используемой в алгоритмическом языке, обратимся к известным физическим и математическим константам.

Человечеством открыты такие константы, значение которых от нас не зависит. К ним в физике относится, например, ускорение свободного падения, равное 9,8 м/с/с, а в математике - число пи = 3,14. Константы такого рода не могут быть признаны аналогией константы в алгоритмическом языке.

В математических уравнениях также используется понятие константы. Например, в уравнении Y = 3 * X + 7 числа 3 и 7 являются константами. Значение таких констант в полной мере зависит от воли человека, составившего уравнение. Это - ближайшая аналогия констант, используемых в программах на MQL4.

Константа (в виде значения) заносится программистом в код на этапе его создания. Константа характеризуется только своим значением, поэтому термины "константа" и "значение константы" являются полными синонимами.

Примеры констант:

37, 3.14, true, "Kazan"

 


Рис. 4. Константа в памяти компьютера.

 

Свойства констант

 

Свойством константы является её способность удерживать значение, заданное программистом, в течение времени работы программы и сообщать это значение программе при запросах программы (рис. 5). Для каждой константы, содержащейся в программе, компьютер отводит часть памяти необходимого размера. Значение константы не может быть изменено во время исполнения программы ни программистом, ни компьютером (рис. 6).

 

Значение константы всегда остаётся неизменным.


Рис. 5. Состояние ячейки памяти константы при сообщении значения программе.

 

Значение константы не может быть изменено в процессе работы программы.


Рис. 6. Изменение значения константы во время работы программы невозможно.

 

Понятие переменной

 

Переменная -это составная часть программы, имеющая значение и название.

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

Термин "идентификатор переменной" является полным синонимом терминов "имя переменной" и "название переменной". Переменная заносится создателем кода в его текст на этапе программирования в виде имени переменной. Имя переменной (идентификатор) может состоять из букв, цифр, знака подчёркивания. Однако начинаться оно должно с буквы. Язык MQL4 чувствителен к регистру букв, т.е. S и s - не одно и то же.

Примеры идентификаторов переменных: Alpha, alFa, beta, NuMbEr, Num, A_37, A37, qwerty_123
Следующие идентификаторы представляют названия разных переменных: a_22 и А_22; Massa и MASSA.
Примеры значений переменных: 37, 3.14, true, "Kazan".

 

Свойства переменной

 

Свойством переменной является её способность получать некоторое значение от программы, удерживать его в течение времени работы программы и сообщать это значение программе при запросах программы. Для каждой переменной в программе компьютер отводит часть памяти необходимого размера. Обратимся к рис. 7 и проследим, как устроены переменные.

 


Рис. 7. Переменная в памяти компьютера.

 

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

Если на пути выполнения программы встречается имя переменной, то программа обращается к этой переменной, чтобы получить для обработки её значение. Если программа обратилась к переменной, последняя сообщает программе своё значение. При этом значение переменной остаётся неизменным. Программа же получает в своё распоряжение копию значения, содержащегося в ячейке памяти, выделенной для этой переменной (рис. 8).

 

При сообщении значения переменной программе оно остаётся неизменным. Название (имя) переменной никогда не изменяется.


Рис. 8. Состояние ячейки памяти переменной при сообщении значения программе.

 

В течение некоторого времени переменная не имеет отношений с исполняемой программой. В это время программа может обращаться к другим переменным или производить необходимые вычисления. В период между случаями общения с программой переменная удерживает своё значение, т.е. сохраняет его неизменным.

В соответствии с выполняющимся алгоритмом, заложенным в программу, может потребоваться изменение значения переменной. В этом случае программа сообщает переменной её новое значение, а переменная получает это значение от программы. При этом в ячейке памяти производятся необходимые преобразования, в результате которых предыдущее значение переменной удаляется, а на его месте образуется новое значение переменной, сообщённое программой (рис. 9).

 

Значение переменной может быть изменено в результате воздействия программы. Название (имя) переменной остаётся неизменным всегда.


Рис. 9. Состояние ячейки памяти переменной при получении значения от программы.

Примеры констант и переменных в программе

 

В программе константы и переменные встречаются в операторах. В данном тексте программы А и В являются переменными, а 7 и 3 - константами:

A = 7; // Строка 1
B = A + 3; // Строка 2

Проследим, как программа работает с константами и переменными. Исполняя эти строки, программа выполнит следующие шаги:

Первая строка:

Константа 7 сообщает своё значение программе.

Переменная А получает значение 7 от программы.

Вторая строка:

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

Константа 3 сообщает своё значение программе.

Программа обращается к переменной А по имени.

Переменная А сообщает своё значение (7) программе.

Программа производит вычисления (7 + 3).

Переменная В получает значение 10 от программы.

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

В = 33; // Строка 3

В этом случае при исполнении программы будет выполнено следующее:

Константа 33 сообщает своё значение программе.

Переменная В получает (новое) значение 33 от программы.

Легко заметить, что на некотором этапе выполнения программы переменная В получает значение 10, а в ходе дальнейших вычислений - значение 33. В результате этих событий название переменной В остаётся неизменным, а значение переменной изменяется.

На рис. 10 показаны константы и переменные в тексте программы:


Рис. 10. Константа и переменная в программе.

Типы данных

 

Всем хорошо известно, что складывать и вычитать можно только однотипные величины. Например, яблоки можно суммировать с яблоками, но яблоки нельзя суммировать с квадратными метрами или с температурой. Аналогичные ограничения есть и в большинстве современных алгоритмических языков.

Подобно тому, как обычные объекты имеют типы характеристик цвета (красный, синий, жёлтый, зелёный), вкуса (горький, кислый, сладкий), количества (полтора, два, семь), в языке программирования MQL4 данные различаются по типу. Говоря о типе данных, мы будем иметь в виду тип значения константы, переменной и значения, возвращаемого функцией (понятие функции рассматривается в разделе Функции).

В языке MQL4 различают следующие типы (констант, переменных и значений, возвращаемых функциями):

int - целые числа.

double - действительные числа.

bool - значения логического типа.

string - значения строкового типа.

color - значения цветового типа.

datetime - значение даты и времени.

 

Тип int

 

Значения типа int - это целые числа. К этому типу относятся значения, которые являются целыми по своей сути. Примерами целых чисел могут служить: количество баров в окне финансового инструмента (16000 баров), количество открытых и отложенных ордеров (3 ордера), дистанция в пунктах от текущего курса финансового инструмента до цены открытия ордера (15 пунктов). Количество таких объектов, как события, также бывают только целыми. Например, количество попыток открыть ордер не может быть равным полутора, а только одной, двум, трём и т.д.

Различают 2 вида целых значений:

Десятичные значения могут состоять из цифр 0 - 9 и быть положительными или отрицательными: 10, 11, 12, 1, 5, -379, 25, -12345, -1, 2.

Шестнадцатеричные значения могут состоять из букв латинского алфавита от A до F или от a до f, цифр от 0 до 9, обязательно должны начинаться с 0x или 0X и принимать положительные и отрицательные значения: 0x1a7b, 0xff340, 0xAC3 0X2DF23, 0X13AAB, 0X1.

Значения типа int должны находиться в диапазоне чисел от -2 147 483 648 до 2 147 483 647. Если значение константы или переменной находится за пределами указанного диапазона, то результат работы программы будет не определён. В памяти компьютера значения констант и переменных типа int занимают 4 байта.

Пример использования в программе переменной типа int:

int Art = 10; // Пример целой переменной

int B_27 = -1; // Пример целой переменной

int Num = 21; // Пример целой переменной

int Max = 2147483647; // Пример целой переменной

int Min = -2147483648; // Пример целой переменной

Тип double

 

Значения типа double - это действительные числа, содержащие дробную часть.

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

Иногда при составлении программ могут возникнуть трудности с определением типа переменной, т.е программисту бывает не сразу понятно, к какому типу (int или double) относится переменная. Рассмотрим небольшой пример:

Программа открыла в течение недели 12 ордеров. Какого типа должна быть переменная А, учитывающая среднее количество ордеров, открываемых этой программой в день? Очевидно, что ответ: A = 12 ордеров / 5 дней. То есть, переменная А = 2.4 должна учитываться в программе, как double, т.к. у этого значения есть дробная часть. А какого типа должна быть эта же переменная А в случае, если общее количество открытых за неделю ордеров составляет 10? Казалось бы, что если 2 (10 ордеров / 5 дней = 2) не имеет дробной части, то переменная А может учитываться как int. Однако это рассуждение ошибочно. Текущее значение некоторой переменной может иметь дробную часть, состоящую из одних нулей. Но важно то, что значение этой переменной является действительным по своей сути. В этом случае переменная А также должна иметь тип double, и при записи константы в программе обязательно отображается разделяющая точка: А = 2.0

 

Значения действительных констант и переменных состоят из целой части, десятичной точки (.) и дробной части. Они могут принимать положительные и отрицательные значения. Целая и дробная части составляются из цифр 0 - 9. Количество значащих цифр после десятичной точки может достигать 15. Например:

27.12 -1.0 2.5001 -765456.0 198732.07 0.123456789012345

Интервал значений типа double находится в пределах от -1.7 * e-308 до 1.7 * e308. В памяти компьютера значения констант и переменных типа double занимают 8 байт.

Пример использования в программе переменной типа double:

double Art = 10.123; // Пример действительной переменной

double B_27 = -1.0; // Пример действительной переменной

double Num = 0.5; // Пример действительной переменной

double MMM = -12.07; // Пример действительной переменной

double Price_1 = 1.2756; // Пример действительной переменной

Тип bool

 

Значения типа bool - это значения логического типа, содержанием которых являются ложь и истина.

Для того чтобы лучше усвоить смысл понятия логический тип, рассмотрим небольшой пример из обыденной жизни. Предположим, что у учителя возникла необходимость вести учёт наличия учебников у учеников. В этом случае учитель составит на листе бумаги список учеников и справа в строке будет делать пометки о том, есть у ученика учебник или нет. Например, он может ставить галочку и прочерк:

Список учеников Учебник физики Учебник биологии Учебник химии
  Иванов V - -
  Петров V - V
  Сидоров - V V
... ... ... ... ...
  Миронов V V V

 

Значения в правых столбцах будут принимать только 2 возможных значения: верно или неверно. Эти значения нельзя отнести к ранее рассмотренным типам данных, поскольку они не являются числами. Они также не являются значениями цвета, вкуса, количества и т.д. Тем не менее, они несут важную смысловую нагрузку. В языке MQL4 подобные значения называют логическими. Характеристикой констант и переменных типа bool является то, что они могут принимать лишь 2 возможных значения - истина (true, True, TRUE, 1) или ложь (false, False, FALSE, 0). В памяти компьютера значения констант и переменных типа bool занимают 4 байта.

Пример использования в программе переменной типа bool:

bool aa = True; // Логическая переменная аа имеет значение истина

bool B17 = TRUE; // Логическая переменная B17 имеет значение истина

bool Hamma = 1; // Логическая переменная Hamma имеет значение истина

 

bool Asd = False; // Логическая переменная Asd имеет значение ложь

bool Nol = FALSE; // Логическая переменная Nol имеет значение ложь

bool Prim = 0; // Логическая переменная Prim имеет значение ложь

Тип string

 

Значение типа string - это значение строкового типа, представляющее собой набор символов кода ASCII.

В обычной жизни аналогичное содержание имеют названия, например, магазинов, марок автомобилей и пр. Значение строкового типа записывается в виде набора символов, заключённого в двойные кавычки (не путать двойные кавычки с двумя одинарными!). Кавычки используются только для того, чтобы обозначить начало и окончание значения строковой константы, а собственно значением является совокупность символов, обрамлённая кавычками.

Если необходимо ввести в строку двойную кавычку ", то перед ней надо поставить символ обратной косой черты: \. В строку могут быть введены любые специальные символьные константы, перед которыми стоит символ обратной косой черты \. Длина строковой константы - от 0 до 255 символов. Если длина строковой константы превосходит максимальную, лишние символы справа отбрасываются, и компилятор выдаёт соответствующее предупреждение. Сочетание из двух символов, первый из которых – обратная косая черта \, обычно является общепринятым и воспринимается большинством программ как указание на выполнение определённого форматирования текста. В тексте это сочетание не отображается. Например, сочетание \n указывает на необходимость переноса строки, \t указывает на табуляцию и т.д.

Значение строкового типа записывается в виде набора символов, заключённого в двойные кавычки: "MetaTrader 4", " Stop Loss", "Ssssstop_Loss", "stoploss", "10 pips". Собственно строковым значением является набор символов, находящийся внутри кавычек. Кавычки используются лишь для обозначения границ значения. Внутреннее представление - структура размером в 8 байт.

Пример использования в программе переменной типа string:

string Prefix = "MetaTrader 4"; // Пример строковой переменной

string Postfix = "_of_my_progr. OK"; // Пример строковой переменной

string Name_Mass = "History"; // Пример строковой переменной

string text ="Верхняя строка\nНижняя строка"; // текст содержит символы перевода строки

Тип color

 

Значение типа color - это значение цветового типа.

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

Значения цветовых констант и переменных могут быть представлены одним из трёх видов:




Поделиться с друзьями:


Дата добавления: 2014-12-29; Просмотров: 397; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.