Здраствуйте,написал советник, который должен закрывать отложеные ордера в конце дня,как ето реализовать - страница 2

 
AshlyAdams:

те ордеры,которые сработали закрываются в 23,а те которые не сработали остаются

С таким количеством пустых строк, я даже не подумаю разбираться. Вот был правильный совет

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Здраствуйте,написал советник, который должен закрывать отложеные ордера в конце дня,как ето реализовать

Dmitiry Ananiev, 2017.06.08 09:12

void OnTick() 
{
if (Hour()==23 && Minute==58) DeletPendingOreders();
}

void DeletPendingOreders()
{

for (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) 
OrderDelete(OrderTicket()); 
}

}

Вот как то так

 
Alexey Viktorov:

С таким количеством пустых строк, я даже не подумаю разбираться. Вот был правильный совет



им и воспользовался,

#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;
}

void DeletPendingOreders()

{

   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;

}


Файлы:
 
AshlyAdams:


им и воспользовался,

А можешь показать где в том коде такая строка

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

Толи с глазами у меня что-то... я вижу только половину строки

if (OrderType() != OP_BUY || OrderType() != OP_SELL)