//+------------------------------------------------------------------+ //| e-Friday-3172552.mq4 | //| Ким Игорь В. aka KimIV | //| http://www.kimiv.ru | //| | //| 23.10.2005 Эффект пятницы. Вариация 3172552. | //+------------------------------------------------------------------+ #property copyright "Ким Игорь В. aka KimIV" #property link "http://www.kimiv.ru" #define MAGIC 20051023 //------- Внешние параметры советника -------------------------------- extern string _Parameters_Trade = "----- Параметры торговли"; extern double Lots = 0.1; // Размер торгуемого лота extern int StopLoss = 95; // Размер фиксированного стопа extern int HourOpenPos = 6; // Время открытия позиции extern bool UseClosePos = True; // Использовать закрытие позиции extern int HourClosePos = 23; // Время закрытия позиции extern bool UseTrailing = False; // Использовать трал extern bool ProfitTrailing = True; // Тралить только профит extern int TrailingStop = 60; // Фиксированный размер трала extern int TrailingStep = 5; // Шаг трала extern int Slippage = 3; // Проскальзывание цены extern string _Parameters_Expert = "----- Параметры советника"; extern color clOpenBuy = LightBlue; // Цвет открытия покупки extern color clOpenSell = LightCoral; // Цвет открытия продажи extern color clModifyBuy = Aqua; // Цвет модификации покупки extern color clModifySell = Tomato; // Цвет модификации продажи extern color clCloseBuy = Blue; // Цвет закрытия покупки extern color clCloseSell = Red; // Цвет закрытия продажи //---- Глобальные переменные советника ------------------------------- int prevDay; //------- Подключение внешних модулей -------------------------------- //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ void deinit() { Comment(""); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void start() { double Op1=0, Cl1=0; int i=0; if (DayOfWeek()==5 && Hour()==HourOpenPos) { while (TimeHour(Time[i])!=6) i++; Cl1=Close[i]; while (TimeHour(Time[i])!=14) i++; Op1=Close[i]; if (Op1>Cl1+20*Point) OpenPosition(1); if (Op1=HourClosePos || prevDay!=Day()) CloseAllPositions(); } if (UseTrailing) TrailingPositions(); prevDay=Day(); } //+------------------------------------------------------------------+ //| Открытие позиции | //+------------------------------------------------------------------+ void OpenPosition(int op) { double ldStop=0, ldTake=0; if (!ExistPosition()) { if (op==1) { if (StopLoss!=0) ldStop=Ask-StopLoss*Point; SetOrder(OP_BUY, Ask, ldStop, ldTake); } if (op==0) { if (StopLoss!=0) ldStop=Bid+StopLoss*Point; SetOrder(OP_SELL, Bid, ldStop, ldTake); } } } //+------------------------------------------------------------------+ //| Возвращает флаг существования позиции | //+------------------------------------------------------------------+ bool ExistPosition() { bool Exist=False; for (int i=0; i=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if (OrderType()==OP_BUY) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy); } if (OrderType()==OP_SELL) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell); } } } } } //+------------------------------------------------------------------+ //| Сопровождение позиции простым тралом | //+------------------------------------------------------------------+ void TrailingPositions() { for (int i=0; iTrailingStop*Point) { if (OrderStopLoss()TrailingStop*Point) { if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0) { ModifyStopLoss(Ask+TrailingStop*Point, clModifySell); } } } } } } } //+------------------------------------------------------------------+ //| Перенос уровня StopLoss | //| Параметры: | //| ldStopLoss - уровень StopLoss | //| clModify - цвет модификации | //+------------------------------------------------------------------+ void ModifyStopLoss(double ldStop, color clModify) { double ldOpen=OrderOpenPrice(); double ldTake=OrderTakeProfit(); OrderModify(OrderTicket(), ldOpen, ldStop, ldTake, 0, clModify); } //+------------------------------------------------------------------+