Любые вопросы новичков по 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 может быть помечен целой константой, символьной константой или константным выражением. Константное выражение не может включать переменные или вызовы функций.