//+------------------------------------------------------------------+
//|                                               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  =300;       //Ñðîê óäàëåíèÿ îðäåðà â ñåêóíäàõ
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 = 34827;  // Íîìåð òîðãîâîãî ñ÷¸òà
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)
   if((Year()==2006 && Month()==3 && Day()==15 && Hour()==15 && Minute()==0) || 
(Year()==2006 && Month()==3 && Day()==14 && Hour()==14 && Minute()==30) || 
(Year()==2006 && Month()==3 && Day()==10 && Hour()==14 && Minute()==30) || 
(Year()==2006 && Month()==3 && Day()==9 && Hour()==14 && Minute()==30) || 
(Year()==2006 && Month()==3 && Day()==3 && Hour()==11 && Minute()==0) || 
(Year()==2006 && Month()==3 && Day()==2 && Hour()==13 && Minute()==45) || 
(Year()==2006 && Month()==3 && Day()==1 && Hour()==11 && Minute()==0) || 
(Year()==2006 && Month()==2 && Day()==28 && Hour()==14 && Minute()==30) || 
(Year()==2006 && Month()==2 && Day()==22 && Hour()==11 && Minute()==0) || 
(Year()==2006 && Month()==2 && Day()==16 && Hour()==16 && Minute()==0) || 
(Year()==2006 && Month()==2 && Day()==15 && Hour()==16 && Minute()==0) || 
(Year()==2006 && Month()==2 && Day()==15 && Hour()==15 && Minute()==0) || 
(Year()==2006 && Month()==2 && Day()==14 && Hour()==11 && Minute()==0) || 
(Year()==2006 && Month()==2 && Day()==10 && Hour()==14 && Minute()==30) || 
(Year()==2006 && Month()==2 && Day()==8 && Hour()==8 && Minute()==0) || 
(Year()==2006 && Month()==2 && Day()==3 && Hour()==14 && Minute()==30) || 
(Year()==2006 && Month()==2 && Day()==2 && Hour()==13 && Minute()==45) || 
(Year()==2006 && Month()==2 && Day()==1 && Hour()==11 && Minute()==0) || 
(Year()==2006 && Month()==1 && Day()==31 && Hour()==20 && Minute()==15) || 
(Year()==2006 && Month()==1 && Day()==27 && Hour()==14 && Minute()==30) || 
(Year()==2006 && Month()==1 && Day()==24 && Hour()==10 && Minute()==0) || 
(Year()==2006 && Month()==1 && Day()==19 && Hour()==11 && Minute()==0) || 
(Year()==2006 && Month()==1 && Day()==18 && Hour()==15 && Minute()==0) ||
 (Year()==2006 && Month()==1 && Day()==12 && Hour()==14 && Minute()==30) ||
 (Year()==2006 && Month()==1 && Day()==12 && Hour()==13 && Minute()==45) ||
 (Year()==2006 && Month()==1 && Day()==9 && Hour()==8 && Minute()==0) || 
(Year()==2005 && Month()==12 && Day()==23 && Hour()==10 && Minute()==0) || 
(Year()==2005 && Month()==12 && Day()==21 && Hour()==14 && Minute()==30) ||
(Year()==2005 && Month()==12 && Day()==20 && Hour()==11 && Minute()==0) ||
(Year()==2005 && Month()==12 && Day()==16 && Hour()==14 && Minute()==30) ||
(Year()==2005 && Month()==12 && Day()==15 && Hour()==15 && Minute()==0) ||
(Year()==2005 && Month()==12 && Day()==15 && Hour()==9 && Minute()==0) ||
(Year()==2005 && Month()==12 && Day()==14 && Hour()==14 && Minute()==30) ||
(Year()==2005 && Month()==12 && Day()==13 && Hour()==20 && Minute()==15) ||
(Year()==2005 && Month()==12 && Day()==12 && Hour()==11 && Minute()==0) ||
(Year()==2005 && Month()==12 && Day()==9 && Hour()==8 && Minute()==0) ||
(Year()==2005 && Month()==12 && Day()==2 && Hour()==15 && Minute()==0) ||
(Year()==2005 && Month()==12 && Day()==2 && Hour()==14 && Minute()==30) ||
(Year()==2005 && Month()==12 && Day()==1 && Hour()==13 && Minute()==45) ||
(Year()==2005 && Month()==12 && Day()==1 && Hour()==11 && Minute()==0) ||
(Year()==2005 && Month()==11 && Day()==30 && Hour()==20 && Minute()==0) ||
(Year()==2005 && Month()==11 && Day()==30 && Hour()==14 && Minute()==30) ||
(Year()==2005 && Month()==11 && Day()==30 && Hour()==11 && Minute()==0) ||
(Year()==2005 && Month()==11 && Day()==30 && Hour()==9 && Minute()==55) ||
(Year()==2005 && Month()==11 && Day()==24 && Hour()==10 && Minute()==0) ||
(Year()==2005 && Month()==11 && Day()==22 && Hour()==8 && Minute()==0) ||
(Year()==2005 && Month()==11 && Day()==21 && Hour()==11 && Minute()==0) ||
(Year()==2005 && Month()==11 && Day()==16 && Hour()==15 && Minute()==0) ||
(Year()==2005 && Month()==11 && Day()==15 && Hour()==16 && Minute()==0) ||
(Year()==2005 && Month()==11 && Day()==15 && Hour()==11 && Minute()==0) ||
(Year()==2005 && Month()==11 && Day()==10 && Hour()==14 && Minute()==30) ||
(Year()==2005 && Month()==11 && Day()==9 && Hour()==8 && Minute()==0) ||
(Year()==2005 && Month()==11 && Day()==4 && Hour()==14 && Minute()==30) ||
(Year()==2005 && Month()==11 && Day()==4 && Hour()==11 && Minute()==0) ||
(Year()==2005 && Month()==11 && Day()==3 && Hour()==16 && Minute()==0) ||
(Year()==2005 && Month()==11 && Day()==3 && Hour()==13 && Minute()==45) ||
(Year()==2005 && Month()==11 && Day()==1 && Hour()==20 && Minute()==15) )
{
  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,NormalizeDouble(pp,4),Slippage,NormalizeDouble(ldStop,4),NormalizeDouble(ldTake,4),lsComm,0,CurTime()+expirat ,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);
}
//+------------------------------------------------------------------+
             
            
            
            
Comments