Новая версия платформы MetaTrader 5 build 4260: общие улучшения - страница 9

 
Stanislav Korotky #:

Как теперь такое компилировать?

Как ни менял - выдает ошибку "invalid tester set file extension, '*.set' expected"

Спасибо, исправлю.

Пока используйте такой вариант:

#property tester_set "ABC-eurusd" ".set"
 
Как убрать из Обзора рынка символ в такой ситуации?
#define PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  const string Name = SymbolName(SymbolName(0, true) == _Symbol, true); // Взяли нетекущий символ.
  MqlRates Rates[];  
  
  // Если символ не имеет объема - удаляем.
  if ((CopyRates(Name, PERIOD_M1, 0, 1, Rates) > 0) && !Rates[0].real_volume)
  {
    PRINT(Name);
    PRINT(SymbolSelect(Name, false)); // false
    PRINT(_LastError);                // 4305
  }  
}
 
fxsaber #:
#A

У решётки там какая роль, какую функцию она выполняет? Где можно почитать про неё в справке?

Я нашёл её упоминание только здесь https://www.mql5.com/ru/docs/basis/preprosessor/constant , но это не то.

 
fxsaber #:
Как убрать из Обзора рынка символ в такой ситуации?

В MQL5 нет средств узнать, чем заблокирован (выбран насильно в Обзор рынка) конкретный символ. Единственное что может пользователь, убедиться, что никакой график не открыт и MQL-программа к символу не обращается.

Вероятно, состояние "блокировки" отвиснет по какому-то таймауту, если символ был задействован только текущим скриптом (можно попробовать выдержать Sleep и повторить попытку).

 
Andrei Iakovlev #:

У решётки там какая роль, какую функцию она выполняет? Где можно почитать про неё в справке?

//Параметр макроса можно превратить в строку, добавив перед ним знак '#':

#define PRINT_VALUE(value) printf("Value of %s is %d", #value, value);
int x = 5;
PRINT_VALUE(x)  // -> Value of x is 5


//А еще параметр можно приклеить к чему-то еще, чтобы получился новый идентификатор. Для этого между параметром и тем, с чем мы его склеиваем, нужно поставить '##':

#define PRINT_VALUE (number) printf("%d", value_##number);
int value_one = 10, value_two = 20;
PRINT_VALUE(one)  // -> 10
PRINT_VALUE(two)  // -> 20
Читать в доках макросов C++
 
Stanislav Korotky #:

В MQL5 нет средств узнать, чем заблокирован (выбран насильно в Обзор рынка) конкретный символ. Единственное что может пользователь, убедиться, что никакой график не открыт и MQL-программа к символу не обращается.

Вероятно, состояние "блокировки" отвиснет по какому-то таймауту, если символ был задействован только текущим скриптом (можно попробовать выдержать Sleep и повторить попытку).

Если нажать на F2, то понимаешь, что разблокировать возможно только перезапуском Терминала, к сожалению.

 
fxsaber #:

Если нажать на F2, то понимаешь, что разблокировать возможно только перезапуском Терминала, к сожалению.

Там есть пока еще засеренная кнопочка "Properties" - может быть доделают, что по ней также будет доступна информация, почему символ указанного процесса заблокировался. Хотя логичнее сделать это в контекстном меню самого Обзора рынка.

Дополнительный вопрос - символ стандартный или кастом?

 
Символ ещё может "держать" подписка на "стакан".
 
Stanislav Korotky #:

Дополнительный вопрос - символ стандартный или кастом?

Стандартный.

 
trader6_1 #:
Читать в доках макросов C++

Понятно, спасибо.

есть опечатка, пробела перед скобкой не должно быть:

#define PRINT_VALUE(number)
исправьте в его посте кто может
Причина обращения: