Форум трейдеров рынка ФОРЕКС (FOREX)


MetaQuotes Language II - учимся программировать. Урок №1

Дата:  3.3.07 | Раздел: MQL программирование

MetaQuotes Language II - учимся программировать. Урок №1

MetaQuotes Language II



Язык программирования MetaQuotes Language II используется при написании собственных программ -экспертов (expert advisors) для автоматизации контроля торговых процессов , а также для реализации собственных торговых стратегий . MetaQuotes Language II прост в изучении , использовании и отладке . В состав MQL II включено большое количество переменных , необходимых для контроля текущих и прошлых котировок , основные арифметические и логические операции , встроены основные индикаторы и команды по открытию позиций и контролю над ними . По синтаксису похож на язык программирования EasyLanguage от TradeStation Technologies, Inc., однако есть некоторые отличия . Для написания кода программы используется текстовый редактор экспертов MetaEditor, умеющий выделять цветом различные конструкции языка MQL II, позволяя пользова - телю легче ориентироваться в тексте экспертной системы . Комментарии начинаются с символов //(двойной слеш ). Также комментарии можно выделять парой 'слеш -звёздочка ' - 'звёздочка -слеш ' (/*[comments]*/ как в языке программирования Си ). Встроенный редактор выделяет комментарии серым цветом .

Для отладки и контроля работающей стратегии ведется лог -файл , где сохраняется информация о сгенерированных сигналах , вывод переменных и результаты проведения сделок . Логи работы экспертов находятся в файле /logs/YYYYMMDD.log в каталоге MetaTrader. Доступ к текущему логу возможен прямо из нижнего окна "Terminal" (вкладка Journal).

В качестве справочной системы по языку MQL II используется окно MetaQuotes Language Dictionary, вызываемое при нажатии на кнопку Dictionary либо из меню Tools. Краткий справочник содержит разбитые на категории функции , операции , зарезервированные слова etc и позволяет узнать описание каждого используемого элемента , входящего в язык .

1. Основные языковые конструкции

Как любой другой язык , MQL II имеет набор основания .

Основным объектом языка являются данные . Данные могут быть 3 типов : числовые , логические или строковые . Все числовые значения имеют формат double. Логические данные могут принимать значения True или False. Строка - это набор символов , выделенный апострофами . Строка символов может называться также текстовой строкой . Данные могут храниться в переменных соответствующих типов , либо могут быть непосредственно представлены в исходном тексте программы .

Предложение (MetaQuotes Language statement) представляет собой законченную инструкцию . Предложения могут содержать зарезервированные слова , операторы , данные , переменные , выражения , знаки пунктуации и всегда заканчиваются знаком ';' (точка с запятой , semicolon). Зарезервированными словами будем называть предопределённые слова , имеющие специфическое значение или специальное назначение . Операторами называются символы , представляющие собой обозначение неких операций над данными , переменными и (или ) выражениями . Переменные необходимы для хранения числовых ,строковых или логических данных . Выражением будем называть комбинацию зарезервированных слов , переменных , данных , операторов , результатом которой является значение одного из 3 используемых в языке типов :числовое ,логическое либо строка символов .Знаки пунктуации используются для представления выражений ,определения параметров ,разделения слов либо для переупорядочения последовательности вычислений .

2. Знаки пунктуации

Знак

Название

Описание

;

Semicolon

Завершает инструкцию MetaQuotes Language II

( )

Parentheses

Группирует значения в выражении для изменения порядка вычислений. Выделяют параметры в функциях и инициализируют выражения в описании переменных. Выделяют инициализирующие значения для переменных и массивов в секции описания переменных.

,

Comma

Разделяют параметры при вызове функции. Разделяют переменные в секции описания переменных. Разделяют числа в описании размерности массивов. Разделяют индексы при доступе к элементам массива.

:

Colon

Используется в секции описания переменных в качестве начала списка переменных

" "

Quotation marks

Выделяют текстовую строку (строку символов)

[ ]

Square brackets

Выделяют числа при определении размерности массива. Выделяют числа(индексы) при доступе к какому-либо элементу массива. Выделяют номер периода при доступе к <историческим> данным

{ }

Curty brackets

Операторные скобки. Могут использоваться вместо begin : end. Выделяют набор инструкций в блок

/* */

Comment brackets

Выделяют комментарий

//

Double slash

Определяет начало однострочного комментария




3. Операторы

Операторы делятся на 6 групп : оператор присваивания, строковый оператор , математические операторы , относительные операторы , логические операторы , операторы инкремента и декремента.


3.1. Оператор присваивания

Для назначения переменным какого -либо значения (числового , строкового или логического , в зависимости от типа переменной ) используется оператор присваивания '=' (знак равенства ). Присваиваемое значение может быть результатом выражения . Пример :

Variable: Counter(0);
...
Counter = Counter + 1 ;

В результате переменной Counter будет присвоено значение 1 . Присваивать значения можно также и элементам массива .

Примечание : знаком равенства обозначается также и оператор сравнения "равно ". В логических выражениях If-Then и While знак равенства воспринимается как оператор сравнения .


3.2. Строковый оператор

Для манипулирования текстовыми строками имеется всего один оператор '+' (знак плюс ). Он обеспечивает объединение двух строк . Пример :

Variable: String(" ");

:

String = "some_" + "text";

В результате переменная String будет содержать текстовую строку "some_text". Допускается также объединение строк с числовыми и логическими значениями . В этом случае перед объединением числовые и (или ) логические значения будут приведены к строковому типу . Пример :

String = "string" + 1 ;

В результате переменная String будет содержать текстовую строку "string 1 ".

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

 

3.3. Математические операторы

Четыре основных математических действия : сложение - '+' (знак плюс ); вычитание - '-' (знак минус ); умножение - '*' (звёздочка ); деление - '/' (слеш ). Используются в математических выражениях для вычисления числовых значений .

Примеры математических выражений :

( Ask + Bid ) / 2 , High[1 ] + 20 * Point

 

3.4. Относительные операторы

Используются для сравнения двух значений одного и того же типа . Первое значение сравнивается со вторым , в результате чего формируется логическое значение True (истина ) или False (ложь ). Меньше - '<' (левая угловая скобка ); больше - '>' (правая угловая скобка ); равно - '=' (знак равенства ); не равно - '<>'; меньше или равно - '<='; больше или равно - '>='; 'crosses over'; 'crosses under'. Логические значения , полученные в результате сравнительного выражения , используются в управляющих структурах MetaQuotes Language II. Пример :

If FreeMargin < 1 000 Then Exit;

Результат сравнительного выражения может быть присвоен логической переменной (переменная , которая может принимать значения True или False). Так как знак равенства обозначает одновременно и оператор присваивания , и относительный оператор "равно ", то в данном случае , для преодоления неоднозначности , в качестве относительного оператора "равно " необходимо использовать '==' (два знака равенства подряд ), как это принято в языке программирования Си . Пример :

ConditionValue = OrderValue(cnt,VAL_TYPE) ==

OP_SELL;

Текстовые строки сравниваются в лексикографическом порядке . То есть строка "aaa" меньше строки "zzz". При сравнении логических значений следует иметь в виду , что числовым значением логического значения True является 1 , а значением False - 0.

Для сравнения данных , хранящихся в массивах можно использовать операторы 'crosses over' (синоним 'crosses above') и 'crosses under' (синоним 'crosses below'). Эти операторы используются для сравнения пары подряд идущих значений одного массива с парой значений другого массива .

'crosses over' - текущее значение больше и предыдущее значение меньше или равно ;

'crosses under' - текущее значение меньше и предыдущее значение больше или равно.

Пример :

If Close[0] crosses over Open[0] Then Alert("Close price

crosses over open price!");

 

3.5. Логические операторы

Позволяют комбинировать логические значения . Логическое ИЛИ - '|' (вертикальная черта , broken bar); логическое И - '&' (амперсант ); логическое НЕТ - '!' (восклицательный знак ). Логическим операторам соответствуют зарезервированные слова OR, AND, NOT. Пример :

If FreeMargin > 1 00 and FreeMargin < 1 000 then print(

"Free margin is ", FreeMargin );

Заметим , что операции OR и AND являются двухместными , то есть оперируют с двумя значениями . Операция же NOT является одноместной , то есть , применима только к одному значению . Пример :

Variable: Condition 1 ( True );

:

Condition 1 = FreeMargin >= 1 000;

If not Condition 1 then exit;

Также логическое НЕТ может быть применено к сравнительному оператору "равно ". Такая конструкция будет воспринята компилятором как оператор "не равно ".

Ниже приведём таблицы результатов логических операций .

 

Значение 1

Значение 2

Значение 1 OR Значение 2

True

True

True

True

False

True

False

True

True

False

False

False

Значение 1

Значение 2

Значение 1 AND Значение 2

True

True

True

True

False

False

False

True

False

False

False

False

Значение 1

Значение 2

NOT Значение 1

True

 

False

False

 

True


3.6. Операторы инкремента и декремента

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

Инкремент единицы - "++"; декремент единицы - "--"; инкремент числового выражения - "+="; декремент числового выражения - "-="


Примеры :

Counter++; // same as Counter = Counter + 1 ;
Counter--; // same as Counter = Counter - 1 ;
Counter -= 1 0; // same as Counter = Counter - 1 0;

По аналогии с инкрементом и декрементом числового выражения можно использовать операторы "*=" и "/=".

Примеры :

SomeNumber *= 7; // same as SomeNumber =
SomeNumber * 7;
SomeNumber /= 11 ; // same as SomeNumber =
SomeNumber / 11 ;

Справа от операторов "+=", "-=", "*=", "/=" должно находиться любое числовое выражение .
Продолжение читайте в следующем номере .

По материалам компании
MetaQuotes Software Corp.
http://www.metaquotes.ru



Материал предоставлен : http://forextimes.ru/magazine




Cтатья опубликована на сайте "Форекс форум. Торговля на Forex. Cообщество трейдеров":
http://youfx.ru

Адрес статьи:
http://youfx.ru/modules/myarticles/article_storyid_1.html