помогите подправить код

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
dimasik9888
50
dimasik9888  
чтоб выставлял отложные ордера за максимума и минимума с9.00 по 14.59 с возможностью поменять время  
dimasik9888
50
dimasik9888  
//--------------------------------------------------------------------
extern string TimeSet      = "7:00";         //Время в которое происходит выставление стоп ордеров, если TimeSet = "00:00", то пробой прошлого дня.
extern int    Delta        = 0,               //Выше или ниже екстремумов дня
              SL           = 0,               //Стоплосс в пунктах
              TP           = 5000,            //Тейкпрофит в пунктах
              risk         = 1000,            //Если 0 то по фиксированному лоту
              NoLoss       = 90,              //Если 0 то нет установки безубытка
              trailing     = 90;              //Если 0 то нет трейлинга
extern double Lot          = 0.10;            //используется только при risk = 0
extern bool   OpenStop     = true;            //Выставлять стоп ордера при открытом ордере
extern color  color_BAR    = DarkBlue;        //цвет инфо
extern bool   TradeMonday  = false;           //торговать в понедельник
extern int    magic        = 123321;          // номер ордера
//--------------------------------------------------------------------
double        MaxPrice,MinPrice;
int           STOPLEVEL,tip,TimeBarBay,TimeBarSell,LastDay;
//--------------------------------------------------------------------
int init()
{
   STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
   {
   if (SL < STOPLEVEL) SL = STOPLEVEL;
   if (TP < STOPLEVEL) TP = STOPLEVEL;
   if (NoLoss   < STOPLEVEL && NoLoss   != 0) NoLoss   = STOPLEVEL;
   if (trailing < STOPLEVEL && trailing != 0) trailing = STOPLEVEL;
   Comment("\nУстановленные параметры BreakdownLevelDay "+"\n"+
      "TimeSet   "   , TimeSet,           "\n",
      "Delta       " , Delta,             "\n",
      "SL           ", SL,                "\n",
      "TP          " , TP,                "\n",
      "Lot          ", DoubleToStr(Lot,2),"\n",
      "risk         ", risk,              "\n",
      "NoLoss    "   , NoLoss,            "\n",
      "trailing     ", trailing);
   if (TimeSet=="00:00") LastDay=1;
   }
  return(0) ;
}

//--------------------------------------------------------------------
int start()
{
   if (OpenStop) magic=TimeDay(CurTime());
   //-----------------------------------------------------------------
   int bay,sel,error;
   bool BUY=false,SEL=false;
   for (int i=0; i<OrdersTotal(); i++)
   {  if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
         tip=OrderType();
         if (tip==0) BUY = true;
         if (tip==1) SEL = true;
         if (tip==4) bay++;
         if (tip==5) sel++;
      }   
   }
   if ((BUY||SEL)&&(bay!=0||sel!=0)) DelAllStop();          //если есть открытый ордер удаляем стоп ордера
   if ( BUY||SEL) 
   {
      if (trailing!=0) TrailingStop(trailing);
      if (NoLoss!=0) No_Loss(NoLoss);
     return(0);                                               //если есть открытый ордер
   }
   if (TimeStr(CurTime())!=TimeSet) return(0);              //если время не совпадает с временем выставления ордеров
   if (!TradeMonday && DayOfWeek()==1)return(0); 
   int expiration=CurTime()+(23-TimeHour(CurTime()))*3600+(60-TimeMinute(CurTime()))*60;  //время закрытия стоп ордера
   double TrPr,StLo;
   if (risk!=0) Lot = LOT(); 
   if (bay<1&&TimeBarBay!=TimeDay(CurTime()))
   {
      MaxPrice=iHigh(NULL,1440,LastDay)+NormalizeDouble(Delta*Point,Digits);
      if (Ask+STOPLEVEL*Point>MaxPrice) MaxPrice = NormalizeDouble(Ask+STOPLEVEL*Point,Digits);
      if (TP!=0) TrPr = NormalizeDouble(MaxPrice + TP * Point,Digits);                 
      if (SL!=0) StLo = NormalizeDouble(MaxPrice - SL * Point,Digits);                 
      error=OrderSend(Symbol(),OP_BUYSTOP ,Lot,MaxPrice,3,0,TrPr,"BUYSTOP BLD",magic,0,clrBlue);
      if (error==-1) Print("Error BUYSTOP ",GetLastError(),"   ",Symbol(),"   Lot ",Lot,"   Price ",MaxPrice,"   SL ",StLo,"   TP ",TrPr,"   expiration ",expiration);
      else TimeBarBay=TimeDay(CurTime());
   }
   if (sel<1&&TimeBarSell!=TimeDay(CurTime()))
   {
      MinPrice=iLow(NULL,1440,LastDay)-NormalizeDouble(Delta*Point,Digits);
      if (Bid-STOPLEVEL*Point<MinPrice) MinPrice = NormalizeDouble(Bid-STOPLEVEL*Point,Digits);
      if (TP!=0) TrPr = NormalizeDouble(MinPrice - TP * Point,Digits);                 
      if (SL!=0) StLo = NormalizeDouble(MinPrice + SL * Point,Digits);   
      error=OrderSend(Symbol(),OP_SELLSTOP,Lot,MinPrice,3,0,TrPr,"SELLSTOP BLD",magic,0,clrRed );
      if (error==-1) Print("Error SELLSTOP ",GetLastError(),"   ",Symbol(),"   Lot ",Lot,"   Price ",MinPrice,"   SL ",StLo,"   TP ",TrPr,"   expiration ",expiration);
      else TimeBarSell=TimeDay(CurTime());
   }
   if (bay<1&&sel<1)
   {
      ObjectDelete("bar0");
      ObjectCreate("bar0", OBJ_RECTANGLE, 0, 0,0, 0,0);
      ObjectSet   ("bar0", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet   ("bar0", OBJPROP_COLOR, color_BAR);
      ObjectSet   ("bar0", OBJPROP_BACK,  true);
      ObjectSet   ("bar0", OBJPROP_TIME1 ,iTime( NULL, 1440, 0));
      ObjectSet   ("bar0", OBJPROP_PRICE1,MaxPrice);
      ObjectSet   ("bar0", OBJPROP_TIME2 ,CurTime());
      ObjectSet   ("bar0", OBJPROP_PRICE2,MinPrice);
   }
   return(0);
}
//--------------------------------------------------------------------
void DelAllStop()
  {
   int tttip=true;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
         tttip=OrderType();
         if(tip==4 || tip==5)
            int tick33et=OrderDelete(OrderTicket());
         if(tick33et<0)

            Print("--- Ошибка: ",GetLastError());
        }
     }
  }
//--------------------------------------------------------------------
void TrailingStop(int ttrailing)
{
   double StLo,OSL,OOP;
  
   bool error=true;
   
   for (int i=0; i<OrdersTotal(); i++) 
   {
      if (OrderSelect(i, SELECT_BY_POS))
      {
         tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
         {
            OSL   = NormalizeDouble(OrderStopLoss(),Digits);
            OOP   = NormalizeDouble(OrderOpenPrice(),Digits);
            if (tip==0)        
            {  
               StLo = NormalizeDouble(Bid - ttrailing*Point,Digits);
               if (StLo < OOP) continue;
               if (StLo > OSL)
                  error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White);

            }                                         
            if (tip==1)    
            {                                         
               StLo = NormalizeDouble(Ask + ttrailing*Point,Digits);           
               if (StLo > OOP) continue;
               if (StLo < OSL || OSL==0 )
                  error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White);
            } 
            if (!error) Alert("Error TrailingStop ",GetLastError(),"   ",Symbol(),"   SL ",StLo);
         }
      }
   }
}
//------------------------------------------------------------------+
double LOT()
{
   double MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
   double LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/15;
   if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
   if (LOT<MINLOT) LOT = MINLOT;
   if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1);
   return(LOT);
}
//------------------------------------------------------------------+
void No_Loss(int dNoLoss)
{
   double OOP,OSL;
   int ttip;
   bool error=true;
   
   for (int i=0; i<OrdersTotal(); i++) 
   {
      if (OrderSelect(i, SELECT_BY_POS))
      {
         ttip = OrderType();
         if (ttip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()!=magic)
         {
            OOP = NormalizeDouble(OrderOpenPrice(),Digits); 
            OSL = NormalizeDouble(OrderStopLoss(),Digits); 
            if (ttip==0)
            {  
               if ((Bid-OOP)/Point>=NoLoss && OOP > OSL) 
                  error=OrderModify(OrderTicket(),OOP,OOP,OrderTakeProfit(),0,White);
            }                                         
            if (ttip==1)
            {                                         
               if ((OOP-Ask)/Point>=NoLoss && (OOP < OSL || OSL ==0))
                  error=OrderModify(OrderTicket(),OOP,OOP,OrderTakeProfit(),0,White);
             } 
            if (!error) Alert("Error No_Loss ",GetLastError(),"   ",Symbol());
         }
      }
   }
}
//------------------------------------------------------------------+
string TimeStr(int taim)
{
   string sTaim;
   int HH=TimeHour(taim);     // Hour                  
   int MM=TimeMinute(taim);   // Minute   
   if (HH<10) sTaim = StringConcatenate(sTaim,"0",DoubleToStr(HH,0));
   else       sTaim = StringConcatenate(sTaim,DoubleToStr(HH,0));
   if (MM<10) sTaim = StringConcatenate(sTaim,":0",DoubleToStr(MM,0));
   else       sTaim = StringConcatenate(sTaim,":",DoubleToStr(MM,0));
   return(sTaim);
}
//--------------------------------------------------------------------

dimasik9888
50
dimasik9888  

зарание спосибо

Сергей Таболин
2831
Сергей Таболин  
А вставить эту портянку в "Код (Alt+S)" религия не позволяет?
dimasik9888
50
dimasik9888  

Сергей Таболин:
А вставить эту портянку в "Код (Alt+S)" религия не позволяет?



Здравствуйте как это поможет ? религия не причем !

Konstantin Nikitin
9213
Konstantin Nikitin  
dimasik9888:
как это альт +с

dimasik9888:

Здравствуйте как это поможет ? религия не причем !

А вы думайте кто-то будет вашу портянку разбирать в тексте. В коде могут и посмотреть.
dimasik9888
50
dimasik9888  
//--------------------------------------------------------------------
extern string TimeSet      = "7:00";         //Время в которое происходит выставление стоп ордеров, если TimeSet = "00:00", то пробой прошлого дня.
extern int    Delta        = 0,               //Выше или ниже екстремумов дня
              SL           = 0,               //Стоплосс в пунктах
              TP           = 5000,            //Тейкпрофит в пунктах
              risk         = 1000,            //Если 0 то по фиксированному лоту
              NoLoss       = 90,              //Если 0 то нет установки безубытка
              trailing     = 90;              //Если 0 то нет трейлинга
extern double Lot          = 0.10;            //используется только при risk = 0
extern bool   OpenStop     = true;            //Выставлять стоп ордера при открытом ордере
extern color  color_BAR    = DarkBlue;        //цвет инфо
extern bool   TradeMonday  = false;           //торговать в понедельник
extern int    magic        = 123321;          // номер ордера
//--------------------------------------------------------------------
double        MaxPrice,MinPrice;
int           STOPLEVEL,tip,TimeBarBay,TimeBarSell,LastDay;
//--------------------------------------------------------------------
int init()
{
   STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
   {
   if (SL < STOPLEVEL) SL = STOPLEVEL;
   if (TP < STOPLEVEL) TP = STOPLEVEL;
   if (NoLoss   < STOPLEVEL && NoLoss   != 0) NoLoss   = STOPLEVEL;
   if (trailing < STOPLEVEL && trailing != 0) trailing = STOPLEVEL;
   Comment("\nУстановленные параметры BreakdownLevelDay "+"\n"+
      "TimeSet   "   , TimeSet,           "\n",
      "Delta       " , Delta,             "\n",
      "SL           ", SL,                "\n",
      "TP          " , TP,                "\n",
      "Lot          ", DoubleToStr(Lot,2),"\n",
      "risk         ", risk,              "\n",
      "NoLoss    "   , NoLoss,            "\n",
      "trailing     ", trailing);
   if (TimeSet=="00:00") LastDay=1;
   }
  return(0) ;
}

//--------------------------------------------------------------------
int start()
{
   if (OpenStop) magic=TimeDay(CurTime());
   //-----------------------------------------------------------------
   int bay,sel,error;
   bool BUY=false,SEL=false;
   for (int i=0; i<OrdersTotal(); i++)
   {  if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
         tip=OrderType();
         if (tip==0) BUY = true;
         if (tip==1) SEL = true;
         if (tip==4) bay++;
         if (tip==5) sel++;
      }   
   }
   if ((BUY||SEL)&&(bay!=0||sel!=0)) DelAllStop();          //если есть открытый ордер удаляем стоп ордера
   if ( BUY||SEL) 
   {
      if (trailing!=0) TrailingStop(trailing);
      if (NoLoss!=0) No_Loss(NoLoss);
     return(0);                                               //если есть открытый ордер
   }
   if (TimeStr(CurTime())!=TimeSet) return(0);              //если время не совпадает с временем выставления ордеров
   if (!TradeMonday && DayOfWeek()==1)return(0); 
   int expiration=CurTime()+(23-TimeHour(CurTime()))*3600+(60-TimeMinute(CurTime()))*60;  //время закрытия стоп ордера
   double TrPr,StLo;
   if (risk!=0) Lot = LOT(); 
   if (bay<1&&TimeBarBay!=TimeDay(CurTime()))
   {
      MaxPrice=iHigh(NULL,1440,LastDay)+NormalizeDouble(Delta*Point,Digits);
      if (Ask+STOPLEVEL*Point>MaxPrice) MaxPrice = NormalizeDouble(Ask+STOPLEVEL*Point,Digits);
      if (TP!=0) TrPr = NormalizeDouble(MaxPrice + TP * Point,Digits);                 
      if (SL!=0) StLo = NormalizeDouble(MaxPrice - SL * Point,Digits);                 
      error=OrderSend(Symbol(),OP_BUYSTOP ,Lot,MaxPrice,3,0,TrPr,"BUYSTOP BLD",magic,0,clrBlue);
      if (error==-1) Print("Error BUYSTOP ",GetLastError(),"   ",Symbol(),"   Lot ",Lot,"   Price ",MaxPrice,"   SL ",StLo,"   TP ",TrPr,"   expiration ",expiration);
      else TimeBarBay=TimeDay(CurTime());
   }
   if (sel<1&&TimeBarSell!=TimeDay(CurTime()))
   {
      MinPrice=iLow(NULL,1440,LastDay)-NormalizeDouble(Delta*Point,Digits);
      if (Bid-STOPLEVEL*Point<MinPrice) MinPrice = NormalizeDouble(Bid-STOPLEVEL*Point,Digits);
      if (TP!=0) TrPr = NormalizeDouble(MinPrice - TP * Point,Digits);                 
      if (SL!=0) StLo = NormalizeDouble(MinPrice + SL * Point,Digits);   
      error=OrderSend(Symbol(),OP_SELLSTOP,Lot,MinPrice,3,0,TrPr,"SELLSTOP BLD",magic,0,clrRed );
      if (error==-1) Print("Error SELLSTOP ",GetLastError(),"   ",Symbol(),"   Lot ",Lot,"   Price ",MinPrice,"   SL ",StLo,"   TP ",TrPr,"   expiration ",expiration);
      else TimeBarSell=TimeDay(CurTime());
   }
   if (bay<1&&sel<1)
   {
      ObjectDelete("bar0");
      ObjectCreate("bar0", OBJ_RECTANGLE, 0, 0,0, 0,0);
      ObjectSet   ("bar0", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet   ("bar0", OBJPROP_COLOR, color_BAR);
      ObjectSet   ("bar0", OBJPROP_BACK,  true);
      ObjectSet   ("bar0", OBJPROP_TIME1 ,iTime( NULL, 1440, 0));
      ObjectSet   ("bar0", OBJPROP_PRICE1,MaxPrice);
      ObjectSet   ("bar0", OBJPROP_TIME2 ,CurTime());
      ObjectSet   ("bar0", OBJPROP_PRICE2,MinPrice);
   }
   return(0);
}
//--------------------------------------------------------------------
void DelAllStop()
  {
   int tttip=true;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
         tttip=OrderType();
         if(tip==4 || tip==5)
            int tick33et=OrderDelete(OrderTicket());
         if(tick33et<0)

            Print("--- Ошибка: ",GetLastError());
        }
     }
  }
//--------------------------------------------------------------------
void TrailingStop(int ttrailing)
{
   double StLo,OSL,OOP;
  
   bool error=true;
   
   for (int i=0; i<OrdersTotal(); i++) 
   {
      if (OrderSelect(i, SELECT_BY_POS))
      {
         tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
         {
            OSL   = NormalizeDouble(OrderStopLoss(),Digits);
            OOP   = NormalizeDouble(OrderOpenPrice(),Digits);
            if (tip==0)        
            {  
               StLo = NormalizeDouble(Bid - ttrailing*Point,Digits);
               if (StLo < OOP) continue;
               if (StLo > OSL)
                  error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White);

            }                                         
            if (tip==1)    
            {                                         
               StLo = NormalizeDouble(Ask + ttrailing*Point,Digits);           
               if (StLo > OOP) continue;
               if (StLo < OSL || OSL==0 )
                  error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White);
            } 
            if (!error) Alert("Error TrailingStop ",GetLastError(),"   ",Symbol(),"   SL ",StLo);
         }
      }
   }
}
//------------------------------------------------------------------+
double LOT()
{
   double MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
   double LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/15;
   if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
   if (LOT<MINLOT) LOT = MINLOT;
   if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1);
   return(LOT);
}
//------------------------------------------------------------------+
void No_Loss(int dNoLoss)
{
   double OOP,OSL;
   int ttip;
   bool error=true;
   
   for (int i=0; i<OrdersTotal(); i++) 
   {
      if (OrderSelect(i, SELECT_BY_POS))
      {
         ttip = OrderType();
         if (ttip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()!=magic)
         {
            OOP = NormalizeDouble(OrderOpenPrice(),Digits); 
            OSL = NormalizeDouble(OrderStopLoss(),Digits); 
            if (ttip==0)
            {  
               if ((Bid-OOP)/Point>=NoLoss && OOP > OSL) 
                  error=OrderModify(OrderTicket(),OOP,OOP,OrderTakeProfit(),0,White);
            }                                         
            if (ttip==1)
            {                                         
               if ((OOP-Ask)/Point>=NoLoss && (OOP < OSL || OSL ==0))
                  error=OrderModify(OrderTicket(),OOP,OOP,OrderTakeProfit(),0,White);
             } 
            if (!error) Alert("Error No_Loss ",GetLastError(),"   ",Symbol());
         }
      }
   }
}
//------------------------------------------------------------------+
string TimeStr(int taim)
{
   string sTaim;
   int HH=TimeHour(taim);     // Hour                  
   int MM=TimeMinute(taim);   // Minute   
   if (HH<10) sTaim = StringConcatenate(sTaim,"0",DoubleToStr(HH,0));
   else       sTaim = StringConcatenate(sTaim,DoubleToStr(HH,0));
   if (MM<10) sTaim = StringConcatenate(sTaim,":0",DoubleToStr(MM,0));
   else       sTaim = StringConcatenate(sTaim,":",DoubleToStr(MM,0));
   return(sTaim);
}
//--------------------------------------------------------------------
dimasik9888
50
dimasik9888  
Konstantin Nikitin:

А вы думайте кто-то будет вашу портянку разбирать в тексте. В коде могут и посмотреть.

я понял спс  кинул😉

dimasik9888
50
dimasik9888  
можно все оставить по прежнему только чтоб ордера выставлялись по максимуму и минимуму за промежуток времени допустим с 9:00 по 12:59 вот на подобие вот этого советника
//--------------------------------------------------------------------
extern double Lots          = 0.1; //лот
extern int    StopLoss      = 500; //стоплосс отложенного ордера(если 0 то на предыдущий хай или лоу)
extern int    TakeProfit    = 500; //тейкпрофит  отложенного ордера
extern int    Delta         = 100; //расстояние от лоу или хая
extern int    StartHour     = 0;   //час начала торговли
extern int    StartMin      = 30;  //минута начала торговли
extern int    EndHour       = 23;  //час окончания торговли
extern int    EndMin        = 30;  //минута окончания торговли
extern int    StopLimit     = 0;   //0-stop 1-limit
extern int    проскальзывание          = 0;   //проскальзывание ордеров
extern int    спред        = 20;  //спред
extern int    баров         = 8;   //баров для расчета
extern int    магик         = 123; //магик
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==магик)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelAllOrders()
  {
   bool del=true;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==магик || OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUYSTOP) del=OrderDelete(OrderTicket());
            if(OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());
            if(OrderType()==OP_BUYLIMIT) del=OrderDelete(OrderTicket());
            if(OrderType()==OP_SELLLIMIT) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)   sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)   sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),проскальзывание,0,tp,"",магик,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==магик)
           {
            if(OrderType()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int spread=MarketInfo(NULL,MODE_SPREAD);
   double Max=High[iHighest(NULL,0,MODE_HIGH,баров,1)];
   double Min= Low[iLowest(NULL,0,MODE_LOW,баров,1)];

   if(CountTrades()>0) DelAllOrders();
   if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin) && spread<=спред)
     {
      if(StopLimit==0)
        {
         if(CountOrders(4)<1) PutOrder(4,Max+Delta*Point);
         if(CountOrders(5)<1) PutOrder(5,Min-Delta*Point);
        }

      if(StopLimit==1)
        {
         if(CountOrders(3)<1) PutOrder(3,Max+Delta*Point);
         if(CountOrders(2)<1) PutOrder(2,Min-Delta*Point);
        }
     }
    return(0); 
  }
//+------------------------------------------------------------------+
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий