//+------------------------------------------------------------------+ //| e-TFL.mq4 | //| Êèì Èãîðü Â. aka KimIV | //| http://www.kimiv.ru | //| | //| 10.07.2006 Trade From Lines (òîðãîâëÿ îò ëèíèé). FreeWare. | //+------------------------------------------------------------------+ #property copyright "Êèì Èãîðü Â. aka KimIV" #property link "http://www.kimiv.ru" //------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -------------------------------- extern string _P_Expert = "---------- Ïàðàìåòðû ñîâåòíèêà"; extern string esNameUpLine = "UPLine";// Íàèìåíîâàíèå âåðõíåé ëèíèè extern string esNameDnLine = "DNLine";// Íàèìåíîâàíèå íèæíåé ëèíèè extern bool ebBuyFromUp = False; // Ïîêóïàòü îò âåðõíåé ëèíèè extern bool ebBuyFromDn = False; // Ïîêóïàòü îò íèæíåé ëèíèè extern bool ebShowComment = True; // Ïîêàçûâàòü êîììåíòàðèè extern string _P_Trade = "---------- Ïàðàìåòðû òîðãîâëè"; extern double Lots = 0.1; // Ðàçìåð òîðãóåìîãî ëîòà extern int StopLoss = 15; // Ðàçìåð ôèêñèðîâàííîãî ñòîïà extern int TakeProfit = 15; // Ðàçìåð ôèêñèðîâàííîãî òýéêà extern int Slippage = 3; // Ïðîñêàëüçûâàíèå öåíû //------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà ---------------------------- string Name_Expert = "e-TFL"; 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; // Ïðåäûäóùèå öåíû //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ void deinit() { if (!IsTesting()) Comment(""); } //+------------------------------------------------------------------+ //| expert program start function | //+------------------------------------------------------------------+ void start() { gdUpPrice=0; gdDnPrice=0; if (idPriceLevel() && gdPrevAsk!=0 && gdPrevBid!=0) 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 (ebBuyFromDn) st=st+"Ïîêóïêà îò "; else st=st+"Ïðîäàæà îò "; st=st+DoubleToStr(gdDnPrice, Digits); } Comment(st); } if (gdUpPrice>0) gdPrevUpPrice=gdUpPrice; if (gdDnPrice>0) gdPrevDnPrice=gdDnPrice; gdPrevAsk=Ask; gdPrevBid=Bid; } //+------------------------------------------------------------------+ //| Èäåíòèôèêàöèÿ âåðõíåãî è íèæíåãî öåíîâûõ óðîâíåé | //+------------------------------------------------------------------+ bool idPriceLevel() { // Âåðõíèé öåíîâîé óðîâåíü if (ObjectFind(esNameUpLine)<0) { gdUpPrice=0; gdPrevUpPrice=0; Message("Íå íàéäåíà ëèíèÿ "+esNameUpLine); } else { switch (ObjectType(esNameUpLine)) { case OBJ_HLINE: gdUpPrice=ObjectGet(esNameUpLine, OBJPROP_PRICE1); break; case OBJ_TREND: gdUpPrice=ObjectGetValueByShift(esNameUpLine, 0); break; default: Message("Íåâåðíûé òèï ëèíèè "+esNameUpLine); break; } } // Íèæíèé öåíîâîé óðîâåíü if (ObjectFind(esNameDnLine)<0) { gdDnPrice=0; gdPrevDnPrice=0; Message("Íå íàéäåíà ëèíèÿ "+esNameDnLine); } else { switch (ObjectType(esNameDnLine)) { case OBJ_HLINE: gdDnPrice=ObjectGet(esNameDnLine, OBJPROP_PRICE1); break; case OBJ_TREND: gdDnPrice=ObjectGetValueByShift(esNameDnLine, 0); break; default: Message("Íåâåðíûé òèï ëèíèè "+esNameDnLine); break; } } 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) || (Ask<gdPrevAsk && Ask<=gdDnPrice && ebBuyFromDn)) lbBuy=True; if ((Bid>gdPrevBid && Bid>=gdUpPrice && !ebBuyFromUp) || (Bid<gdPrevBid && Bid<=gdDnPrice && !ebBuyFromDn)) 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; } 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:
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
Other Features:
It plays sound alerts