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

 
Yousufkhodja Sultonov:

МА-шки созданы природой, чтобы дурачить Вас - не понимающих законов рынка. А все повелись на эту удочку. Поразительно, но, факт. Оглянитесь, и поймете, что, МА - свойство всех числовых рядов, независимо от того, рыночные они или рандомные. Очнитесь трейдеры, не дайте себя обманывать.

Я бы назвал это паранойей.))

МАшки самый обычный фильтр, который ничем не провинился. Любой мат метод хорош там и для того, где он применим.

 
Maxim Dmitrievsky:

так а в чем собственно вопрос в поиске фичей?

есть только цена в нашем случае. Любое преобразование цены это априорные закономерности, в виде некой "памяти" процесса (индикаторы, построенные за n-периодов). Т.е. если мы не знаем закономерностей, то подавать на вход можем только цену, приращения с разными периодами, что бы учесть процессы памяти.

что может быть кроме приращений в цене? или не так, что вы там так скрупулезно подбираете, есть из чего? :)

Есть процесс атворегрессии с порядком, можно сделать то же самое через НС. По моему это единственное, чему можно учить. Ну т.е. берем эконометрические модели и расширяем их

ИМХО.. поэтому я фичи даже не пытаюсь подбирать :) и нервы в порядке (но не очень)

иными словами что мы можем найти в цене: тренд, сезонность, цикличность, шум

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

 

Нашёл ещё один интересный пакет для отсева предикторов. Называется FSelector. Предлагает около десятка методов для отсева предикторов , в том числе с помощью энтропии.

Файл с предикторами и таргетом взял отсюда - https://www.mql5.com/ru/forum/86386/page6#comment_2534058


library(FSelector)
library(corrplot)

load("ALL_cod.RData")
trainTable <- Rat_DF1

PREDICTOR_COLUMNS_SEQ <- 1:27
TARGET_COLUMN_ID     <- 28

targetFormula <- as.simple.formula(colnames(trainTable)[PREDICTOR_COLUMNS_SEQ], colnames(trainTable)[TARGET_COLUMN_ID])

impMatrix <- matrix(NA, nrow = 0, ncol = length(PREDICTOR_COLUMNS_SEQ))

impMatrix <- rbind(impMatrix, colnames(trainTable)[PREDICTOR_COLUMNS_SEQ] %in% cfs(targetFormula, trainTable))
rownames(impMatrix)[nrow(impMatrix)] <- "cfs"
impMatrix <- rbind(impMatrix, chi.squared(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "chi.squared"
impMatrix <- rbind(impMatrix, colnames(trainTable)[PREDICTOR_COLUMNS_SEQ] %in% consistency(targetFormula, trainTable))
rownames(impMatrix)[nrow(impMatrix)] <- "consistency"
if(class(trainTable[,TARGET_COLUMN_ID]) != "factor"){
  impMatrix <- rbind(impMatrix, linear.correlation(targetFormula, trainTable)[[1]])
  rownames(impMatrix)[nrow(impMatrix)] <- "linear.correlation"
  impMatrix <- rbind(impMatrix, rank.correlation(targetFormula, trainTable)[[1]])
  rownames(impMatrix)[nrow(impMatrix)] <- "rank.correlation"
}
impMatrix <- rbind(impMatrix, information.gain(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "information.gain"
impMatrix <- rbind(impMatrix, gain.ratio(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "gain.ratio"
impMatrix <- rbind(impMatrix, symmetrical.uncertainty(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "symmetrical.uncertainty"
impMatrix <- rbind(impMatrix, oneR(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "oneR"
impMatrix <- rbind(impMatrix, random.forest.importance(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "random.forest.importance"
impMatrix <- rbind(impMatrix, relief(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "relief"

impMatrix

for(i in 1:nrow(impMatrix)){
  if(length(unique(impMatrix[i,]))==1){
    impMatrix[i,] <- 0
  }else{
    impMatrix[i,] <- -1 + (impMatrix[i,]-min(impMatrix[i,]))/(max(impMatrix[i,])-min(impMatrix[i,]))*2
  }
}

while(nrow(impMatrix) < ncol(impMatrix)){
  impMatrix <- rbind(impMatrix, 0)
}
while(ncol(impMatrix) < nrow(impMatrix)){
  impMatrix <- cbind(impMatrix, 0)
}

impMatrix <- as.matrix(impMatrix)
colnames(impMatrix) <- colnames(trainTable)[PREDICTOR_COLUMNS_SEQ]

corrplot(impMatrix)

Оценку предиктора каждым методом я в конце показал на графике - 

Синенький цвет это хорошо, красненький - плохо (для corrplot результаты были масштабированы в [-1:1], для точной оценки смотрите результаты вызова самих функций cfs(targetFormula, trainTable), chi.squared(targetFormula, trainTable), итд)
Видно что X3, X4, X5, X19, X20 хорошо оценены почти всеми методами, для начала можно взять их, потом пробовать добавить/убрать ещё.

Однако, модели в rattle не прошли тест с этими 5 предикторами на Rat_DF2, чуда опять не произошло. Т.е. даже с оставшимися предикторами нужно подбирать параметры модели, делать кроссвалидацию, самому добавлять/убирать предикторы.

 
СанСаныч Фоменко:

Не могли бы Вы прогнать окно по результату слияния и дать графики: 

  • величины энтропии
  • результаты adfTest
  • результаты  ArchTest

Взял просто eurusd m1 за примерно январь этого года, и скользящее окно в 1 день.

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

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

Файлы:
 
Dr. Trader:

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

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

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

 
Dr. Trader:

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


Вот, поэтому, я и говорю - не торопитесь. 

При высокой энтропии получаем нормальное распределение на котором идет контртрендовая торговля

При низкой энтропии - распределение Парето, тренд, "память" - как угодно назовите.

У Вас, оказывается в R какие-то готовые вещи есть, Вам легче. Мне же приходится сейчас массу работы делать для учета негэнтропии, поэтому выпал из дискуссий на форуме.

Остаюсь при своем мнении - учет энтропии это ключ ко всему.

 
Maxim Dmitrievsky:

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

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

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

 
Dr. Trader:

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

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

уже писал: случайные на локальном уровне, их не учесть все, не сместившись на большой лаг или другой масштаб, и там процесс снова приобретает предсказуемый вид. Одно НО - генеральная совокупность не известна и кол-во переходов на другой масштаб ограничено. Поэтому Александр берет тики. Так то оно так, но даже это работать будет не всегда, когда упремся в недостаточность истории из-за ее отсутствия, и как следствие, в отсутствие четкого представления закономерностей исследуемого ВР.

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

 
Dr. Trader:

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

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

Я хоть и не использую нейросети, но ветку читаю, ибо Фейнман был убежден, что прогнозировать дальнейшее движение частицы из состояния А в состояние Б можно (именно из состояния в состояние, а не тупо экстраполировать в бесконечность).

Для этого он использовал на входе обычные приращения между текущим и предыдущим положениями, ну и учитывал массу доп.параметров. Первым негэнтропию начал использовать Шелепин Л.А. и умер зачем-то... не довел работы до конца. Поэтому, эту тему предстоит добить именно нам.

 

Да! Забыл сказать.

Состояниями считается набор данных, который характеризует частицу почти полностью. Т.е. это набор данных, проще говоря - объем выборки, со своими характеристиками - эксцессом, асимметрией, негэнтропией и т.д.

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

Это и есть то, чего я жду от этой ветки. Если нужна помощь в определении нужного объема выборки - пишите, постараюсь помочь.

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