Советники: Three Point Arbitrage

 

Three Point Arbitrage:

Робот из статьи Треугольный арбитраж. Выкладываю код для MetaTrader 4 "как есть".

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


Настройки советника

  • Job mode - режим работы советника, может быть следующим:
    • Symbols from Market Watch - обычный режим, когда треугольники для торговли составляются из доступных символов в окне "Обзор рынка";
    • Symbols from file - использовать ранее созданный файл с перечнем доступных для торговли символов. Таким образом можно указать советнику использовать только определенный набор символов вне зависимости от того, что доступно в окне "Обзор рынка";
    • Create file with symbols - создает .csv файл, который используется для режима Use file with symbols. Созданный файл можно редактировать вручную.
  • Commission - сколько нужно заработать в совокупной позиции, чтобы ее закрыть. Рекомендую использовать в случае, если брокер взимает комиссию за открытие позиции, тогда в этом поле можно указать ее совокупный объем за 3 пары. Также есть смысл использовать при работе с минимальными объемами, так как в этом случае у робота нет возможности выравнять позиции в силу ограниченной точности торгуемых объемов и частично возникает минимальная направленная позиция;
  • Trade volume - торговый объем;
  • Together triangles open - сколько треугольников может открыть советник одновременно;
  • EA number - номер робота;
  • Comment - комментарий для открываемых ордеров.


Особенности советника

  • Советник полностью автоматизирует торговлю и самостоятельно определяет треугольники для торговли внутри одного брокера;
  • Устойчив к любым расширениям спреда;
  • Перед началом работы рекомендуется включить в окне "Обзор рынка" отображение всех доступных символов;
  • В большинстве случаев, для работы, достаточно указать только объем торговли и все;
  • Таймфрейм не имеет значения;
  • Робот использует до 200 магиков. Первый в диапазоне указан в настройках;
  • Не каждый брокер предоставит возможность заработка для данной стратегии, поэтому рекомендую время от времени делать проверки следующим образом: открываем реальный счет у брокера (можно нулевой, главное получить поток цен), включаем робота, разрешаем торговлю и оставляем на пару дней. Во вкладке эксперт робот будет писать о найденных возможностях для входа.


Особенности работы

  • Сделки возникают нечасто, т.к. арбитражные ситуации отслеживаются многими участниками рынка и в частности самим брокером, который старается не допускать их появления. Ситуации, когда Bid XXXYYY выше Ask XXXZZZ * Ask ZZZYYY возникает довольно часто, но если учесть все затраты и входить только, когда есть потенциал прибыли, то количество сделок резко сокращается. Прошу учесть данную особенность;
  • Длительность сделки составляет от одной секунды до пары часов;
  • Так как важна скорость исполнения, то рекомендую использовать VPS;
  • Советник можно использовать на одном счете с другими роботами;
  • Для тестирования можно использовать MT5 версию советника: https://www.mql5.com/ru/market/product/22123.

Автор: Alexey Oreshkin

 

Добрый день!


на реальном счете работать будет эта версия советника ?

 

Сова откроет 3 ноги,  по каким параметрам она закрывает профит??? В настройках ничего не обнаружил...

 

Автору: огромное спасибо, оченть интересный робот!

Вопросы:

1. По комиссии: комиссия есть - за 0,01 лот составляет 0,07$. Вы пишите: "можно указать ее совокупный объем за 3 пары". Как правильно посчитать - 0,21 будет? 

2. Помогите решить такую ошибку - выдает алерт, скрин прикреплен.

Файлы:
 
Andrey Chebaevskiy:

Добрый день!

на реальном счете работать будет эта версия советника ?

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


Сергей Тамарьян:

Сова откроет 3 ноги,  по каким параметрам она закрывает профит??? В настройках ничего не обнаружил...

Закрывается по общему профиту для треугольника. В поле комиссии можно указать и желаемый профит для закрытия.


HimOrik:

Автору: огромное спасибо, оченть интересный робот!

Вопросы:

1. По комиссии: комиссия есть - за 0,01 лот составляет 0,07$. Вы пишите: "можно указать ее совокупный объем за 3 пары". Как правильно посчитать - 0,21 будет? 

