//+------------------------------------------------------------------+ //| 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