Проблемы с одновременным закрытием открытых позиций и отложенных ордеров - страница 2

 
Вот посмотрите, упростил всё до минимума. По счетчику баров открываю 5 ордеров Buy, а далее предпринимается попытка их закрыть:
//+------------------------------------------------------------------+
//|                                               ClosePositions.mq4 |
//|                                        http://www.metaquotes.net |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "http://www.metaquotes.net"
#property link      "http://www.metaquotes.net"


extern double Lots     = 0.1;
extern int TakeProfit  =  500;
extern int StopLoss    =  500;

static int magicNumber = 23456;


bool AllowTrade,ClosePositions,flag;
datetime LastTrade,PrevTime;
int CountBars;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
   AllowTrade=true;
   ClosePositions=false;
   flag=true;
   LastTrade=CurTime();
   PrevTime=Time[0];
   CountBars=0;
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
if ((Year()<2005) || (Month()<6)) return (0);

bool OpenSell=false,OpenBuy=false,NewBar=false;
double TP =0,SL=0,price=0;



//+------------------------------------------------------------------------------------------------+
//| Модуль счетчика баров                                           
//+------------------------------------------------------------------------------------------------+
//Отфильтрововаем бары от ценовых тиков
if (Time[0]>PrevTime)
{   
   CountBars=CountBars+1;
   NewBar=True;
   PrevTime=Time[0];
}
//+------------------------------------------------------------------------------------------------+
//| Конец модуля счетчика баров                                           
//+------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------------+
//| Если счетчик сосчитал до 10, прекращаем открытие поций и даём команду на закрытие всех поций                                          
//+------------------------------------------------------------------------------------------------+
if (CountBars>10)
{
AllowTrade=false;
ClosePositions=true;
}
//+------------------------------------------------------------------------------------------------+
//|                                         
//+------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------------+
//| Закрытие всех позиций                                           
//+------------------------------------------------------------------------------------------------+
if (ClosePositions)
{
int total,cnt;
bool result;
total=OrdersTotal();   
cnt=0;
   
   for (cnt=total-1;cnt>=0;cnt--)
   {  
      if ((CurTime()-LastTrade)<10) Sleep(10000);
      result=false;
      Print(" TotalCnt: ",cnt);
      
      if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES))
      {
         Alert(" Удалось выбрать ордер: ",OrderType()," № ",OrderTicket());
         if ((OrderSymbol()==Symbol()) && (OrderType()==OP_BUY) && (OrderMagicNumber()== magicNumber))
         {
            Print(" cnt: ",cnt);
            Print(" OrderTicket: ",OrderTicket());
            RefreshRates();
            result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5,Yellow);  

            if (result) 
            { 
               LastTrade=CurTime();break; 
            }
            else
            {
               Alert("Ордер ",OrderType()," № ",OrderTicket()," не удалось закрыть. Ошибка: " , GetLastError() );

            }   
         }
      }
      else
      {
         cnt=total;
         Alert(" Не удалось выбрать ордер: ",OrderType()," № ",cnt," Ошибка: ",GetLastError());
      }   
   }
}
//+------------------------------------------------------------------------------------------------+
//| Конец закрытия всех позиций                                           
//+------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------------+
//| Открытие позиции в начале каждого нового бара                                           
//+------------------------------------------------------------------------------------------------+
if (NewBar)
{
   if (flag)
   {
      OpenBuy=true;flag=false;
   }
   else
   {
      OpenSell=true;flag=true;
   }   
}    
//+------------------------------------------------------------------------------------------------+
//| Конец открытия позиции в начале каждого нового бара                                          
//+------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------------+
//| Открытие позиций                                           
//+------------------------------------------------------------------------------------------------+
if (OpenSell && AllowTrade)
{
   if ((CurTime()-LastTrade)<10) return (0);
   RefreshRates();
// Откроем отложенный ордер.
/*
   price = NormalizeDouble(Ask+500*Point,Digits);
   SL    = price - StopLoss   * Point;
   TP    = price + TakeProfit * Point;      
   ticket=OrderSend(Symbol(), OP_BUYSTOP, Lots, price, 3, SL, TP, "OP_BUYSTOP", magicNumber, 0, Pink);
   LastTrade=CurTime();

   Sleep(10000);
   RefreshRates();
*/
   // Откроем основной ордер.
   SL = NormalizeDouble(Bid,Digits) + StopLoss   * Point;
   TP = NormalizeDouble(Bid,Digits) - TakeProfit * Point;
//   OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,SL,TP,"OP_SELL",magicNumber,0,Blue);   
   LastTrade=CurTime();
   OpenSell=false;
}

if (OpenBuy && AllowTrade)
{
   if ((CurTime()-LastTrade)<10) return (0);
   RefreshRates();
/*
   price = NormalizeDouble(Bid-500*Point,Digits);
   SL    = price + StopLoss   * Point;
   TP    = price - TakeProfit * Point;
   OrderSend(Symbol(), OP_SELLSTOP, Lots, price, 3, SL, TP, "OP_SELLSTOP", magicNumber, 0, SkyBlue);      
   LastTrade=CurTime();

   Sleep(10000);
   RefreshRates();
*/
   SL = NormalizeDouble(Ask,Digits) - StopLoss   * Point;
   TP = NormalizeDouble(Ask,Digits) + TakeProfit * Point;
   OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),3,SL,TP,"OP_BUY",magicNumber,0,Yellow);
   LastTrade=CurTime();
   OpenBuy=false;
}
//+------------------------------------------------------------------------------------------------+
//| Конец открытия позиций                                           
//+------------------------------------------------------------------------------------------------+

   return(0);
}
//+------------------------------------------------------------------+



Вот выдержка из протокола:


10:10:08 ClosePositions: loaded successfully
10:10:08 ClosePositions inputs: Lots=0.1; TakeProfit=500; StopLoss=500;
10:10:15 2005.06.01 00:00 ClosePositions: open #1 buy 0.10 EURUSD at 1.2311 sl: 1.1811 tp: 1.2811 ok
10:10:15 2005.06.01 02:00 ClosePositions: open #2 buy 0.10 EURUSD at 1.2305 sl: 1.1805 tp: 1.2805 ok
10:10:15 2005.06.01 04:00 ClosePositions: open #3 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 ok
10:10:15 2005.06.01 06:00 ClosePositions: open #4 buy 0.10 EURUSD at 1.2318 sl: 1.1818 tp: 1.2818 ok
10:10:15 2005.06.01 08:00 ClosePositions: open #5 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 ok
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 5
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Не удалось выбрать ордер: 0 № 5 Ошибка: 4105
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 4
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 5
10:10:15 2005.06.01 10:00 ClosePositions: cnt: 4
10:10:15 2005.06.01 10:00 ClosePositions: OrderTicket: 5
10:10:15 2005.06.01 10:00 ClosePositions: close #5 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 at price 1.2306
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 4
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Не удалось выбрать ордер: 0 № 4 Ошибка: 4105
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 3
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 3
10:10:15 2005.06.01 10:00 ClosePositions: cnt: 3
10:10:15 2005.06.01 10:00 ClosePositions: OrderTicket: 3
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Ордер 0 № 3 не удалось закрыть. Ошибка: 2
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 2
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 4
10:10:15 2005.06.01 10:00 ClosePositions: cnt: 2
10:10:15 2005.06.01 10:00 ClosePositions: OrderTicket: 4
10:10:15 2005.06.01 10:00 ClosePositions: close #4 buy 0.10 EURUSD at 1.2318 sl: 1.1818 tp: 1.2818 at price 1.2306
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 3
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Не удалось выбрать ордер: 0 № 3 Ошибка: 4105
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 2
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 2
10:10:15 2005.06.01 10:00 ClosePositions: cnt: 2
10:10:15 2005.06.01 10:00 ClosePositions: OrderTicket: 2
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Ордер 0 № 2 не удалось закрыть. Ошибка: 2
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 1
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 3
10:10:15 2005.06.01 10:00 ClosePositions: cnt: 1
10:10:15 2005.06.01 10:00 ClosePositions: OrderTicket: 3
10:10:15 2005.06.01 10:00 ClosePositions: close #3 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 at price 1.2307
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 2
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Не удалось выбрать ордер: 0 № 2 Ошибка: 4105
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 1
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 1
10:10:15 2005.06.01 10:00 ClosePositions: cnt: 1
10:10:15 2005.06.01 10:00 ClosePositions: OrderTicket: 1
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Ордер 0 № 1 не удалось закрыть. Ошибка: 2
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 2
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Не удалось выбрать ордер: 0 № 2 Ошибка: 4105
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 1
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 2
10:10:15 2005.06.01 10:00 ClosePositions: cnt: 1
10:10:15 2005.06.01 10:00 ClosePositions: OrderTicket: 2
10:10:15 2005.06.01 10:00 ClosePositions: close #2 buy 0.10 EURUSD at 1.2305 sl: 1.1805 tp: 1.2805 at price 1.2304
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 1
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Не удалось выбрать ордер: 0 № 1 Ошибка: 4105
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 1
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Не удалось выбрать ордер: 0 № 1 Ошибка: 4105
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 1
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Не удалось выбрать ордер: 0 № 1 Ошибка: 4105
10:10:15 2005.06.01 10:00 ClosePositions: TotalCnt: 1
10:10:15 2005.06.01 10:00 ClosePositions: Alert: Не удалось выбрать ордер: 0 № 1 Ошибка: 4105


Что не так я делаю? Все как по христоматии. Неужели ни у кого такого не было? Попробуйте у себя в конце концов. Очевидно, что глючит функция OrderSelect(), причем начинается это, когда ордеров остается меньше 10. Млин, в MQLII всё было просто, CloseOrder() и всё. А тут, запарила уже все мозги эта ваша MQL4. Облазил я весь ваш форум, но ничего подобного не нашёл. Похоже никто с такой проблемой не сталкивался.

 
Слушай, Registr. Ты сначала ошибки из кода убери, а потом проси остальных. Совесть надо иметь.
 
Мда, наукоёмкий ответ. Я понимаю, конечно, что краткость сестра таланта, но не настолько же... Вполне допускаю, что в коде у меня ошибки, может по-этому и не работает, но если бы их не было, зачем бы я тогда стал здесь постить... Да, интерестный тут форум, одни намёки... Наверное в этом месте собрались телепаты... Хорошо, Rosh, убрал я ошибку, функция OrderSelect() теперь работает, но ошибка №2 всё-равно вылезает...

13:00:32 ClosePositions: loaded successfully
13:00:32 ClosePositions inputs: Lots=0.1; TakeProfit=500; StopLoss=500;
13:00:40 2005.06.01 00:00 ClosePositions: open #1 buy 0.10 EURUSD at 1.2311 sl: 1.1811 tp: 1.2811 ok
13:00:40 2005.06.01 02:00 ClosePositions: open #2 buy 0.10 EURUSD at 1.2305 sl: 1.1805 tp: 1.2805 ok
13:00:40 2005.06.01 04:00 ClosePositions: open #3 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 ok
13:00:40 2005.06.01 06:00 ClosePositions: open #4 buy 0.10 EURUSD at 1.2318 sl: 1.1818 tp: 1.2818 ok
13:00:40 2005.06.01 08:00 ClosePositions: open #5 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 ok
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 4
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 5
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 4
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 5
13:00:40 2005.06.01 10:00 ClosePositions: close #5 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 at price 1.2306
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 3
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 3
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 3
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 3
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Ордер 0 № 3 не удалось закрыть. Ошибка: 2
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 2
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 4
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 2
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 4
13:00:40 2005.06.01 10:00 ClosePositions: close #4 buy 0.10 EURUSD at 1.2318 sl: 1.1818 tp: 1.2818 at price 1.2306
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 2
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 2
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 2
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 2
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Ордер 0 № 2 не удалось закрыть. Ошибка: 2
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 1
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 3
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 1
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 3
13:00:40 2005.06.01 10:00 ClosePositions: close #3 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 at price 1.2307
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 1
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 1
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 1
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 1
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Ордер 0 № 1 не удалось закрыть. Ошибка: 2
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 0
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 2
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 0
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 2
13:00:40 2005.06.01 10:00 ClosePositions: close #2 buy 0.10 EURUSD at 1.2305 sl: 1.1805 tp: 1.2805 at price 1.2306
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 0
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 1
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 0
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 1
13:00:40 2005.06.01 10:00 ClosePositions: close #1 buy 0.10 EURUSD at 1.2311 sl: 1.1811 tp: 1.2811 at price 1.2304
13:00:48 ClosePositions: removed


Что-то странно она как-то выберает - почему за OrderTicket: 5 идёт OrderTicket: 3 ? Мда, проблему удалось решить путём добавления: if (OrderTicket()!=cnt+1) break; Вообшем-то тему можно считать закрытой, однако имхо, функция OrderSelect работает не правильно:
//+------------------------------------------------------------------+
//|                                               ClosePositions.mq4 |
//|                                        http://www.metaquotes.net |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "http://www.metaquotes.net"
#property link      "http://www.metaquotes.net"


extern double Lots     = 0.1;
extern int TakeProfit  =  500;
extern int StopLoss    =  500;

static int magicNumber = 23456;


bool AllowTrade,ClosePositions,flag;
datetime LastTrade,PrevTime;
int CountBars;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
   AllowTrade=true;
   ClosePositions=false;
   flag=true;
   LastTrade=CurTime();
   PrevTime=Time[0];
   CountBars=0;
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
if ((Year()<2005) || (Month()<6)) return (0);

bool OpenSell=false,OpenBuy=false,NewBar=false;
double TP =0,SL=0,price=0;



//+------------------------------------------------------------------------------------------------+
//| Модуль счетчика баров                                           
//+------------------------------------------------------------------------------------------------+
//Отфильтрововаем бары от ценовых тиков
if (Time[0]>PrevTime)
{   
   CountBars=CountBars+1;
   NewBar=True;
   PrevTime=Time[0];
}
//+------------------------------------------------------------------------------------------------+
//| Конец модуля счетчика баров                                           
//+------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------------+
//| Если счетчик сосчитал до 10, прекращаем открытие поций и даём команду на закрытие всех поций                                          
//+------------------------------------------------------------------------------------------------+
if (CountBars>10)
{
AllowTrade=false;
ClosePositions=true;
}
//+------------------------------------------------------------------------------------------------+
//|                                         
//+------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------------+
//| Закрытие всех позиций                                           
//+------------------------------------------------------------------------------------------------+
if (ClosePositions)
{
int total,cnt;
bool result;
   
   total=OrdersTotal();cnt=0;
   for (cnt=total-1;cnt>=0;cnt--)
   {  
      if ((CurTime()-LastTrade)<10) Sleep(10000);
      result=false;
      Print(" TotalCnt: ",cnt);
      
      if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderTicket()!=cnt+1) break;
         Alert(" Удалось выбрать ордер: ",OrderType()," № ",OrderTicket());
         if ((OrderSymbol()==Symbol()) && (OrderType()==OP_BUY) && (OrderMagicNumber()== magicNumber))
         {
            Print(" cnt: ",cnt);
            Print(" OrderTicket: ",OrderTicket());
            RefreshRates();
            result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5,Yellow);  

            if (result) 
            { 
               LastTrade=CurTime();break; 
            }
            else
            {
               Alert("Ордер ",OrderType()," № ",OrderTicket()," не удалось закрыть. Ошибка: " , GetLastError() );

            }   
         }
      }
      else
      {
         cnt=total;
         Alert(" Не удалось выбрать ордер: ",OrderType()," № ",cnt," Ошибка: ",GetLastError());
      }   
   }
}
//+------------------------------------------------------------------------------------------------+
//| Конец закрытия всех позиций                                           
//+------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------------+
//| Открытие позиции в начале каждого нового бара                                           
//+------------------------------------------------------------------------------------------------+
if (NewBar)
{
   if (flag)
   {
      OpenBuy=true;flag=false;
   }
   else
   {
      OpenSell=true;flag=true;
   }   
}    
//+------------------------------------------------------------------------------------------------+
//| Конец открытия позиции в начале каждого нового бара                                          
//+------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------------+
//| Открытие позиций                                           
//+------------------------------------------------------------------------------------------------+
if (OpenSell && AllowTrade)
{
   if ((CurTime()-LastTrade)<10) return (0);
   RefreshRates();
// Откроем отложенный ордер.
/*
   price = NormalizeDouble(Ask+500*Point,Digits);
   SL    = price - StopLoss   * Point;
   TP    = price + TakeProfit * Point;      
   ticket=OrderSend(Symbol(), OP_BUYSTOP, Lots, price, 3, SL, TP, "OP_BUYSTOP", magicNumber, 0, Pink);
   LastTrade=CurTime();

   Sleep(10000);
   RefreshRates();
*/
   // Откроем основной ордер.
   SL = NormalizeDouble(Bid,Digits) + StopLoss   * Point;
   TP = NormalizeDouble(Bid,Digits) - TakeProfit * Point;
//   OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,SL,TP,"OP_SELL",magicNumber,0,Blue);   
   LastTrade=CurTime();
   OpenSell=false;
}

if (OpenBuy && AllowTrade)
{
   if ((CurTime()-LastTrade)<10) return (0);
   RefreshRates();
/*
   price = NormalizeDouble(Bid-500*Point,Digits);
   SL    = price + StopLoss   * Point;
   TP    = price - TakeProfit * Point;
   OrderSend(Symbol(), OP_SELLSTOP, Lots, price, 3, SL, TP, "OP_SELLSTOP", magicNumber, 0, SkyBlue);      
   LastTrade=CurTime();

   Sleep(10000);
   RefreshRates();
*/
   SL = NormalizeDouble(Ask,Digits) - StopLoss   * Point;
   TP = NormalizeDouble(Ask,Digits) + TakeProfit * Point;
   OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),3,SL,TP,"OP_BUY",magicNumber,0,Yellow);
   LastTrade=CurTime();
   OpenBuy=false;
}
//+------------------------------------------------------------------------------------------------+
//| Конец открытия позиций                                           
//+------------------------------------------------------------------------------------------------+

   return(0);
}
//+------------------------------------------------------------------+



13:22:36 ClosePositions: loaded successfully
13:22:36 ClosePositions inputs: Lots=0.1; TakeProfit=500; StopLoss=500;
13:22:43 2005.06.01 00:00 ClosePositions: open #1 buy 0.10 EURUSD at 1.2311 sl: 1.1811 tp: 1.2811 ok
13:22:43 2005.06.01 02:00 ClosePositions: open #2 buy 0.10 EURUSD at 1.2305 sl: 1.1805 tp: 1.2805 ok
13:22:43 2005.06.01 04:00 ClosePositions: open #3 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 ok
13:22:43 2005.06.01 06:00 ClosePositions: open #4 buy 0.10 EURUSD at 1.2318 sl: 1.1818 tp: 1.2818 ok
13:22:43 2005.06.01 08:00 ClosePositions: open #5 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 ok
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 4
13:22:43 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 5
13:22:43 2005.06.01 10:00 ClosePositions: cnt: 4
13:22:43 2005.06.01 10:00 ClosePositions: OrderTicket: 5
13:22:43 2005.06.01 10:00 ClosePositions: close #5 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 at price 1.2306
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 3
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 3
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 3
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 3
13:22:43 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 4
13:22:43 2005.06.01 10:00 ClosePositions: cnt: 3
13:22:43 2005.06.01 10:00 ClosePositions: OrderTicket: 4
13:22:43 2005.06.01 10:00 ClosePositions: close #4 buy 0.10 EURUSD at 1.2318 sl: 1.1818 tp: 1.2818 at price 1.2304
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 2
13:22:43 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 3
13:22:43 2005.06.01 10:00 ClosePositions: cnt: 2
13:22:43 2005.06.01 10:00 ClosePositions: OrderTicket: 3
13:22:43 2005.06.01 10:00 ClosePositions: close #3 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 at price 1.2303
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 1
13:22:43 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 2
13:22:43 2005.06.01 10:00 ClosePositions: cnt: 1
13:22:43 2005.06.01 10:00 ClosePositions: OrderTicket: 2
13:22:43 2005.06.01 10:00 ClosePositions: close #2 buy 0.10 EURUSD at 1.2305 sl: 1.1805 tp: 1.2805 at price 1.2301
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 0
13:22:43 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 1
13:22:43 2005.06.01 10:00 ClosePositions: cnt: 0
13:22:43 2005.06.01 10:00 ClosePositions: OrderTicket: 1
13:22:43 2005.06.01 10:00 ClosePositions: close #1 buy 0.10 EURUSD at 1.2311 sl: 1.1811 tp: 1.2811 at price 1.2302
13:24:57 ClosePositions: removed


Если будут ещё замечания или предложения по этой теме, буду рад услышать... Да, и вся байда появляется когда OrderTicket<10.

 
Мда, наукоёмкий ответ. Я понимаю, конечно, что краткость сестра таланта, но не настолько же... Вполне допускаю, что в коде у меня ошибки, может по-этому и не работает, но если бы их не было, зачем бы я тогда стал здесь постить... Да, интерестный тут форум, одни намёки... Наверное в этом месте собрались телепаты... Хорошо, Rosh, убрал я ошибку, функция OrderSelect() теперь работает, но ошибка №2 всё-равно вылезает...

13:00:32 ClosePositions: loaded successfully
13:00:32 ClosePositions inputs: Lots=0.1; TakeProfit=500; StopLoss=500;
13:00:40 2005.06.01 00:00 ClosePositions: open #1 buy 0.10 EURUSD at 1.2311 sl: 1.1811 tp: 1.2811 ok
13:00:40 2005.06.01 02:00 ClosePositions: open #2 buy 0.10 EURUSD at 1.2305 sl: 1.1805 tp: 1.2805 ok
13:00:40 2005.06.01 04:00 ClosePositions: open #3 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 ok
13:00:40 2005.06.01 06:00 ClosePositions: open #4 buy 0.10 EURUSD at 1.2318 sl: 1.1818 tp: 1.2818 ok
13:00:40 2005.06.01 08:00 ClosePositions: open #5 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 ok
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 4
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 5
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 4
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 5
13:00:40 2005.06.01 10:00 ClosePositions: close #5 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 at price 1.2306
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 3
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 3
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 3
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 3
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Ордер 0 № 3 не удалось закрыть. Ошибка: 2
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 2
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 4
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 2
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 4
13:00:40 2005.06.01 10:00 ClosePositions: close #4 buy 0.10 EURUSD at 1.2318 sl: 1.1818 tp: 1.2818 at price 1.2306
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 2
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 2
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 2
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 2
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Ордер 0 № 2 не удалось закрыть. Ошибка: 2
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 1
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 3
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 1
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 3
13:00:40 2005.06.01 10:00 ClosePositions: close #3 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 at price 1.2307
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 1
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 1
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 1
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 1
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Ордер 0 № 1 не удалось закрыть. Ошибка: 2
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 0
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 2
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 0
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 2
13:00:40 2005.06.01 10:00 ClosePositions: close #2 buy 0.10 EURUSD at 1.2305 sl: 1.1805 tp: 1.2805 at price 1.2306
13:00:40 2005.06.01 10:00 ClosePositions: TotalCnt: 0
13:00:40 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 1
13:00:40 2005.06.01 10:00 ClosePositions: cnt: 0
13:00:40 2005.06.01 10:00 ClosePositions: OrderTicket: 1
13:00:40 2005.06.01 10:00 ClosePositions: close #1 buy 0.10 EURUSD at 1.2311 sl: 1.1811 tp: 1.2811 at price 1.2304
13:00:48 ClosePositions: removed


Что-то странно она как-то выберает - почему за OrderTicket: 5 идёт OrderTicket: 3 ? Мда, проблему удалось решить путём добавления: if (OrderTicket()!=cnt+1) break; Вообшем-то тему можно считать закрытой, однако имхо, функция OrderSelect работает не правильно:

13:22:36 ClosePositions: loaded successfully
13:22:36 ClosePositions inputs: Lots=0.1; TakeProfit=500; StopLoss=500;
13:22:43 2005.06.01 00:00 ClosePositions: open #1 buy 0.10 EURUSD at 1.2311 sl: 1.1811 tp: 1.2811 ok
13:22:43 2005.06.01 02:00 ClosePositions: open #2 buy 0.10 EURUSD at 1.2305 sl: 1.1805 tp: 1.2805 ok
13:22:43 2005.06.01 04:00 ClosePositions: open #3 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 ok
13:22:43 2005.06.01 06:00 ClosePositions: open #4 buy 0.10 EURUSD at 1.2318 sl: 1.1818 tp: 1.2818 ok
13:22:43 2005.06.01 08:00 ClosePositions: open #5 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 ok
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 4
13:22:43 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 5
13:22:43 2005.06.01 10:00 ClosePositions: cnt: 4
13:22:43 2005.06.01 10:00 ClosePositions: OrderTicket: 5
13:22:43 2005.06.01 10:00 ClosePositions: close #5 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 at price 1.2306
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 3
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 3
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 3
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 3
13:22:43 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 4
13:22:43 2005.06.01 10:00 ClosePositions: cnt: 3
13:22:43 2005.06.01 10:00 ClosePositions: OrderTicket: 4
13:22:43 2005.06.01 10:00 ClosePositions: close #4 buy 0.10 EURUSD at 1.2318 sl: 1.1818 tp: 1.2818 at price 1.2304
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 2
13:22:43 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 3
13:22:43 2005.06.01 10:00 ClosePositions: cnt: 2
13:22:43 2005.06.01 10:00 ClosePositions: OrderTicket: 3
13:22:43 2005.06.01 10:00 ClosePositions: close #3 buy 0.10 EURUSD at 1.2330 sl: 1.1830 tp: 1.2830 at price 1.2303
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 1
13:22:43 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 2
13:22:43 2005.06.01 10:00 ClosePositions: cnt: 1
13:22:43 2005.06.01 10:00 ClosePositions: OrderTicket: 2
13:22:43 2005.06.01 10:00 ClosePositions: close #2 buy 0.10 EURUSD at 1.2305 sl: 1.1805 tp: 1.2805 at price 1.2301
13:22:43 2005.06.01 10:00 ClosePositions: TotalCnt: 0
13:22:43 2005.06.01 10:00 ClosePositions: Alert: Удалось выбрать ордер: 0 № 1
13:22:43 2005.06.01 10:00 ClosePositions: cnt: 0
13:22:43 2005.06.01 10:00 ClosePositions: OrderTicket: 1
13:22:43 2005.06.01 10:00 ClosePositions: close #1 buy 0.10 EURUSD at 1.2311 sl: 1.1811 tp: 1.2811 at price 1.2302
13:24:57 ClosePositions: removed


Если будут ещё замечания или предложения по этой теме, буду рад услышать... Да, и вся байда появляется когда OrderTicket<10.


Mda.. eto ze staryj fokus metaquotes: posle vypolnenija ordera ekspert dolzen zavershyt' rabotu. :-)

Krome tavo, posle poslednevo ordera dalzno proiti vremia bez orderov kak minimum minuta,- lu4e delat' 5 minut+.

Pri4iom zakryt/otkryt odnovremenno vsie ordera logi4no, no opiat' ze.. ni tak ustrojenna logika samoj kampaniji nas4iot neskol'ko orderov odnovremeno.

Vse iz za etavo delajut 1 order + exit + pauza 5 minut dlia drugovo ordera.
 
Vse iz za etavo delajut 1 order + exit + pauza 5 minut dlia drugovo ordera.

Так делают далеко не все. И зависимости, о кот. ты говоришь, не существует.
Не надо вводить юзеров в заблуждение.
 
if (OrderTicket()!=cnt+1) break;



и ты думаешь что эта конструкция будет работать в реале?
в тестере номера тикетов начинаются с 1, но реально это не так. да и в тестере твой код только для первых ордеров работает.
а для решения проблем с операциями по ордерам нужно использовать IsTradeAllowed()

 
Я скачал предпоследний код и установил у себя в тестер. Прогнал на Евре на 4-часовках по Опен прайс и ошибки №2 не получил. Что я делаю не так (самйлик ставить не буду)?
 
Наверное, у тебя таймфрейм слишком большой. Я гонял на часовиках... Может тестер у меня кривой, но if (OrderTicket()!=cnt+1) break; для тестера помогает, факт. NemoX говорил, что у него и на демо оставались незакрытые ордера... Вообщем глюк тут какой-то есть.
 
Вот это я бы написал немного по другому:
if ((Year()<2005) || (Month()<6)) return (0);



Это я по-прежнему не понимаю:

            if (result) 
            { 
               LastTrade=CurTime();//break; 
            }
            else
            {
               Alert("Ордер ",OrderType()," № ",OrderTicket()," не удалось закрыть. Ошибка: " , GetLastError() );

            }   



breake используют для изменения логики, у тебя он ни на что не влияет.

И тестер как-то странно работает, для каждого нового прогона на новом тайм-фреме требуется перезагрузка МТ4. Не получилось прогнать на часовке, на получасовке, на дневке, а потом и на 4-хчасовке тоже не смог. Попробовал тоже самое на моем первом попавшемся советнике - мой работает на любом таймфрейме и перезагрузки не требует.
Так что, разработчики могут у себя проверить.
На всякий случай выкладываю код (на случай, если ты свой изменишь)

//+------------------------------------------------------------------+
//|                                               ClosePositions.mq4 |
//|                                                          Registr |
//|                             http://www.metaquotes.ru/forum/6405/ |
//+------------------------------------------------------------------+
#property copyright "Registr"
#property link      "http://www.metaquotes.ru/forum/6405/"


extern double Lots     = 0.1;
extern int TakeProfit  =  500;
extern int StopLoss    =  500;

static int magicNumber = 23456;


bool AllowTrade,ClosePositions,flag;
datetime LastTrade,PrevTime;
int CountBars;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
   AllowTrade=true;
   ClosePositions=false;
   flag=true;
   LastTrade=CurTime();
   PrevTime=Time[0];
   CountBars=0;
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
if ((Year()<2005) || (Month()<6)) return (0);

bool OpenSell=false,OpenBuy=false,NewBar=false;
double TP =0,SL=0,price=0;



//+------------------------------------------------------------------------------------------------+
//| Модуль счетчика баров                                           
//+------------------------------------------------------------------------------------------------+
//Отфильтрововаем бары от ценовых тиков
if (Time[0]>PrevTime)
{   
   CountBars=CountBars+1;
   NewBar=True;
   PrevTime=Time[0];
}
//+------------------------------------------------------------------------------------------------+
//| Конец модуля счетчика баров                                           
//+------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------------+
//| Если счетчик сосчитал до 10, прекращаем открытие поций и даём команду на закрытие всех поций                                          
//+------------------------------------------------------------------------------------------------+
if (CountBars>10)
{
AllowTrade=false;
ClosePositions=true;
}
//+------------------------------------------------------------------------------------------------+
//|                                         
//+------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------------+
//| Закрытие всех позиций                                           
//+------------------------------------------------------------------------------------------------+
if (ClosePositions)
{
int total,cnt;
bool result;
total=OrdersTotal();   
cnt=0;
   
   for (cnt=total-1;cnt>=0;cnt--)
   {  
      if ((CurTime()-LastTrade)<10) Sleep(10000);
      result=false;
      Print(" TotalCnt: ",cnt);
      
      if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES))
      {
         Alert(" Удалось выбрать ордер: ",OrderType()," № ",OrderTicket());
         if ((OrderSymbol()==Symbol()) && (OrderType()==OP_BUY) && (OrderMagicNumber()== magicNumber))
         {
            Print(" cnt: ",cnt);
            Print(" OrderTicket: ",OrderTicket());
            RefreshRates();
            result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5,Yellow);  

            if (result) 
            { 
               LastTrade=CurTime();//break; 
            }
            else
            {
               Alert("Ордер ",OrderType()," № ",OrderTicket()," не удалось закрыть. Ошибка: " , GetLastError() );

            }   
         }
      }
      else
      {
         cnt=total;
         Alert(" Не удалось выбрать ордер: ",OrderType()," № ",cnt," Ошибка: ",GetLastError());
      }   
   }
}
//+------------------------------------------------------------------------------------------------+
//| Конец закрытия всех позиций                                           
//+------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------------+
//| Открытие позиции в начале каждого нового бара                                           
//+------------------------------------------------------------------------------------------------+
if (NewBar)
{
   if (flag)
   {
      OpenBuy=true;flag=false;
   }
   else
   {
      OpenSell=true;flag=true;
   }   
}    
//+------------------------------------------------------------------------------------------------+
//| Конец открытия позиции в начале каждого нового бара                                          
//+------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------------+
//| Открытие позиций                                           
//+------------------------------------------------------------------------------------------------+
if (OpenSell && AllowTrade)
{
   if ((CurTime()-LastTrade)<10) return (0);
   RefreshRates();
// Откроем отложенный ордер.
/*
   price = NormalizeDouble(Ask+500*Point,Digits);
   SL    = price - StopLoss   * Point;
   TP    = price + TakeProfit * Point;      
   ticket=OrderSend(Symbol(), OP_BUYSTOP, Lots, price, 3, SL, TP, "OP_BUYSTOP", magicNumber, 0, Pink);
   LastTrade=CurTime();

   Sleep(10000);
   RefreshRates();
*/
   // Откроем основной ордер.
   SL = NormalizeDouble(Bid,Digits) + StopLoss   * Point;
   TP = NormalizeDouble(Bid,Digits) - TakeProfit * Point;
//   OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,SL,TP,"OP_SELL",magicNumber,0,Blue);   
   LastTrade=CurTime();
   OpenSell=false;
}

if (OpenBuy && AllowTrade)
{
   if ((CurTime()-LastTrade)<10) return (0);
   RefreshRates();
/*
   price = NormalizeDouble(Bid-500*Point,Digits);
   SL    = price + StopLoss   * Point;
   TP    = price - TakeProfit * Point;
   OrderSend(Symbol(), OP_SELLSTOP, Lots, price, 3, SL, TP, "OP_SELLSTOP", magicNumber, 0, SkyBlue);      
   LastTrade=CurTime();

   Sleep(10000);
   RefreshRates();
*/
   SL = NormalizeDouble(Ask,Digits) - StopLoss   * Point;
   TP = NormalizeDouble(Ask,Digits) + TakeProfit * Point;
   OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),3,SL,TP,"OP_BUY",magicNumber,0,Yellow);
   LastTrade=CurTime();
   OpenBuy=false;
}
//+------------------------------------------------------------------------------------------------+
//| Конец открытия позиций                                           
//+------------------------------------------------------------------------------------------------+

   return(0);
}
//+------------------------------------------------------------------+




Искал в коде глобальные или еще какие-то переменные, которые могут влиять на заморозку тестера - не нашел.

 
Rosh, я не знаю прям, что тебе не понятно. Код-то прост до ужаса. В начале работы перем. AllowTrade разрешает открывать позиции. Как только счетчик баров сосчитает до 10 эта перем. устанавливается в false и ордера больше не открываются. AllowTrade глобальная переменная, по-этому МТ4 каждый раз надо перезапускать. Конечно не надо было так делать, но этот код я взял из другого моего советника, где эта переменная разблокировалась. На счет таймфреймов, так они вообще не могут тут ни на что влиять. А на счет
            if (result) 
            { 
               LastTrade=CurTime();//break; 
            }
            else
            {
               Alert("Ордер ",OrderType()," № ",OrderTicket()," не удалось закрыть. Ошибка: " , GetLastError() );

            }


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

for (cnt=total-1;cnt>=0;cnt--)
   {  
      if ((CurTime()-LastTrade)<10) Sleep(10000);


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

            if (result) 
            { 
               Sleep(10000); 
            }


но я сделал так. Думаю логику это несколько не изменило... Хотя, может я ошибаюсь...

Причина обращения: