Скачать MetaTrader 5

Как открыть новую позицию на томе же баре, на котором старая позиция закрыта?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114318
Forex Trader  
Мой советник закрывает откытую позицию на основании торгового сигнала в противоположном направлении. Хотелось бы тут же открыть новую позицию на основании того же сигнал. Мой код организован таким образом

//Trading Begin-------------------------------------------------+
   
   double   Lots     =NormalizeDouble(AccountFreeMargin()*Risk*AccountLeverage()/100000,1);
   double   Spread   =Ask-Bid;
   int      Slippage =Spread/Point;
   int      cnt, ticket, total; 
 
   total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
   {              
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);              
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())  
      {
//Closing LONG position-----------------------------------------+
         if(OrderType()==OP_BUY)   
         {
            if(sell==1)
            {
               OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet); 
               return(0); // exit
            }
         }
//Closing SHORT position----------------------------------------+         
         else
         {
            if(buy==1)
            {
               OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet); 
               return(0); // exit
            }              
         }
      }
   }
   
   total=OrdersTotal();
   if(total<1) // no opened orders identified 
   {
//Sending OPEN LONG order---------------------------------------+ 
      if(buy==1)
      {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",16384,0,Green);
         if(ticket>0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("BUY order opened : ",OrderOpenPrice()); //MODE_TRADES
         }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
      }
//Sending OPEN SHORT order---------------------------------------+ 
      if(sell==1)       
      {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",16384,0,Red);
         if(ticket>0)
         {                                    
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("SELL order opened : ",OrderOpenPrice()); //,MODE_TRADES
         }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
      }
      return(0);
   }



Заметьте что сначала код закрывает текущую позицию, потом проверяет открытые позиции и, если OrdersTotal()<1, то тут же открывается новая позиция. Только почему-то новая позиция не открывается на том же баре. Она либо совсем не открывается либо открывается с задержкой при получении нового торгового сигнала. Кто-нибудь может объяснить почему мой код не может открыть новую позицию на том же баре, на котором старая позиция закрыта?

Forex Trader
114318
Forex Trader  
Кто-нибудь может объяснить почему мой код не может открыть новую позицию на том же баре, на котором старая позиция закрыта?

Потому что после ОрдерКлоус всегда стоит ретурн ;)
               OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet); 
               return(0); // exit
Forex Trader
114318
Forex Trader  
Ага! Каким-то я невнимательным стал после того как мне 40 стукнуло (и прямо по голове). Пора о ревматизьме волноваться и на погоду ругаться, а не о форексе думать :0)
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий