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

 
elibrarius:
Обычно для повторяемости устанавливают Seed (встроенного ГСЧ) в какое-то значение. Если нет, то берется рандом. Возможно в этом пакете Seed тоже есть - проверьте.

да думаю что есть, но суть в том что и без ГСЧ должно быть всегда одинаково, в пакете аналоге "umap" постоянно один и тот же результат

 
Aleksey Vyazmikin:

специально для вас, только с одной надеждой что будете р-ку учить)

install.packages("TTR","uwot")

clos <- d$X.CLOSE.

get.ind <- function(x,n=5){
  
  all_to.all_colums <- function(x,names){
    cb <- combn(ncol(x),2)
    res <- matrix(ncol = 0,nrow = nrow(x))
    for(i in 1:ncol(cb)){
      j1 <- cb[1,i]
      j2 <- cb[2,i]
      
      res <- cbind(res,   x[,j1] - x[,j2]  )
      colnames(res) <- paste0(names, 1:ncol(res))
    }
    return(res)}
  
  library(TTR)
  aroon  <- aroon(x,n)
  BBands <- BBands(x,n)            ;   BBands <- all_to.all_colums( BBands, names = "BBands")
  CCI    <- CCI(x,n)
  CMO    <- CMO(x,n)
  DEMA   <- diff(c(0,DEMA(x,n)))
  Donchian <- DonchianChannel(x,n) ;   Donchian <- all_to.all_colums( Donchian, names = "Donchian")
  MACD   <- MACD(x,n)
  moment <- momentum(x,n)
  PBands <- PBands(x,n)            ;   PBands <- all_to.all_colums( PBands, names = "PBands")
  RSI    <- RSI(x,n)
  SAR    <- diff(c(0,SAR(cbind(x,x,n))))   
  SMA    <- diff(c(0,SMA(x,n)))
  stoch  <- stoch(x,n)
  TDI    <- TDI(x,n)
  VHF    <- VHF(x,n)
  WPR    <- WPR(x,n)
  
  ind <- cbind.data.frame(aroon,BBands,CCI,CMO,DEMA,Donchian,
                          MACD,moment,PBands,
                          RSI,SAR,SMA,stoch,TDI,VHF,WPR)
  return(ind)
}
get.target <- function(x, change){
  zz <- TTR::ZigZag(x,change = change,percent = F)
  zz <- c(diff(zz),0) ; zz[zz>=0] <- 1 ; zz[zz<0] <- -1
  return(zz)
}

X <- get.ind(clos)
Y <- as.factor(get.target(clos,change = 0.001))


library(uwot)

train.idx <- 100:8000
test.idx <- 8001:10000

UM <- umap(X = X[train.idx,],
           y = Y[train.idx], 
            approx_pow = TRUE, 
            n_components = 3, 
            ret_model = TRUE,
            n_threads = 4L, 
            scale = T)

predict.train <- umap_transform(X = X[train.idx,], 
                                model = UM, n_threads = 4L, 
                                verbose = TRUE)

predict.test <- umap_transform(X = X[test.idx,], 
                                model = UM, n_threads = 4L, 
                                verbose = TRUE)



library(car)

scatter3d(x = predict.train[,1], 
          y = predict.train[,2], 
          z = predict.train[,3],
          groups = Y[train.idx],
          grid = F, 
          surface = F,
          ellipsoid = F,
          bg.col = "black",surface.col = c(2,3))

там сразу две функции

get.ind

и

get.target

первая создает дата сет из индикаторов, вторая целевую из зигзаг

все что вам надо это загрузить данные с ценой закрытия в 10к и записать ее в переменную clos

и получите свой umap с целевой


https://github.com/jlmelville/uwot
 
mytarmailS:

специально для вас, только с одной надеждой что будете р-ку учить)

там сразу две функции

и

первая создает дата сет из индикаторов, вторая целевую из зигзаг

все что вам надо это загрузить данные с ценой закрытия в 10к и записать ее в переменную clos

и получите свой umap с целевой


https://github.com/jlmelville/uwot

Очень приятно, спасибо!

Побольше бы комментариев :)

Вопрос тут в том, как синхронизировать предикторы из файла с полученной целевой?

 
Aleksey Vyazmikin:

Очень приятно, спасибо!

Побольше бы комментариев :)

Вопрос тут в том, как синхронизировать предикторы из файла с полученной целевой?

ну поскольку целевая строиться по цене то она уже синхронизирована, а если предикторы по той же сцене строятся то они значит тоже)

