Ошибки, баги, вопросы - страница 3601

fxsaber # :

Почему так нельзя?

Ограничение препроцессора MQL (работает без проблем в C++).

Надеюсь, новая версия справится с этим.

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

Как определить путь для включаемого файла, расположенного в другой папке?

Ален Верлейен , 2021.06.05 21:56

Ни то, ни другое не работает, поскольку препроцессор Metaquotes не реализует весь стандартный препроцессор C, макрорасширения не работают с #include. Это ограничение MQL.

https://gcc.gnu.org/onlinedocs/cpp/Computed-Includes.html#Computed-Includes


Alain Verleyen #:

Ограничение препроцессора MQL (работает без проблем в C++).

Надеюсь, новая версия справится с этим.

Спасибо.

#define _version 999

string var999 = "var999";
string var_version = "var_version";

#define _print1    Print("1: ", var##_version)
#define _print2(a) Print("2: ", var##a)

void OnStart()
  {
   _print1;
   _print2(_version);
  }

MT4:

MT5:

В МТ4 мне больше нравится. Но даже для MT4 хотелось бы, что бы _print1 давал такой-же результат, как _print2. Но я не знаю, как бы это работало в C++, к стати.

Vladislav Boyko # :

MT4:

MT5:

В МТ4 мне больше нравится. Но даже для MT4 хотелось бы, что бы _print1 давал такой-же результат, как _print2. Но я не знаю, как бы это работало в C++, к стати.

Макросы MT4 и MT5 теперь работают по-разному. MT5 похож на C++ (но не то же самое, он более ограничен).

Итак, вам нужно изучить, как работают макросы. Чтобы получить то, что вы хотите, вам нужно добавить косвенность.

MQL5.

#define CONCAT(a,b)      a##b
#define X_CONCAT(m1,m2)  CONCAT(m1,m2) 
#define _print1          Print("1: ", X_CONCAT(var,_version))
#define _print2(a)       Print("2: ", CONCAT(var,a))
Alain Verleyen #:

Макросы MT4 и MT5 теперь работают по-разному. MT5 похож на C++ (но не то же самое, он более ограничен).

Итак, вам нужно изучить, как работают макросы. Чтобы получить то, что вы хотите, вам нужно добавить косвенность.

MQL5.

Спасибо большое!

 

#define _version 999

string var999 = "var999";

#define CONCAT(a,b)      a##b
#define X_CONCAT(m1,m2)  CONCAT(m1,m2) 
#define _print1          Print("1: ", X_CONCAT(var,_version))
#define _print2(a)       Print("2: ", CONCAT(var,a))

void OnStart()
  {
   _print1;
   _print2(_version);
  }
Vladislav Boyko #:

Спасибо большое!

Одно из возможных применений в MQL - добавить номер версии к идентификатору input переменной. Для того, чтобы с помощью .set файлов для предыдущих версий нельзя было установить значение параметра. В умолчательное значение номер версии был добавлен ради прикола.

#property script_show_inputs
//---
#define CONCAT(a,b) a##b
#define X_CONCAT(m1,m2) CONCAT(m1,m2)
#define _version 999
//---
#define _param X_CONCAT(param, _version)

input string _param = "some value (v"((string)_version)")"; // Display name

void OnStart()
  {
   Print(_param); // Accessing a variable
  }

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

Ошибки, баги, вопросы

Vladislav Boyko, 2024.12.22 16:55

Одно из возможных применений в MQL - добавить номер версии к идентификатору input переменной. Для того, чтобы с помощью .set файлов для предыдущих версий нельзя было установить значение параметра. В умолчательное значение номер версии был добавлен ради прикола.

input string _param = "some value (v"((string)_version)")"; // Display name

Интересно, что в выделенных местах плюс не понадобился.

fxsaber # :

Интересно, что в выделенных местах плюс не понадобился.

Ничего нового.

 input string anInput = "some value (v"
 "123"
 ")" ; // Display name
input string otherInput = "some value (v"  "456"  ")"; // Display name

Всем привет! Уважаемые коллеги, подскажите, почему не подгружаются результаты форвард-теста? В оптимизаторе МТ5 открываю, на вкладке "Оптимизация", папку с результатами оптимизации и форвард-теста, кликаю на один из результатов оптимизации, открывается только оптимизация, вкладки с форвард-тестом нет...

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

Работаем с результатами оптимизации через графический интерфейс
Работаем с результатами оптимизации через графический интерфейс
  • www.mql5.com
Продолжаем развивать тему обработки и анализа результатов оптимизации. На этот раз задача состоит в том, чтобы выбрать 100 лучших результатов оптимизации и отобразить их в таблице графического интерфейса. Сделаем так, чтобы пользователь, выделяя ряд в таблице результатов оптимизации, получал мультисимвольный график баланса и просадки на отдельных графиках.
Luchezar Shalomaev #:

почему не подгружаются результаты форвард-теста?

В текущем формате opt-кешей Тестера форвард-данных нет.