e-TLE_v.1.6





//+------------------------------------------------------------------+
//|                                                  e-TLE_v.1.6.mq4 |
//|                                           Êèì Èãîðü Â. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//| 20.09.2005 Òð¸õóðîâíåâàÿ ñèñòåìà âûõîäîâ (Three Level Exit).     |
//|            Îòðàáàòûâàåò âñå îòêðûòûå ïîçèöèè.                    |
//|            Âåøàòü òîëüêî íà îäèí ëþáîé ãðàôèê.                   |
//| 22.09.2005 v.1.0  Ââ¸ë âíåøíèé ïàðàìåòð äëÿ óïðàâëåíèÿ çîíîé     |
//|            âëèÿíèÿ ñîâåòíèêà.                                    |
//| 22.09.2005 v.1.1  Ââ¸ë ïàðàìåòðû äëÿ îãðàíè÷åíèé ïî ñ÷¸òó        |
//| 22.09.2005 v.1.2  Èñïðàâèë îøèáêó ñ îïðåäåëåíèåì âàëþòû          |
//| 22.09.2005 v.1.3  Ðåàëèçîâàë ìåõàíèçì îòñå÷êè ñíèæåíèÿ öåíû      |
//| 22.09.2005 v.1.4  Ïîïðàâèë ìåõàíèçì îòñå÷êè ñíèæåíèÿ öåíû        |
//| 23.09.2005 v.1.5  Ðåàëèçîâàë ôàêòè÷åñêóþ óñòàíîâêó ñòîïîâ        |
//| 14.10.2005 v.1.6  Òðè óðîâíÿ ïåðåíîñà ñòîïà  -                   |
//|     ðàáîòàåò òîëüêî â ïðîôèòíîé çîíå.                            |  
//+------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link      "http://www.kimiv.ru"

//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà --------------------------------
extern bool   UseOneAccount = false;        // Òîðãîâàòü òîëüêî íà îäíîì ñ÷¸òå
extern int    NumberAccount = 5596;         // Íîìåð òîðãîâîãî ñ÷¸òà
extern bool   AllPositions  = True;         // Óïðàâëÿòü âñåìè ïîçèöèÿìè
extern int    LevelProfit1  = 35;           // Ïåðâûé óðîâåíü ïðîôèòà
extern int    LevelMoving1  = 2;            // Ïåðâûé óðîâåíü ïåðåíîñà
extern int    LevelProfit2  = 45;           // Âòîðîé óðîâåíü ïðîôèòà
extern int    LevelMoving2  = 10;           // Âòîðîé óðîâåíü ïåðåíîñà
extern int    LevelProfit3  = 90;           // Òðåòèé óðîâåíü ïðîôèòà
extern int    LevelMoving3  = 45;           // Òðåòèé óðîâåíü ïåðåíîñà
extern int    TrailingStop  = 55;           // Ðàçìåð òðàëà
extern int    TrailingStep  = 3;            // Øàã òðàëà
extern bool   ShowComment   = True;         // Ïîêàçûâàòü êîììåíòàðèè
extern bool   UseSound      = True;         // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà

//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà ----------------------------

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

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start() {
  double pp;
  int    nd;
  string comm="";

  if (UseOneAccount && AccountNumber()!=NumberAccount) {
    Comment("Ðàáîòà íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!");
    return;
  }
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (AllPositions || OrderSymbol()==Symbol()) {
        ThreeLevelSystemOfOutput();
        nd=MarketInfo(OrderSymbol(), MODE_DIGITS);
        pp=MarketInfo(OrderSymbol(), MODE_POINT);
        comm=comm+OrderSymbol()+"  Öåíà: "+DoubleToStr(OrderOpenPrice(),nd)+
             "  SL = " + DoubleToStr(OrderStopLoss(),nd)+
             " ("+StopLossInPoint()+")\n";
      }
    }
  }
  if (ShowComment) Comment(comm);
}

//+------------------------------------------------------------------+
//| Òð¸õóðîâíåâàÿ ñèñòåìà âûõîäîâ                                    |
//+------------------------------------------------------------------+
void ThreeLevelSystemOfOutput() {
  int pr=ProfitPosition(), sl=StopLossInPoint();
  int sp=MarketInfo(OrderSymbol(), MODE_SPREAD);

  if (pr>LevelProfit1 && pr<=LevelProfit2 && sl<LevelMoving1) ModifyStopLossInPoint(LevelMoving1);
  if (pr>LevelProfit2 && pr<=LevelProfit3 && sl<LevelMoving2) ModifyStopLossInPoint(LevelMoving2);
  if (pr>LevelProfit3 && sl<LevelMoving3) ModifyStopLossInPoint(LevelMoving3);
  if (pr>LevelMoving3+TrailingStop+TrailingStep) {
    TrailingPositions();
  }
}

//+------------------------------------------------------------------+
//| Ñîïðîâîæäåíèå ïîçèöèè ïðîñòûì òðàëîì                             |
//+------------------------------------------------------------------+
void TrailingPositions() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);

  if (OrderType()==OP_BUY) {
    pBid=MarketInfo(OrderSymbol(), MODE_BID);
    if (pBid-OrderOpenPrice()>TrailingStop*pp) {
      if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) {
        ModifyStopLoss(pBid-TrailingStop*pp);
        return;
      }
    }
  }
  if (OrderType()==OP_SELL) {
    pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
    if (OrderOpenPrice()-pAsk>TrailingStop*pp) {
      if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {
        ModifyStopLoss(pAsk+TrailingStop*pp);
        return;
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Ïåðåíîñ óðîâíÿ StopLoss                                          |
//| Ïàðàìåòðû:                                                       |
//|   ldStopLoss - óðîâåíü StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStopLoss) {
  bool fm;         // Ôëàã ìîäèôèêàöèè ïîçèöèè

  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if (fm && UseSound) PlaySound(NameFileSound);
}

//+------------------------------------------------------------------+
//| Ïåðåíîñ óðîâíÿ StopLoss                                          |
//| Ïàðàìåòðû:                                                       |
//|   ldStopLoss - óðîâåíü StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLossInPoint(int pp) {
  bool   fm;         // Ôëàã ìîäèôèêàöèè ïîçèöèè
  double ldSL=0, mp=MarketInfo(OrderSymbol(), MODE_POINT);

  if (OrderType()==OP_BUY)  ldSL=OrderOpenPrice()+pp*mp;
  if (OrderType()==OP_SELL) ldSL=OrderOpenPrice()-pp*mp;
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldSL,OrderTakeProfit(),0,CLR_NONE);
  if (fm && UseSound) PlaySound(NameFileSound);
}

//+------------------------------------------------------------------+
//| Âîçâðàùàåò ïðîôèò ïîçèöèè â ïóíêòàõ                              |
//+------------------------------------------------------------------+
int ProfitPosition() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double pr=0;

  if (OrderType()==OP_BUY) {
    pBid=MarketInfo(OrderSymbol(), MODE_BID);
    pr=(pBid-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
    pr=(OrderOpenPrice()-pAsk)/pp;
  }
  return(MathRound(pr));
}

//+------------------------------------------------------------------+
//| Âîçâðàùàåò StopLoss ïîçèöèè â ïóíêòàõ                            |
//+------------------------------------------------------------------+
int StopLossInPoint() {
  double pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double sp=0;

  if (OrderType()==OP_BUY) {
    sp=(OrderStopLoss()-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    sp=(OrderOpenPrice()-OrderStopLoss())/pp;
  }
  if (OrderStopLoss()==0) sp=-OrderOpenPrice()/pp;
  return(MathRound(sp));
}
//+------------------------------------------------------------------+





Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders
It can change open orders parameters, due to possible stepping strategy

Other Features:


It plays sound alerts