e-PassLevCCI-EMA





/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                             e-PassLevCCI-EMA.mq4 |
//|                              Èäåÿ Gentor, ðåàëèçàöèÿ â ÌÒ4 KimIV |
//|                                              http://www.kimiv.ru |
//| Ôèêñàöèÿ ïðèáûëè â ïîðÿäêå ïðèîðèòåòà:                           |
//| 1. TrailingStop                                                  |
//| 2. TakeProfit                                                    |
//| 3. Ïî ñèãíàëó âûõîäà                                             |
//| Ôèëüòð EMA                                                       |
//+------------------------------------------------------------------+
#property copyright "Gentor, KimIV"
#property link      "http://www.kimiv.ru"
#define   MAGIC     20050822

//------- Âíåøíèå ïàðàìåòðû ------------------------------------------
extern double Lots          = 0.1;    // Ðàçìåð òîðãóåìîãî ëîòà
extern int    StopLoss      = 27;     // Ðàçìåð ôèêñèðîâàííîãî ñòîïà
extern bool   UseTakeProfit = True;   // Èñïîëüçîâàòü òýéê
extern int    TakeProfit    = 70;     // Ðàçìåð ôèêñèðîâàííîãî òýéêà
extern bool   UseTrailing   = False;  // Èñïîëüçîâàòü òðàë
extern int    TrailingStop  = 50;     // Ðàçìåð òðàëà
extern int    CCI_Period    = 18;     // Ïåðèîä CCI
extern int    EMA_Period    = 34;     // Ïåðèîä EMA
extern int    BarsForCheck  = 4;      // Êîëè÷åñòâî áàðîâ äëÿ ïðîâåðêè

//------- Ãëîáàëüíûå ïåðåìåííûå --------------------------------------
datetime OldBar;

//+------------------------------------------------------------------+
//| Ïðîâåðêà óñëîâèé îòêðûòèÿ ïîçèöèè                                |
//+------------------------------------------------------------------+
void CheckForOpen() {
  bool   PosExist=False;     // Åñòü îòêðûòàÿ ïîçèöèÿ ïî òåêóùåìó èíñòðóìåíòó
  double cci1, cci2, ema;
  double take;

  // Ïîèñê ïîçèöèé ïî òåêóùåìó èíñòðóìåíòó, îòêðûòûõ èìåííî ýòèì ñîâåòíèêîì
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        PosExist=True;
      }
    }
  }

  // Íåò îòêðûòûõ ïîçèöèé.
  if (!PosExist) {
    // Ôèêñèðóåì çíà÷åíèÿ ÑÑÈ.
    cci1 = iCCI(NULL, 0, CCI_Period, PRICE_TYPICAL, 1);
    cci2 = iCCI(NULL, 0, CCI_Period, PRICE_TYPICAL, BarsForCheck);
    ema  = iMA (NULL, 0, EMA_Period, 0, MODE_EMA, PRICE_TYPICAL, 1);
    // Ñèãíàë íà ïîêóïêó.
    if (cci1>100 && cci2<-100 && ema>Close[1]) {
      if (UseTakeProfit) take = Ask+TakeProfit*Point;
      else take = 0;
      OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,take,"e-PassLevCCI",MAGIC,0,Blue);
      OldBar = Time[1];
      return;
    }
    // Ñèãíàë íà ïðîäàæó.
    if (cci1<-100 && cci2>100 && ema<Close[1]) {
      if (UseTakeProfit) take = Bid-TakeProfit*Point;
      else take = 0;
      OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,take,"e-PassLevCCI",MAGIC,0,Red);
      OldBar = Time[1];
      return;
    }
  }
}

//+------------------------------------------------------------------+
//| Ïðîâåðêà óñëîâèé çàêðûòèÿ ïîçèöèè                                |
//+------------------------------------------------------------------+
void CheckForClose() {
  bool fs=False;        // Ôëàã íàëè÷èÿ ñèãíàëà çàêðûòèÿ
  int  cci1, cci2;

  // Ôèêñèðóåì çíà÷åíèÿ ÑÑÈ.
  cci1 = iCCI(NULL, 0, CCI_Period, PRICE_TYPICAL, 1);
  cci2 = iCCI(NULL, 0, CCI_Period, PRICE_TYPICAL, 2);
  // Ñèãíàë íà çàêðûòèå ïîçèöèè.
  if (cci1*cci2<0 && OldBar!=Time[1]) fs = True;

  // Ïîèñê ïîçèöèé ïî òåêóùåìó èíñòðóìåíòó, îòêðûòûõ èìåííî ýòèì ñîâåòíèêîì
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        if (OrderType()==OP_BUY && fs) {
          OrderClose(OrderTicket(), Lots, Bid, 3, Aqua);
          return;
        }
        if (OrderType()==OP_SELL && fs) {
          OrderClose(OrderTicket(), Lots, Ask, 3, Violet);
          return;
        }
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Ñîïðîâîæäåíèå ïîçèöèè                                            |
//+------------------------------------------------------------------+
void TrailingPosition() {
  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*Point) {
              OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),Blue);
              return;
            }
          }
        }
        if (OrderType()==OP_SELL) {
          if ((OrderOpenPrice()-Ask)>TrailingStop*Point) {
            if (OrderStopLoss()>Ask+TrailingStop*Point) {
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),Red);
              return;
            }
          }
        }
      }
    }
  }
}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start() {
  CheckForOpen();
  if (UseTrailing) TrailingPosition();
  else if (!UseTakeProfit) CheckForClose();
}
//+------------------------------------------------------------------+





Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar
Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:

Commodity channel index


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:

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for e-PassLevCCI-EMA


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: