6
Апр
2015

Как выставить лимитник внутри спреда на ECN-счетах




Мало кто из начинающих форекс-трейдеров знает, что существует возможность исполнения ордеров по гарантированным ценам, исключая отрицательное проскальзывание. Проскальзывания – это реальный “бич” реального рынка форекс (уж простите за тавтологию).

Если Вы не знаете (или забыли), то уточню, что существует две разновидности ордеров – это рыночные ордера и отложенные ордера. Отложенные ордера переходят в рыночные после их активации ценой на заданном уровне. В свою очередь, существуют две разновидности отложенных ордеров – это стоповые ордера (buy stop, sell stop) и лимитные ордера (buy limit, sell limit). Так вот, заданный уровень при активации стопового ордера не гарантирован и он может перейти в рыночный с огромным проскальзыванием. Особенно это актуально при наличии резких движений, например, на новостях. Т.е. мы хотим поймать движение, а рынок (или брокер, или поставщик ликвидности, чего греха таить :) ) протаскивает наш ордер на самый пик этого движения, после чего ордер активируется, а цена откатывается к нашему стоп-лоссу. Соответственно, вместо ожидаемой прибыли мы получаем убыток. Знакомая ситуация?

Так, раз за разом “дерем волосы на голове”, обзываем брокера нелестными словами, виним его во всех грехах (“вольных или невольных”). А есть ли выход? Да, выход есть. Выход – это установка лимитного ордера. А если ваш брокер предоставляет возможность открытия ECN-счетов, то у вас есть “уникальная” возможность выставить лимитник внутри спреда (наглядно наблюдать спред поможет мой индикатор спреда). Вот именно об этом сегодня и поговорим.

Сравнивая два вида отложенных ордеров: стоповых и лимитных, я должен отметить, что исполнение стоповых ордеров гарантировано, но не гарантирована цена. В случае же с лимитным ордером все наоборот, т.е. исполнение не гарантировано, но если ордер исполняется, то гарантирована его цена. Таким образом, с установленным лимитником при его активации мы не получим отрицательного проскальзывания, и если он активируется, а цена “поскачет” в “нашу” сторону, то мы получим профит. Причем, профит максимальный, т.к. активация ордера прошла по “нашей” цене и мы на тейке (при его достижении) возьмем весь положенный изначально предполагаемый профит, а может и больше, т.к. тейк профит, в свою очередь, такой же лимитник и он исполняется по указанной цене либо лучшей цене, т.е. с положительным проскальзыванием (помните, я писал неоднократно в Гостевой про открытие лимитниками и фиксацию тейками?).

Sell limit (лимитник на продажу) – отложенный ордер на продажу по цене выше текущего уровня цен. Смысл состоит в возможности продажи дороже, чем сейчас по гарантированной цене. Расчет на то, что цена сначала вырастет до некоторого уровня, а затем упадет. Исполняется при равенстве будущей цены Bid указанному в ордере значению.

Buy limit (лимитник на покупку) – отложенный ордер на покупку по цене ниже текущего уровня цен. Смысл состоит в возможности покупки дешевле, чем сейчас по гарантированной цене. Расчет на то, что цена сначала упадет до некоторого уровня, а затем вырастет. Исполняется при равенстве будущей цены Ask указанному в ордере значению.

Sell stop (стоповый на продажу) – отложенный ордер на продажу по цене ниже текущего уровня цен. Смысл состоит в возможности гарантировано продать дешевле, чем сейчас по негарантированной цене. Расчет на то, что цена продолжит падение. Исполняется при условии, если будущая цена Bid меньше или равна указанному в ордере значению.

Buy stop (стоповый на покупку) – отложенный ордер на покупку по цене выше текущего уровня цен. Смысл состоит в возможности гарантировано купить дороже, чем сейчас по негарантированной цене. Расчет на то, что продолжит рост. Исполняется при условии, если будущая цена Ask больше или равна указанному в ордере значению.

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

А теперь вернемся к спреду, о котором я упомянул в третьем абзаце. Наверняка, вы знаете, что на новостных движениях спред расширяется, причем, расширяется значительно. Если, скажем, средний спред у брокера около 1 пункта, то на тех же самых нонфармах (важнейший показатель, имеющий отношение к рынку труда в США) он расширяется в десятки раз. Это расширение спреда длитcя некоторое незначительное время, но успевает “наделать дел”, собрав стопы новостников, вынеся их с рынка. Т.е. выбивает всех, кто не вовремя (на широком спреде) зашел, да, еще и с неправильными параметрами (агрессивно). Т.е. перед нами стоит задача войти в сделку с гарантированной ценой, да, еще и вовремя (на узком, “устаканенном” спреде). А вот здесь уже без автоматизации не обойтись, потому что мы не можем в считанные доли секунды вычислить спред, уяснить подходит ли он нам по своей “широте” и тут же выставить лимитник с нужными параметрами. Да, мы не можем, но это позволяет сделать МТ4 с помощью программирования соответствующего скрипта на MQL, а нам остается только настроить параметры скрипта и “кидать” его на график до результата (выставления лимитника внутри спреда). На самом деле скрипты очень простые, и назвал я их buylimit и selllimit. Первый выставляет лимитник с заданными параметрами (ширина спреда, объем ордера, уровни тейк профит и стоп лосс, уникальная метка ордера) на активацию длинной позиции (buy), а второй – на активацию короткой позиции (sell). Если текущий спред шире спреда, заданного параметром spread, то лимитники не выставляются, т.е. скрипт не выполняется. Таким образом, мы защитимся от “несвоевременного” входа, когда спред еще достаточно широк и не все “устаканилось”. А вот выставлять лимитник мы будем внутри спреда, т.е. предполагается, что вы торгуете на ECN-счетах. Заодно и проверим, не обманывает ли нас брокер, декларируя такую возможность.

//+------------------------------------------------------------------+
//|                                                     buylimit.mq4 |
//|                                         http://moneyinnetwork.ru |
//|                                         http://moneyinnetwork.ru |
//+------------------------------------------------------------------+
#property copyright "http://moneyinnetwork.ru"
#property link      "http://moneyinnetwork.ru"
#property version   "1.00"
#property strict
//#property script_show_inputs //отображает параметры при активации скрипта 
                               //убрать двойной слеш, если хотите менять параметры
                               //при активации скрипта - для скоростного исполнения
                               //предварительно настройте параметры скрипта и защитите эту
                               //строку двойным слешем
input int      spread = 20; //максимальный спред на рынке для выставления лимитника
input double   lot = 0.01;  //объем позиции
input int      sl = 100;    //стоп-лосс, в пунктах
input int      tp = 100;    //тейк-профит, в пунктах
input int      magic = 100500; //уникальная метка ордера
void OnStart()
{
    RefreshRates(); //обновляем внутренние "рыночные" переменные
    double sp1 = (Ask-Bid)/Point; //вычисляем спред, приводя его к пунктам
    if ( sp1 <= spread )   {   //если спред не шире заданного, то активируем лимитник
          int ticket = OrderSend (Symbol(),
                                  OP_BUYLIMIT,
                                  lot,        
                                  NormalizeDouble (Bid+Point*sp1/2, Digits),
                                  0, 
                                  NormalizeDouble (Bid+Point*sp1/2-sl*Point, Digits),
                                  NormalizeDouble (Bid+Point*sp1/2+tp*Point, Digits),
                                  "",
                                  magic,
                                  0,    
                                  clrBlue 
                                 );
    }
}
//+------------------------------------------------------------------+
//|                                                    selllimit.mq4 |
//|                                         http://moneyinnetwork.ru |
//|                                         http://moneyinnetwork.ru |
//+------------------------------------------------------------------+
#property copyright "http://moneyinnetwork.ru"
#property link      "http://moneyinnetwork.ru"
#property version   "1.00"
#property strict
//#property script_show_inputs //отображает параметры при активации скрипта 
                               //убрать двойной слеш, если хотите менять параметры
                               //при активации скрипта - для скоростного исполнения
                               //предварительно настройте параметры скрипта и защитите эту
                               //строку двойным слешем
input int      spread = 20; //максимальный спред на рынке для выставления лимитника
input double   lot = 0.01;  //объем позиции
input int      sl = 100;    //стоп-лосс, в пунктах
input int      tp = 100;    //тейк-профит, в пунктах
input int      magic = 100500; //уникальная метка ордера
void OnStart()
{
    RefreshRates(); //обновляем внутренние "рыночные" переменные
    double sp1 = (Ask-Bid)/Point; //вычисляем спред, приводя его к пунктам
    if ( sp1 <= spread )   {   //если спред не шире заданного, то активируем лимитник
          int ticket = OrderSend (Symbol(), 
                                  OP_SELLLIMIT, 
                                  lot,
                                  NormalizeDouble (Bid+Point*sp1/2, Digits), 
                                  0, 
                                  NormalizeDouble (Bid+Point*sp1/2+sl*Point, Digits), 
                                  NormalizeDouble (Bid+Point*sp1/2-tp*Point, Digits), 
                                  "", 
                                  magic, 
                                  0, 
                                  clrRed
                                 );
    }
}

Где это проверено и работает? Это работает на ECN счетах. Там, где можно выставлять лимитный ордер внутри спреда. Например, в Alpari, GKFX и др.

Всегда ли это необходимо? В моем понимании, не всегда, т.к. бывают ситуации, когда требуется именно гарантированное исполнение и при этом несущественные проскальзывания принимаются, как “побочный эффект” (например, при отработке графических паттернов).

Скачать скрипты можно здесь: buylimit, selllimit.

Попутного тренда!

Материалы схожей тематики:
Поделитесь с другими:

Получать информацию о новых заметках:

Комментарии


Ваш комментарий

Подписаться без комментирования



alpari