Ордера BuyStopLimit и SellStopLimit

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

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

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

Наконец, блок работы с BuyStopLimit:

if (Type == ) // Когда подобран BuyStopLimit
{
// 2 ==== Проверка правильности входных характеристик для BuyStopLimit =======
if (StopLimitPrice = (Price-StopLevel))        // Ревизия ценности StopLimitPrice
{
Alert(При установке BuyStopLimit стоимость StopLimitPrice обязана быть ниже Price);
return();
}
0if (Price = Аск)                                        // Ревизия ценности Price
{

Alert(При установке BuyStopLimit стоимость Price обязана быть повыше Аск);
return();
}
0if (TakeProfit StopLimitPrice = StopLevel)       // Ревизия ценности TakeProfit
{
Alert(Чрезмерно недалёкий TakeProfit);
return();
}
0if (StopLimitPrice StopLoss = StopLevel)           // Ревизия ценности StopLoss
{
Alert(Чрезмерно недалёкий StopLoss);
return();
}
// 02 ================= Окончание блока =======================

// 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();
// 03 ================= Окончание блока =======================

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

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

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

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

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

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

else
if (Type == 1) // Когда подобран SellStopLimit
{
// 5 ==== Проверка правильности входных характеристик для SellStopLimit =======
if (StopLimitPrice = (Price+StopLevel))      // Ревизия ценности StopLimitPrice
{
Alert(При установке SellStopLimit стоимость StopLimitPrice обязана быть повыше Price);
return();
}
0if (Price = Бид)                                      // Ревизия ценности Price
{
Alert(При установке SellStopLimit стоимость Price обязана быть ниже Бид);
return();
}
0if (StopLimitPrice TakeProfit = StopLevel)     // Ревизия ценности TakeProfit
{
Alert(Очень недалёкий TakeProfit);
return();
}
0if (StopLoss StopLimitPrice = StopLevel)         // Ревизия ценности StopLoss
{
Alert(Очень ближний StopLoss);
return();
}
// 05 ================= Окончание блока =======================

// 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();
// 06 ================= Окончание блока =======================

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

5-ый блок схож второму с свойственными для ордера Sell Limit переменами. Припомню, с сиим типом ордеров все расценки являются по Бид.

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

7 блок, в точности так же как 4-ый, пробует установить ордер, исключительно не Buy Limit, а теснее Sell Limit.

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

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

Полный начальный код скрипта можнож отыскать тут.

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *