УДК 519.95
РАЗРАБОТКА РОБОТА ДЛЯ ЭФФЕКТИВНОЙ ТОРГОВЛИ НА РЫНКЕ ФОРЕКС
© А.П. Зубаков, Е.А. Киселева
Ключевые слова: Форекс; трейдер; торговый советник; анализ.
Рассматривается проблема создания робота-советника для эффективной торговли на рынке Форекс.
В настоящее время в СМИ постоянно обсуждается состояние финансовых рынков. Одним из самых популярных финансовых рынков является рынок Forex. Своей популярностью рынок Forex обязан нескольким причинам: скрытая реклама финансового рынка; предельно низкие залоговые требования и минимальные комиссионные; возможность получения сверхприбылей при достаточно малом начальном капитале; кажущаяся легкость проведения анализа и построения прогнозов [1].
Для удачной торговли на рынке нужно уметь прогнозировать, предугадывать, как поведет себя курс валюты в следующий момент времени. Для этого используется фундаментальный анализ и технический анализ [2-3].
Целью настоящей работы является разработка торгового робота-советника для работы с терминалом Meta Trader на финансовом рынке, который сможет осуществлять торговлю на рынке в автоматическом режиме на основе предыстории изменения курса валют. Для начала торговли нужно открыть новый счет. Затем создается новый ордер покупки или продажи.
Под словом купить (buy) подразумевается покупка определенного объема валюты с целью продажи его потом по более выгодной цене. То же самое и с понятием продать (sell) - продается определенный объем валюты, чтобы в дальнейшем купить ее по более вы-
годной цене [4]. У покупки и продажи есть два вида отложенных сделок - stop и limit. BuyStop подразумевает следующее: когда вы, спрогнозировав движение цены вверх, видите, что она не закончится, а пойдет дальше, то вы ставите отложенную покупку по цене, которая на данный момент выше рынка. В случае Buy-Limit вы видите, что цена падает, однако определив уровень, до которого она может упасть и потом пойти вверх, вы ставите на нем покупку (получается, вы ставите ордер по цене, которая на данный момент ниже рынка). SellStop - это когда цена падает, затем открывает ваш ордер и продолжает падать. SellLimit - это когда цена растет, открывает ваш ордер и потом начинает падать [4]. В любом терминале существуют автоматические торговые системы. Под системами автоматической торговли, или советниками следует понимать специализированные программы, которые содержат в себе различные модули, анализирующие информацию.
Прогноз изменения цен строится на основе анализа т. н. «чартов» - временных рядов цен. Кроме того, используются другие статистические данные, например, объем торгов. Технический анализ рассматривает только тот факт, что цена движется в каком-то определенном направлении, не учитывая причины этого движения. Правильное распознание тренда помогает определиться с позицией и получить доход на любом рынке.
Для правильного и наиболее точного прогнозирования движения цен на валютном рынке используется множество методов технического анализа [5].
Метод технического анализа - это математический метод прогнозирования. Этот метод базируется на использовании математических формул и расчетов. С его помощью строятся т. н. рыночные индикаторы, которые указывают на «перепроданность» или «перекупленность» рынка. Сам же математический метод делится на два направления - «трендовый» и «флэто-вый».
Суть «трендового» направления - построение по определенной формуле средней линии, которая пересекает весь график. В зависимости от того, на каком уровне относительно этой линии находится временной ряд цен, и строятся предположения о дальнем развитии валютного рынка.
Направление торговли во «флете», или боковом тренде основывается на построении линий, которые преломленно показывают близость к экстремумам цен. Каждый метод масштабируется и при различных масштабах трендовая торговля может показаться флето-вой, и, наоборот, в этом и есть камень преткновения технического анализа, тяжело найти точку относительности, от которой можно начать рассуждать.
Существуют три аксиомы технического анализа [5]:
1) движения цен на рынке учитывают всю информацию. Согласно этой аксиоме, вся информация, влияющая на цену товара, уже учтена в самой цене и объеме торгов и нет необходимости отдельно изучать зависимость цены от политических, экономических и прочих факторов. Достаточно сосредоточиться на изучении динамики цены/объема и получить информацию о наиболее вероятном развитии рынка;
2) движение цен подчинено тенденциям. Цены изменяются не просто случайным образом, а следуют при этом некоторым трендам (тенденциям), т. е. временные ряды цен можно разбить на интервалы, в которых преобладают изменения цен в определенных направлениях;
3) история повторяется.
Индикаторы Форекс - это эффективный инструмент трейдера для проведения технического анализа рынка математическим способом и построения торговых стратегий. Индикаторы делятся на несколько видов по способу их применения:
- трендовые индикаторы;
- осцилляторы.
I—1авигатор х
IV! etaTга d er 4 Ei ij22) Счета
..± 2.12.V2.G 2.53: elena
..121Z7S1885: elena
.. ^ 1212788203: Elen a A
.. 1212788244: Elen a A
Гч=1--- Г-f Tl И нди каторы i—I Сов ет мики
..“^5 MACD Sample
..IV1 j n IV1 аэс_Т га d e
..rC^ M ovi n g Avera g e
..О 788 еще...
S) - [^Э ^ I о л ь.3. о в а т ел ьские Индикаторы 13 - Скрипты
Трендовые индикаторы - это индикаторы, которые хорошо работают в трендовом участке рынка и хорошо определяют тренд.
Трендовые индикаторы чаще всего используются для определения направления тренда, реже - для точек входа. Определив направление тренда, чаще всего используют осцилляторы для точек входа.
Осцилляторы - это индикаторы, которые всегда пытаются предсказать будущее, но при этом совершают больше ошибок.
Определив направление тренда (допустим тренд восходящий), трейдеру необходимо определить наилучшую точку входа на покупку. Для этого понадобится еще один индикатор - осциллятор.
Помимо индикаторов в торговом терминале существуют торговые советники.
Торговые советники позволяют в автоматическом режиме проводить анализ текущей ситуации и на основе полученных сигналов способны выдавать команды на выполнение торговых операций и управление открытыми позициями [6]. Они позволяют избавиться от хаотичности в торговом процессе, исключить эмоциональность из торговли, а также освобождают человека от необходимости сидеть за монитором и наблюдать за рынком.
В качестве языка программирования был выбран язык программирования MetaQuotes Language 4 (MQL4). Этот язык используется только в MetaTrader 4, и кроме терминала нигде эту программу нельзя запустить.
Торговая платформа ISIGroup MetaTrader 4 (рис. 2-
3) предназначена для проведения торговых операций и технического анализа в реальном режиме времени при работе на рынках Форекс (Forex), CFD, Futures. Несколько видов встроенных ордеров позволяют гибко управлять торговой деятельностью.
В терминал ISIGroup MetaTrader 4 встроен новый язык программирования торговых стратегий MetaQuotes Language 4 (MQL 4). Этот язык позволяет писать собственные программы-эксперты (Expert Advisors), автоматизирующие управление торговыми процессами и идеально подходящие для реализации собственных торговых стратегий. Кроме того, на MQL 4 можно создавать собственные технические индикаторы (Custom Indicators), скрипты (Scripts) и библиотеки функций (Libraries).
Основная идея при создании робота - это отслеживание наименьших и наибольших значений цен.
При настройке советника для торговли вводим ему значение количества баров, для того чтобы он на этом количестве смог определить значения цен и найти среди них минимальное и максимальное.
Объявление количества баров для предыстории осуществляется следующим образом:
extern int Num_Bars = 100000;
В данном случае количество баров 100 000. В зависимости от того, на каком графике будут вести торги, время будет равно график х количество баров, к примеру торги на графике М15, тогда время = 15 х 100000 = = 1 500 000 мин.
Робот запоминает эти значения как MIN и MAX. В коде программы это выглядит следующим образом:
Рис. З. Интерфейс MetaTrader 4
Min = iLow( Symbol(), Period(), iLowest( Symbol(), Pe-riod(), MODE_LOW, Num_Bars) );
Max = iHigh( Symbol(), Period(), iHighest( Symbol(), Pe-riod(), MODE_HIGH, Num_Bars) );
где MODE_LOW - минимальная цена; MODE_HIGH -максимальная цена.
После определения робот начинает сравнивать текущее значение с минимальным и максимальным с учетом отступов, которые также вводятся при настройке.
Если текущая цена плюс отступ равна минимальному значению (MIN), то робот открывает новый ордер:
if( Bid <= Min + Min_Indent*Point )
{
OrderSend( Symbol(), OP_BUY, Lot, Ask, 10, 0, 0, "", Magic_Number, 0, Lime);
}
где Bid(бид) - это та цена, по которой дилер (брокер) может в данный момент купить базовую валюту в обмен на котируемую. Это означает, что вы (будучи трейдером) можете за эту цену продать [7]; OP_BUY -покупка [8]; ASK - цена предложения продавца; Order-Send - создание ордера.
Затем робот начинает проверять условие закрытия ордера, т. е. сравнивается текущее значение с максимальным плюс отступ по настройке (MAX). Если значения равны, то ордер будет закрыт:
if( Bid >= Max - Max_Indent*Point )
{
for( int i = OrdersTotal()-1 ; i >= 0; i-- ) /находим открытый ордер {
OrderSelect( i, SELECT_BY_POS, MODE_TRADES); /проверяет, что этот ордер открыл наш робот
if( OrderType() == OP_BUY && OrderMagicNumber() == Magic_Number && OrderSymbol() == Symbol() )
{
OrderClose( OrderTicket(), OrderLots(), Bid, 10, Magenta);
}
где OrderClose - закрытие ордера; OrderSelect - созданный ордер [9].
Отступ в настройках советника был создан из соображений того, что точное совпадение минимального или максимального с текущим маловероятно. И для открытия или закрытия ордера нужно будет ждать долгое время. Для удобства использования созданного советника был подключен модуль, в котором мы можем изменять некоторые значения для настройки робота для ведения успешных торговых операций (рис. 4).
Во вкладке тестирование мы можем менять значения депозита (от 5ОО до 5ОООО), выбирать валюту (USD, EUR, GBP, CHF), выбирать позиции (рис. 4).
Во вкладке входные параметры можем изменять количество баров учета предыстории, минимальный отступ от минимального значения и минимальный отступ от максимального значения (рис. 5).
Настройка отступа создана для того, чтобы робот не ждал точного вхождения текущего значения в минимальное значение предистории (вероятность такого совпадения очень мала).
Во вкладке оптимизация можем выбрать нужные ограничения и ввести для них необходимые значения (рис. 6). Изменяем настройки эксперта вкладки входные параметры следующим образом (рис. 7).
Эксперимент проводился для валютной пары USD, EUR на 5-минутном графике (М5). Депозит равен 5ООО.
Результаты эксперимента показаны на следующем рис. 8.
Ордер был открыт 16.О4.12 со значением цены 1,3О562 и закрыт через 4 дня, т. е. 2О.О4.12 со значением
Рис. 4. Настройка робота (вкладка тестирование)
MinMax_Trade
Тестирование Входные параметры | Оптимизация
Переменная Значение Старт шаг Стоп
1 Num Bars 1 СНЮ ІОО 1 ООО 1000
1 Min_lndent с 10 10 60
Г” Max_lndent с 10 10 100
r Lot 0.1 0.1 0 0
1 Magic _Number Є5484 654S4 0 0
Загрузить | | Сохранить
ОК | ( Отмена ] [ Сброс
Рис. 5. Настройка робота (вкладка входные параметры)
МтМах_Тгас1е I Ф •Штат
Тестирование ] Входные параметры Оптимизация
Ограничени я Значение
1 Минимальный баланс 200
1 Максимальная прибыль 10000
1 Минимальный уровень маржи (%) 30
1 Максимальная просадка 70
1 Непрерывный убыток 5000
1 Непрерывное количество убыточных сделок 10
1 Непрерывный выигрыш ІОООО
Г~ Непрерывное количество прибыльных сделок 30
ОК______] [ Отмена ) [ Сброс
Рис. 6. Настройка робота (вкладка оптимизация)
MinMax_Trade
Тестирование Входные параметры Оптимизация
Переменная Значение Старт шаг Стоп
F Num_Bars 10DD 100 1000 1000
W Min_lnderrt 10 10 10 60
W Max_lndent 10 10 10 100
m Lot 0.1 0.1 0 0
I 1 Magic_Number 65484 65484 0 0 І
Загрузить | ( Сохранить
ОК | | Отмена | [ Сброс
Рис. 8. Результаты эксперимента
Символ
Период
Модель
Параметры
Баров в истории
Ошибки рассогласования графиков
Strategy7 Tester Report
MiuMaxT rade
MIGBank Demo (Build 432)
EURUSD (Euro vs US Dollar)
5 Минут (M5) 2012.04.10 00:00 - 2012.04.23 23:55 (2012.04.10 - 2012.04.24)
Все тики (наиболее точный метод на основе всех наименьших доступных таймфреймов) Num_Bars = 1000; Min_Indent=10; Max_Indent=10; Lot=0.1; Magic_Number=65484;
3876 Смоделировано тиков
664694 Качество моделирования
Начальный депозит Чистая прибыль Прибыльность
Абсолютная просадка Всего сделок
10000.00
107.91 Общая прибыль
Матожидание выигрыша 58.82 Максимальная просадка
10 7.91 Общий убыток 107.91 107.99
(1.07%)
Относительная просадка
1 Короткие позиции (% выигравших)
Прибыльные сделки (% от всех)
Самая большая прибыльная сделка
Средняя прибыльная сделка
Максимальное количество непрерывных выигрышей (прибыль)
Максимальная непрерывная прибыль (число выигрышен)
Средний непрерывный выигрыш
0 (0.00%) Длинные позиции (% выигравших)
1 (100.00%) Убыточные сделки (% от всех)
107.91 убыточная сделка
107.91 убыточная сделка
1 (107.91) непрерывных проигрышей (убыток)
1П7 сн т непрерывный убыток (число ' проигрышей)
1 непрерывный проигрыш
1.07%
(107.99)
1 (100.00%) 0 (0.00%) -0.00 -0.00 0 (-0.00) -0.00 (0) о
э основе всех наименьших доступных таймфреймов для генерации каждого тім] / 90.00°-с
10107
10062
10039
10017
9995
0 1 3 4 5 7 S 9 11 12 із 15 16 17 19 20 21 23 24 25 27 28 29 31 32
№ Время Тип Ордер Объём Цена s А О. 1- Прибыль Баланс
1 2012.04.16 01:56 buy 1 0.10 1.30562 0.00000 0.00000
2 2012.04.20 10:03 dose 1 0.10 1.31709 0.00000 0.00000 107.91 10107.91
Рис. 9. Результаты эксперимента в виде отчета MetaTrader 4
цены 1,31709. Из этого можно сделать вывод, что эксперимент прошел удачно.
Для подтверждения успешности посмотрим отчет, который был сформирован автоматически MetaTrader 4 (рис. 9).
Из результатов эксперимента и отчета очевидно, что созданный советник успешно проводит сделки в тестовом режиме.
Для эксперимента в реальном времени были произведены следующие настройки советника, которые по-
казаны на рис. 10 и 11. Эксперимент проводился для валютной пары (USD, EUR) на 15-минутном графике (М15).
Торговый робот открыл новый ордер №60926761 8 июня 2012 года, когда цена была 1,25147 , что видно из рис. 12.
Ситуация на рынке показана на рис. 13.
Цена равна 1,27015. Прибыль без учета своп (своп означает обмен одной валюты на другую на определенный период времени) равна 1868,00 [10]. Своп был
MinMax Trade
ж
Общие
Входные параметры
Общие Безопасность Щ Разрешить импорт Функций из ОН @ Ручное подтверждение вызовов 121 Разрешить импорт из внешних экспертов
Long 4 Short ▼ позиции 0 Разрешить сигналы Щ Не повторять сигнал
0 Разрешить советнику торговать [3 Ручное подтверждение
ОК
Отмена | | Сброс
Рис. 10. Настройка советника (вкладка общие)
MinMax Trade
Общие
Входные параметры
Переменная Значение
iaa] Num_Bars 100000
іга] Minjndent 10
«з] Max_lndent so
0.1
123"] Magic_NuTTiber 654S4
Загрузить
Сохранить
ОК
Отмена
Сброс
Рис. 11. Настройка советника (вкладка входные параметры)
Рис. 13. Текущее состояние рынка
Ордер / Бреш Tin Объём Синш lj!Hl Нинки Сюп Прибыль
Q sosmi 2012,06,(8 Ж buy 1,00 (urusc urns 0,01) ■їй 1863.00
0 баланс: S 220,03 Средства: 8178.13 Залог: 1251.47 Свободно: 6 82Ы1 Уровень: M54W 1Ш0
Рис. 14. Отчет о текущем состоянии открытого ордера
вычислен MetaTrader и составляет 9,90. Чистая прибыль равна 1858,10 (рис. 14).
Проанализировав предысторию рынка, можно сделать вывод, что робот закроет ордер, когда цена будет близка цене 1,3.
В результате был разработан торговый робот - советник для работы с терминалом Meta Trader 4 на финансовом рынке.
Робот способен принимать решения об открытии/закрытии ордера в наиболее подходящие периоды с целью наибольшего выигрыша на рынке.
4. Как играть на бирже. иКЬ: http://forex-investo.ru/forex-articles/how-Ш-р1ау. Загл. с экрана.
5. Технический анализ валютного рынка. иКЬ: http://tradexperts.ru /Tehnicheskij-Analiz-Foreks. Загл. с экрана.
6. Вручную или Советники? иКЬ: http://www.myfxresearch.com/2011 /03/what-this-blog1#reactions/. Загл. с экрана.
7. Программирование на алгоритмическом языке MQL4. иЯЬ: http://book.mql4.com/ru. Загл. с экрана.
8. Ковалев С. Учебник по программированию на языке MQL4. 2010. иКЬ: http://mmgp.ru/showthread.php?t=27031. Загл. с экрана.
9. Язык программирования MQL4. иКЬ: http://white-partner.ru/mql4_ 3^р. Загл. с экрана.
10. Все о Форекс. Форекс комиссии. ЦКЬ: http://fxbussines.narod.ru /foreks_komissii/. Загл. с экрана.
ЛИТЕРАТУРА
Лиховидов В.Н. Фундаментальный анализ мировых валютных рынков: методы прогнозирования и принятия решений. Владивосток, 1999.
Тысячи и немедленно - Секреты управления капиталом. Money Software Company. 1997. URL: http://forex2.info/Siekriety_
Upravlieniia_Kapitalom. Загл. с экрана.
Фундаментальный анализ. URL: http://www.aton-line.ru/study
/beginner/fundamental/. Загл. с экрана.
Поступила в редакцию 23 ноября 2012 г.
Zubakov A.P., Kiseleva E.A. DEVELOPMENT OF ROBOT FOR EFFECTIVE FOREX TRADING
The problem of creating a robot-advisor for effective Forex trading is considered.
Key words: Forex; trader; trading advisor; analysis.