Ошибки эксперта когда использование на нескольких окнах

 
Добрый день всем!

Подскажите написал советника, при тестировании все ок., при работе его одного тоже все ок., а вот если открыть даже в 2-х терминалах но управлять одним счетом начинаются ошибки.
коды 129, 4107

получается что OrderSelect(pos0, SELECT_BY_POS, MODE_TRADES) начинает выбирать все счета торгового счета не важно в каком окне(и в какой валютной паре) он открыт, соответственно
129 Неправильная цена.

4107 Неправильный параметр цены для торговой функции, некрасиво но победил, т.к. в процедурах закрытия используется Ask and Bid то вешая в одном терминале несколько экспертов они путают свой аск, повесил в разных терминалах по одной валютной паре.

МОЖНО КАК-ТО СДЕЛАТЬ УНИФИЦИРОВАНУЮ ПРОЦЕДУРУ ЗАКРЫТИЯ ДЕЙСТВУЮЩЮЮ ТОЛЬКО ДЛЯ КОНКРЕТНОЙ ВАЛЮТНОЙ ПАРЫ И ТОЛЬКО НА ОРДЕРА ОТКРЫТЫЕ В ЭТОМ ОКНЕ ?


моя процедура:


//Проверка на закрытие ордеров sell
int zakrivaySell(double Pribil)
{  
   //пока есть открытые sell и они в минусе закрытие ни к чему
   int cmd0;
   for (int pos0 = 0; pos0<OrdersTotal(); pos0++ )
     {
       if (OrderSelect(pos0, SELECT_BY_POS, MODE_TRADES) == true)
         {
            cmd0=OrderType();
            if(cmd0==OP_SELL)
               {
                  if((OrderProfit()-MathAbs(OrderSwap())*2)< Pribil)
                     {
                        if(zakrivatPoPoslednemu==true)
                           {
                              //Print("Сигнал закрыть Sell отклонен не все открытые Sell в прибыле!");   
                              return(0);
                           }
                        else
                           {
                              //пропускаем все
                           }
                        
                        
                     }
                    
               } 
         }
       else
           Print("Ошибка ", GetLastError(), " при выделении ордера ", OrderTicket());
     }
   //--------------------------------------------------------
   int cmd;
   bool peresmotr = true;
   while(peresmotr==true)
   {
   peresmotr = false;
   for (int pos = 0; pos<OrdersTotal(); pos++ )
     {
       // выделим позицию
       if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
         {
            cmd=OrderType();
            if(cmd==OP_SELL)
               {
                  if((OrderProfit()-MathAbs(OrderSwap())*2)>Pribil)
                     {
                        int tiket = OrderTicket();
                        RefreshRates();
                        if(OrderClose(tiket, OrderLots(), Ask, 3 , White) == true)
                           {
                              Print("Автозакрытие SELL №"+tiket);
                              Sleep(6000);
                              peresmotr=true;
                              break;
                           }
                        else
                           {
                              Print("!!! Ошибка Автозакрытие SELL №"+tiket+"  код ош.="+GetLastError());
                              Sleep(2000);
                              pos=0;
                           }   
                     }
                    
               } 
         }
       else
           Print("Ошибка ", GetLastError(), " при выделении ордера ", OrderTicket());
     }
     }//while
}
 

А волшебное число не пробовал использовать. Магиком зовут.

 

Так мне надо получается надо помнить все магики открытые в данном окне и при переборе ордеров сравнивать в списке ли они для данного окна ?

 
Что значит все магики?, для каждого эксперта свой магик номер и каждый следит за своим. так понятно?
 

кажется допер..... Поставить счетчик магик например на первом советнике с 0 до 1000, на втором с 1000 до 2000, и т.д. а потом при переборе позиций смотреть если магик больше 1000 то это уже не ордера 1го окна ? так что-ли ?

 

Речь не о счетчике. Просто магик - это индификатор данного советника на данном инсрументе и данном таймфрейме. Он может быть и один.

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