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

 
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-кешей Тестера форвард-данных нет.
 
fxsaber #:
В текущем формате opt-кешей Тестера форвард-данных нет.

Так есть. Формируется два файла. Один Оптимизаци, второф - Форвард оптимизации. Там по датам все совпадает. После даты в файле оптимизации стоит 01, в форвард-оптимизации - 04.


 
Luchezar Shalomaev #:

Так есть. Формируется два файла. Один Оптимизаци, второф - Форвард оптимизации. Там по датам все совпадает. После даты в файле оптимизации стоит 01, в форвард-оптимизации - 04.

Спасибо, не знал - не пользовался этим режимом. Тогда не в курсе причин.

 

Как вызывать конструктор копирования?

class A
  {
public:
   A(const A&) { Print(__FUNCSIG__); }
   A(A*)       { Print(__FUNCSIG__); }
   A()         { Print(__FUNCSIG__); }
  };

void OnStart()
  {
   A* a1 = new A;
   A  a2(a1);     // A::A(A*)
   delete a1;
  }