//+------------------------------------------------------------------+ //| TrailingByPriceChannel.mq4 | //| I_D | //| http://www.mymmk.com/ | //+------------------------------------------------------------------+ #property copyright "I_D" #property link "http://www.mymmk.com/" #property library //+------------------------------------------------------------------+ //| ТРЕЙЛИНГ ПО ЦЕНВОМУ КАНАЛУ | //| Функции передаётся тикет позиции, период (кол-во баров) для | //| рассчета верхней и нижней границ канала, отступ (пунктов), на | //| котором размещается стоплосс от границы канала | //| Трейлинг по закрывшимся барам. | //+------------------------------------------------------------------+ void TrailingByPriceChannel(int iTicket,int iBars_n,int iIndent) { // проверяем переданные значения if ((iBars_n<1) || (iIndent<0) || (iTicket==0) || (!OrderSelect(iTicket,SELECT_BY_TICKET))) { Print("Трейлинг функцией TrailingByPriceChannel() невозможен из-за некорректности значений переданных ей аргументов."); return(0); } double dChnl_max; // верхняя граница канала double dChnl_min; // нижняя граница канала // определяем макс.хай и мин.лоу за iBars_n баров начиная с [1] (= верхняя и нижняя границы ценового канала) dChnl_max = High[iHighest(Symbol(),0,2,iBars_n,1)] + (iIndent+MarketInfo(Symbol(),MODE_SPREAD))*Point; dChnl_min = Low[iLowest(Symbol(),0,1,iBars_n,1)] - iIndent*Point; // если длинная позиция, и её стоплосс хуже (ниже нижней границы канала либо не определен, ==0), модифицируем его if (OrderType()==OP_BUY) { if (OrderStopLoss()dChnl_max)) OrderModify(iTicket,OrderOpenPrice(),dChnl_max,OrderTakeProfit(),OrderExpiration()); } } //+------------------------------------------------------------------+