//+------------------------------------------------------------------+
//|                                             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       = 50;     // Ðàçìåð ôèêñèðîâàííîãî ñòîïà
extern int    HourOpenPos    = 9;      // Âðåìÿ îòêðûòèÿ ïîçèöèè
extern bool   UseClosePos    = True;   // Èñïîëüçîâàòü çàêðûòèå ïîçèöèè
extern int    HourClosePos   = 20;     // Âðåìÿ çàêðûòèÿ ïîçèöèè
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<Cl1-20*Point) OpenPosition(0);
  }
  if (UseClosePos) {
    if (Hour()>=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<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          Exist=True; break;
        }
      }
    }
  }
  return(Exist);
}
//+------------------------------------------------------------------+
//| Óñòàíîâêà îðäåðà                                                 |
//| Ïàðàìåòðû:                                                       |
//|   op     - îïåðàöèÿ                                              |
//|   pp     - öåíà                                                  |
//|   ldStop - óðîâåíü ñòîï                                          |
//|   ldTake - óðîâåíü òåéê                                          |
//+------------------------------------------------------------------+
void SetOrder(int op, double pp, double ldStop, double ldTake) {
  color clOpen;
  if (op==OP_BUY) clOpen=clOpenBuy;
  else clOpen=clOpenSell;
  OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,"",MAGIC,0,clOpen);
}
//+------------------------------------------------------------------+
//| Çàêðûòèå âñåõ ïîçèöèé ïî ðûíî÷íîé öåíå                           |
//+------------------------------------------------------------------+
void CloseAllPositions() {
  for (int i=OrdersTotal()-1; 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; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        if (OrderType()==OP_BUY) {
          if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) {
            if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) {
              ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy);
            }
          }
        }
        if (OrderType()==OP_SELL) {
          if (!ProfitTrailing || OrderOpenPrice()-Ask>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);
}
//+------------------------------------------------------------------+
            
Comments