Особенности языка mql4, тонкости и приёмы работы - страница 4

 
Alexey Kozitsyn:
Ничего себе тонкий момент... В СД написали?

Автор написал. Возможности языка давно уже не соответствуют старой документации, т.е. фактически используются недокументированные вещи, претензии по которым, соответственно, выставлять странно.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как быстро сравнить double и QNaN ?

fxsaber, 2016.10.11 15:56

Осталось незамеченным

double QNaN   =Nan(0x7FF7000000000000);  

Начальное значение глобальной переменной теперь можно объявлять через функцию!

То же самое касается и остальных static-переменных.

Странно, что разработчики про это нововведение умолчали. 


Документация по MQL5: Основы языка / Переменные / Статические переменные
Документация по MQL5: Основы языка / Переменные / Статические переменные
  • www.mql5.com
Основы языка / Переменные / Статические переменные - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber:
На тему static такой тонкий момент есть в обоих языках

Alexey Kozitsyn:
Ничего себе тонкий момент... В СД написали?

А ничего что в справке написано что статическая переменная ... читайте сами

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


Но никак не функцией.

Вот так работает

#property strict
#property indicator_chart_window

int TestBrokenStatic()
{
   static int stInt = 101;
   stInt++;
   return stInt;
}

int OnInit()
{
   static int result = 0;
   result = TestBrokenStatic();
   Print("TestStatic Expected result 102   - Actual result=", result);
   result = TestBrokenStatic();
   Print("TestStatic Expected result 103   - Actual result=", result);
   
   return INIT_SUCCEEDED;
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   return rates_total;
}
2017.04.29 13:49:51.546 !Test USDCHF,M15: TestStatic Expected result 103   - Actual result=103
2017.04.29 13:49:48.457 !Test USDCHF,M15: TestStatic Expected result 102   - Actual result=102
2017.04.29 13:49:40.089 Custom indicator Test\!Test USDCHF,M15: loaded successfully
Статические переменные - Переменные - Основы языка - Справочник MQL4
Статические переменные - Переменные - Основы языка - Справочник MQL4
  • docs.mql4.com
Статические переменные - Переменные - Основы языка - Справочник MQL4
 
Alexey Viktorov:

А ничего что в справке написано что статическая переменная ... читайте сами

Но никак не функцией.

Вот так работает

Тогда компилятор должен давать ошибку... 
 
Alexey Viktorov:

А ничего что в справке написано что статическая переменная ... читайте сами

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

Особенно, со static const.

 
fxsaber:

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

Особенно, со static const.

Я по ссылке не смотрел по причине незнания аглицкого языка, а мех. перевод иногда более непонятен чем китайско-японский с примесью корейского.

Да и не надо так болезненно реагировать. В моих словах и намёка нет на упрёк в том что вы не обратили внимание на такую мелочь.

 
Alexey Viktorov:

Я по ссылке не смотрел по причине незнания аглицкого языка, а мех. перевод иногда более непонятен чем китайско-японский с примесью корейского.

Да и не надо так болезненно реагировать. В моих словах и намёка нет на упрёк в том что вы не обратили внимание на такую мелочь.


Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql4, тонкости и приёмы работы

fxsaber, 2017.04.29 11:07

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

 
Alexey Kozitsyn:
Тогда компилятор должен давать ошибку... 

Может и должен, но ... имеем то что имеем.

 
fxsaber:

А разве в старой документации было не так?


псы. С большим запозданием я понял смысл этих ссылок...

Но вот и опровержение высказывания

fxsaber:

Осталось незамеченным

Начальное значение глобальной переменной теперь можно объявлять через функцию!

То же самое касается и остальных static-переменных.

Странно, что разработчики про это нововведение умолчали. 

Или здесь совсем о другом? Объявлять или инициализировать?
 
static const bool IsTester = (::MQLInfoInteger(MQL_TESTER) || ::MQLInfoInteger(MQL_OPTIMIZATION) ||
                              ::MQLInfoInteger(MQL_VISUAL_MODE) || ::MQLInfoInteger(MQL_FRAME_MODE));
 
fxsaber:

Проверить прямо сейчас не могу, но вроде как MQL_TESTER включает в себя всё остальное. А вот всё остальное по-отдельности не включает в себя друг друга.

Т.е., для того, чтобы понять, что программа работает в тестере (в любом из перечисленных режимов), достаточно проверить лишь самый первый флаг.

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