preasto

 
Уровень 11

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2081



РЕКОМЕНДУЮ



Советник со стоп-ордерами

Андрей, просьба сделать такой вспомогательный Советник со стоп-ордерами:

При открытии рыночного ордера сов. выставляет к нему 2 стоп-ордера: buy-stop и sell-stop,
с параметрами:
==========
LevelUp = 100; //расстояние до buy-stop (0 — не выставлять)
LevelDn = 100; //расстояние до sell-stop
MarketWay = да /нет // да — выставлять отложку только против рыночного ордера: для Buy = sell-stop, Sell = buy-stop; нет — ставить отложки в оба направления по их настройкам для каждого направления.
K-Lot-buystop-1 = 2 (можно менять) // коэф. лотности для 1й отложки относительно лота рыночного ордера
K-Lot-sellstop-1 = 2 (можно менять)
K-Lot-buystop-Х = 2 (можно менять) // коэф. лотности для последующих отложек после 1й отложки — относительно предыдущей
K-Lot-sellstop-X = 2 (можно менять)
Число колен Х = 5 — число колен (повторов выставления отложек после открытия рыночного ордера)
Magic_list = [0 111 222] — поле, куда пишутся нужные магики с пробелом или ч\з запятую
==========
В качестве функций лучше всего использовать готовый скрипт script cm open 2 stopopders, где эта основа реализована,
откуда взять и все остальные параметры. Т.е. реализовать советник на его основе.

===
При открытии по сработавшей отложке рыночного ордера — противоположная (несработавшая) отложка удаляется,
и к этому новому рыночному ордеру ставятся заново 2 отложки по параметрам.
И т.д. до заданного числа повторов (колен) «Х».
Крайняя отложка серии, или очередная в случае нехватки маржи, выставляется лотностью равной разнице лотностей всех рыночных ордеров обоих направлений начиная с 1го стартового рыночного ордера этой группы.
После её отработки в рыночный ордер — «счётчик» числа колен «Х» этой группы ордеров обнуляется,
эта группа ордеров фиксируется и далее не используется в советнике.
При открытии нового рыночного ордера (руками, по сигналу) советник ведёт эту новую группу отдельно, со своим счётчиком колен «Х».


Отложки можно перемещать руками, удалять и сов. их назад не возвращает.
Отложку открытую (руками, по сигналу) заново, после/вместо удаления какой-то, сов. «подхватывает» в порядке очерёдности «Х».

***
БУ, СЛ, ТП, и трал рыночных — типовые настройки*:
БУ: дистанция срабатывания, отступ от цены, (0 — откл.)
Трал: дистанция срабатывания, отступ от цены, шаг (0 — откл.)
% закрытия лота ордера по БУ, ТП и тралу: 100%
===
*БУ, СЛ, ТП, и трал — действуют только для очередного(крайнего) рыночного ордера открытого в направлении 1го(стартового) рыночного серии.
(выставлены, пока не сработает отложка к ордеру)
— При срабатывании отложки выставленной к рыночному ордеру, все СЛ, ТП к нему удаляются.
===
Тут можно каждый раз, при срабатывании отложки противоположного к стартовому рыночному ордеру направления,
удалять функцией вообще все БУ, CЛ, ТП, и трал и включать их только нового рыночного ордера открытого в направлении 1го стартового.

Например:
1й старт-ордер Sell. К нему открыты sell-stop и buy-stop.
Сработал buy-stop — все БУ, СЛ, ТП, и трал к ордерам удалились, на новый buy проставились свои sell-stop и buy-stop.
БУ, СЛ, ТП, и трал к нему не ставятся, т.к. он против направления 1го старт-ордера Sell.
Сработал к этому buy sell-stop:
— к новому Sell открылись sell-stop и buy-stop + выставлены БУ, СЛ, ТП, и трал, т.к. он в направлении 1го старт-ордера Sell.
Сработал к этому Sell sell-stop:
— к новому Sell открылись sell-stop и buy-stop + выставлены БУ, СЛ, ТП, и трал, т.к. он также в направлении 1го старт-ордера.
При этом БУ, СЛ, ТП, и трал к предыдущему Sell тоже сохранены, т.к. между ними не было противоположного buy-ордера.
И т.д. После открытия каждого ордера противоположного 1му старт-ордеру направления, все БУ, СЛ, ТП, и трал — удаляются,
после открытия каждого ордера в направлении 1го старт-ордера — прежние сохраняются и новые ставятся и только на крайний(новый) рыночный ордер.
===
Т.е. нужна функция: — ставить БУ, СЛ, ТП, и трал только к новому рыночному ордеру того же направления, что 1й (учётный) старт-ордер группы.

При отработке в рыночный ордер крайней отложки группы ордеров на колене «Х» — открывается новый рыночный старт-ордер,
если вкл. функция авто-открытия ордеров по сигналам*:
— Авто-Открытие ордеров: да /нет // нет — только вручную, или по др. сигналам из магиков
по индикатору: CCIArrows+MA.mq4 (16 Kb)
===
*Для справки (примера, кода).
1. Функция по созданию поля Magic_list: [0 111 222]: Magic_list_func.txt (0 Kb)
2. Скрипт удаления всех SL и ТР: DeleteSL&TP.mq4 (1 Kb)
или:
int start(){
   int Total = OrdersTotal();

   for(int i=Total-1; i>=0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
         OrderModify(OrderTicket(), NormalizeDouble(OrderOpenPrice(), Digits),0,0,0);
} 

***
3. Пример готового скрипта открывающего так отложки, к-е можно и взять за функции и вывести в параметры в сов.:
script cm open 2 stopopders 09.mq4 (17 Kb)
/*--------------------------------------------------------------------
<i>В определенное время(задаётся в параметрах) выставляются 
два отложенных ордера байстоп и селстоп на расстоянии в пунктах (задается в 
параметрах) от текущей цены, с TP и SL в пунктах (задается в параметрах). 
После срабатывания одного из ордеров, противоположный удаляется.
Если включен трал, то скрипт сопровождает открытую позицию тралом и после ее закрытия заканчивает свою работу.</i>
//--------------------------------------------------------------------*/
//--------------------------------------------------------------------*/
extern int      stoploss       = 20,       //уровень выставления SL, если 0, то SL не выставляется
                takeprofit     = 20,       //уровень выставления TP, если 0, то TP не выставляется
                Magic          = 0;        //уникальный номер ордера
extern double   Lot            = 0.1;      //объем ордеров
extern datetime TimeSet        = D'2016.12.09 16:30'; //Время выставления ордеров, если текущее время больше установленного, то выставляются сразу
extern datetime TimeClose      = D'2016.12.09 16:39'; //Время удаления ордеров и закрытия всех позиций
extern int      LevelUp        = 10;          //расстояние до buystop 
extern int      LevelDn        = 10;          //расстояние до sellstop 
extern int      TrailingStop   = 10,          //трейлингстоп, если 0, то нет трейлинга
                TrailingStart  = 0,           //старт трейлинга
                TrailingStep   = 0;           //шаг трала
extern int      MitutClose = 135;//время жизни отложенного ордера
int slippage=3;
double STOPLEVEL;
//--------------------------------------------------------------------
  • +3
  • Просмотров: 2552
  • 27 февраля 2017, 12:54
  • preasto
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Скальпер внутри спреда!
Следующая запись в группе  
Индикатор - рулетка
24 февраля 2017
27 февраля 2017

Комментарии (0)


Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари