Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 3299

 
Aleksey Vyazmikin #:

Используйте  switch

типа как то так?

bool rule(int n, NumericVector x) {
  bool res = false;
  switch(n) {
    case 1: res = x[0] < x[4]; break;
    case 2: res = x[1] >= x[0]; break;
    case 3: res = x[3] == x[4]; break;
    case 4: res = x[0] != x[4]; break;
    case 5: res = x[1] >= x[0]; break;
    case 6: res = x[3] <= x[4]; break;
    case 7: res = x[0] < x[4]; break;
    case 8: res = x[1] >= x[0]; break;
    case 9: res = x[3] <= x[4]; break;
    case 10: res = x[3] > x[4]; break;
    default: stop("Invalid rule number");
  }
  return(res);
}


и он реально сможет нормально переваривать милион условий?

 
mytarmailS #:

типа как то так?

Я не знаю синтаксис R - просто проверил, что есть такая возможность и там. А так - да похоже.

mytarmailS #:

и он реально сможет нормально переваривать милион условий?

На MQL5 использовал около 500 тысяч. Работает гораздо быстрей IF.

 
mytarmailS #:

типа как то так?


и он реально сможет нормально переваривать милион условий?

Судя по типу х это Rcpp. В С++ можно делать массивы указателей на функции и там будет сразу вызов нужной функции по индексу, а со свитчем вроде бы будет последовательный перебор от начала и до нужного варианта. Конечно, остаётся проблема генерации кода всех этих функций и непонятно как это будет работать с Rcpp.

Про указатели на функции и их массивы в С++.

C++ | Указатели на функции
  • metanit.com
Указатели на функции в языке программирования C++, определение и использование, массив указателей на функции
 
Aleksey Nikolayev #:
Ещё, теоретически, можно массив функций.

Что это? Типа сделать матрицу и интерпретатор?

 
Aleksey Vyazmikin #:

Я не знаю синтаксис R - просто проверил, что есть такая возможность и там. А так - да похоже.

это с++

 
Aleksey Nikolayev #:

Судя по типу х это Rcpp. В С++ можно делать массивы указателей на функции и там будет сразу вызов нужной функции по индексу, а со свитчем вроде бы будет последовательный перебор от начала и до нужного варианта. Конечно, остаётся проблема генерации кода всех этих функций и непонятно как это будет работать с Rcpp.

Про указатели на функции и их массивы в С++.

А вроде бы нет перебора...

 
mytarmailS #:

это с++

Поэтому и сделал оговорку.

Chat GPT предлагает какой то такой синтаксис

# Создаем функцию, имитирующую оператор switch
my_switch <- function(x) {
  switch(x,
         case1 = {
           # Действия, выполняемые при совпадении с "case1"
           print("Это case1")
         },
         case2 = {
           # Действия, выполняемые при совпадении с "case2"
           print("Это case2")
         },
         default = {
           # Действия по умолчанию, если нет совпадения с другими случаями
           print("Это default")
         }
  )
}
 
Aleksey Nikolayev #:

Судя по типу х это Rcpp. 

Да так ие есть.

Попробую протестить на скорость

switch

если не пойдет то буду вникать в 

 указатели на функции и их массивы 
 
Aleksey Vyazmikin #:

А вроде бы нет перебора...

Возможно и нет, точно не помню.
 
mytarmailS #:

Да так ие есть.

Попробую протестить на скорость

если не пойдет то буду вникать в 

 указатели на функции и их массивы 
Если все функции линейны, как в примере, то можно просто через обычную двумерную матрицу коэффициентов. Ещё можно сделать сжатие объёма, если матрица разреженная.