Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1069

 
CloseAllBuy() вызывается в одном-единственном месте: в ф-и OnTick() по условию if(Bid>buycloseprice) CloseAllBuy(); И это условие при новом включении не наступило и в период отключения тоже не наступало, а ф-я CloseAllBuy() все равно сработала при повторном включении эксперта.
 
rapid_minus:
CloseAllBuy() вызывается в одном-единственном месте: в ф-и OnTick() по условию if(Bid>buycloseprice) CloseAllBuy(); И это условие при новом включении не наступило и в период отключения тоже не наступало, а ф-я CloseAllBuy() все равно сработала при повторном включении эксперта.
Код будет? Кто такое buycloseprice, откуда пришло, чем инициализировано, где менялось, отсюда не видно же...
 
Вот кусок кода:
 
У меня почему-то не видно, вставлен ли SRC. Если нет, то сообщите, я повторю текстом.
 
Вопрос: подскажите пожалуйста, как конкретно в данном случае применить глобальную переменную. Никак не соображу. Спасибо.
 
rapid_minus:
Вот кусок кода:

не видно

rapid_minus:
Вопрос: подскажите пожалуйста, как конкретно в данном случае применить глобальную переменную. Никак не соображу. Спасибо.

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

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

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

 
Повторяю текстом:         RefreshRates();              
   total=OrdersTotal();
   if(total>0)
      {
      for(int i=0; i<=OrdersTotal(); i++)                        
         if(OrderSelect(i,SELECT_BY_POS)==true)      
            {                                          
            if(OrderType()==OP_BUY && OrderMagicNumber()==magic)
             { RefreshRates();
               if(Bid>buycloseprice) CloseAllBuy();
             }
            
            if(OrderType()==OP_SELL && OrderMagicNumber()==magic)
             { RefreshRates();
               if(Ask<sellcloseprice) CloseAllSell();
             }
            }
      }
       
        if((total==0) || (total>0 && OrderSelect(1,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!=Symbol()))
         {
      Comment("Нет открытых позиций");
     
      if(условие && timeBar!=iTime(Symbol(),Period(),1))
       {
         Print("Появился критерий-1 для БАЙ");
                   int poz_1 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
                   Sleep(1000);
                   RefreshRates();
                   int poz_2 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
                   Sleep(1000);
                   RefreshRates();
                   int poz_3 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
                   Sleep(1000);
                   RefreshRates();
                   int poz_4 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
                   Sleep(1000);
                   RefreshRates();
                   int poz_5 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
                   timeBar=iTime(Symbol(),Period(),1);
                   double spread = (Ask-Bid);
                   buyopentime = iTime(Symbol(),Period(),0);
                   buycloseprice = NormalizeDouble((iOpen(Symbol(), Period(), 0)+spread+75*Point), Digits);
                   Comment("Magic 510015 БАЙ");
                   Print("ЦЕНА ЗАКРЫТИЯ = ",buycloseprice);
       }
   }
        
  }
 
//+------------------------------------------------------------------+*/
 void CloseAllBuy()
{
  bool   fc;
   for (int i=OrdersTotal()-1; i>=0; i--)
      {
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if (OrderType()==OP_BUY)
         {
         fc=OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slip);
         buycloseprice=0.0;
         tc=OrderCloseTime();
         }
      }
}
 
Тогда где у меня ошибка в коде?
 
rapid_minus:
Повторяю текстом:      

Всё ещё не ясно, откуда берётся buycloseprice,  что с ним происходит до условия if(Bid>buycloseprice) CloseAllBuy();. Потому что я вижу в коде только это, уже после - buycloseprice = NormalizeDouble((iOpen(Symbol(), Period(), 0)+spread+75*Point), Digits);, но где этот самый buycloseprice объявлен и каким значением инициализарован?

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

 Теперь немного арифметики, есть там в коде такой цикл:

for(int i=0; i<=OrdersTotal(); i++)  

допустим, ордеров 5 -  от 0 до 4. А цикл считает от 0 до 5. Будет ли этот цикл правильно работать? 

Ещё,  в строке  if(условие && timeBar!=iTime(Symbol(),Period(),1)), откуда берутся условие и timeBar?

 
Кажется я понял - ошибка в том, что я задаю глобальную  buycloseprice и сразу придаю ей значение 0.0. И хотя потом при открытии позиции она принимает конкретное значение, при отключении терминала это значение теряется и при включении принимает первоначальное значение, т.е. 0.0, и соответственно условие if(Bid>buycloseprice) соблюдается и идет команда на закрытие.   А вот как перевести эту переменную в глобальную терминала, я не понимаю.
Причина обращения: