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

 
Vizard_:
"Суслика" мне найти не удалось, облажался))) А для чего все эти упражнения... кто "хипует", тот поймет.
TЕсли честно я не понял.........
 
mytarmailS:

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

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

Первый подход. У меня например есть целевая переменная - рост/падение цены за следующий бар. Я её взял не потому что это хорошая целевая переменная, а потому что надо было с чего-то начинать, и я взял что проще :) Дальше  взял кучу индикаторов, и теперь пытаюсь научить модель на "куче индикаторов" распознавать "рост/падение". Я рад что хоть что-то из этого получилось, потому что нет никаких гарантий что рандомно взятая целевая переменная вообще предсказуема, и нет никаких гарантий что мои предикторы несут достаточно информации для её предсказания. ForeCA в этом случае служит лишь для предобработки данных, чтобы привести их к виду на котором нейронке будет проще обучиться. Например данные вместо этого можно нормализовать, или взять дельты соседних значений, или сделать из них PCA компоненты, итд. Всё это облегачет работу нейронки, ей на таких предобработанных данных проще обучаться. От ForeCA в данном случае требуется чтобы оно как-то сгруппировало одинаковые классы. Но не факт что ForeCA в этом поможет, это уже как повезёт, зависит от имеющихся предикторов и от целевой переменной.
Если кратко, то в таком случае к целевой переменной подбирается модель и предикторы которые все вместе чудом имеют хоть какую-то предскзательную способность.

Другой подход. Взять кучу предикторов, рассортировать их по некой "достоверности", и удалить ненужные и не значимые. Например если индикатор всё время имеет константное значение, он явно бесполезен. Если предиктор был сгенерирован функией random(), то он тоже бесполезен. Итд, важно оставить те предикторы которые действительно несут в себе какую-то информацию. Я в этом мало разбираюсь, единственное что помню - как найти важность предиктора для PCA компонент (параметр pruneSig в caret), вроде бы адекватная оценка. ForeCA в этом случае должен отсеять мух от котлет, и поможет найти достоверные предикторы. Как все эти пакеты узнают что важно а что нет - загадка, но они действительно находят зашумлённые и рандомные предикторы и отбраковывают их. Качественный предиктор будет тот, который не рандомен, и не шум.
Дальше, имея набор качественных предикторов, нужно пробовать их для предсказания чего-либо. Например можно построить карту кохонена, найти зависимость поведения рынка от класса в карте кохонена. Сделать выводы о том на каких классах торговать, на каких нет, и таким образом построить для себя новую целевую переменную. Целевая переменная будет иметь высокую прогнозируемость имеющимеся предикторами так как построена на них, всё звучит хорошо, но думаю тут будет куча своих проблем и подвохов.

 
Dr.Trader:

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

Первый подход..... 

Другой подход....

Подходы разнообразные, а торговать собираемся?

Что собираемся торговать?

Тренд?

Отклонение?

Уровень?

При этом в уме держим, что у нас всего два приказа - BUY/SELL. Или их некоторое разнообразие? Войти в рынок BUY/ Выйти из рынка BUY / Войти в рынок SELL / Выйти из рынка SELL 

Вот и варианты целевой переменной.

Далее.

А можем ли мы сформировать целевую переменную тому, что мы торгуем?

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

И т.д.

Но начинать надо с того, ЧТО торгуем.  

 
Mihail Marchukajtes:
нужно умножить переменную v2 на свой лаг и поделить на v3 .
Покажи 10 строк с такими столбцами (v2; лаг v2 (Lag1_v2); v3; v11 (цель) и столбец с формулой v2*Lag1_v2/v3)

v2;Lag1_v2;v3;v11(цель);v2*Lag1_v2/v3

Архив с файлом не надо загружать.
 
Mihail Marchukajtes:
лага сеть не видит.
 пустые строки обрезаешь и суешь куда хочешь...
 

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

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

 

Сделал тестовый код для прогноза с ForeCA. Нужна таблица trainData, с целевой переменной в последней колонке. Она будет поделена по строкам на 2 части для тренировки/валидации (будет поделена строго посередине). Предскательную модель взял lm, её почему-то всегда с PCA используют в примерах, думаю и тут подойдёт. Можно функцию lm(...) в коде заменить на другую модель.
ForeCA требует данные в матрице с полным рангом после cov(). Я приделал код который проверяет это заранее, и убирает колонки с низким eigenvalue. Там всё в цикле, и долго выполняется, и наверное можно было сделать проще. У меня часть предикторов отсеялась именно таким способом, не знаю хорошо это или плохо.
Результат у меня пока никакой, пакет съел 5 гигов опреативы и надолго задумался, попробуйте, может кому даст хороший прогноз.

Файлы:
 
Vizard_:
Покажи 10 строк с такими столбцами (v2; лаг v2 (Lag1_v2); v3; v11 (цель) и столбец с формулой v2*Lag1_v2/v3)

v2;Lag1_v2;v3;v11(цель);v2*Lag1_v2/v3

Архив с файлом не надо загружать.
Если честно не вижу смысла из этой игры.... Строить выходную переменную на основании не хитрых преобразований входных данных, смысла нет. Если ТС будет работать хорошо то сеть нет надобности использовать. Другое дело меня это натолкнуло на мысль, а что если оптимизатор будет расматривать тренировочный файл не построчно, а в комплексе. Ища взаимосвязь не только между столбцами, но и в прошлых значениях любых столбцов. В итоге может получиться вполне интересная штука. Помимо нормализации данных, будет происходить ещё и предобработка данных, выдавая не только формулу нормализации но и формулу предобработки, как например: Перед нормализацией, необходимо v2 умножить на лаг1 v5 и т.д. Тогда дщумаю поиск будет куда интересней. Вернее предобработка выдаёт формулы преобразования, некий предоптимизатор. Потом мы применяем эти формулы для данных, получая другой енабор данных и уже его пихаем в оптимизатор для построения модели.... Как Вам такой вариант развития событий.....???? Некий многомерный поиск зависимостей, не только между столбцами, но и между отношения с прошлыми значениями. Ктонибудь может подсказать как это в МКУЛЬ организовать???? Я бы попробовал :-)
 
Я например перед построением модели оптимизирую каждый из входов, к выходу оптимизатором МКУЛЬ. Тоесть если использую машку, то перед тем как строить модель, подбираю такие параметры машки на тренировочном интервале, чтобы она давала как можно больше прибыльных сигналов, и так с каждым входом, потом запихиваю это всё в оптимизатор....иииии.... модель становится стабильней. Напрочь пропадает сообщение о мусоре на входе и выходе. модель тернируется стабильно но порядка 50% обобщения или чуть выше, потому что каждый из предиктов при оптимизации в МКУЛЬ выдает в редком случае количество прибыльных сделок больше 50%. Но это я делаю с каждым входом по отдельности, и в основном подбирается параметр усреднения и лаг, на данном участве, и уж никак не взаимосвязь с другими входами. А вот если предположим организовать поиск оптимизатором этой связи, а чём я писал выше. Далее получить параметры отношения между данными. Применить их к данным, а уж потом запихнуть это всё в оптимизатор. Вот тогда думаю будет имет смыл, и модель должна будет получиться с должным уровнем обобщения. Только вот как это организовать, пока не знаю... Думаю... Выслушаю любую идею...... Я так думаю что тут поможет простенькая нейросеть на МКУЛЬ, которая построить такую кривую, которая максимально опишет все сигналы на тестовом множестве правильно, тем самым поможет построить хорошую модель в основном оптимизаторе Решетова (тут уж кто на чём сидит). Есть какиенибуть сетки простые в МКУЛЬ????
 
Dr.Trader:

Сделал тестовый код для прогноза с ForeCA.....

 я тоже..  решил сделать по быстрому взял ирисы, добавил 10 предикторов с шумом

и просто обучил форест, потом взял ту же дату с шумами и у с помощью foreCA уменьшил размерность до 4 предикторов и на них обучил снова форест

результат:

просто форест на новых данных

Prediction   setosa versicolor virginica

  setosa         16          0         0
  versicolor      0         15         1
  virginica       0          0        18

Overall Statistics

Accuracy : 0.98    

 форест даже не заметил что в данных шумы ...

 а с foreca дела по хуже

Prediction   setosa versicolor virginica
  setosa          6          6         4
  versicolor      5         10         1
  virginica       8          5         5

Overall Statistics
                                          
               Accuracy : 0.42 
Файлы:
code.txt  1 kb
 
mytarmailS:

 я тоже..  решил сделать по быстрому взял ирисы, добавил 10 предикторов с шумом

и просто обучил форест, потом взял ту же дату с шумами и у с помощью foreCA уменьшил размерность до 4 предикторов и на них обучил снова форест

результат:

просто форест на новых данных

 форест даже не заметил что в данных шумы ...

 а с foreca дела по хуже

Правда хорошо, а счастье лучше!

Правда = 42%, о-о-о-чень положительно влияет на депо.

Хотя можно жить счастливо, но с обнуленным депо 

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