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

 
Aleksey Nikolayev #:

Почитайте это, особенно раздел "Функция потерь != метрика качества". Вряд ли смогу написать понятнее.

Не смог открыть, нас немного блокируют(

Aleksey Nikolayev #:
Это приводит к потенциальной неограниченности числа параметров, поскольку функциональные пространства бесконечномерны. На практике это приводит к необходимости как-то контролировать число параметров - для деревьев это обрезка листьев, например.

Ну например АМО форесты, бусты состоят из примитивов , правил.


Мы может создать граматику Бекуса Наура правил какие нам надо

типа такого(граматика одного правила)

grammarDef
<ex3> ::= <ex2> | <ex2> & <ex2> | <ex2> & <ex3>
<ex2> ::= <ex1> | <com>(<ex1>, <ex1>)
<ex1> ::= <op>(<var>, <var>)
<com> ::= "&" | "|"
<op>  ::= ">=" | "<=" | "==" | "!="
<var> ::= x1 | x2 | x3 | x4

за каждым правилом стоит код/строка/генотип

2 3 1 3 2 4 3 2 3 1 4 4 1 2 1 4 3 2 4 3 4 1 3 4 3 1 2 1 1 3 2 4 1 4 2 4 3 3 1 4 3 2 3  ->  (x1 == x4 | x2 != x1) & (x4 >= x3 & x1 != x2) & (x3 <= x2 & x3 != x1) 
1 1 4 4 1 4 1 4 2 3 1 4 1 1 1 3 1 4 2 3 4 1 1 3 4 3 2 4 1 4 2 3 4 3 3 2 3 4 2 2 4 4 3  ->  x1 <= x2 & x4 == x2 & x2 <= x4 
2 4 1 4 1 1 1 2 1 4 4 1 2 1 3 1 2 3 3 3 3 4 4 2 2 3 1 3 4 2 2 1 2 4 2 1 4 4 3 3 1 4 3  ->  x2 >= x2 & x1 >= x2 & x2 != x3 
4 3 1 3 2 4 2 2 3 4 4 1 1 2 2 1 3 2 4 3 4 3 3 1 3 1 3 2 2 2 4 4 2 3 2 1 4 1 3 1 3 2 4  ->  (x1 == x3 | x1 != x1) & (x2 == x4 | x4 >= x1) 
1 3 3 1 4 2 2 3 4 3 3 4 4 2 2 4 3 1 4 2 1 1 3 4 2 3 1 2 3 1 1 1 3 3 2 2 2 2 2 3 3 1 2  ->  (x3 >= x3 | x4 >= x4) & x3 == x1 
2 1 2 1 3 3 1 2 3 3 2 3 3 3 2 3 4 4 4 3 4 3 2 2 3 1 4 3 4 2 4 3 4 1 2 3 1 2 1 3 1 4 3  ->  x4 != x2 & x4 != x3 & (x1 != x1 | x1 != x4) 
3 3 1 1 3 3 3 2 4 2 2 3 1 2 2 3 2 4 1 4 3 4 4 2 2 4 1 2 2 4 3 4 2 2 3 4 3 4 4 3 4 4 2  ->  x4 != x4 | x3 >= x3 
3 2 1 1 3 4 2 3 2 2 2 4 3 2 3 4 2 2 4 4 1 1 3 1 2 3 2 4 1 2 1 2 1 2 1 4 3 2 4 1 1 4 2  ->  x4 <= x1 
4 2 3 2 4 4 3 3 3 4 1 4 3 3 3 2 4 3 1 3 4 4 1 4 4 2 1 2 3 1 3 3 4 2 4 1 4 2 3 4 3 4 3  ->  x1 == x1 & (x2 >= x1 | x4 != x3) 
3 2 2 1 2 3 2 4 3 3 4 2 4 4 2 4 3 4 2 2 1 1 2 2 1 3 1 4 3 4 3 2 4 4 3 2 2 2 2 2 3 1 1  ->  x3 <= x4 

слева генотип , справа правило что генерируется, вот этот генотип и можно искать с помощью АО

Сумма правил и будет тот же буст или форест..

Как бы нету никакой сложности..


Вот код который это все реализует

library(gramEvol)
grammarDef <- CreateGrammar(list(
  ex3 = grule(ex2, ex2 & ex2, ex2 & ex3),
  ex2 = grule(ex1, com(ex1, ex1)),
  ex1 = grule( op(var, var) ),
  com = grule("&","|"),
  op = grule(">=","<=","==","!="),
  var = grule(x1,x2,x3,x4)))


for(i in 1:10){
  genotype <- sample(1:4,size = 43,replace = T)
  rule <- as.character(GrammarMap(genotype, grammarDef))
  cat(as.character(genotype), " -> ", rule, "\n")
}

Документация по пакету

 

Так что как бы я не вижу никаких препятствий чтобы реализовать свой АМО чисто на оптимизации и грамматике


При чем у нас руки развязаны по всем фронтам , любые функции, преобразования, любые данные,  вообще все что угодно можно реализовать.



Тот же форест, никакой разницы

X <- iris[,1:(ncol(iris)-1)]
target <- iris[,"Species"] 


library(inTrees)
library(RRF)

target |> 
as.factor() |> 
RRF(x = X,ntree=100) |> 
RF2List() |> 
extractRules(X = X) 






697 rules (length<=6) were extracted from the first 100 trees.
       condition                                                                        
  [1,] "X[,4]<=0.8"                                                                     
  [2,] "X[,4]>0.8 & X[,4]<=1.65 & X[,4]<=1.45"                                          
  [3,] "X[,3]<=4.95 & X[,4]>0.8 & X[,4]<=1.65 & X[,4]>1.45 & X[,4]<=1.55"               
  [4,] "X[,3]>4.95 & X[,4]>0.8 & X[,4]<=1.65 & X[,4]>1.45 & X[,4]<=1.55"                
  [5,] "X[,4]>0.8 & X[,4]<=1.65 & X[,4]>1.45 & X[,4]>1.55"                              
  [6,] "X[,3]<=4.75 & X[,4]>0.8 & X[,4]>1.65 & X[,4]<=1.85 & X[,4]<=1.75"               
  [7,] "X[,3]>4.75 & X[,4]>0.8 & X[,4]>1.65 & X[,4]<=1.85 & X[,4]<=1.75"                
  [8,] "X[,1]<=5.95 & X[,3]<=4.85 & X[,4]>0.8 & X[,4]>1.65 & X[,4]<=1.85 & X[,4]>1.75"  
  [9,] "X[,1]>5.95 & X[,3]<=4.85 & X[,4]>0.8 & X[,4]>1.65 & X[,4]<=1.85 & X[,4]>1.75"   
 [10,] "X[,3]>4.85 & X[,4]>0.8 & X[,4]>1.65 & X[,4]<=1.85 & X[,4]>1.75"                 
 [11,] "X[,4]>0.8 & X[,4]>1.65 & X[,4]>1.85"                                            
 [12,] "X[,4]<=0.8"                                                                     
 [13,] "X[,3]<=4.95 & X[,4]>0.8 & X[,4]<=1.55"                                          
 [14,] "X[,3]>4.95 & X[,4]>0.8 & X[,4]<=1.55"                                           
 [15,] "X[,1]<=5.45 & X[,4]>0.8 & X[,4]>1.55 & X[,4]<=1.75"                             
 [16,] "X[,1]>5.45 & X[,3]<=5.45 & X[,4]>0.8 & X[,4]>1.55 & X[,4]<=1.75"                
 [17,] "X[,1]>5.45 & X[,3]>5.45 & X[,4]>0.8 & X[,4]>1.55 & X[,4]<=1.75"                 
 [18,] "X[,1]<=5.95 & X[,3]<=4.9 & X[,4]>0.8 & X[,4]>1.55 & X[,4]>1.75"                 
 [19,] "X[,1]>5.95 & X[,3]<=4.9 & X[,4]>0.8 & X[,4]>1.55 & X[,4]>1.75"                  
 [20,] "X[,3]>4.9 & X[,4]>0.8 & X[,4]>1.55 & X[,4]>1.75"                                
 [21,] "X[,4]<=0.8"                                                                     
 [22,] "X[,3]<=4.85 & X[,4]>0.8 & X[,4]<=1.7"                                           
 [23,] "X[,1]<=5.95 & X[,3]<=4.85 & X[,4]>0.8 & X[,4]>1.7"                              
 [24,] "X[,1]>5.95 & X[,3]<=4.85 & X[,4]>0.8 & X[,4]>1.7"                               
 [25,] "X[,1]<=6.6 & X[,3]>4.85 & X[,4]>0.8 & X[,4]<=1.65"                              
 [26,] "X[,1]>6.6 & X[,3]>4.85 & X[,4]>0.8 & X[,4]<=1.65"                               
 [27,] "X[,3]>4.85 & X[,4]>0.8 & X[,4]>1.65"                                            
 [28,] "X[,3]<=2.45"                                                                    
 [29,] "X[,3]>2.45 & X[,3]<=5.35 & X[,4]<=1.75"                                         
 [30,] "X[,3]>2.45 & X[,3]>5.35 & X[,4]<=1.75"                                          
 [31,] "X[,1]<=5.95 & X[,3]>2.45 & X[,3]<=4.85 & X[,4]>1.75"                            
 [32,] "X[,1]>5.95 & X[,3]>2.45 & X[,3]<=4.85 & X[,4]>1.75"                             
 [33,] "X[,3]>2.45 & X[,3]>4.85 & X[,4]>1.75"                                           
 [34,] "X[,3]<=2.45"           
...
..
..
..
.
.
.
 
mytarmailS #:
Не смог открыть, нас немного блокируют(

Нас блокируют много, как-то приспосабливаемся(

mytarmailS #:
Ну например АМО форесты, бусты состоят из примитивов , правил.

Не утверждал, что отсутствие фиксированного набора параметров делает обучение (оптимизацию) невозможными. Говорил лишь о существенных отличиях от обычной оптимизации при фиксированном наборе параметров. Если не верите, то можете попробовать реализовать деревья или грамматики в МТ5 (где оптимизатор работает для фиксированного набора). Не то чтобы это совсем невозможно, но крайне неудобно.

 
Aleksey Nikolayev #:

Не утверждал, что отсутствие фиксированного набора параметров делает обучение (оптимизацию) невозможными. Говорил лишь о существенных отличиях от обычной оптимизации при фиксированном наборе параметров. Если не верите, то можете попробовать реализовать деревья или грамматики в МТ5 (где оптимизатор работает для фиксированного набора). Не то чтобы это совсем невозможно, но крайне неудобно.

Язык MQL5 позволяет компенсировать отсутствие любых штатных возможностей тестера и оптимизатора. Там, где требуется динамический набор параметров, можно написать на MQL5 внешний оптимизатор для модели.

 
Andrey Dik #:

Язык MQL5 позволяет компенсировать отсутствие любых штатных возможностей тестера и оптимизатора. Там, где требуется динамический набор параметров, можно написать на MQL5 внешний оптимизатор для модели.

Обязательно надо написать градиентный бустинг на mql5, чтобы стать создателем самого корявого велосипеда.
[Удален]  

Студент задаёт вопросы искусственному интеллекту.

Вопрос: Как тебя зовут?

Ответ: Вася. Пошел к чёрту.

Вопрос: Что такое пошел к чёрту?

Ответ: Это ответ на твой второй вопрос Вася.

P.Z.

Вопрос потряс нейронную систему.

 
Aleksey Nikolayev #:
Обязательно надо написать градиентный бустинг на mql5, чтобы стать создателем самого корявого велосипеда.

А чем принципиально отличается бустинг на mql5 от написанного на любом другом языке? mql5 быстрый как C# и почти такой же быстрый как C++. Синтаксис мало чем отличается от этих языков. Для нужд МО очень много встроенных функций языка добавляется в последнее время. 
Штатный тестер удобен как готовая торговая среда, но всё, что касается МО и оптимизации может быть реализовано и без него, если в нём кому-то тесно.
Принципиальных ограничений нет в МТ5.
 
Andrey Dik #:

А чем принципиально отличается бустинг на mql5 от написанного на любом другом языке? mql5 быстрый как C# и почти такой же быстрый как C++. Синтаксис мало чем отличается от этих языков. Для нужд МО очень много встроенных функций языка добавляется в последнее время. 
Штатный тестер удобен как готовая торговая среда, но всё, что касается МО и оптимизации может быть реализовано и без него, если в нём кому-то тесно.
Принципиальных ограничений нет в МТ5.
Какие механизмы распараллеливания вычислений на CPU в mql5 вам известны?
 
Aleksey Nikolayev #:
Какие механизмы распараллеливания вычислений на CPU в mql5 вам известны?

OpenCL для более или менее продвинутых.

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

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

В статье покажу, как написать бинарный ГА с покрытием всех значимых цифр double числа с неограниченно малым шагом параметров на языке MQL5 (по факту ограниченно 16м знаком после запятой для double). И даже это не придел, на MQL5 можно написать расширения стандартных типов чисел.

 
Andrey Dik #:

OpenCL для более или менее продвинутых.

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

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

В статье покажу, как написать бинарный ГА с покрытием всех значимых цифр double числа с неограниченно малым шагом параметров на языке MQL5 (по факту ограниченно 16м знаком после запятой для double). И даже это не придел, на MQL5 можно написать расширения стандартных типов чисел.

Вот и я говорю - велосипед получится весьма знатной корявости.

А OpenCL настолько хорош, что метаквоты не стали писать на нём свой оптимизатор для GPU наверно только потому, что любой из нас с лёгкостью напишет свой.

Ладно, завязываю, а то буду забанен как Максим, если скажу всё что думаю о вашей демагогии.

 
Aleksey Nikolayev #:

Вот и я говорю - велосипед получится весьма знатной корявости.

А OpenCL настолько хорош, что метаквоты не стали писать на нём свой оптимизатор для GPU наверно только потому, что любой из нас с лёгкостью напишет свой.

Ладно, завязываю, а то буду забанен как Максим, если скажу всё что думаю о вашей демагогии.

Так  в чем конкретно корявость то? Если у вас проблемы с владением MQL5, то это не язык виноват, есть специальные профильные ветки для вопрошающих.

Какая моя "демогогия"? Дал вам огромный список литературы по вашей просьбе для прочтения, расширения кругозора, рассказываю и показываю конкретные реализации и стратегии поиска на MQL5. Что ещё от меня нужно, что бы мне не быть облитым помоями и не заставить вас боятся быть забаненым?

Очень удивляюсь с людей.