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

 
hini #:

Кто-нибудь знает, как принудительно закрыть это окно? Его невозможно закрыть, если оптимизация отменена или если она не завершена в какой-либо ситуации.


Постоянно такие баги вылазят. Выход есть - перезапустить терминал и после этого окно закрыть.
 
fxsaber # :

Похоже, нарвались на баг.

Я помню, как запускал быстрый алгоритм оптимизации на основе генетического алгоритма, и примерно через десять секунд нажал «Отмена», после чего окно не закрылось. Похоже, единственное решение — перезапустить терминал.


 
Alexandr Saprykin # :
Постоянно такие баги вылазят. Выход есть - перезапустить терминал и после этого окно закрыть.
Да, похоже, единственное решение — перезапустить терминал.
 
hini #:

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


К сожалению, я не могу воспроизвести это (хотя у меня это тоже уже было). Как вы понимаете, единственный способ (возможно) добиться исправления ошибки - предоставить MetaQuotes способ ее воспроизведения.

Как только у меня будет такая процедура, я смогу сообщить об ошибке.

 
Alain Verleyen #:

К сожалению, я не могу воспроизвести это (хотя у меня это тоже уже было). Как вы понимаете, единственный способ (возможно) добиться исправления ошибки - предоставить MetaQuotes способ ее воспроизведения.

Как только у меня будет такая процедура, я смогу сообщить об ошибке.

Когда у меня появится свободное время, я попробую воспроизвести эту проблему. Одна из ключевых подсказок заключается в том, что перед запуском оптимизации терминал MT5 долгое время ожидал синхронизации исторических данных.
 

Бесполезные, но интересные примеры работы с битами.

1. Получение среднего двух целых. Обычный способ (x + y) >> 1 может привести к переполнению при сложении больших x и y. Вот решение (скорость лишь чуть медленнее):

int Avg(int x, int y) {
        return ((x ^ y) >> 1) + (x & y);
}

2. Переворачивание числа (b31...b0 --> b0...b31) применяется иногда в криптографии и радиоинженерии, обычно выполняется в цикле. Вот решение почти вдвое быстрее:

uint ReverseBits(uint v) {
        v = ((v >> 1) & 0x55555555) | ((v & 0x55555555) << 1);
        v = ((v >> 2) & 0x33333333) | ((v & 0x33333333) << 2);
        v = ((v >> 4) & 0x0F0F0F0F) | ((v & 0x0F0F0F0F) << 4);
        v = ((v >> 8) & 0x00FF00FF) | ((v & 0x00FF00FF) << 8);
        v = (v >> 16) | (v << 16);
        return v;
}
 

Сколь разнообразными могут быть маржинальные требования.


Понятия не имею, как с этим работать через MQL5.

 
Наверное, изобрел древний велосипед. Для парсинга чисел дешевый идентификатор цифр.

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Bibliotecas: JSON Library for LLMs

fxsaber, 2026.02.19 08:14

Interesting result.

bool IsDigit( const uchar Char )
{
  return((bool)(Char & (1 << 4)));
}


Result.

0: 00110000 - true
1: 00110001 - true
2: 00110010 - true
3: 00110011 - true
4: 00110100 - true
5: 00110101 - true
6: 00110110 - true
7: 00110111 - true
8: 00111000 - true
9: 00111001 - true
.: 00101110 - false
e: 01100101 - false
E: 01000101 - false


Therefore, double checking can be replaced with single checking.

// if (c == '.' || c > '9') // Pre-validated token: c>'9' catches e/E
if (!(c & (1 << 4))) 
 
fxsaber #:
Наверное, изобрел древний велосипед. Для парсинга чисел дешевый идентификатор цифр.
А символы ':', ';', '<', '=', '>', '?' и те, у кого коды в диапазоне 70..7F, нормально парсятся? Или они тоже цифры?
 
Sergey Gridnev #:
А символы ':', ';', '<', '=', '>', '?' и те, у кого коды в диапазоне 70..7F, нормально парсятся? Или они тоже цифры?
Предполагается, что парсятся именно числа (идентификация, что это число, уже произведена).
Print(DBL_MIN); // 2.2250738585072014e-308


Но в некоторых случаях можно использовать и для идентификации.

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Bibliotecas: JSON Library for LLMs

fxsaber, 2026.02.19 09:02

A more versatile option.
bool IsDigit( const uchar Char )
{
//  return((bool)(Char & (1 << 4)));
  return((Char & 0xF0) == 0x30);
}

void OnStart()
{
  for (int Char = 0; Char <= UCHAR_MAX; Char++)
    PrintChar((uchar)Char);
}


Result.

... - false

.: 00101110 - false
/: 00101111 - false
0: 00110000 - true
1: 00110001 - true
2: 00110010 - true
3: 00110011 - true
4: 00110100 - true
5: 00110101 - true
6: 00110110 - true
7: 00110111 - true
8: 00111000 - true
9: 00111001 - true
:: 00111010 - true
;: 00111011 - true
<: 00111100 - true
=: 00111101 - true
>: 00111110 - true
?: 00111111 - true
@: 01000000 - false
A: 01000001 - false

... - false