Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2714

 
Sergey Gridnev #:
О чём? О доступе к переменным функции из вне?

Я не обратил внимания, что вопрос несколько видоизменился. Ответ "да" был на предыдущий вопрос.

А так-то ежу понятно, что область видимости, заданная хоть функцией, хоть if, хоть for, не доступна из других подобных областей видимости.

 
Andrei Sokolov #:

Спасиб. А можно ли это применить для MQL, когда тут, как правило, одно неявное пространство имен?  Я имею ввиду получится ли объявить переменную внутри какой-то функции, а получать доступ к ней в других функциях и на глобальном уровне? 

Переменная, объявленная в функции, (обычно) создаётся в стеке в момент вызова этой функции, вне (выполнения) этой функции она просто физически не существует. Если речь не идёт о статических переменных, которые, в некоторых случаях, могут быть заменой глобальным, но внутри этой функции.

Вам, вероятно, стОит посмотреть в сторону объектов.

 

коллеги, доброго вечера! уже на втором терминале перестало в МЕ отображаться окно итогов компиляции советника индикатора скрипта!!!

помогите настроить.... не понятно толи ок толи не ок и есть ошибки....

после нажатия компилировать - нет итогов 

 
Roman Shiredchenko #:

коллеги, доброго вечера! уже на втором терминале перестало в МЕ отображаться окно итогов компиляции советника индикатора скрипта!!!

помогите настроить.... не понятно толи ок толи не ок и есть ошибки....

после нажатия компилировать - нет итогов 

Чудеса...

Ctrl+T поможет?

 
Artyom Trishkin #:

Чудеса...

Ctrl+T поможет?

не помогает - всё включено все утоплено по кнопкам инструменты - окна нет... искал на экране везде... 



 
Artyom Trishkin #:

Чудеса...

Ctrl+T поможет?

Спасибо Артём за помощь... 

в общем кому надо лечится кардинальным образом находится файл metaeditor в общей папке в конфиге по ID терминала там в общем и удаляется и потом МЕ при перезапуске терминала начинает с базовых настроек и ок - окно есть!

 

Доброго времени

На текущем баре нет закрытия, возвращает true

Подскажите пожалуйста в чём ошибка

bool CheckForClose()
//Проверяет было ли закрытие позиции на текущей свече. Если было - возвращает true, если не было - возвращает false
{
   bool fRes=false;
   int kolHis, i;
   ulong deal_ticket;
   ENUM_DEAL_ENTRY deal_entry;
   datetime dt;

   if(!HistorySelect(iTime(NULL,PERIOD_D1,0), TimeCurrent()))
      return fRes;
   kolHis=HistoryDealsTotal();
   dt=iTime(NULL,PERIOD_D1,0);
   
//проверим даты закрытых сделок
   for(i=0;i<kolHis;i++)
   {deal_ticket=HistoryDealGetTicket(i);
    deal_entry=(ENUM_DEAL_ENTRY)HistoryDealGetInteger(deal_ticket,DEAL_ENTRY);
    if(deal_entry==DEAL_ENTRY_OUT)
      {if(dt<=(datetime)HistoryDealGetInteger(deal_ticket,DEAL_TIME))
         {fRes=true;
         break;
         }
      }
   }
   return fRes;
}
 
VVT #:

Доброго времени

На текущем баре нет закрытия, возвращает true

Подскажите пожалуйста в чём ошибка

Для очень многих вопросов, в тч этого, рекомендую использовать отладчик. Он даст ответ. Не использовать отладчик - не норм.
 
VVT #:

Доброго времени

На текущем баре нет закрытия, возвращает true

Подскажите пожалуйста в чём ошибка

вот такой вариант посмотрите

//+------------------------------------------------------------------+
//| Проверяет, было ли закрытие позиции на текущем (последнем) баре 
//| Возвращает true, если хотя бы одна позиция  эксперта     
//| была закрыта на текущем баре.                                    |
//+------------------------------------------------------------------+
bool CheckForClose()
{
   //--- Получаем время открытия текущего бара на графике, где запущен советник
   datetime bar_open_time = iTime(_Symbol, Period(), 0);
   if(bar_open_time == 0)
   {
      Print("Ошибка получения времени открытия бара!");
      return(false);
   }

   //--- Выбираем историю сделок с момента открытия текущего бара до настоящего момента
   if(!HistorySelect(bar_open_time, TimeCurrent()))
   {
      Print("Ошибка HistorySelect!");
      return(false);
   }

   int deals_total = HistoryDealsTotal();
   if(deals_total == 0)
      return(false);

   //--- Перебираем все сделки в выбранном диапазоне
   for(int i = 0; i < deals_total; i++)
   {
      ulong deal_ticket = HistoryDealGetTicket(i);
      if(deal_ticket == 0)
         continue;

      //--- Проверяем, что сделка относится к нашему эксперту и символу
      long deal_magic = HistoryDealGetInteger(deal_ticket, DEAL_MAGIC);
      string deal_symbol = HistoryDealGetString(deal_ticket, DEAL_SYMBOL);
      if(deal_magic != MagicNumber || deal_symbol != _Symbol)
         continue;

      //--- Тип входа: DEAL_ENTRY_OUT означает выход из позиции (закрытие)
      ENUM_DEAL_ENTRY deal_entry = (ENUM_DEAL_ENTRY)HistoryDealGetInteger(deal_ticket, DEAL_ENTRY);
      if(deal_entry != DEAL_ENTRY_OUT)
         continue;
 
      return(true);   // Нашли закрытие на этом баре
   }

   return(false);     // Закрытий не было
}
 
Andrei Sokolov #:
Для очень многих вопросов, в тч этого, рекомендую использовать отладчик. Он даст ответ. Не использовать отладчик - не норм.

Спасибо, познавательно но не эффективно


Roman Shiredchenko #:

вот такой вариант посмотрите


Не поняв причины, Ваша версия работает, БЛАГОДАРСТВУЮ!!!