e-Grabber-Murrey-v07





//+------------------------------------------------------------------+
//|                                             e-Grabber-Murrey.mq4 |
//|                                             v.06                 |
//|      10.16.2006    Copyright © 2006,  Ëóêàøóê Âèêòîð Ãåííàäüåâè÷ |
//+------------------------------------------------------------------+
/*
Ðàáîòàåò ïî ëèíèÿì ðàñïîëîæåííûì â îñíîâíîì îêíå. Äëÿ åãî ðàáîòû íåîáõîäèìî 
íàëîæèòü íà ãðàôèê èíäèêàòîð Ìþððåÿ. 
Ïðàâèëà ðàáîòû. Çàïóñêàåì ñîâåòíèê è âñòàâëÿåì â îêíî ãðàôèêà èíäèêàòîð Ìþððåÿ. 
Íàïðèìåð Murrey_Math_MT_VG_even. Íàëè÷èå â îêíå èíäèêàòîðà Ìþððåÿ íåîáõîäèìî äëÿ 
ðàáîòû. Ñîâåòíèê íàõîäèò íà  ãðàôèêå ëèíèè ñ íàçâàíèÿìè "mml0", "mml2", 
"mml4", "mml6", "mml8" "mml10" "mml12" âûáèðàåò òå äâå, êîòðûå ðàñïîëîæåíû 
âûøå è íèæå òåêóùåãî êóðñà è ïðè ïåðåñå÷åíèè òîé èëè äðóãîé æä¸ò äâà áàðà 
è îòêðûâàåò ïîçèöèþ. Ïðèìå÷àíèå: íå îáÿçàòåëüíî íàëè÷èå èíäèêàòîðà Ìþððåÿ, 
âàæíî íàëè÷èå âûøåóêàçàííûõ ãîðèçîíòàëüíûõ ëèíèé.

Ëîãè÷åñêèé ïàðàìåòð "ebBuyFromUp" îáîçíà÷àåò BUY îò âåðõíåé ëèíèè. 
Åñëè â ïàðàìåòðàõ ñîâåòíèêà ïîñòàâèòü ïàðàìåòð "ebBuyFromUp" ðàâíûì "FALSE", 
ñîâåòíèê áóäåò îòêðûâàòü SELL îò âåðõíåé ëèíèè.
Ëîãè÷åñêèé ïàðàìåòð "ebSellFromDn" îáîçíà÷àåò SELL îò íèæíåé ëèíèè. 
Åñëè â ïàðàìåòðàõ ñîâåòíèêà ïîñòàâèòü ïàðàìåòð "ebSellFromDn" ðàâíûì "FALSE", 
ñîâåòíèê áóäåò îòêðûâàòü BUY îò íèæíåé ëèíèè. 

Àíàëîãè÷íî ñ ïàðàìåòðàìè ñòîõàñòèêà. Åñëè "ebBuyStoch" ðàâåí "TRUE" ñäåëêà 
BUY áóäåò îòêðûâàòüñÿ òîëüêî ïðè óñëîâèè, ÷òî ñèãíàëüíàÿ ëèíèÿ ñòîõàñòèêà 
íèæå îñíîâíîé. Äëÿ SELL - ñèãíàëüíàÿ ëèíèÿ ñòîõàñòèêà âûøå îñíîâíîé.
Åñëè "ebBuyStoch" ðàâåí "FALSE" ñäåëêà BUY áóäåò îòêðûâàòüñÿ ïðè óñëîâèè, 
÷òî ñèãíàëüíàÿ ëèíèÿ ñòîõàñòèêà âûøå îñíîâíîé.

*/
#property copyright "Copyright © 2006, lukas1"
#property link      "www.alpari-idc.ru"
//
extern double Lots         = 0.1;      // Ðàçìåð òîðãóåìîãî ëîòà
extern int    StopLoss     = 33;       // Ðàçìåð ôèêñèðîâàííîãî ñòîïà
extern int    TakeProfit   = 50;       // Ðàçìåð ôèêñèðîâàííîãî òýéêà
extern int    Slippage     = 3;        // Ïðîñêàëüçûâàíèå öåíû
//
extern bool   ebBuyFromUp   = FALSE;   // Ïîêóïàòü îò âåðõíåé ëèíèè
extern bool   ebSellFromDn  = FALSE;   // Ïðîäàâàòü îò íèæíåé ëèíèè
extern bool   ebShowComment = TRUE;    // Ïîêàçûâàòü êîììåíòàðèè
extern bool   ebAdaptiveStop= FALSE;   // Ðàñ÷åò TP,SL ïî óðîâíÿì 
//
extern int    Stoch_p1    = 15;        // Ñòîõàñòèê ïåðèîä %Ê
extern int    Stoch_p2    = 18;        // Ñòîõàñòèê ïåðèîä %Ä
extern int    Stoch_t1    = 12;        // Ñòîõàñòèê çàìåäëåíèå
extern bool   ebBuyStoch  = TRUE;      // Óñëîâèå ïî ñòîõàñòèêó
//
extern string line1_name = "mml0";
extern string line2_name = "mml2";
extern string line3_name = "mml4";
extern string line4_name = "mml6";
extern string line5_name = "mml8";
extern string line6_name = "mml10";
extern string line7_name = "mml12";
//
string esNameUpLine;// Íàèìåíîâàíèå âåðõíåé ëèíèè
string esNameDnLine;// Íàèìåíîâàíèå íèæíåé ëèíèè
//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà --
string Name_Expert   = "e-Grabber-Murrey";
bool   UseSound      = True;           // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
string NameFileSound = "expert.wav";   // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
color  clOpenBuy     = LightBlue;      // Öâåò çíà÷êà îòêðûòèÿ ïîêóïêè
color  clOpenSell    = LightCoral;     // Öâåò çíà÷êà îòêðûòèÿ ïðîäàæè
color  clCloseBuy    = Blue;           // Öâåò çíà÷êà çàêðûòèÿ ïîêóïêè
color  clCloseSell   = Red;            // Öâåò çíà÷êà çàêðûòèÿ ïðîäàæè
double gdUpPrice, gdDnPrice;           // Òåêóùèå öåíîâûå óðîâíè
double gdPrevUpPrice, gdPrevDnPrice;   // Ïðåäûäóùèå öåíîâûå óðîâíè
double gdPrevAsk, gdPrevBid;           // Ïðåäûäóùèå öåíû
double gdPrev2Ask, gdPrev2Bid;           // Ïðåäûäóùèå öåíû
int    obj_total;
double line1_price,line2_price,line3_price,line4_price,line5_price;
double line6_price,line7_price,line8_price,line9_price,line10_price;
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
void deinit() { if (!IsTesting()) Comment(""); }

//+------------------------------------------------------------------+
//| expert program start function                                    |
//+------------------------------------------------------------------+
void start() 
  {
  obj_total=ObjectsTotal(OBJ_HLINE);   // êîë-âî ãîðèç ëèíèé íà ãðàôèêå
  line1_price = ObjectGet(line1_name,OBJPROP_PRICE1);
  line2_price = ObjectGet(line2_name,OBJPROP_PRICE1);  
  line3_price = ObjectGet(line3_name,OBJPROP_PRICE1);  
  line4_price = ObjectGet(line4_name,OBJPROP_PRICE1);  
  line5_price = ObjectGet(line5_name,OBJPROP_PRICE1);  
  line6_price = ObjectGet(line6_name,OBJPROP_PRICE1);  
  line7_price = ObjectGet(line7_name,OBJPROP_PRICE1);  
     // Âû÷èñëèòü gdUpPrice è ðàñïîçíàòü
     // êàêàÿ ëèíèÿ íàæîäèòñÿ íà ýòîì óðîâíå
  gdUpPrice=line2_price; esNameUpLine="mml2";
  if (line2_price<Ask) {gdUpPrice=line3_price; esNameUpLine="mml4";}
  if (line3_price<Ask) {gdUpPrice=line4_price; esNameUpLine="mml6";}
  if (line4_price<Ask) {gdUpPrice=line5_price; esNameUpLine="mml8";}
  if (line5_price<Ask) {gdUpPrice=line6_price; esNameUpLine="mml10";}
  if (line6_price<Ask) {gdUpPrice=line7_price; esNameUpLine="mml12";}
     // Âû÷èñëèòü gdDnPrice è ðàñïîçíàòü
     // êàêàÿ ëèíèÿ íàæîäèòñÿ íà ýòîì óðîâíå
  gdDnPrice=line6_price; esNameDnLine="mml10";// Òåêóùèå öåíîâûå óðîâíè
  if (line6_price>Bid) {gdDnPrice=line5_price; esNameDnLine="mml8";}
  if (line5_price>Bid) {gdDnPrice=line4_price; esNameDnLine="mml6";}
  if (line4_price>Bid) {gdDnPrice=line3_price; esNameDnLine="mml4";}
  if (line3_price>Bid) {gdDnPrice=line2_price; esNameDnLine="mml2";}
  if (line2_price>Bid) {gdDnPrice=line1_price; esNameDnLine="mml0";}
       
  //if (idRightCondition() && gdPrevAsk!=0 && gdPrevBid!=0) // gdPrevAsk è gdPrevBid
  if (idRightCondition()) // gdPrevAsk è gdPrevBid  
       OpenPositions();
  if (ebShowComment) 
      {
    string st="";
    if (gdUpPrice==0) st="Íå îïðåäåë¸í âåðõíèé öåíîâîé óðîâåíü\n";
    /*else {
      if (ebBuyFromUp) st="Ïîêóïêà îò ";
      else st="Ïðîäàæà îò ";
      st=st+DoubleToStr(gdUpPrice, Digits)+"\n";
         }*/
    if (gdDnPrice==0) st=st+"Íå îïðåäåë¸í íèæíèé öåíîâîé óðîâåíü";
    /*else {
      if (ebSellFromDn) st=st+"Ïðîäàæà îò ";
      else st=st+"Ïîêóïêà îò ";
      st=st+DoubleToStr(gdDnPrice, Digits);
         }*/
    Comment(st);
    //Comment(st);
      }
  if (gdUpPrice>0) gdPrevUpPrice=gdUpPrice;
  if (gdDnPrice>0) gdPrevDnPrice=gdDnPrice;
  //gdPrevAsk=Ask;
  //gdPrevBid=Bid;
  }
//+------------------------------------------------------------------+
//|         Èäåíòèôèêàöèÿ ïðàâèëüíûõ öåíîâûõ óðîâíåé                 |
//+------------------------------------------------------------------+
bool idRightCondition() {         // ñóùåñòâîâàíèå îáîèõ öåíîâûõ óðîâíåé
  double cur;                     // òåêóùàÿ öåíà ëèíèè äëÿ ðàñ÷åòà UP 
  // òèïè÷íàÿ ïðîâåðêà
  // Âåðõíèé öåíîâîé óðîâåíü

  if (ObjectFind(esNameUpLine)<0) // åñëè íå íàõîäèì ëèíèþ ñ òàêèì èìåíåì 
      {
    gdUpPrice=0;
    gdPrevUpPrice=0;
    Message("Íå íàéäåíà ëèíèÿ "+esNameUpLine);
      } else 
      {
       gdUpPrice=ObjectGet(esNameUpLine, OBJPROP_PRICE1); 
      }
  // Íèæíèé öåíîâîé óðîâåíü
  if (ObjectFind(esNameDnLine)<0) // åñëè íå íàõîäèì ëèíèþ ñ òàêèì èìåíåì  
      {
    gdDnPrice=0;
    gdPrevDnPrice=0;
    Message("Íå íàéäåíà ëèíèÿ "+esNameDnLine);
      } else 
      {
       gdDnPrice=ObjectGet(esNameDnLine, OBJPROP_PRICE1);
      }
  /*
  if (gdUpPrice<gdPrevBid && gdUpPrice>0) {
    gdUpPrice=0;
    Message("Âåðõíÿÿ ëèíèÿ "+esNameUpLine+" ðàñïîëîæåíà íèæå ðûíêà");
  }
  if (gdDnPrice>gdPrevAsk && gdPrevAsk>0) {
    gdDnPrice=0;
    Message("Íèæíÿÿ ëèíèÿ "+esNameDnLine+" ðàñïîëîæåíà âûøå ðûíêà");
  }
  */
  if (gdUpPrice!=gdPrevUpPrice || gdDnPrice!=gdPrevDnPrice
   || gdPrevUpPrice==0 || gdPrevDnPrice==0
   || gdUpPrice==0 || gdUpPrice==0) return(False);
  else return(True);
}
  
//+------------------------------------------------------------------+
//| Îòêðûòèå ïîçèöèè                                                 |
//+------------------------------------------------------------------+
void OpenPositions() {
  bool   lbBuy=False, lbSell=False;
  double ldStop=0, ldTake=0;
   
  /*if ((Ask>gdPrevAsk && Ask>=gdUpPrice && ebBuyFromUp)
   || (Bid<gdPrevBid && Bid<=gdDnPrice && !ebSellFromDn)) lbBuy=True;
  if ((Bid>gdPrevBid && Bid>=gdUpPrice && !ebBuyFromUp)
   || (Ask<gdPrevAsk && Ask<=gdDnPrice && ebSellFromDn))  lbSell=True;   */

  if ((iClose(Symbol(),0,4) < gdDnPrice && iClose(Symbol(),0,3) < gdDnPrice && 
       iClose(Symbol(),0,2) > gdDnPrice && iClose(Symbol(),0,1) > gdDnPrice && 
       iStochastic(Symbol(),0,Stoch_p1,Stoch_p2,Stoch_t1,0,0,ebBuyStoch,0)  >
       iStochastic(Symbol(),0,Stoch_p1,Stoch_p2,Stoch_t1,0,0,!ebBuyStoch,0) &&
       ebBuyFromUp)
   || (iClose(Symbol(),0,4) > gdUpPrice && iClose(Symbol(),0,3) > gdUpPrice && 
       iClose(Symbol(),0,2) < gdUpPrice && iClose(Symbol(),0,1) < gdUpPrice && 
       iStochastic(Symbol(),0,Stoch_p1,Stoch_p2,Stoch_t1,0,0,ebBuyStoch,0)  <
       iStochastic(Symbol(),0,Stoch_p1,Stoch_p2,Stoch_t1,0,0,!ebBuyStoch,0) &&       
       !ebSellFromDn)) lbBuy=True;

  if ((iClose(Symbol(),0,4) > gdUpPrice && iClose(Symbol(),0,3) > gdUpPrice &&
       iClose(Symbol(),0,2) < gdUpPrice && iClose(Symbol(),0,1) < gdUpPrice && 
       iStochastic(Symbol(),0,Stoch_p1,Stoch_p2,Stoch_t1,0,0,ebBuyStoch,0)  <
       iStochastic(Symbol(),0,Stoch_p1,Stoch_p2,Stoch_t1,0,0,!ebBuyStoch,0) &&   
       ebSellFromDn)
   || (iClose(Symbol(),0,4) < gdDnPrice && iClose(Symbol(),0,3) < gdDnPrice && 
       iClose(Symbol(),0,2) > gdDnPrice && iClose(Symbol(),0,1) > gdDnPrice && 
       iStochastic(Symbol(),0,Stoch_p1,Stoch_p2,Stoch_t1,0,0,ebBuyStoch,0)  >
       iStochastic(Symbol(),0,Stoch_p1,Stoch_p2,Stoch_t1,0,0,!ebBuyStoch,0) &&
       !ebBuyFromUp))  lbSell=True;   
   
  if (lbBuy) {
    if (ExistPositionByOP(OP_SELL)) CloseAllPositions();
    if (!ExistPositionByOP(OP_BUY)) {
      if (StopLoss!=0) ldStop=Ask-StopLoss*Point;
      if (TakeProfit!=0) ldTake=Ask+TakeProfit*Point;
      OpenPosition(OP_BUY, ldStop, ldTake);
    }
  }
  if (lbSell) {
    if (ExistPositionByOP(OP_BUY)) CloseAllPositions();
    if (!ExistPositionByOP(OP_SELL)) {
      if (StopLoss!=0) ldStop=Bid+StopLoss*Point;
      if (TakeProfit!=0) ldTake=Bid-TakeProfit*Point;
      OpenPosition(OP_SELL, ldStop, ldTake);
    }
  }
}
//+------------------------------------------------------------------+
//| Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèè ïî îïåðàöèè                |
//+------------------------------------------------------------------+
bool ExistPositionByOP(int op) {
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol() && OrderType()==op) 
          return(True);
                                                    }
                                      }
                                return(False);
                               }
//+------------------------------------------------------------------+
//| Îòêðûòèå ïîçèöèè ïî òåêóùåé öåíå                                 |
//| Ïàðàìåòðû:       op     - îïåðàöèÿ                               |
//|                  ldStop - óðîâåíü ñòîï                           |
//|                  ldTake - óðîâåíü òåéê                           |
//+------------------------------------------------------------------+
void OpenPosition(int op, double ldStop, double ldTake) 
 {
  color  clOpen;
  double pp;
  string lsComm=GetCommentForOrder();
  if (op==OP_BUY) 
      {
       clOpen=clOpenBuy;
       pp=Ask;
      } else {
              clOpen=clOpenSell;
              pp=Bid;
             }
  if (ebAdaptiveStop)
      {
  if (op==OP_BUY) 
      {
       ldTake=gdUpPrice;
       ldStop=gdDnPrice;
      } else {
              ldTake=gdDnPrice;
              ldStop=gdUpPrice;
             }
       }
  OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,0,0,clOpen);
  if (UseSound) PlaySound(NameFileSound);
 }
//+------------------------------------------------------------------+
//| Ãåíåðèðóåò è âîçâðàùàåò ñòðîêó êîìåíòàðèÿ äëÿ îðäåðà èëè ïîçèöèè |
//+------------------------------------------------------------------+
string GetCommentForOrder() {
  return(Name_Expert+" "+GetNameTF(Period()));
                            }
//+------------------------------------------------------------------+
//| Âîçâðàùàåò íàèìåíîâàíèå òàéìôðåéìà                               |
//+------------------------------------------------------------------+
string GetNameTF(int TimeFrame) {
	switch (TimeFrame)            {
		case PERIOD_M1:  return("M1");
		case PERIOD_M5:  return("M5");
		case PERIOD_M15: return("M15");
		case PERIOD_M30: return("M30");
		case PERIOD_H1:  return("H1");
		case PERIOD_H4:  return("H4");
		case PERIOD_D1:  return("Daily");
		case PERIOD_W1:  return("Weekly");
		case PERIOD_MN1: return("Monthly");
		default:		     return("UnknownPeriod");
	                              }
                                }
//+------------------------------------------------------------------+
//| Çàêðûòèå âñåõ ïîçèöèé ïî ðûíî÷íîé öåíå                           |
//+------------------------------------------------------------------+
void CloseAllPositions()                          {
  for (int i=OrdersTotal()-1; i>=0; i--)           {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol())                   {
        if (OrderType()==OP_BUY)                      {
          OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
                                                      }
        if (OrderType()==OP_SELL)                     {
          OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
                                                      }
                                                     }
                                                    }
                                                   }
                                                  }
//+------------------------------------------------------------------+
//| Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë                             |
//+------------------------------------------------------------------+
void Message(string m) {
  Comment(m);
  if (StringLen(m)>0) Print(m);
}
//+------------------------------------------------------------------+





Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:

Stochastic oscillator


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

Other Features:

It plays sound alerts

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-Grabber-Murrey-v07


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

Pair: Period: