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

 
Подскажите пожалуйста, есть ли способ поменять время открытия баров h4 и d1? Грубо говоря имитировать смену часового пояса. Возможно скрипт строящий оффлайн графики на основе h1 таймфрейма или что-то в этом роде.
 
Artyom Trishkin:

Казнить нельзя помиловать.

Какая ошибка?

Вот.

Как видите нельзя передавать в функции структуру объявленные на локальном уровне.

 
vladnev:
Подскажите пожалуйста, есть ли способ поменять время открытия баров h4 и d1? Грубо говоря имитировать смену часового пояса. Возможно скрипт строящий оффлайн графики на основе h1 таймфрейма или что-то в этом роде.
iOpen(Symbol,нужный таймфрейм,номер бара(счёт идёт справа налево))

Нужно работать с этим

 
Seric29:

Вот.

Как видите нельзя передавать в функции структуру объявленные на локальном уровне.

Вы путаете определение структуры с объявлением переменной с типом этой структуры.
 
Artyom Trishkin:

А проверить самому? Сложно? И зачем лишнего писать?

Я не проверял. Что вам мешает?

Артём, такой вариант действительно не будет работать. Структура должна быть определена на уровне глобальных переменных. А переменная типа структуры где угодно. Тогда её можно будет передать по ссылке. Потому, что тип во входящих параметрах функции будет не определён.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
   struct MyPoint
     {
      int         x[5];
      int         y;
     }gw777; // Переменная глобального уровня, просто лишняя.
int OnInit()
  {
   MyPoint qw1; // Локальная переменная
   EqualPointsP(qw1);// передал структуру в функцию EqualPointsP
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool EqualPointsP(MyPoint &qw)
  {
   Print("EqualPointsP ");
   return true;
  }
 
Artyom Trishkin:
Вы путаете определение структуры с объявлением переменной с типом этой структуры.

В смысле. Вы имеете в виду то что структура должна быть объявлена глобально, т.е. за пределами кода, и структура по своему определению не может быть описано внутри кода т.е. локально а только переменные можно так создавать или я что-то не так понимаю? Объясните пожалуйста.

 
Alexey Viktorov:

Артём, такой вариант действительно не будет работать. Структура должна быть определена на уровне глобальных переменных. А переменная типа структуры где угодно. Тогда её можно будет передать по ссылке. Потому, что тип во входящих параметрах функции будет не определён.

Значит всё таки глобально.

 
Seric29:

Значит всё таки глобально.

НЕТ. Структура это пользовательский тип. И соответственно этот тип должен быть доступен везде. А ПЕРЕМЕННАЯ пользовательского типа может быть объявлена где пожелает левый мизинец правой ноги и передавать эту переменную куда пожелает любимая собака, но только по ссылке.

 
Alexey Viktorov:

Артём, такой вариант действительно не будет работать. Структура должна быть определена на уровне глобальных переменных. А переменная типа структуры где угодно. Тогда её можно будет передать по ссылке. Потому, что тип во входящих параметрах функции будет не определён.

 

В общем раз Артём не отвечает ничего, а человек выше дал ответ что функции работают со структурами которые должны быть известны и следовательно должны быть объявлены глобально - делаем вывод что структура должна быть объявлена глобально.

По своей природе функция работающая со структурой может принимать только одинаковые статические структуры. Значит локально объявить структуру чтобы она имела ограниченную область видимости объявить и передать в функцию не получится.

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