РАЗРАБОТКА В СРЕДЕ METATRADER 4 СОВЕТНИКА ДЛЯ ЗАКРЫТИЯ ПОЗИЦИИ НА ОСНОВЕ МЕТОДА СИСТЕМНОГО СКАЛЬПИРОВАНИЯ - Студенческий научный форум

VIII Международная студенческая научная конференция Студенческий научный форум - 2016

РАЗРАБОТКА В СРЕДЕ METATRADER 4 СОВЕТНИКА ДЛЯ ЗАКРЫТИЯ ПОЗИЦИИ НА ОСНОВЕ МЕТОДА СИСТЕМНОГО СКАЛЬПИРОВАНИЯ

Межаков А.В. 1, Сенина А.С. 1
1Белгородский государственный национальный исследовательский университет
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
Введение

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

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

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

Обоснование выбора среды разработки

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

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

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

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

В MetaTrader4 интегрирована среда разработки MQL4, которая использует собственный специализированный редактор MetaEditor. Он позволяет создавать советники (эксперты), пользовательские индикаторы, скрипты и библиотеки любой сложности для дальнейшего использования в платформе. Готовые приложения автоматически появляются в MetaTrader4 и могут быть немедленно запущены на исполнение.

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

Разработка алгоритма для закрытия позиции

Алгоритм для закрытия позиции на основе метода системного скальпирования будет включать следующие шаги:

1. Определяем кол-во открытых ордеров – функция OrdersTotal()

2. Если не выбран ордер для дальнейшей работы ­– переходим к следующему ордеру

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

3. Выбираем только те, открытые по нашему финансовому инструменту OrderSymbol();

Если символ, который выбрали, не равен нашему инструменту (на который перетянули мышкой скрипт), то переходим к следующему ордеру

if (OrderSymbol() != Symbol()) continue;

4. Определяем тип открытого ордера – функция OrderType()

5. Задаем условия для закрытия ордера с прибылью:

А. Если тип ордера BUY, то проверяем условие

if (Bid > OrderOpenPrice() + TakeProfit*Point), где Bid – последняя известная цена покупки (предложение на покупку) текущего инструмента, OrderOpenPrice() – цена открытия выбранного ордера, TakeProfit – прибыль в пунктах, Point – размер пункта текущего инструмента.

Б. Если условие А выполняется, закрываем ордер – функция OrderClose()

bool Ans=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage), где OrderTicket() - номер тикета текущего выбранного ордера, OrderLots() – количество лотов выбранного ордера, Bid – последняя известная цена покупки (предложение на покупку) текущего инструмента, Slippage – максимальное проскальзывание, т.е. насколько цена закрытия может сместиться.

В. Если тип ордера SELL, то проверяем условие

if (Ask < OrderOpenPrice() - TakeProfit*Point), где Ask – последняя известная цена продажи (запрашиваемая цена) текущего инструмента, OrderOpenPrice() – цена открытия выбранного ордера, TakeProfit – прибыль в пунктах, Point – размер пункта текущего инструмента.

Г. Если условие В выполняется, закрываем ордер – функция OrderClose()

bool Ans=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage), где OrderTicket() - номер тикета текущего выбранного ордера, OrderLots() – количество лотов выбранного ордера, Ask – последняя известная цена продажи (запрашиваемая цена) текущего инструмента, Slippage – максимальное проскальзывание, т.е. насколько цена закрытия может сместиться.

6. Задаем условия для закрытия ордера с минимальными потерями:

А. Если тип ордера BUY, то проверяем условие

if (Ask < OrderOpenPrice() - StopLoss*Point), где Ask – последняя известная цена продажи (запрашиваемая цена) текущего инструмента, OrderOpenPrice() – цена открытия выбранного ордера, StopLoss – убыток в пунктах, Point – размер пункта текущего инструмента.

Б. Если условие А выполняется, закрываем ордер – функция OrderClose()

bool Ans=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage), где OrderTicket() - номер тикета текущего выбранного ордера, OrderLots() – количество лотов выбранного ордера, Bid – последняя известная цена покупки (предложение на покупку) текущего инструмента, Slippage – максимальное проскальзывание, т.е. насколько цена закрытия может сместиться.

В. Если тип ордера SELL, то проверяем условие

