Новая версия платформы MetaTrader 5 build 5200: расширение OpenBLAS и усиление контроля в MQL5 - страница 9

 
Maxim Kuznetsov #:
Он стабильный

Тише, не ровен час разработчики мкл услышат.
 
Здравствуйте! Вопрос немного не по теме. Можно ли добавить в оптимизаторе стратегий, возможность "произвольного" перебора? Есть только "полный" - очень долгий, "генетический" и "все символы".  К примеру если число комбинаций 10 000 000  то генетический  (оставляет только 10500 вариантов) только в первом или нулевом поколении идет произвольный поиск (а это где то 2000 вариантов) - в следующих поколениях уже подгонка параметров под родителей. А мне нужно полностью произвольный поиск, как только будут найдены оптимальные параметры, (это будет зацепка) то можно провести уже локальный поиск оптимальных параметров в заданных диапазонах.  
 
DENKZ #:
Здравствуйте! Вопрос немного не по теме. Можно ли добавить в оптимизаторе стратегий, возможность "произвольного" перебора? Есть только "полный" - очень долгий, "генетический" и "все символы".  К примеру если число комбинаций 10 000 000  то генетический  (оставляет только 10500 вариантов) только в первом или нулевом поколении идет произвольный поиск (а это где то 2000 вариантов) - в следующих поколениях уже подгонка параметров под родителей. А мне нужно полностью произвольный поиск, как только будут найдены оптимальные параметры, (это будет зацепка) то можно провести уже локальный поиск оптимальных параметров в заданных диапазонах.  

Делайте настройку переменных внутри советника через рандомизатор, или по своей таблице.

 
Aleksey Vyazmikin #:

Делайте настройку переменных внутри советника через рандомизатор, или по своей таблице.

Спасибо за ответ.  Насколько понял в советнике делаем интовый вход. в оптимизаторе ставим последовательный перебор. Далее через рандомайзер  получаем произвольные данные присваиваем им индекс и пишем в свой лог файл?   
 
DENKZ #:
Спасибо за ответ.  Насколько понял в советнике делаем интовый вход. в оптимизаторе ставим последовательный перебор. Далее через рандомайзер  получаем произвольные данные присваиваем им индекс и пишем в свой лог файл?   

С помощью MathSrand() устанавливаете seed - случайное число, которое будет влиять на генератор случайных чисел, сделав последовательность воспроизводимой, таким образом можно потом автономно узнать значения переменных, через тот же скрипт. А можно просто через фреймы передавать получившиеся настройки и делать свой отчёт по итогам оптимизации.

 
Georgiy Merts #:

А можно пальцем ткнуть, где это Билл Гейтс говорил про "как минимум на 10 лет"??? 

Насколько я помню, он говорил, что "640Кб хватит на все нынешние запросы" - что ещё можно понять, как "640 хватит всем", но никак не на "минимум 10 лет". 

Perplexity:

Фразу о том, что "640 килобайт памяти должно хватить всем", часто приписывают Биллу Гейтсу, но сам Гейтс неоднократно отрицал, что когда-либо говорил это. Эта легендарная цитата стала популярна в 1980-х годах, когда персональные компьютеры IBM использовали ограничение в 640 КБ оперативной памяти, обусловленное архитектурными особенностями процессоров и системных ограничений того времени.

На самом деле, это ограничение было связано не с произнесённым заявлением руководителя Microsoft, а с техническими особенностями IBM PC — из 1 мегабайта адресного пространства примерно 640 КБ выделялось под основную память, остальная часть шла на видеопамять и другие устройства (memory-mapped I/O). Билл Гейтс в 1989 году говорил, что тогда он считал, что этого объема хватит на десять лет, но не утверждал, что этого будет достаточно "навсегда" или для всех без исключения задач.

Таким образом, утверждение, кто конкретно сказал "640 КБ памяти хватит всем" в 80-х, не подтверждается достоверно, и, скорее всего, это выражение выросло из технических ограничений IBM PC и было позже ошибочно приписано Биллу Гейтсу.

 

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

Новая версия платформы MetaTrader 5 build 5200: расширение OpenBLAS и усиление контроля в MQL5

MetaQuotes, 2025.07.31 14:50

  1. MQL5: Усилены правила скрытия методов. При наличии в производном классе метода с тем же именем, что и в базовом, теперь по умолчанию вызывается версия из производного класса. Чтобы обратиться к базовому методу, теперь требуется квалификатор:
    struct A
      {
       int y;
      
       string func(double x)
         {
          return(__FUNCSIG__);
         }
      };
      
    struct B : public A
      {
       string func(int x)   // метод скрывает A::func
         {
          return(__FUNCSIG__);
         }
      };
      
    void OnStart(void)
      {
       B b;
       b.func(M_PI);          // по новым правилам это вызов B::func
       b.A::func(M_PI);       // вызов скрытого метода A::func
      }
    Это упрощает чтение кода и устраняет неоднозначность, ранее сопровождавшуюся лишь предупреждением компилятора.

    Ранее при компиляции было предупреждение:
    deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
    Теперь это изменение вступило в силу.

    Некоторое количество билдов в журнал будет выводиться предупреждение, если по параметрам доступен более подходящий скрытый метод.
    call resolves to 'string B::func(int)' instead of 'string A::func(double)' due to new rules of method hiding
       see declaration of function 'B::func'
       see declaration of function 'A::func'
    truncation of constant value from 'double(3.141592653589793)' to 'int(3)'


По какой причине идет ограничение функционала? На примере выше. Есть структура A, мне нужно доопределить (не переопределить) func-метод, чтобы было несколько перегрузок. Как теперь это сделать?!

Вы теперь предлагаете, чтобы автор помнил названия всех классов-родителей и у кого какая перегрузка прописана. Но это полностью сводит на нет удобство!

 
Ilyas #:
struct A
{
  int Tmp;
  
  static int Tmp2;
  
  static void Func1( string ) {}
  static void Func2( int ) {}
  
  A()
  {
    Func1(0); // call resolves to 'void A::Func1(string)' instead of 'void Func1(T)' due to new rules of method hiding
    Func2(0); // OK - почему?
    
    Tmp = 0; // OK - почему?
    this.Tmp = 0;
    ::Tmp = 0;
    
    Tmp2 = 0; // OK - почему?
    A::Tmp2 = 0;
    ::Tmp2 = 0;
  }
};

static int A::Tmp2;

int Tmp;
int Tmp2;

// Вот есть у меня структура (выше) в mqh и все отлично компилируется. Но стоит прописать строки ниже, как идут предупреждения.
template <typename T>
void Func1( T ) {}

template <typename T>
void Func2( T ) {}

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

Строка для поиска: Uluchshenie 131.
 
fxsaber #:


По какой причине идет ограничение функционала? На примере выше. Есть структура A, мне нужно доопределить (не переопределить) func-метод, чтобы было несколько перегрузок. Как теперь это сделать?!

Вы теперь предлагаете, чтобы автор помнил названия всех классов-родителей и у кого какая перегрузка прописана. Но это полностью сводит на нет удобство!

Будет оператор using, который решит проблему ограничения функционала (сделает поведение компилятора "как раньше")

struct B : public A
  {
   using A::func;        // использовать все перегрузки func из A

   string func(int x)    // метод не скрывает перегрузки func из-за using, но переопределит A::func(int), если имеется
     {
      return(__FUNCSIG__);
     }
  };
 

Задача. Нужно запустить индикатор A в визуальном тестере. Для индикатора A специально настроен tpl-шаблон (Profiles/Templates/A.tpl), в котором прописан дополнительный индикатор B с нужными настройками.

Результат - тест останавливается (и висит) в самом начале на фразе в логе об успешном добавлении второго индикатора:

MetaTester 5 started on 127.0.0.1:3000
...
template file A.tpl added. 4792 bytes loaded
...
expert file added: Indicators\A.ex5. 176606 bytes loaded
successfully initialized
...
program file added: \Indicators\A.ex5. 176607 bytes loaded
connected
EURUSD: symbol to be synchronized
...
EURUSD,M1: generating based on real ticks
EURUSD,M1: testing of Indicators\A.ex5 from 2025.06.01 00:00 to 2025.08.11 00:00 started with inputs:
...
program file added: \Indicators\B.ex5. 17659 bytes loaded

Такая проблема с любым доп. индикатором в шаблоне, в любом режиме тестирования, под отладчиком или без.

Без шаблона, отдельно A тестируется нормально.

Как проверять совместную работу индикаторов на истории?