//+------------------------------------------------------------------+ //| TrailingByMA.mq4 | //| I_D | //| http://www.mymmk.com/ | //+------------------------------------------------------------------+ #property copyright "I_D" #property link "http://www.mymmk.com/" #property library //+------------------------------------------------------------------+ //| ТРЕЙЛИНГ ПО СКОЛЬЗЯЩЕМУ СРЕДНЕМУ | //| Функции передаётся тикет позиции и параметры средней (таймфрейм, | //| период, тип, сдвиг относительно графика, метод сглаживания, | //| составляющая OHCL для построения, № бара, на котором берется | //| значение средней. | //+------------------------------------------------------------------+ // Допустимые варианты ввода: // iTmFrme: 1 (M1), 5 (M5), 15 (M15), 30 (M30), 60 (H1), 240 (H4), 1440 (D), 10080 (W), 43200 (MN); // iMAPeriod: 2-infinity, целые числа; // iMAShift: целые положительные или отрицательные числа, а также 0; // MAMethod: 0 (MODE_SMA), 1 (MODE_EMA), 2 (MODE_SMMA), 3 (MODE_LWMA); // iApplPrice: 0 (PRICE_CLOSE), 1 (PRICE_OPEN), 2 (PRICE_HIGH), 3 (PRICE_LOW), 4 (PRICE_MEDIAN), 5 (PRICE_TYPICAL), 6 (PRICE_WEIGHTED) // iShift: 0-Bars, целые числа; // iIndent: 0-infinity, целые числа; void TrailingByMA(int iTicket,int iTmFrme,int iMAPeriod,int iMAShift,int MAMethod,int iApplPrice,int iShift,int iIndent) { // проверяем переданные значения if ((iTicket==0) || (!OrderSelect(iTicket,SELECT_BY_TICKET)) || ((iTmFrme!=1) && (iTmFrme!=5) && (iTmFrme!=15) && (iTmFrme!=30) && (iTmFrme!=60) && (iTmFrme!=240) && (iTmFrme!=1440) && (iTmFrme!=10080) && (iTmFrme!=43200)) || (iMAPeriod<2) || (MAMethod<0) || (MAMethod>3) || (iApplPrice<0) || (iApplPrice>6) || (iShift<0) || (iIndent<0)) { Print("Трейлинг функцией TrailingByMA() невозможен из-за некорректности значений переданных ей аргументов."); return(0); } double dMA; // значение скользящего среднего с переданными параметрами // определим значение МА с переданными функции параметрами dMA = iMA(Symbol(),iTmFrme,iMAPeriod,iMAShift,MAMethod,iApplPrice,iShift); // если длинная позиция, и её стоплосс хуже значения среднего с отступом в iIndent пунктов, модифицируем его if (OrderType()==OP_BUY) { if (OrderStopLoss()dMA+(MarketInfo(Symbol(),MODE_SPREAD)+iIndent)*Point)) OrderModify(iTicket,OrderOpenPrice(),dMA+(MarketInfo(Symbol(),MODE_SPREAD)+iIndent)*Point,OrderTakeProfit(),OrderExpiration()); } } //+------------------------------------------------------------------+