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

 
Alexander_K2:

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

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

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

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

тогда такой вопрос - допустим, есть процесс авторегрессии, т.е. зависимости настоящих состояний от прошлых

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

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

 
Maxim Dmitrievsky:

тогда такой вопрос - допустим, есть процесс авторегрессии, т.е. зависимости настоящих состояний от прошлых

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

Тут вот какой момент, который, очевидно, вызывает трудности.

Набор данных не локален во времени

Это принципиальный момент!

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

Эту проблему я обхожу 2 способами:

1. работа исключительно с конкретным набором тиков (объемом выборки) - он один для конкретной пары раз и навсегда. Но этот набор характеризуется разным временем своего формирования и строить прогнозы нельзя.

2. работа исключительно с постоянным временным окном. В этом случае, напротив, имеем плавающий объем выборки тиков в нем. Как обойти эту сложность? Ответ - вводить т.н. "псевдосостояния", т.е. как бы добирать кол-во данных в окне наблюдений до требуемого объема выборки. Я это делаю принудительно работая в экспоненциальной шкале времени. Т.е. на строго определенном окне времени через экспоненту считываю данные и неважно был ли это реально пришедший тик или нет. В этом случае прогнозы строить можно. Единственное - сомневаюсь, что экспоненциальные интервалы это правильное решение. Фейнман работал с равномерными интервалами.

Если выбрать 1 путь - задача прогнозирования не решаема в принципе.

2 путь - решаема, но таких архивов нет.

Вот на этом я и застрял и пока тупо набираю свои собственные архивы. Другого пути не вижу, увы...

 
Alexander_K2:

2. работа исключительно с постоянным временным окном. В этом случае, напротив, имеем плавающий объем выборки в нем. Как обойти эту сложность? Ответ - вводить т.н. "псевдосостояния", т.е. как бы добирать кол-во данных в окне наблюдений до требуемого объема выборки. Я это делаю принудительно работая в экспоненциальной шкале времени. Т.е. на строго определенном окне времени через экспоненту считываю данные и неважно был ли это реально пришедший тик или нет. В этом случае прогнозы строить можно. Единственное - сомневаюсь, что экспоненциальные интервалы это правильное решение. Фейнман работал с равномерными интервалами.

Вот на самом деле экспоненциальные промежутки как раз и помогают решить проблему постоянного окна, насколько я понимаю, это правильное решение (должно быть). Допустим, обучающая выборка это 1000 баров(тиков), не важно. Само собой, при скользящем окне закономерности меняются, и НС нужно переобучать. Но если в нашу выборку попадает комбинация приращений, лаг которых увеличивается по экспоненте.. интересно, какое кол-во суммарно нужно разных лагов, что бы система не только вышла бы за пределы окна (допустим, лаг 1500), но и описала бы так же эффективно все возможные состояния для такого же окна, только теперь скользящего. 

может, я гоню :D но попробовать то несложно. Но вопрос в том, когда нужно остановиться

 
Maxim Dmitrievsky:

Вот на самом деле экспоненциальные промежутки как раз и помогают решить проблему постоянного окна, насколько я понимаю, это правильное решение (должно быть). Допустим, обучающая выборка это 1000 баров(тиков), не важно. Само собой, при скользящем окне закономерности меняются, и НС нужно переобучать. Но если в нашу выборку попадает комбинация приращений, лаг которых увеличивается по экспоненте.. интересно, какое кол-во суммарно нужно разных лагов, что бы система не только вышла бы за пределы окна (допустим, лаг 1500), но и описала бы так же эффективно все возможные состояния для такого же окна, только теперь скользящего. 

может, я гоню :D но попробовать то несложно. Но вопрос в том, когда нужно остановиться

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

Т.е. к примеру, если в данный момент времени увидели повышение негэнтропии (начался тренд), то через определенный интервал времени негэнтропия вернется к своему характерному среднему значению, вычисленному по истории.

Как определить этот интервал времени перехода? Ну, вот это и есть настоящий прогноз, без дураков. Этого я и жду от нейросетей и читаю эту ветку :)

 
Alexander_K2:

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

Т.е. к примеру, если в данный момент времени увидели повышение негэнтропии (начался тренд), то через определенный интервал времени негэнтропия вернется к своему характерному среднему значению, вычисленному по истории.

Как определить этот интервал времени перехода? Ну, вот это и есть настоящий прогноз, без дураков. Этого я и жду от нейросетей и читаю эту ветку :)

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

на след. неделе сделаю :) только слово негэнтропия заменим на слово дисперсия

 
Maxim Dmitrievsky:

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

на след. неделе сделаю :)

Ждем, Максим. Серьезно - уверен, что это можно делать. Только не забудь сигнал открыть - первый подпишусь.

Только 2 вещи реально могут работать на рынке - нейросети и теорвер. Все остальное - барахло, подгонка и пустые карманы как результат.

 
Alexander_K2:

Ждем, Максим. Серьезно - уверен, что это можно делать. Только не забудь сигнал открыть - первый подпишусь.

Только 2 вещи реально могут работать на рынке - нейросети и теорвер. Все остальное - барахло, подгонка и пустые карманы как результат.

Я Вам скину бота, как пример, можете потом подокручивать что-нибудь :D сделаю в виде индикатора сначала, для наглядности

 

В догонку к этому - https://www.mql5.com/ru/forum/86386/page643#comment_6472393  

Dr. Trader:

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


Функция для отсева предикторов random.forest.importance() показала вполне достойные результаты на некоторых тестах. Неудобно что по её мнению вообще все предикторы хоть немного но важны.. , но если например посчитать среднюю важность, и взять только те предикторы что важны выше среднего - получается очень хороший результат.

library(FSelector)

load("ALL_cod.RData")
trainTable <- Rat_DF1
PREDICTOR_COLUMNS_SEQ <- 1:27
TARGET_COLUMN_ID      <- 29

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

rfImportance <- random.forest.importance(targetFormula, trainTable)
colnames(trainTable)[PREDICTOR_COLUMNS_SEQ][rfImportance[[1]] > mean(rfImportance[[1]])]
 
Dr. Trader:

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

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

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

Проводить тесты yf исходной котировке бессмысленно, так как на глаз видно, что ряд не стационарен.

А интересны (не для меня - я этим пользуюсь всегда) графики для временного ряда log(p/p-1).

Что там? И конечно нужна шкала по оси ординат.

 
Dr. Trader:

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


Есть еще очень любопытный большой набор инструментов Relief отбора предикторов в пакете CORElearn. 

В моих долгих упражнениях на эту тему я не нашел ничего лучше, чем функции отбора предикторов, которые в caret, особенно saf.

Но все это не будет работать, если не сделан предварительный отбор предикторов по принципу "имеет отношение" к целевой переменной. 

Повторю еще раз на примере двух классов:

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



ПС.

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

Вот с учителем:

sgpls( x, y, K, eta, scale.x=TRUE,
        eps=1e-5, denom.eps=1e-20, zero.eps=1e-5, maxstep=100,
        br=TRUE, ftype='iden' )
Arguments

x       Matrix of predictors.
y       Vector of class indices.
K       Number of hidden components.
eta     Thresholding parameter. eta should be between 0 and 1.
scale.x Scale predictors by dividing each predictor variable by its sample standard deviation?
eps     An effective zero for change in estimates. Default is 1e-5.
denom.eps       An effective zero for denominators. Default is 1e-20.
zero.eps        An effective zero for success probabilities. Default is 1e-5.
maxstep Maximum number of Newton-Raphson iterations. Default is 100.
br      Apply Firth's bias reduction procedure?
ftype   Type of Firth's bias reduction procedure. Alternatives are "iden" (the approximated version) or "hat" (the original version). Default is "iden".

Пакет spls

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