bablusut
bablusut

 
Уровень 7

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

  Моя торговля


График торгового счета bablusut


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

Рейтинг 1315



РЕКОМЕНДУЮ



Заказ советника торгующего отложенными стоповыми ордерами - "Bull-Flet-Bear Stop" для MТ4, копия MТ5.

Техническое задание

extern double KefLot = 1.5; //Коэффициент увеличения лота.
extern int Step = 25; //Начальное расстояние между ордерами.
extern int Koef = 3; //Коэффициент рыночных ордеров.
extern int TP = 5; //Тейк профит серии ордеров при усреднении.
extern int Tral = 10; //Трейлинг ордера по усреднению.
extern int Trend = 10; //Расстояние между ордерами по тренду.
extern int MaxLot = 10; //Максимальный объём открываемого лота.

1. Советник предназначен для совершения операций Long&Short на любой версии терминала MetaTrader4/5, на Standard валютных счетах с фиксированным спредом, должен обрабатывать все ордера по данному инструменту (подхватывать и учитывать сторонние ордера, т. е. Меджик не приемлем).

При включении (на первом тике) запрашивается и фиксируется INFO:

MODE_MINLOT, MODE_MAXLOT, MODE_LOTSTEP, MODE_STOPLEVEL, MODE_SPREAD, MODE_DIGITS.

На каждом последующем тике проверяется информация INFO на соответствие:

— данные INFO отличаются от зафиксированных — Alert (Alert не повторять);
— данные INFO MODE_SPREAD, MODE_STOPLEVEL увеличены вдвое — break;
— расчётные значения цен должны соответствовать INFO MODE_DIGITS;
— значение MaxLot больше MODE_MAXLOT — то равен MODE_MAXLOT;
— шаг изменения объёма лота меньше MODE_LOTSTEP — то равен MODE_LOTSTEP;
— расчётные значения расстояний от Bid/Ask до устанавливаемых BuyStop, SellStop, TakeProfit, StopLoss, меньше MODE_STOPLEVEL — то значения равны MODE_STOPLEVEL;

2. При дальнейшей работе советника:

2.1 — выставляются по одному отложенному ордеру на каждое направление (BuyStop, SellStop) с минимально допустимым объёмом лота (MODE_MINLOT) на расстоянии Trend от рыночной цены (Bid/Ask);

Примечание: всегда должен присутствовать (OrderSend) отложенный ордер по каждому направлению (BuyStop, SellStop) с минимально допустимым объёмом лота (MODE_MINLOT).

2.2 — При отсутствии открытых рыночных ордеров (Buy/Sell) в сетке одного направления, соответствующий отложенный ордер движется (OrderModify) за рыночной ценой, тралом (по пунктах) на прежнем расстоянии Trend, до момента открытия соответствующего рыночного ордера.

2.3 — При наличии открытых рыночных ордеров (Buy/Sell) в сетке одного направления количеством до некой величины Koef:

2.3.1 — выставляются уровни TakeProfit (каждому открывшемуся рыночному ордеру) на расстоянии = Koef*Trend-Spread;

Примечание: INFO: MODE_SPREAD проверяется на каждом тике, при изменении Spread уровни TakeProfit модифицируются (OrderModify) т. е. открытых рыночных ордеров, по направлению тренда, не должно быть более величины Koef.

2.3.2 — в сетке убыточных ордеров дополнительно выставляется второй отложенный ордер того же направления с увеличенным лотом (KefLot*OrderLots() ), на расстоянии Step от ближайшего в сетке (если несколько) открытого ордера (Buy/Sell), и Tral от рыночной цены (Bid/Ask).

2.3.3 — дополнительно выставленный второй отложенный ордер движется (OrderModify) за рыночной ценой, тралом (по пунктах) на прежнем расстоянии Tral, до момента открытия соответствующего рыночного ордера.

2.4 — Количество открытых рыночных ордеров одного из направлений (против тренда, убыточных) превысило некую величину Koef:

2.4.1 — включается функция усреднения, рассчитывается уровень цены безубытка BU сетки открытых убыточных ордеров, TakeProfit последнего открытого ордера (только того, который выше Koef) устанавливается на уровень цены рассчитанного усреднения BU+ТР, при этом остальные уровни TakeProfit ордеров остаются без изменений.

2.4.2 — соответствует 2.3.2 — 2.4.3 — соответствует 2.3.3 — 2.5 — Рыночная цена развернулась и пошла в обратную сторону:

2.5.1 — соответствует 2.3.2 — 2.5.2 — соответствует 2.3.3 — 2.5.3 — рыночная цена достигла уровня BU+ТР, закрывается по TakeProfit соответствующий ордер из сетки убыточных и количество оставшихся ордеров в соответствующей направлению сетке более Koef — окромя имеющихся уровней TakeProfit, дополнительно выставляется уровень StopLoss (для всех оставшихся ордеров данного направления) на общем расстоянии Tral от рыночной цены и StopLoss сопровождается тралом с шагом один пункт.

2.5.4 — рыночная цена достигла уровня TakeProfit — соответствующий ордер закрывается, если StopLoss — все соответствующие рыночные ордера закрываются см. пункт 2.2 —

Примечание: рыночная цена достигла уровней TakeProfit, StopLoss — желательно проконтролировать (продублировать) закрытие рыночных ордеров,

3. — Иными словами:

— все отложенные ордера по тренду выставляются через равные промежутки Trend от рыночной цены и предыдущего открытого ордера (только первый с трендом);

— открытые ордера по тренду с установкой TakeProfit на уровне Koef*Trend-Spread, INFO: MODE_SPREAD проверяется на каждом тике, при изменении Spread уровни TakeProfit модифицируются);

— при превышении количества открытых ордеров, в сетке убыточных, более Koef, TakeProfit на уровне BU+ТР;

— при закрытии рыночного ордера по TakeProfit на уровне BU+ТР, и количестве оставшихся ордеров более Koef — (StopLoss на расстоянии Tral от рыночной цены), добавляется сопровождение StopLoss Трейлингстопом,.

— против тренда выставляются дополнительно отложенные стоповые ордера через промежуток Step от ближайшего открытого ордера и Tral от рыночной цены, с тралом за рыночной ценой до открытия, TakeProfit устанавливается, для открытых ордеров с порядковым номером до Koef на уровне Koef*Trend-Spread, с порядковым номером выше Koef на уровне вновь рассчитанного безубытка BU+ТР (объём лота увеличен от предыдущего KefLot*OrderLots() ). При отскоке (консолидации) рыночной цены до уровня TakeProfit (по цене BU+ТР), закрывается соответствующий ордер и, для каждого из оставшихся, (если в сетке убыточных ордеров количество более Koef), выставляется дополнительно StopLoss с сопровождением Трейлингстопом, (StopLoss на расстоянии Tral от рыночной цены).
— если закрываются все открытые ордера в сетке одного направления по StopLoss, то оставшийся отложенный стоповый ордер движется тралом на расстоянии Trend за рыночной ценой, как в начале техзадания. — если закрываются открытые ордера в сетке одного направления по TakeProfit, то StopLoss оставшихся ордеров, продолжает движение за рыночной ценой на расстоянии Tral.
*hi* 
  • +1
  • Просмотров: 679
  • 25 мая 2018, 23:41
  • bablusut
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
Нужно максимально упрощать советник или дробить на части задание, тогда реально будет сделать. И не забудьте о скринах с пояснениями.
Редактирован: 26 мая 2018, 10:37
avatar

  27  AM2 Сообщений: 8028 - Андрей

  • 26 мая 2018, 01:13
+
0
А что здесь упрощать? В файловой части сайта упрощённых вариантов хоть пруд пруди. Кстати, данный вариант советника существует в тестовой версии, собран по-блочно из кода MQL4 более простых торговых программ находящихся в свободном доступе на сайте, отлично тестируется в тестере, на демо-счёте, и даже на центовом. Отлично работает на одной валютной паре счёта, если поставить на два-три инструмента одного счёта, то начинает барахлить — выставляет цену TakeProfit ордеров одного финансового инструмента, на ордера другого-третьего хаотично… с этим я, со временем, разберусь. а вот хотелось бы увидеть аналогичный код от опытного программиста, так сказать со всеми прибамбасами, «облагороженный» для рыночной торговли на разных счетах, валютах, брокерах и т.д. а заодно и аналогичный вариант для МТ5… готов обсудить платный вариант работы.
<code>int start() {	int Buy, Sell, BuyStop, SellStop, BuyStep, SellStep, summ; 		double - все остальные;
     for(int i=0; i<OrdersTotal(); i++)   { chk=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);	//... прямой пересчёт ордеров.
	if(OrderSymbol()==Symbol() && OrderType()==0)	   	Buy++;	 BuyKoefProfit=Ask+(Koef*Trend-MODE_SPREAD);	BuyStep=Ask+(Step+Tral); 
   	if(OrderSymbol()==Symbol() && OrderType()==1)   	Sell++;	 SellKoefProfit=Bid-(Koef*Trend-MODE_SPREAD);	SellStep=Bid-(Step+Tral); 
    	if(OrderSymbol()==Symbol() && OrderType()==4)   	BuyStop++; 	BuyStopPrice1=Ask+Trend;	BuyStopPrice2=Ask+Tral;
    	if(OrderSymbol()==Symbol() && OrderType()==5)   	SellStop++; 	SellStopPrice1=Bid-Trend;	SellStopPrice2=Bid-Tral;	}</code>


//… 1. всегда должен быть выставлен хотя бы один ордер BuyStop1.
if (BuyStop==0) 	OrderSend(symbol,4,MODE_MINLOT,BuyStopPrice1,0,0,0,0,0);

//… 2. Трейлинг oрдера BuyStop1 вслед за ценой Ask, если между ними нет ордера Buy.
<code>if (BuyStop==1 && Buy==0 && OrderOpenPrice() - Ask > BuyStopPrice)	OrderModify(OrderTicket(),BuyStopPrice1,0,0,0,0);</code>

//… 3. Каждый ордер Buy, с порядковым номером до Koef, должен иметь BuyKoefProfit.
<code>if (Buy<=Koef && OrderTakeProfit()!=BuyKoefProfit) 	OrderModify(OrderTicket(),OrderOpenPrice(),0,BuyKoefProfit,0,0);</code>

//… 4. Цена Ask на расстоянии BuyStep от ближайшего ордера Buy — выставить второй ордер BuyStop2 с увеличенным объёмом.
<code>if (BuyStop==1 && Buy!=0 && OrderOpenPrice()-Ask>=BuyStep) 	OrderSend(symbol,4,Lot=KefLot*Lot,BuyStopPrice2,0,0,0,0,0);</code>

//… 5. Трейлинг ордера BuyStop2 вслед за ценой Ask подобно ордеру BuyStop1.
<code>if (BuyStop==2 && OrderOpenPrice()-Ask>Tral)	OrderModify(OrderTicket(),BuyStopPrice2,0,0,0,0);</code>

//… 6. Каждый ордер Buy, с порядковым номером более Koef, должен иметь BuyProfit.
<code>if (Buy>Koef && OrderTakeProfit()==0)	Lots=Lots+OrderLots(); Summ=Summ+OrderLots()*OrderOpenPrice(); BU=Summ/Lots; BuyProfit=BU+TP;
		OrderModify(OrderTicket(),OrderOpenPrice(),0,BuyProfit,0,0);</code>

//… 7. Закрылся ордер Buy с порядковым номером более Koef+1 — для оставшихся ордеров Buy установить трейлинг по StopLoss.
<code>if (summ<Buy)	summ=Buy; 
	if (summ>Buy && (OrderStopLoss()==0) || (Ask-OrderStopLoss()>Tral))	StopLoss=Ask-Tral;   summ=Buy; 
		OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,0,0,0); </code>
//… для всех оставшихся ордеров Buy.
//… 8. Закрытие ордеров по OrderStopLoss() и OrderTakeProfit() дублировать принудительным закрытием через OrderClose.
<code>if (Bid>=OrderTakeProfit() )	OrderClose(Buy);
	if (Bid<=OrderStopLoss())	CloseSeries(Buy);</code>

//… 9. Далее всё тоже самое, только применительно для ордеров Sell.
<code>return(0);	}		string Error(int error_code)</code>

Редактирован: 31 мая 2018, 14:48
avatar

  7  bablusut Автор Сообщений: 4 - bablusut

  • 26 мая 2018, 12:57
+
0
сложный не берусь. на бесплатном делаю только то что можно быстро сделать.

если нужно платно, укажите здесь сколько готовы платить за заказ и если программист согласен с ценником, вам напишут в личку.
avatar

  27  AM2 Сообщений: 8028 - Андрей

  • 27 мая 2018, 09:41
+
0
… выставить разнонаправленные отложенные ордера (BuyStop, SellStop) и, после открытия, добавить к ним Трейлингстоп по TakeProfit, StopLoss на определённом расстоянии = если для Вас это сложно, ну тогда какой разговор?… а за платную версию готов заплатить 100 $… *hi* 
Редактирован: 28 мая 2018, 00:40
avatar

  7  bablusut Автор Сообщений: 4 - bablusut

  • 28 мая 2018, 00:37
+
0
Что касается скринов — то всегда пожалуйста, готов ответить на все вопросы, в техзадании кнопка «редактировать» уже исчезла, могу добавить скрины в коментариях:

src=«http://zakaz.opentraders.ru/uploads/images/4/4/3/7/33217/f66b0d36f5.jpg»/>







*hi* 
Редактирован: 29 мая 2018, 15:40
avatar

  7  bablusut Автор Сообщений: 4 - bablusut

  • 26 мая 2018, 13:06

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