home

Скрипт CFD Check – торговля CFD в MetaTrader 4

В настоящее время многие дилинговые центры помимо валютных пар предоставляют своим клиентам возможность заключать сделки по различным инструментам товарных и фондовых рынков в торговой платформе МТ4. Европейские и американские индексы, акции различных компаний, сырьевые инструменты и т.п. сегодня представлены в самом широком ассортименте.

Однако начинающие трейдеры при попытке торговать такими инструментами в торговой платформе МТ4 зачастую сталкиваются с очень неприятным «сюрпризом».

При заключении сделки выясняется, что открытие/закрытие позиции происходит не по той цене, что отображается на графике торгуемого инструмента, а по иной, худшей цене. Бывает так, что трейдер отдает приказ на закрытие прибыльной позиции, а в истории счета видит, что позиция закрылась с изрядным убытком. Особенно часто так происходит при попытке торговать малоликвидными инструментами, например фьючерсными контрактами на «экзотические»  валютные кроссы и т.п. Да и при торговле фьючерсами на  популярные сырьевые инструменты, особенно в малоликвидные ночные часы,  очень велика вероятность получить изрядный минус при открытии/закрытии позиции.

Почему же так происходит? Попробуем разобраться.

Дело в том, что при торговле CFD на фьючерсы в МТ4 используются цены Last, Ask и Bid. (Last – цена последней биржевой сделки). На текущем графике анализируемого инструмента мы видим только цену Last. По этой цене исполняются отложенные ордера. При открытии же позиций «с рынка»  приказы исполняются по худшим ценам, — по ценам Ask или  Bid (которых, к сожалению,  не видно на графике фьючерса), в зависимости от типа сделки —  BUY или SELL.

В рамках платформы MetaTrader 4 невозможно отобразить три цены на одном графике, а именно —  одновременно отобразить цены Last, Ask, Bid. Поэтому вводится дополнительный вспомогательный инструмент, так называемый тикер, который обозначается прибавлением значка «#I» к названию основного инструмента.

Именно так реализована фьючерсная торговля в некоторых популярных Дилинговых центрах.

Рассмотрим пример.  На рисунке видно, что на графике основного инструмента (нефть Брент BRNH0), с которого мы отдаем приказы на покупку/продажу,  присутствует только одна цена – Last = $73.68. А вот на графике тикера  BRNH0#I   присутствуют цены

Ask = $73.69 и  Bid = $73.66.

Если мы захотим реализовать покупку инструмента, то позиция у нас откроется вовсе не по цене 73.68, которую мы видим на графике. А по худшей цене, — по цене Ask тикера BRNH0#I = 73.69! При продаже, напротив, позиция у нас откроется не по цене 73.68, а по худшей на 2 пункта цене Bid тикера BRNH0#I = 73.66.

Пример входа

Понятно, что такая ситуация доставляет много неудобств. В ночное «неликвидное» время либо, наоборот, при новостных энергичных движениях мы рискуем открыть/закрыть позицию на несколько десятков пунктов (!) хуже, чем мы предполагаем, глядя на график торгуемого инструмента с ценой Last. Чтобы этого не произошло, приходится отслеживать цены Ask и Bid тикера #I  в окне ОБЗОР РЫНКА либо выставлять рядом с графиком торгуемого инструмента график его тикера #I, и, «стреляя» глазами в разные стороны монитора, ловить подходящий момент для подачи приказа.

А если мы активно торгуем сразу несколько инструментов или используем скальперскую тактику, требующую частого закрытия/открытия позиций по нескольким инструментам?

Удовольствие от такой торговли, прямо скажем, очень небольшое…. В связи с этим, появилась мысль о создании  конструкции, позволяющей свести к минимуму все вышеописанные неудобства. Заметим, что при написании алгоритма такой конструкции очень пригодились материалы предыдущего номера журнала (Школа MQL4, описание цикла while). Итак, наша  задача состояла  в том, чтобы на инертном малоподвижном графике основного инструмента, с которого мы отдаем приказы на открытие/закрытие позиций, динамично отображались цены Ask и  Bid тикера #I . Конструкция выполнена в виде скрипта.

Вот такой код получился:

//+--------------------------------------------+
//|                                #CFD Check# |
//| Copyright © 2009, Leonid553 & FOREX Review |
//+--------------------------------------------+
#property copyright "Copyright © 2009, Leonid553 & fx-review.ru"
#property link      "[email protected]"

#property show_inputs

//============================================
//—Внешние параметры скрипта—
extern string Tiker           = "#I";
extern color  Сolor_AskTiker  = Lime; //цвет линии Ask
extern color  Сolor_BidTiker  = Aqua; //цвет линии Bid
extern int    LineWidth       = 1;    //толщина линий

string _tiker;
double Ask_Tiker, Bid_Tiker;
string name;

//——————————————-

int init() //создаем горизонт. линии на графике
 {
  ObjectCreate("lowline",OBJ_HLINE,0,0,0,0,0);
  ObjectCreate("highline",OBJ_HLINE,0,0,0,0,0);
  ObjectSet("lowline", OBJPROP_BACK,1);
  ObjectSet("highline", OBJPROP_BACK,1);
  _tiker  = Symbol()+Tiker;//присваиваем наименование тикеру
  return(0);
 }

//——————————————-

int deinit()
 {
  ObjectDelete("lowline"); ObjectDelete("highline"); // удаляем линии с экрана
  Comment("");
  return(0);
 }

//————————————————-

void start() //Функция СТАРТ
 {
  while(!IsStopped()) //зацикливаем код скрипта
   {
    RefreshRates();
    
    //Задаем цены аск и бид тикера
    Ask_Tiker = MarketInfo(_tiker,MODE_ASK);
    Bid_Tiker = MarketInfo(_tiker,MODE_BID);
    
    Comment (//отображаем тикер и все цены на графике
    "\nТикер  =  ", _tiker ,"\n",
    "Ask_Tiker = ",Ask_Tiker,"\n",
    "Last_Price= ",Ask,"\n",
    "Bid_Tiker = ",Bid_Tiker);
    
    //устанавливаем горизонтальные линии на ценах аск и бид
    name = "highline";
    if(ObjectFind(name) < 0) ObjectCreate(name, OBJ_HLINE, 0,0,0);
    ObjectSet(name, OBJPROP_PRICE1, Ask_Tiker);
    ObjectSet(name, OBJPROP_COLOR , Сolor_AskTiker);
    ObjectSet(name, OBJPROP_STYLE , 0);
    ObjectSet(name, OBJPROP_WIDTH , LineWidth);

    name = "lowline";
    if(ObjectFind(name) < 0) ObjectCreate(name, OBJ_HLINE, 0,0,0);
    ObjectSet(name, OBJPROP_PRICE1, Bid_Tiker);
    ObjectSet(name, OBJPROP_COLOR , Сolor_BidTiker);
    ObjectSet(name, OBJPROP_STYLE , 0);
    ObjectSet(name, OBJPROP_WIDTH , LineWidth);
   }//конец цикла
 }//Конец функции СТАРТ

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

Посмотрим, что же у нас получилось. При установке советника на график мы увидим  в окне СВОЙСТВА ЭКСПЕРТА всего четыре параметра:

Tiker = «#I»       — это добавочный символ к инструменту

Сolor_AskTiker — цвет линии Ask

Сolor_BidTiker — цвет линии Bid

LineWidth         — толщина линий

Вот такую картину мы увидим на графике фьючерса сырьевого инструмента BRNH0 (нефть Брент):

График фьючерса BRNH0

Теперь здесь хорошо видна не только изначально присутствующая цена Last=73.68, но и  обозначенные цветными горизонтальными линиями (показаны стрелками) динамичные цены Ask=73.69  и Bid=73.66 , по которым и будут открываться позиции BUY и SELL соответственно. Кроме того, все эти цены будут так же динамично отписываться  в верхнем левом  углу графика вместе с наименованием тикера.

При таком наглядном отображении всех цен любая торговля будет удобной и комфортной. Цена  Last , как правило, инертна и малоподвижна, в отличие от активных и динамичных цен Ask и Bid. Если мы хотим открыть позицию, а текущий спред (Ask-Bid) покажется нам излишне большим, то, зачастую,  подождав немного, мы откроем позицию по гораздо более выгодной цене, когда линии цен Ask и Bid сблизятся на графике до приемлемого минимума.

Не следует забывать, что для нормальной работы скрипта необходимо присутствие тикера #I торгуемого инструмента в окне ОБЗОР РЫНКА!

Файл скрипта должен находиться в папке …MQL4/Scripts/

Открываем нужный нам инструмент, перетягиваем скрипт на график и начинаем торговать.

Скачать бесплатно

Удачи всем!

Журнал FX Review

Правила комментирования