или я не понял вопрос  


Я постарался переменные называть так чтобы понятно было без коментариев

 

Вопрос от нуба.


Есть три переменные A, B, C. Из них составлено руками какое-то условие. Например.

(A > B) && (A - B < C) && (A + 3 * C > 2 * B)


Хочется это условие воспроизвести автоматом. Находить его не надо, т.к. я его уже знаю. Но нужно иметь например десяток каких-то весовых коэффициентов, определенная комбинация которых в состоянии с высокой вероятностью попадать в это условие, когда туда (полином это или НС - не знаю, т.к. ноль) подставляя A, B, C, получается выполнение оригинального условия.


Меня интересует, какой вид и сколько входных весовых коэффициентов у искомой функции, чтобы подобные оригинальные условия можно было воспроизводить через веса?

 

Итак, как получилось обучить деревья по кластерам, рассказываю и показываю.

Получилась такая модель для распознания классов

На истории достаточно точная Accuracy 0.9196756 - т.е. логика кластера вполне воспроизводится.

Дальше обучил для каждого кластера по модели

Кластер 1

Кластер 2

Кластер 3

Кластер 4

У всех кластеров Accuracy 0.53 примерно.

А вот так выглядит модель без разбиения на кластеры

Accuracy 0.5293815 - примерно как и у кластеров.

Если сравнивать модели для кластеров и одну модель дерева со всей выборкой, то видно, что в у деревьев кластеров больше листьев с обобщенной информацией выборки с целевыми 1 и -1, что теоретически хорошо.

Посмотрим, что показывают тесты - в начале посмотрим на периоде обучения

Модель без разбиения на кластеры:

Модель с разбиением на кластеры:

Видим, что точность лучше у модели без кластеров, но трейдов больше у модели на кластерах, что позволяет добиться более хороших финансовых показателей.

А теперь посмотрим на выборку вне обучения.

И вот наши кластеры:

И модель без кластеров:

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

Решил посмотреть листья с кластерных моделей по отдельности, если бы не было кластера, на гистограмме по убыванию:


В общем всего 6 убыточных листа (нулевую целевую убрал - это запрет на вход), получается, что не попадаем в нужный кластер?

 
mytarmailS:

ну поскольку целевая строиться по цене то она уже синхронизирована, а если предикторы по той же сцене строятся то они значит тоже)

или я не понял вопрос  


Я постарался переменные называть так чтобы понятно было без коментариев

Как взять свой дата сет с предикторами и ценой закрытия и загрузить, указав колонку с ценой закрытия, а не использовать вариант генерации индикаторов в R?

Как я понимаю, раз целевая - вершки ZZ, то часть выборки с предикторами должна отфильтроваться, вот, а значит для подачи предикторов надо так же отфильтровать таблицу с предикторами, или как?

 
fxsaber:

Вопрос от нуба.


Есть три переменные A, B, C. Из них составлено руками какое-то условие. Например.


Хочется это условие воспроизвести автоматом. Находить его не надо, т.к. я его уже знаю. Но нужно иметь например десяток каких-то весовых коэффициентов, определенная комбинация которых в состоянии с высокой вероятностью попадать в это условие, когда туда (полином это или НС - не знаю, т.к. ноль) подставляя A, B, C, получается выполнение оригинального условия.


Меня интересует, какой вид и сколько входных весовых коэффициентов у искомой функции, чтобы подобные оригинальные условия можно было воспроизводить через веса?

как вариант

(A > B) && (A - B < C) && (A + 3 * C > 2 * B)

На вход НС - значения A,B,C n раз (допустим, 1000), на выход ответы вашей формулы для этих значений в виде 0;1. Попробовать. И посмотреть ошибку классификации, насколько хорошо модель воспроизводит условие.

если надо именно посмотреть какой вид и интерпретировать, то через деревья

Вариант 2 (если первый плохо сработал) - A, B, A-B, C, A+3*C, 2B - переменные, все то же самое как в первом варианте загнать в дерево. И можно посмотреть его структуру как у Алексея на картинках выше
 
fxsaber:

Есть три переменные A, B, C. Из них составлено руками какое-то условие.

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

Если условие известно, то подобрать значения А, Б и Ц, при которых оно выполняется, может тупой ГА.

А если нет, то у задачи нет однозначного решения, можно придумать много разных условий для разных значений переменных.

 

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

но я не шпрехаю в чем смысл воспроизводить условие через МО

Причина обращения: