Создание
Для создания скриптов используются язык программирования торговых стратегий MetaQuotes Language 4 (MQL4) и редактор MetaEditor. Чтобы запустить редактор советников, необходимо выполнить команду «Создать» контекстного меню окна «Навигатор — Скрипты», команду меню «Сервис — Редактор MetaQuotes Language», нажать клавишу F4 или кнопку панели «Стандартная». При создании MQL4-программы автоматически откроется мастер создания советников, позволяющий быстро создавать новые MQL4-программы. В нем в качестве типа создаваемого объекта необходимо указать «Скрипт»
и заполнить поля требуемыми данными:
.
- Имя — название скрипта;
- Автор — имя автора;
- Ссылка — адрес сайта разработчика.
После этого в редакторе открывается окно нового скрипта. Файл с исходным текстом (*.MQ4) скрипта автоматически помещается в папку /EXPERTS/SCRIPTS клиентского терминала. С этого момента можно приступать к написанию исходного текста программы.
По завершении разработки необходимо скомпилировать скрипт. Для этого в редакторе советников необходимо выполнить команду меню «Файл — Компилировать», нажать клавишу F5 или кнопку панели инструментов. В результате успешной компиляции создается исполняемый файл программы с расширением *.EX4, автоматически помещаемый в папку /EXPERTS/SCRIPTS. Список всех скриптов можно просмотреть в окне «Навигатор — Скрипты» клиентского терминала.
Редактирование скриптов
Чтобы приступить к редактированию уже существующего скрипта из терминала, необходимо выполнить команду «Изменить» контекстного меню окна «Навигатор — Скрипты». При этом откроется редактор советников, в который уже будет загружен исходный текст выбранного скрипта. После изменения исходного кода необходимо повторно скомпилировать его и получить новый исполняемый EX4-файл. В противном случае в терминале будет использоваться неизмененная, предыдущая версия MQL4-программы.
Язык MQL — Урок 4 «улучшенный расчет лота»
На предыдущем уроке Язык MQL — Урок 3 «расчет лота» мы научили наш скрипт «test » рассчитывать лот в зависимости от свободных средств на торговом счете форекс. Но чего то ему не хватает, давайте взглянем еще раз на рисунок:
Вот оно. — Лот у нас получился с 4 знаками после запятой. А брокер форекс требует 2 знака после запятой. Конечно в ручную не составит труда откинуть лишние 2 знака, но мы стремимся автоматизировать нашу торговлю , т.е. всю работу свалить на компьютер. Кроме того — на рисунке не понятно по какой валютной паре рассчитан автоматически лот. Да и цифру максимального риска не помешает видеть на экране монитора.
Итак, давайте продолжим улучшать наш скрипт «test».
Для начала заставим компьютер отбрасывать лишние цифры . Округлять нельзя. Ведь при округлении получится не то что нам надо (нам надо 0.06, а при округлении будет 0.07 — это больше указанного нами риска).
Для того чтобы узнать сколько знаков после запятой разрешено вашим брокером форекс — воспользуемся известной нам функцией MarketInfo ( string symbol, int type).
Только вторым параметром будем передавать MODE_LOTSTEP — шаг изменения размера лота .
double Step = MarketInfo ( Symbol (), MODE_LOTSTEP ); переменная Step будет содержать шаг изменения лота.
Если разделить наш лот на шаг (например 0.01) мы получим: 0.0684/0.01=6.84
Теперь возьмем целую часть от этого числа (функция MathFloor ()) = 6 и умножим на шаг (0.01) получим 0.06 (то что и требовалось).
Объединим это с нашим расчетом:
double Lot = MathFloor (Free*MaxRisk/100/One_Lot/Step)*Step;
результат:
Осталось добавить информацию о валюте и риске в выводимое окно .
Риск содержится в переменной MaxRisk, а текущая валюта выдается функцией Symbol ().
Все это мы знаем из предыдущих уроков.
Язык MQL — Урок 3 «расчет лота»
На прошлом уроке «Язык MQL — Урок 2» мы научили наш первый скрипт MT4 — «test » , написанный на языке MQL4 рассчитывать размер лота, а точнее запрашивать у нас размер средств которыми мы хотим рискнуть при торговле на форекс при помощи терминала Metatrader 4. В данном уроке я предлагаю заняться самим расчетом данного лота !
Для расчета желаемого лота, скрипту MT4 необходимо знать «какими средствами мы располагаем» на нашем депозите форекс. Можно конечно в ручную ему это сообщать (как мы сделали с риском), но зачем делать лишнюю работу, если в нашем распоряжении язык MQL4? Пусть наш скрипт «test» сам берет эту цифру из торгового терминала Metatrader 4 !
Для этих целей ( для определения размера средств в MT4 ) в языке MQL4 предназначена функция — AccountFreeMargin ()
Все вычислительные операции в советниках или скриптах MQL необходимо делать в функции start .
Поэтому добавим в эту функцию строчку:
double Free= AccountFreeMargin ();
теперь в переменной типа double (число с плавающей точкой) и именем Free у нас будет содержаться размер свободных средств.
Еще нам необходимо знать стоимость одного лота по заданной валютной паре — для этого воспользуемся функцией MarketInfo ( string symbol, int type).
Эта функция возвращает различную информацию в зависимости от переданных ей параметров. Первым идет строковый параметр для указания валюты. Можно указать напрямую (например: «EURUSD» ), но мы хотим универсальности от нашего скрипта, написанного на MQL (что бы скрипт сам определял валютную пару на графике, котором он запущен).
Воспользуемся функцией Symbol () котороя вернет нам название текущей валюты.
Второй параметр функции MarketInfo используем: MODE_MARGINREQUIRED (Размер свободных средств, необходимых для открытия 1 лота)
Теперь соберем все вместе и получим:
double One_Lot = MarketInfo ( Symbol (), MODE_MARGINREQUIRED );
Итак, переменная One_Lot будет содержать стоимость одного лота по текущей валюте.
С помощью простейших математических операций рассчитаем НАШ лот:
double Lot= Free*MaxRisk/ 100 /One_Lot;
Free — свободные средства
MaxRisk/100 — процент(наш параметр MaxRisk надо перевести в %. Для этого его делим на 100)
One_Lot — стоимость одного лота
Пример расчета лота для EURUSD (курс для примера возьмем 1.4615):
у нас есть Free=1000$ (свободные средства)
MaxRisk= 2
2% от 1000$ это 1000*2/100=20$
стандартный размер контракта (1 лот) = 100000
при покупке 100000 EUR мы должны заплатить 100000*1.4615=146150$
но у нас есть плечо (возьмем для примера 500), соответственно мы заплатим One_Lot=146150/500=292.3$ (все эти вычисления делает MarketInfo ( Symbol (), MODE_MARGINREQUIRED ))
Наш лот получится: Lot=20/292.3= 0,0684
Хорошо! Оптимальный лот для открытия торговой позиции в Metatrader 4 мы рассчитали.
А как же его теперь увидеть на экране монитора?
Для этого воспользуемся функцией Alert (), в качестве параметра укажем НАШ рассчитанный лот.
Ну и теперь компилируем и запускаем наш экспериментальный скрипт МТ4 — «test » (это мы уже делать умеем из прошлого урока MQL — 2).
В итоге мы получим следующее сообщение в терминале MT4:
В следующем уроке по изучению языка MQL, мы продолжим улучшать наш скрипт для Metatrader 4 и наполнять его полезными функциями.
Чем заняться на каникулах: пишем роботов для торговли на бирже на скриптовом языке TradeScript
В блоге на Хабре мы много пишем о биржевых технологиях и торговых роботах. В сегодняшнем материале вопрос создания таких систем будет рассмотрен подробнее — на примере встроенного в торговый терминал SmartX скриптового языка программирования TradeScript.
Что за TradeScript
TradeSript – векторный язык программирования, разработанной американской компанией Modulus Financial Engineering специально для создания торговых роботов. Данный инструмент входит в пакет технологий, которые были лицензированы (OEM) нашей компанией для создания торгового терминала SmartX (подробнее о его создании мы рассказывали здесь).
Среди плюсов TradeScript простота синтаксиса, который, тем не менее, позволяет описывать торговые стратегии разной сложности. Язык хорошо подходит для использования новичками — для этого достаточно будет изучить простое руководство, а опытные разработчики разберутся с ним за полчаса.
Движок языка работает на стороне терминала и подключается в качестве плагина-расширения к SmartX. Помимо возможности собственно написания скриптов присутствует и модуль бэктестинга для тестирования созданной стратегии на исторических данных.
Благодаря своей встроенности прямо в терминал, для создания роботов не нужно использовать коннекторы для передачи в него приказов, что необходимо в случае многих других сред разработки. Это позволяет добиваться значительно более высокой надежности и быстродействия.
Начинаем писать роботов: примитивы и векторы
Одно из важных понятий в языке TradeScript — примитивы, то есть встроенные функции, которые нужны для облегчения процесса создания скриптов. Пример примитива — функция TREND:
Он вернет значение Истина, если имеет место восходящий тренд – он рассчитывается за последние 30 дней по ценам закрытия торговых сессий.
TradeScript – векторный язык. Каждая операция здесь применяется сразу ко всему набору значений (вектору или полю). Это позволяет мыслить и оперировать категориями агрегатов данных, без необходимости использовать циклы или индивидуальные скалярные операции.
Например, чтобы рассчитать простую скользящую среднюю «срединной» цены акций за
последние 30 периодов при помощи обычного языка программирования типа BASIC, нуж-
но написать что-то типа:
Для описания крайне простого действия, нужно «потратить» 9-10 строк кода. С помощью векторного языка можно то же полезное действие можно уложить в одну строку:
Таким образом, на TradeScript можно описывать все те же стратегии, что и на процедурных языках вроде C++, VB или Java.
Примеры реальных стратегий
Для определения момента для открытия или закрытия позиций многие трейдеры используют технический анализ. Это метод, при котором торговцы ищут на графиках финансовых инструментов различные паттерны. Для этого используются так называемые технические индикаторы.
Многие из существующих индикаторов (скользящие средние, осцилляторы, индексы, функции диапазонов и линейной регрессии и т.п.) встроены в TradeSript в виде примитивов, так что их можно использовать при программировании роботов. Такая программа может включать один или несколько индикаторов. Рассмотрим примеры кода торговых роботов на TradeScript, использующих индикаторы теханализа.
Пересечение скользящих средних
Один из самых популярных индикаторов — скользящие средние. При его использовании в качестве сигналов для совершения операций используют факты пересечения линиями друг друга.
Ниже — пример кода системы, основанной на пересечении скользящих средних (Moving Average Crossover). Такой робот будет покупать если короткая скользящая средняя пересекает снизу-вверх длинную скользящую среднюю, и продавать, если пересечение идет в обратном направлении.
Система Parabolic SAR/MA System
Существуют и более сложные вариации систем на основе скользящих средних — например, это индикатор Parabolic SAR. Обычно параболические системы используют для получения сигналов выхода из позиций, но можно использовать их и для принятия решений о входе в них (покупать или продавать в короткой позиции).
В нашем примере робот принимает такие решения на основе пересечения скользящих средних и пересечения индикатором Parabolic SAR снизу вверх цены закрытия.
Ценовой разрыв
На бирже нередки ситуации, в которой в начале нового торгового дня цена акции сразу оказывается выше максимума предыдущего дня. Такое может происходить в случае появления каких-то позитивных новостей, выхода важных отчетов, влияющих на бизнес и т.п.
Когда трейдеры видят такой позитивный гэп, то многие из низ начинают подавать приказы на покупку — в результате возможна переоценка акции. После такого внезапного взлета есть вероятность отката цены на прежние значения в течение пары часов после старта торгов.
В примере ниже, мы учитываем тот факт, что момент разворота обычно возникает в течение первого часа торгов. То есть, если разрыв не будет “закрыт” в течение первого часа, то можно предполагать, что покупка, с большей вероятностью, продолжится. Скрипт возвращает акции, которые имели гэп не менее 2% и закрылись близко к максимуму. Тут же можно описать и стратегию поведения на следующий торговый день. К примеру, если позиции акции остаются сильными после первого часа торгов, можно ее купить. Стоп-лосс (приказ на прдажу для фиксации прибыли) лучше установить на минимальной отметке за день — консервативный вариант подразумевает получение прибыли в половину гэпа, что в нашем примере составит 1%.
«Бычье» и «медвежье» поглощение (Japanese Candlestick Engulfing Line System)
Еще один интересный элемент технического анализа — фигуры «бычьего» или «медвежьего» поглощения. Они могут свидетельствовать о развороте какого-либо рыночного тренда. Суть фигуры поглощения состоит в том, что возникает короткая японская свеча, за которой следует свеча с более длинным телом, «поглощающим» предыдущую короткую свечу. Бычье поглощение указывает на разворот нисходящего тренда — цена может вырасти, а медвежье, наоборот, на ее возможное снижение.
Вот каким может быть скрипт, использующий этот принцип:
Заключение
На нашем старом сайте опубликована библиотека, включающая 22 простых торговых робота на TradeScript — на их основе можно создавать более сложные торговые стратегии. В завершение — еще несколько полезных ссылок по теме создания торговых роботов.
Источник https://www.metatrader4.com/ru/trading-platform/help/autotrading/scripts/scripts_create
Источник http://mql4you.ru/tag/sozdanie-skriptov-mt4
Источник https://habr.com/ru/company/iticapital/blog/345908/