2. Помогите решить такую ошибку - выдает алерт, скрин прикреплен.

1.да верно. 0,21.

2.Нужно увеличить объём торговли.

 
Несмотря на большой код, конвертация в MQL5 занимает всего несколько строк. При этом оригинальный исходник не меняется.
'ThreePoint.mq5'        ThreePoint.mq5  1       1
'MT4Orders.mqh' MT4Orders.mqh   1       1
'ThreePoint.mq4'        ThreePoint.mq4  1       1
'head.mqh'      head.mqh        1       1
'Support.mqh'   Support.mqh     1       1
'var.mqh'       var.mqh 1       1
'fnWarning.mqh' fnWarning.mqh   1       1
'fnSetThree.mqh'        fnSetThree.mqh  1       1
'fnSmbCheck.mqh'        fnSmbCheck.mqh  1       1
'fnChangeThree.mqh'     fnChangeThree.mqh       1       1
'fnSmbLoad.mqh' fnSmbLoad.mqh   1       1
'fnCalcDelta.mqh'       fnCalcDelta.mqh 1       1
'fnMagicGet.mqh'        fnMagicGet.mqh  1       1
'fnCalcPL.mqh'  fnCalcPL.mqh    1       1
'fnCreateFileSymbols.mqh'       fnCreateFileSymbols.mqh 1       1
'fnControlFile.mqh'     fnControlFile.mqh       1       1
'fnCloseThree.mqh'      fnCloseThree.mqh        1       1
'fnCmnt.mqh'    fnCmnt.mqh      1       1
'fnRestart.mqh' fnRestart.mqh   1       1
'fnOpen.mqh'    fnOpen.mqh      1       1
possible loss of data due to type conversion    fnRestart.mqh   31      12
0 error(s), 1 warning(s), compile time: 1696 msec               1       2

Выкладывать не буду, т.к. упомянут Маркет.

 
Alexey Oreshkin:

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


Закрывается по общему профиту для треугольника. В поле комиссии можно указать и желаемый профит для закрытия.


1.да верно. 0,21.

2.Нужно увеличить объём торговли.

Алексей, а на сколько увеличить объем торговли по данным скринам? Установлен 0,5 лот
 
fxsaber:
Несмотря на большой код, конвертация в MQL5 занимает всего несколько строк. При этом оригинальный исходник не меняется.

Выкладывать не буду, т.к. упомянут Маркет.

Мне не жалко. Если есть в этом потребность то выкладывай.
тем более в открытом доступе версия и для мт4 и для мт5 с исходными кодами лежит.
маркет нужен для тех кто не умеет компилирировать и не хочет париться вообще :)
 
HimOrik:
Алексей, а на сколько увеличить объем торговли по данным скринам? Установлен 0,5 лот
Попробуй 1.
я не очень помню логику, надо в код лезть.
 
Alexey Oreshkin:
Мне не жалко. Если есть в этом потребность то выкладывай.
тем более в открытом доступе версия и для мт4 и для мт5 с исходными кодами лежит.
маркет нужен для тех кто не умеет компилирировать и не хочет париться вообще :)
#define MT4_TICKET_TYPE  // Обязываем OrderSend и OrderTicket возвращать значение такого же типа, как в MT4 - int.
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define MODE_MARGINREQUIRED 0

// https://www.mql5.com/ru/forum/170952/page9#comment_4134898
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double MarketInfo( const string Symb, const int )
{
  MqlTick Tick;
  double MarginInit, MarginMain;

  return((SymbolInfoTick(Symb, Tick) && SymbolInfoMarginRate(Symb, ORDER_TYPE_BUY, MarginInit, MarginMain)) ? MarginInit * Tick.ask *
          SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}

int DayOfWeek( void )
{
  MqlDateTime sTime = {0};

  TimeToStruct(TimeCurrent(), sTime);

  return(sTime.day_of_week);
}

int Hour( void )
{
  return((int)((TimeCurrent() % (24 * 3600)) / 3600));
}

#include "ThreePoint.mq4"
 
fxsaber:
Что делает этот код, если не залезать в инклюдники? Превращает его в советник? (вижу #include "ThreePoint.mq4")
Причина обращения: