Помогите пожалуйста, надо сделать так, чтоб ордеры закрывались в конце дня,а те, которые не сроботали удалялись

 

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
extern double Lots       = 0.1;
extern int    BarCount   = 10;
extern int    HourStart  = 11;
extern int    HourStop   = 23;
extern int    StopLoss   = 0;
extern int    TakeProfit = 0;
extern int    Magic      = 1488;
extern int    Indent     = 10;
extern int    PipStop    = 10;
extern int    Slippage   = 3;
//+------------------------------------------------------------------+
double minprice =  999999, mp,
       maxprice = -999999,
       SL, TP;
int ticket;
int OnInit()
{
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

   
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OnTick()
{

if (Hour()==HourStop) DeletPendingOreders();

if (Hour()==HourStop) ClosePendingOreders();

   GetMinPrice();
   GetMaxPrice();        
   if(TimeHour(TimeCurrent())==HourStart)
   {
      if(BuyStopCount()==0 && BuyCount()==0)
      {
         SL=NormalizeDouble(maxprice-StopLoss*Point,_Digits);
         TP=NormalizeDouble(maxprice+TakeProfit*Point,_Digits);
         ticket=OrderSend(Symbol(), OP_BUYSTOP, Lots, maxprice, Slippage, 0, 0, "", Magic, 0, clrAliceBlue);
         
         if(ticket<0)
            Print("Error BUYSTOP"); 
      }
      if(SellStopCount()==0 && SellCount()==0)
      {   
         SL=NormalizeDouble(minprice+StopLoss*Point,_Digits);
         TP=NormalizeDouble(minprice-TakeProfit*Point,_Digits);
         ticket=OrderSend(Symbol(), OP_SELLSTOP, Lots, minprice, Slippage, 0, 0, "", Magic, 0, clrRed);
      
         if(ticket<0)
            Print("Error SELLSTOP");
      }
   }   
   Comment("MinPrice: " + DoubleToStr(minprice,_Digits) + "\n"+
           "MaxPrice: " + DoubleToStr(maxprice,_Digits));               
}  
//+------------------------------------------------------------------+
int BuyCount()
{
   int count=0;
   
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true &&
        OrderSymbol()==Symbol() && 
        OrderMagicNumber()==Magic &&
        OrderType()==OP_BUY)         
     {
         count++;
     }
   }
   return(count);
   
}
//+------------------------------------------------------------------+
int BuyStopCount()
{
   int count=0;
   
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true &&
        OrderSymbol()==Symbol() &&  
        OrderMagicNumber()==Magic &&
        OrderType()==OP_BUYSTOP)         
     {
         count++;
     }
   }
   return(count);
   
   
}
//+------------------------------------------------------------------+
int SellStopCount()
{
   int count=0;
   
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true &&
        OrderSymbol()==Symbol() && 
        OrderMagicNumber()==Magic &&
        OrderType()==OP_SELLSTOP)        
     {
         count++;
     }
   }
   return(count);
   
}
//+------------------------------------------------------------------+
int SellCount()
{
   int count=0;
   
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true &&
        OrderSymbol()==Symbol() && 
        OrderMagicNumber()==Magic &&
        OrderType()==OP_SELL)      
     {
         count++;
     }
   }
   return(count);
  
}
//+------------------------------------------------------------------+

void GetMinPrice()
{
        
   for(int i=0; i<BarCount; i++)
   {
      mp = iLow(Symbol(), PERIOD_CURRENT, i);
      if(mp < minprice)
         minprice = mp;
   }
   return;
}
//+------------------------------------------------------------------+
void GetMaxPrice()
{
   for(int i=0; i<BarCount; i++)
   {
      mp = iHigh(Symbol(), PERIOD_CURRENT, i);
      if(mp > maxprice)
         maxprice = mp;
   }
   return;
}

{

   bool ret;

   for (int i=OrdersTotal()-1;i>=0;i--)

   {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)

      {

         if (OrderType() != OP_BUY && OrderType() != OP_SELL && OrderType() != OP_BUYSTOP && OrderType() != OP_SELLSTOP) 

             ret=OrderDelete(OrderTicket()); 

      }

   }

   return;

}

void ClosePendingOreders()

{

   bool ret;

   for (int i=OrdersTotal()-1;i>=0;i--)

   {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)

      {

         if (OrderType() != OP_BUY && OrderType() != OP_BUYSTOP) 

             ret=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrBlue); 

      }

      else if(OrderType()!= OP_SELL && OrderType() != OP_SELLSTOP)

      {

         ret=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrRed);     

      }

   }

   return;

}



Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
Файлы:
 
AshlyAdams:

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
extern double Lots       = 0.1;
extern int    BarCount   = 10;
extern int    HourStart  = 11;
extern int    HourStop   = 23;
extern int    StopLoss   = 0;
extern int    TakeProfit = 0;
extern int    Magic      = 1488;
extern int    Indent     = 10;
extern int    PipStop    = 10;
extern int    Slippage   = 3;
//+------------------------------------------------------------------+
double minprice =  999999, mp,
       maxprice = -999999,
       SL, TP;
int ticket;
int OnInit()
{
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

   
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OnTick()
{

if (Hour()==HourStop) DeletPendingOreders();

if (Hour()==HourStop) ClosePendingOreders();

   GetMinPrice();
   GetMaxPrice();        
   if(TimeHour(TimeCurrent())==HourStart)
   {
      if(BuyStopCount()==0 && BuyCount()==0)
      {
         SL=NormalizeDouble(maxprice-StopLoss*Point,_Digits);
         TP=NormalizeDouble(maxprice+TakeProfit*Point,_Digits);
         ticket=OrderSend(Symbol(), OP_BUYSTOP, Lots, maxprice, Slippage, 0, 0, "", Magic, 0, clrAliceBlue);
         
         if(ticket<0)
            Print("Error BUYSTOP"); 
      }
      if(SellStopCount()==0 && SellCount()==0)
      {   
         SL=NormalizeDouble(minprice+StopLoss*Point,_Digits);
         TP=NormalizeDouble(minprice-TakeProfit*Point,_Digits);
         ticket=OrderSend(Symbol(), OP_SELLSTOP, Lots, minprice, Slippage, 0, 0, "", Magic, 0, clrRed);
      
         if(ticket<0)
            Print("Error SELLSTOP");
      }
   }   
   Comment("MinPrice: " + DoubleToStr(minprice,_Digits) + "\n"+
           "MaxPrice: " + DoubleToStr(maxprice,_Digits));               
}  
//+------------------------------------------------------------------+
int BuyCount()
{
   int count=0;
   
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true &&
        OrderSymbol()==Symbol() && 
        OrderMagicNumber()==Magic &&
        OrderType()==OP_BUY)         
     {
         count++;
     }
   }
   return(count);
   
}
//+------------------------------------------------------------------+
int BuyStopCount()
{
   int count=0;
   
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true &&
        OrderSymbol()==Symbol() &&  
        OrderMagicNumber()==Magic &&
        OrderType()==OP_BUYSTOP)         
     {
         count++;
     }
   }
   return(count);
   
   
}
//+------------------------------------------------------------------+
int SellStopCount()
{
   int count=0;
   
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true &&
        OrderSymbol()==Symbol() && 
        OrderMagicNumber()==Magic &&
        OrderType()==OP_SELLSTOP)        
     {
         count++;
     }
   }
   return(count);
   
}
//+------------------------------------------------------------------+
int SellCount()
{
   int count=0;
   
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true &&
        OrderSymbol()==Symbol() && 
        OrderMagicNumber()==Magic &&
        OrderType()==OP_SELL)      
     {
         count++;
     }
   }
   return(count);
  
}
//+------------------------------------------------------------------+

void GetMinPrice()
{
        
   for(int i=0; i<BarCount; i++)
   {
      mp = iLow(Symbol(), PERIOD_CURRENT, i);
      if(mp < minprice)
         minprice = mp;
   }
   return;
}
//+------------------------------------------------------------------+
void GetMaxPrice()
{
   for(int i=0; i<BarCount; i++)
   {
      mp = iHigh(Symbol(), PERIOD_CURRENT, i);
      if(mp > maxprice)
         maxprice = mp;
   }
   return;
}

{

   bool ret;

   for (int i=OrdersTotal()-1;i>=0;i--)

   {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)

      {

         if (OrderType() != OP_BUY && OrderType() != OP_SELL && OrderType() != OP_BUYSTOP && OrderType() != OP_SELLSTOP) 

             ret=OrderDelete(OrderTicket()); 

      }

   }

   return;

}

void ClosePendingOreders()

{

   bool ret;

   for (int i=OrdersTotal()-1;i>=0;i--)

   {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)

      {

         if (OrderType() != OP_BUY && OrderType() != OP_BUYSTOP) 

             ret=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrBlue); 

      }

      else if(OrderType()!= OP_SELL && OrderType() != OP_SELLSTOP)

      {

         ret=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrRed);     

      }

   }

   return;

}



Могу помочь только через фриланс...
 
Maksim Neimerik:
Могу помочь только через фриланс...

Продолжительность отдельных дней даже фриланс не решит