16 ноября, 2009

Ордера BuyStopLimit и SellStopLimit

Игорь Герасько
RU

С выходом первых билдов терминала М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 – уровень стоп-приказа для ордера

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

Подпишитесь на нас в VK

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

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

Все статьи

Простая разработка скрипта Stop Trade для MetaTrader 4 на языке Mql4

Торговля на финансовых рынках становится всё более популярной, и Алготрейдинг играет в этом процессе значительную роль. В этой статье мы рассмотрим простую разработку скрипта для MetaTrader 4, который закроет все открытые позиции и удалит все отложенные ордера. Скрипт будет написан на популярном языке программирования MQL4, который зарекомендовал себя как простой и надёжный инструмент для разработки […]

4 нюанса тестирования советников в терминале MetaTrader 4, о которых знают не все трейдеры

В условиях современного трейдинга использование в торговле форекс советников уже давно не выглядит какой-то экзотикой. Практически каждый день появляются новые платные и бесплатные торговые роботы, которые впечатляют доходностью и вызывают желание быстренько заработать. Однако ставить эксперта на торговый счет без проверки – сомнительная затея, ведущая к «неожиданным» потерям в потенциале. Поэтому рекомендуем начать работу с […]

Скрипты на Форекс: что это и как установить в MT4

«Переболев» бесплатными форекс-советниками и техническими индикаторами, обещающими прибыль в сотни и тысячи долларов до следующего понедельника, начинающий трейдер обычно возвращается на грешную землю и понимает, что технические инструменты – это всего лишь помощники, делающие торговлю на валютном рынке проще и комфортнее. Мы уже много говорили о них, не затронув только Форекс скрипты, широко используемые трейдерами […]

Классификация Форекс советников

Форекс Советник (робот, EA) – это обыкновенный алгоритм, запрограммированный на основе той торговой системы, которой вы планируете использовать, чтобы совершать сделки на валютном рынке. Можно сказать, что для того, чтобы использовать советник, необходимо знать торговую систему, ставшую для него основой, чтобы знать, на каком рынке его можно применять, когда это делать по времени и за […]

Недавние обучающие статьи

Все статьи

Редакция рекомендует

Все статьи
Loading...