e-MondayF_LS





//+------------------------------------------------------------------+
//|                                                 e-MondayF_LS.mq4 |
//|                                           Êèì Èãîðü Â. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  31.01.2006  Ñîâåòíèê ïî ñòðàòåãèè Ïîíåäåëüíèê ïðîòèâ ïÿòíèöû    |
//|  ñ ðàçäåëüíîé ñèñòåìîé âûõîäîâ äëÿ ïîçèöèé LONG è SHORT.         |
//|21/02/2006 Äîáàâèë ôóíöèþ âûáîðà ðàáî÷åãî ëîòà.                   |
//|Andrei Karasev (av1976)                                           |
//+------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link      "http://www.kimiv.ru"
#define   MAGIC     20060131

//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà --------------------------------
extern string _P_Long = "---------- Ïàðàìåòðû äëÿ ïîêóïîê";
extern int  lRangeFriday  = 0;     // Äèàïàçîí ïÿòíèöû (Open-Close)
extern int  lHourOpenPos  = 5;     // Âðåìÿ îòêðûòèÿ ïîçèöèè
extern int  lDayForClose  = 4;     // Äåíü äëÿ çàêðûòèÿ ïîçèöèè
extern int  lHourClosePos = 11;    // Âðåìÿ çàêðûòèÿ ïîçèöèè
extern int  lStopLoss     = 55;    // Ðàçìåð ñòîïà
extern int  lTakeProfit   = 150;   // Ðàçìåð òýéêà
extern bool lUseTrailing  = False; // Èñïîëüçîâàòü òðàë
extern int  lTrailingStop = 0;     // Ðàçìåð òðàëà
extern string _P_Short = "---------- Ïàðàìåòðû äëÿ ïðîäàæ";
extern int  sRangeFriday  = 20;     // Äèàïàçîí ïÿòíèöû (Open-Close)
extern int  sHourOpenPos  = 11;    // Âðåìÿ îòêðûòèÿ ïîçèöèè
extern int  sDayForClose  = 5;     // Äåíü äëÿ çàêðûòèÿ ïîçèöèè
extern int  sHourClosePos = 13;    // Âðåìÿ çàêðûòèÿ ïîçèöèè
extern int  sStopLoss     = 55;    // Ðàçìåð ñòîïà
extern int  sTakeProfit   = 340;   // Ðàçìåð òýéêà
extern bool sUseTrailing  = True;  // Èñïîëüçîâàòü òðàë
extern int  sTrailingStop = 65;    // Ðàçìåð òðàëà

//---- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------
bool   bLastBuy;
int    Slippage      = 3;
int    NumberOfTry   = 9;
bool   UseSound      = True;
string NameFileSound = "expert.wav";
extern bool   ShowComment   = True;         // Ïîêàçûâàòü êîììåíòàðèè
color  clOpenBuy     = LightBlue;
color  clOpenSell    = LightCoral;
color  clModifyBuy   = Aqua;
color  clModifySell  = Tomato;
color  clCloseBuy    = Blue;
color  clCloseSell   = Red;
int    TrailingStop, TrailingStep=5;

//------- Ïîêëþ÷åíèå âíåøíèõ ìîäóëåé ---------------------------------
#include <b-Lots.mqh>
#include <stdlib.mqh>

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
void deinit() {
  if (!IsTesting()) Comment("");
}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start() {
  int bs=0;

  if (DayOfWeek()==1 && Minute()<5) {
    bs=GetSignal();
    if (Hour()==lHourOpenPos && bs>0) OpenPosition();
    if (Hour()==sHourOpenPos && bs<0) OpenPosition();
  }

  if (bLastBuy) {
    if (DayOfWeek()==lDayForClose && Hour()>=lHourClosePos) CloseAllPositions();
    TrailingStop=lTrailingStop;
    if (lUseTrailing) TrailingPositions();
  } else {
    if (DayOfWeek()==sDayForClose && Hour()>=sHourClosePos) CloseAllPositions();
    TrailingStop=sTrailingStop;
    if (sUseTrailing) TrailingPositions();
  }
    if (!IsTesting() && ShowComment) {
      Lots=GetSizeLot();
      Comment("  Lots="+DoubleToStr(Lots, 1));
    }
}

//+------------------------------------------------------------------+
//| Îòêðûòèå ïîçèöèè                                                 |
//+------------------------------------------------------------------+
void OpenPosition() {
  double ldStop=0, ldTake=0;
  int    bs=GetSignal();

  if (!ExistPosition()) {
    if (bs>0) {
      if (lStopLoss!=0) ldStop=Ask-lStopLoss*Point;
      if (lTakeProfit!=0) ldTake=Ask+lTakeProfit*Point;
      SetOrder(OP_BUY, Ask, ldStop, ldTake);
      bLastBuy=True;
    }
    if (bs<0) {
      if (sStopLoss!=0) ldStop=Bid+sStopLoss*Point;
      if (sTakeProfit!=0) ldTake=Bid-sTakeProfit*Point;
      SetOrder(OP_SELL, Bid, ldStop, ldTake);
      bLastBuy=False;
    }
  }
}

//+------------------------------------------------------------------+
//| Âîçâðàùàåò òîðãîâûé ñèãíàë                                       |
//+------------------------------------------------------------------+
int GetSignal() {
  double op1=iOpen (NULL, PERIOD_D1, 1);
  double cl1=iClose(NULL, PERIOD_D1, 1);
  int    bs=0;

  if (op1-cl1>lRangeFriday*Point) bs=1;
  if (cl1-op1>sRangeFriday*Point) bs=-1;

  return(bs);
}

//+------------------------------------------------------------------+
//| Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèè ïî íîìåðó                  |
//+------------------------------------------------------------------+
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;
   Lots=GetSizeLot();
  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 (Bid-OrderOpenPrice()>TrailingStop*Point) {
            if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) {
              ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy);
            }
          }
        }
        if (OrderType()==OP_SELL) {
          if (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);
}
//+------------------------------------------------------------------+





Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders

It automatically opens orders when conditions are reached
It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy

Other Features: