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

 
Tretyakov Rostyslav #:

Пользуйтесь

Rostyslav, к сожалению, также разные результаты


 
Ivan Butko #:

Rostyslav, к сожалению, также разные результаты


Не знаю с чем это связано, если поставить в RSI  цены открытия, то работает корректно


 

Почему при присвоении от константной переменной текущего периода через свич, переменная другого типа становиться тоже константной?

string Tfcur="";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   switch(_Period)
     {
      case PERIOD_M1: { Tfcur = "_M1";}break;
      case PERIOD_M5: { Tfcur = "_M5";}break;
      case PERIOD_M15:{ Tfcur = "_M15";}break;
      case PERIOD_M30:{ Tfcur = "_M30";}break;
      case PERIOD_H1: { Tfcur = "_H1";}break;
      case PERIOD_H4: { Tfcur = "_H4";}break;
      case PERIOD_D1: { Tfcur = "_D1";}break;
      case PERIOD_W1: { Tfcur = "_W1";}break;
      case PERIOD_MN1:{ Tfcur = "_MN1";}break;
       }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
void Func(string fTf=Tfcur) 
{
Print(fTf);
}

// при компиляции
//'Test.mq5'    Test.mq5        1       1
//'Tfcur' - constant expected   Test.mq5        47      22
//1 errors, 0 warnings          2       1
Файлы:
Test.mq5  2 kb
 
Valeriy Yastremskiy #:

Почему при присвоении от константной переменной текущего периода через свич, переменная другого типа становиться тоже константной?

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   Func(Tfcur);
  }
//+------------------------------------------------------------------+
void Func(string fTf) 
{
Print(fTf);
}
 
Tretyakov Rostyslav #:
Я про текущий период, условие свича это если равно то... В моем случае если текущий таймфрейм равен такому то, то текстовая переменная равна тому то. Почему в этой конструкции текстовая переменная становится константой. Это видно из ошибки при компиляции.
 
Valeriy Yastremskiy #:
Я про текущий период, условие свича это если равно то... В моем случае если текущий таймфрейм равен такому то, то текстовая переменная равна тому то. Почему в этой конструкции текстовая переменная становится константой. Это видно из ошибки при компиляции.

Я не спец, но возможно так нельзя задавать значение. Меня учили так:

void Func(string fTf="") 
{
 Print(fTf);
}
 
Tretyakov Rostyslav #:

Я не спец, но возможно так нельзя задавать значение. Меня учили так:

Вопрос не об этом. Конечно нельзя в функцию в обычный параметр подставить константу. Это компилятор и не пропускает. Вопрос почему после свич константа становится?
 
Valeriy Yastremskiy #:
Я про текущий период, условие свича это если равно то... В моем случае если текущий таймфрейм равен такому то, то текстовая переменная равна тому то. Почему в этой конструкции текстовая переменная становится константой. Это видно из ошибки при компиляции.
Никакой константой она не становится 

Ругается вот на эту строку:
void Func(string fTf=Tfcur) 
т.к. значение по умолчанию не может быть переменной. Ожидается константа, а не переменная Tfcur.
 
Sergey Gridnev #:
Никакой константой она не становится 

Ругается вот на эту строку:
т.к. значение по умолчанию не может быть переменной. Ожидается константа, а не переменная Tfcur.
Не понял. Tfcur глобальная переменная инициализирована в онинит. Если присвоить без свич значение то все компилируется. Ошибка компиляции Tfcur' - constant expected   
 
Valeriy Yastremskiy #:
Не понял. Tfcur глобальная переменная инициализирована в онинит. Если присвоить без свич значение то все компилируется. Ошибка компиляции Tfcur' - constant expected   

Справка:

Оператор-переключатель switch

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

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