Курс валют ЦБ РФ Котировки Рейтинг брокеров Рейтинг БО Графики котировок Информеры Биржевой журнал Форекс конкурсы Биржевые новости Процентные ставки Конвертер валют Экономический календарь Мониторинг счетов Форум трейдеров Криптовалюты

Ордера BuyStopLimit и SellStopLimit

contentUrl

С выходом первых билдов терминала Мeta Trader 5 к стандартному списку торговых приказов прибавилось еще два типа приказов – BuyStopLimit и SellStopLimit. BuyStopLimit – это приказ установить ордер Buy Limit при достижении ценой значения, которое находится выше текущей цены Ask. SellStopLimit – это приказ установить ордер Sell Limit при достижении ценой значения, которое ниже текущей цены Bid.

Все это будет работать в МТ5, но на данный момент ни один брокер или дилинговый центр не использует МТ5 для реальной торговли, так как терминал все еще проходит испытания. А ведь так хочется попробовать прелести таких торговых приказов уже сейчас, на МТ4. К счастью, все это можно реализовать и в МТ4. Просто для этого понадобится отдельная программка (скрипт), а не встроенный в терминал механизм.

Так как мы реализуем два вида ордеров, то и скрипт логически будет разбит на две части – обработка BuyStopLimit и обработка SellStopLimit. Пересекаться между собой эти части никак не будут. Тип операции будет указываться пользователем в специальной внешней переменной Type. Так, для установки ордера Buy Stop Limit, необходимо в Type занести значение 0, а для Sell Stop Limit – значение 1. Любое другое значение приведет к отключению работы скрипта.

Итак, блок работы с BuyStopLimit:

if (Type == 0) // Если выбран BuyStopLimit
{
// — 2 — ==== Проверка правильности входных параметров для BuyStopLimit =======
if (StopLimitPrice >= (Price-StopLevel))        // Проверка значения StopLimitPrice
{
Alert(«При установке BuyStopLimit цена StopLimitPrice должна быть ниже Price»);
return(0);
}
if (Price <= Ask)                                        // Проверка значения Price
{

Alert(«При установке BuyStopLimit цена Price должна быть выше Ask»);
return(0);
}
if (TakeProfit — StopLimitPrice <= StopLevel)       // Проверка значения TakeProfit
{
Alert(«Слишком близкий TakeProfit»);
return(0);
}
if (StopLimitPrice — StopLoss <= StopLevel)           // Проверка значения StopLoss
{
Alert(«Слишком близкий StopLoss»);
return(0);
}
// — 2 — ================= Окончание блока =======================

// — 3 — ==== Ожидание достижения ценой значения StopLimitPrice =============
Comment(«Скрипт MT5_BuyStopLimit_SellStopLimit ожидает достижение ценой значения «,
Price);
ShowPrice(Price);

double NAsk = ND(MarketInfo(Symbol(), MODE_ASK));
while(!IsStopped() && NAsk < Price)
NAsk = ND(MarketInfo(Symbol(), MODE_ASK));
deinit();
if (IsStopped())  return(0);
// — 3 — ================= Окончание блока =======================

// — 4 — ==== Нужная цена достигнута — ставим ордер BuyLimit ================
while (!FatalError && !Res && !IsStopped())
{
Res = OpenOrder(OP_BUYLIMIT, StopLimitPrice, TakeProfit, StopLoss);
Sleep(1000);
}
return(0);
// — 4 — ================= Окончание блока =======================
}

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

В свою очередь, цена Price должна быть выше текущей цены Ask. Параметры TakeProfit и StopLoss также настраиваются пользователем. Поэтому они также подвергаются проверке. Здесь все понятнее – профит должен быть выше цены открытия ордера Buy Limit на StopLevel пунктов, а стоп – ниже цены открытия на те же StopLevel пунктов.

Если все параметры заданы пользователем правильно, то происходит переход к третьему блоку, где и производится ожидание нужной цены. Для придания ожиданию б?льшей информативности в левом верхнем углу экрана выводится сообщение об ожидании цены, а также рисуется желтая горизонтальная линия, соответствующая цене Price. Также стоит заметить, что в случае с Buy Stop Limit все цены указываются по Ask, поэтому именно равенство цен Price и Ask скрипт будет ожидать. Ожидание происходит в цикле, выход из которого возможен по двум событиям: остановка скрипта пользователем и достижение ценой нужного значения.

В случае если выход из цикла произошел по причине достижения нужной цены, выполняется последний, четвертый блок, где также, в цикле, производятся попытки установки ордера Buy Limit. Выход из этого цикла происходит уже по трем причинам: появление фатальной ошибки, успешная установка ордера и остановка скрипта пользователем.

Очень похожа на первую часть скрипта вторая часть, обрабатывающая SellStopLimit:

else
if (Type == 1) // Если выбран SellStopLimit
{
// — 5 — ==== Проверка правильности входных параметров для SellStopLimit =======
if (StopLimitPrice <= (Price+StopLevel))      // Проверка значения StopLimitPrice
{
Alert(«При установке SellStopLimit цена StopLimitPrice должна быть выше Price»);
return(0);
}
if (Price >= Bid)                                      // Проверка значения Price
{
Alert(«При установке SellStopLimit цена Price должна быть ниже Bid»);
return(0);
}
if (StopLimitPrice — TakeProfit <= StopLevel)     // Проверка значения TakeProfit
{
Alert(«Слишком близкий TakeProfit»);
return(0);
}
if (StopLoss — StopLimitPrice <= StopLevel)         // Проверка значения StopLoss
{
Alert(«Слишком близкий StopLoss»);
return(0);
}
// — 5 — ================= Окончание блока =======================

// — 6 — ==== Ожидание достижения ценой значения StopLimitPrice =============
Comment(«Скрипт MT5_BuyStopLimit_SellStopLimit ожидает достижение ценой значения»,
Price);
ShowPrice(Price);
double NBid = ND(MarketInfo(Symbol(), MODE_BID));
while(!IsStopped() && NBid > Price && !IsStopped())
NBid = ND(MarketInfo(Symbol(), MODE_BID));
deinit();
if (IsStopped())  return(0);
// — 6 — ================= Окончание блока =======================

// — 7 — ==== Нужная цена достигнута — ставим ордер SellLimit ================
while (!FatalError && !Res)
{
Res = OpenOrder(OP_SELLLIMIT, StopLimitPrice, TakeProfit, StopLoss);
Sleep(1000);
}
return(0);
}
// — 7 — ================= Окончание блока =======================

Пятый блок идентичен второму с присущими для ордера Sell Limit изменениями. Напомню, с этим типом ордеров все цены считаются по Bid.

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

Седьмой блок, также как и четвертый, пытается установить ордер, только не Buy Limit, а уже Sell Limit.

Вот и вся нехитрая логика скрипта.

При запуске скрипта можно установить значения входных параметров:
•    Lots = 0.1 – объем каждого ордера
•    Type = 0 – Тип устанавливаемого ордера: 0 — BuyStopLimit, 1 – SellStopLimit
•    StopLimitPrice = 1.46 — цена, по которой будет установлен ордер Limit
•    Price = 1.47 —  цена, по достижению которой будет установлен ордер Limit
•    TakeProfit = 1.47 – уровень профита для ордера
•    StopLoss = 1.45 – уровень стоп-приказа для ордера

Полный исходный код скрипта можно найти здесь.

Fortrader contentUrl Suite 11, Second Floor, Sound & Vision House, Francis Rachel Str. Victoria Victoria, Mahe, Seychelles +7 10 248 2640568

Добавить комментарий

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Извините, для комментирования необходимо войти.

Ещё из этой категории


Сегодня

Актуально


Редактор рекомендует


Загружаем...