if (Bid > OrderOpenPrice() + StopLoss*Point), где Bid – последняя известная цена покупки (предложение на покупку) текущего инструмента, OrderOpenPrice() – цена открытия выбранного ордера, StopLoss – убыток в пунктах, Point – размер пункта текущего инструмента.

Г. Если условие В выполняется, закрываем ордер – функция OrderClose()

bool Ans=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage), где OrderTicket() - номер тикета текущего выбранного ордера, OrderLots() – количество лотов выбранного ордера, Ask – последняя известная цена продажи (запрашиваемая цена) текущего инструмента, Slippage – максимальное проскальзывание, т.е. насколько цена закрытия может сместиться.

Программная реализация разработанного алгоритма

//+------------------------------------------------------------------+

//| closeorder.mq4 |

//| Copyright 2015, MetaQuotes Software Corp. |

//| https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2015, MetaQuotes Software Corp."

#property link "https://www.mql5.com"

#property version "1.00"

#property strict

extern int TakeProfit = 2;

extern int Slippage = 2;

externintStopLoss = 2;

Функция pribyl отвечает за закрытие ордера с прибылью. Если при открытии ордера указывается цена TakeProfit, то ордер закрывается по достижении указанной цены, иначе закрывается при прибыли заданной в программе, в данном случае 2 пунктов.

void pribyl () {

if (TakeProfit == 0 || OrderTakeProfit() != 0) return;

int cnt = OrdersTotal();

for (int i=cnt-1; i >= 0; i--) {

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if (OrderSymbol() != Symbol()) continue;

int type = OrderType();

if (type == OP_BUY) {

if (Bid > OrderOpenPrice() + TakeProfit*Point)

bool Ans=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage);

}

if (type == OP_SELL) {

if (Ask < OrderOpenPrice() - TakeProfit*Point)

bool Ans=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage);

}

}

}

Функция potery отвечает за закрытие ордера с минимальными потерями. Если при открытии ордера указывается цена StopLoss, то ордер закрывается по достижении указанной цены, иначе закрывается при потерях заданных в программе, в данном случае 2 пунктов.

void potery () {

if (StopLoss == 0 || OrderStopLoss() != 0) return;

int cnt = OrdersTotal();

for (int i=cnt-1; i >= 0; i--) {

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if (OrderSymbol() != Symbol()) continue;

int type = OrderType();

if (type == OP_BUY) {

if (Ask < OrderOpenPrice() - StopLoss*Point)

bool Ans=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage);

}

if (type == OP_SELL) {

if (Bid > OrderOpenPrice() + StopLoss*Point)

bool Ans=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage);

}

}

}

Функция start запускает наши функции.

voidstart() {

potery();

pribyl (); }

Проверка работоспособности алгоритма

Для проверки работоспособности были выбраны следующие данные:

тип ордера – BUY; объём – 0,01 лота; валютная пара - EUR/USD, цена покупки – 1,08089.

В соответствии с рисунком 1, видно открытие ордера на покупку.

Рисунок 1 – Открытие ордера на покупку

Закрывается ордер по цене 1,08092. Следовательно, прибыль наша составила 3 пункта.

В соответствии с рисунком 2, видно закрытие ордера на покупку.

Рисунок 2 – Закрытие ордера на покупку

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

Заключение

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

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

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

Список литературы:
  1. Бэстенс, Д. Нейронные сети и финансовые рынки: принятие решений в торговых операциях / Д. Бэстенс, В.М. Ван-Ден Берг, Д. Вуд – М.: ТВП, 2007. – 366 с.

  2. Мэрфи, Д.Д. Технический анализ фьючерсных рынков: Теория и практика / Д.Д. Мэрфи; Пер. с англ. О. Новицкая. - М.: Альпина Пабл., 2011. - 610 c.

  3. Черноморец, А.А. Информационные системы валютного рынка. – Белгород, БИГМУ (филиал) ОРАГС, 2006. – 173 с.

  4. Элдер, А. Как играть и выигрывать на бирже. Психология. Технический анализ. Контроль над капиталом / А. Элдер; Пер. с англ. М. Волкова, А. Волков. - М.: Альпина Пабл., 2013. - 472 c.

  5. Якимкин, Я. Рынок Форекс - Ваш путь к успеху / Я. Якимкин – Москва: "Светоч Л", 2005. - 68 с.

Просмотров работы: 582