Андрей, просьба сделать такой вспомогательный Советник со стоп-ордерами:
При открытии рыночного ордера сов. выставляет к нему 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;
//--------------------------------------------------------------------
Комментарии (0)
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий