//+------------------------------------------------------------------+ //| Set2StopOrders.mq4 | //| | //| | //| | //| 10.01.2006 Ñêðèïò âûñòàâëÿåò 2 ïðîòèâîïîëîæíûõ ñòîïîâûõ îðäåðà. | //+------------------------------------------------------------------+ #property show_inputs //------- Âíåøíèå ïàðàìåòðû ---------------------------------- extern string _P_Trade = "---------- Ïàðàìåòðû òîðãîâëè"; extern double Lots = 0.1; // Ðàçìåð òîðãóåìîãî ëîòà extern int StopLoss = 30; // Ðàçìåð ôèêñèðîâàííîãî ñòîïà extern int TakeProfit = 60; // Ðàçìåð ôèêñèðîâàííîãî òýéêà extern int DistanceSet = 20; // Ðàññòîÿíèå îò ðûíêà extern int Slippage = 3; // Ïðîñêàëüçûâàíèå öåíû //------- Ãëîáàëüíûå ïåðåìåííûå ñêðèïòà ------------------------------ string Name_Expert = "Set2StopOrders"; bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà color clOpenBuy = LightBlue; // Öâåò îðäåðà BuyStop color clOpenSell = LightCoral; // Öâåò îðäåðà SellStop extern string _expiration ="Ñðîê óäàëåíèÿ îðäåðà â ìèíóòàõ"; extern int expirat =1800; //Ñðîê óäàëåíèÿ îðäåðà â ñåêóíäàõ extern string _DayTrade ="Äåíü íåäåëè ïî ñðåäíå åâðîâåéñêîìó _ îò è äî (âîñêðåñåíüå-0,1,2,3,4,5,6)"; extern int FromDayTrade = 1; extern int ToDayTrade = 5; extern string _HourTrade ="×àñ ïî ñðåäíå åâðîâåéñêîìó _ îò è äî"; extern int FromHourTrade = 14; extern int ToHourTrade = 14; extern string _MinuteTrade ="Ìèíóòû îò è äî"; extern int FromMinuteTrade = 25; extern int ToMinuteTrade = 29; extern int CloseHour=14; extern int CloseMinute=35; int LastTradeTime; //------- Âíåøíèå ïàðàìåòðû ------------------------------------------ extern bool AllPositions = False; // Óïðàâëÿòü âñåìè ïîçèöèÿìè extern bool ProfitTrailing = True; // Òðàëèòü òîëüêî ïðîôèò extern int TrailingStop = 15; // Ôèêñèðîâàííûé ðàçìåð òðàëà extern int TrailingStep = 2; // Øàã òðàëà //extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë //extern string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà //***********************Close ALL extern string _CloseALL ="Çàêðûòèå âñåõ ïîçèöèé â êîíöå äíÿ"; extern int CloseHour1 = 23; // Âðåìÿ çàêðûòèÿ, ÷àñû extern int CloseMinute1 = 0; // Âðåìÿ çàêðûòèÿ, ìèíóòû extern bool UseCurrSymbol = False; // Èñïîëüçîâàòü òîëüêî îäèí èíñòðóìåíò extern bool UseOneAccount = False; // Èñïîëüçîâàòü òîëüêî îäèí ñ÷¸ò extern int NumberAccount = 0; // Íîìåð òîðãîâîãî ñ÷¸òà extern color clCloseBuy = Blue; // Öâåò çàêðûòèÿ ïîêóïêè extern color clCloseSell = Red; // Öâåò çàêðûòèÿ ïðîäàæè //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ void start() { //***********************Çàêðûòèå âñåõ ïîçèöèé â íàçíà÷åííîå âðåìÿ (êîíåö äíÿ) double pBidc, pAskc; if (UseOneAccount && AccountNumber()!=NumberAccount) { Comment("Ðàáîòà íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!"); return; } else Comment(""); if (Hour()==CloseHour1 && Minute()>=CloseMinute1) { for (int g=OrdersTotal()-1; g>=0; g--) { if (OrderSelect(g, SELECT_BY_POS, MODE_TRADES)) { if (!UseCurrSymbol || OrderSymbol()==Symbol()) { if (OrderType()==OP_BUY) { pBidc=MarketInfo(OrderSymbol(), MODE_BID); OrderClose(OrderTicket(), OrderLots(), pBidc, Slippage, clCloseBuy); } if (OrderType()==OP_SELL) { pAskc=MarketInfo(OrderSymbol(), MODE_ASK); OrderClose(OrderTicket(), OrderLots(), pAskc, Slippage, clCloseSell); } } } } } //******************Òðåëèíã-------------------- for (int j=0; j<OrdersTotal(); j++) { if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) { if (AllPositions || OrderSymbol()==Symbol()) { TrailingPositions(); } } } // íå ðàáîòàåò â âûõîäíûå äíè. // if(DayOfWeek()==0 || DayOfWeek()==6) return(0); int total, cnt, OpenOrder, DefOrder, pos; // Ñ÷èòàåì êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ ïî òåêóùåìó èíñòðóìåíòó total=OrdersTotal(); OpenOrder=0; DefOrder=0; for(cnt=0;cnt<total;cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) OpenOrder++; // êîëè÷åñòâî îòêðûòûõ îðäåðîâ else DefOrder++; // êîëè÷åñòâî çàêðûòûõ îðäåðîâ } } //***************** Óäàðåíèå îðäåðîâ ïîñëå íîâîñòåé************************ if (Hour()==CloseHour && Minute()>=CloseMinute) { for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()) { if ((OrderType()==OP_BUYSTOP) || (OrderType()==OP_SELLSTOP) ){ OrderDelete(OrderTicket()); } } } } return (1); } //***********Îòêðûòèå îðäåðîâ ïåðåä íîâîñòÿìè********************* if (OpenOrder>0 || DefOrder>0) return (0); if (OpenOrder==0 && DefOrder==0) {//2 if (!(Day()>=FromDayTrade && Day()<=ToDayTrade)){//3 Comment("Time for trade has not come else! / Òèïà ðàíî åùå "); return(0); }//3 if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)){//3 Comment("Time for trade has not come else! / Òèïà ðàíî åùå "); return(0); }//3 if (!(Minute()>=FromMinuteTrade && Minute()<=ToMinuteTrade)){//3 Comment("Time for trade has not come else! / Òèïà ðàíî åùå "); return(0); }//3 }//2 { double ldStop=0, ldTake=0; double pAsk=Ask+DistanceSet*Point; double pBid=Bid-DistanceSet*Point; if (StopLoss!=0) ldStop=pAsk-StopLoss*Point; if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point; SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake); if (StopLoss!=0) ldStop=pBid+StopLoss*Point; if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point; SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake); } } //+------------------------------------------------------------------+ //| Óñòàíîâêà îðäåðà | //| Ïàðàìåòðû: | //| op - îïåðàöèÿ | //| pp - öåíà | //| ldStop - óðîâåíü ñòîï | //| ldTake - óðîâåíü òåéê | //+------------------------------------------------------------------+ void SetOrder(int op, double pp, double ldStop, double ldTake) { color clOpen; string lsComm=GetCommentForOrder(); if (op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell; 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_MN1: return("Monthly"); case PERIOD_W1: return("Weekly"); case PERIOD_D1: return("Daily"); case PERIOD_H4: return("H4"); case PERIOD_H1: return("H1"); case PERIOD_M30: return("M30"); case PERIOD_M15: return("M15"); case PERIOD_M5: return("M5"); case PERIOD_M1: return("M1"); default: return("UnknownPeriod"); } return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Ñîïðîâîæäåíèå ïîçèöèè ïðîñòûì òðàëîì | //+------------------------------------------------------------------+ void TrailingPositions() { double pBid, pAsk, pp; pp = MarketInfo(OrderSymbol(), MODE_POINT); if (OrderType()==OP_BUY) { pBid = MarketInfo(OrderSymbol(), MODE_BID); if (!ProfitTrailing || (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 (!ProfitTrailing || 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); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy
Other Features:
It plays sound alerts