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

 
Andrey Dik:

Вот же, четко по слогам расписал что я делаю:

Подробнее: на текущем баре сигнал бай, типа покупаем, отсчитываем наименьшее кол-во баров вперёд в будущее и проверяем - в прибыль ли получится сделка, если да то типа закрываем, если нет - отсчитываем вперед ещё один бар и снова проверяем. И так до максимального кол-ва баров и закрываем окончательно. Такой механизм обучения.

Что тут не понятно?... Это не фантазия, сейчас я так именно и делаю. Целевая функция - максимизация прибыли при минимальных просадках. Обучаю с помощью своей генетики.

А чему учим? Вроде можно и просто так реализовать?
 

СанСаныч Фоменко:
1. А чему учим? 

2. Вроде можно и просто так реализовать?

1. Целевая функция - максимизация прибыли при минимальных просадках. Обучаю с помощью своей генетики.

2. Да, очень просто. 

 
кто то знает как можно узнать на каком языке написан пакет для R?
 
mytarmailS:
кто то знает как можно узнать на каком языке написан пакет для R?

Документация. Открывается из Справка в R:

  • Writing R Extensions 
  • R Internals

Кроме этого детально описана работа с Срр 

 

Господа, новая задачка от меня:

 Здесь лежит набор данных в формате .R:  https://drive.google.com/open?id=0B_Au3ANgcG7CcjZVRU9fbUZyUkE

 В наборе примерно 40 000 строк, 101 столбец. Крайний правый столбец - целевая переменная. Слева - 100 входов.

Предлагаю вам попробовать построить регрессионную модель, предсказывающую значение 101-ого столбца на основе 100 остальных столбцов, на первых 20 000 наблюдений.

На оставшихся 20 000+ наблюдениях построенная модель должна показать R^2 не хуже 0.5.

 Затем я раскрываю способ генерации данных и даю свое решение.

 

Подсказка - это данные временного ряда. На вход подается 100 отсчетов, прогноз на 1 вперед. Это не цены и не котировки и не их производные. 

 

 

Алексей 

 
Могу также выложить эти данные в csv. Было бы интересно услышать мнение корифанов о значимости предикторов.

Повторю, что данные чисто синтетические и чисто для развлечения.
 

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

treatments <- designTreatmentsN(dat_ready[1:20000,], colnames(dat_ready)[1:100], tail(colnames(dat_ready),1))
treatments$scoreFrame #важность предикторов определяется через колонку "sig"
treatments$scoreFrame[order(treatments$scoreFrame$sig),] #предикторы отсортированы по важности

Судя по важности vtreat - lag_diff_51 и lag_diff_52 самые полезные. Понемногу добавлял другие предикторы по полученному списку, смотрел на рост R^2 на тренировочных данных для леса. В итоге я остановился на этих предикторах - 51, 52, 53, 54, 55, 17, 68, скорее всего именно они используются для расчёта цели. R^2 на тренировочных данных с ними > 0.9, но на тесте и валидациях всё плохо. Теперь нужно пробовать разные математические операции с этими предикторами, подбирать формулы итд, чтобы на кроссвалидации R^2 тоже рос. Дальше я это искать не буду :)

Дописал позже:
Ещё немного поэкспериментировал, наделал кучу новых предикторов из имеющихся, с разными математическими операциями. Как vtreat, так и лес очень сильно любят эти две комбинации: sum(51,52)  и average(51,52). Но получить формулу для целевого значения я так и не смог. И модели обученные на этих предикторах тоже не могут ничего адекватно предсказать.

 

100 входов? Сильно.

А чего не тысяча?

Ребята, вы совершенно не понимаете что такое нервосеть. 

 
Dr.Trader:

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

Судя по важности vtreat - lag_diff_51 и lag_diff_52 самые полезные. Понемногу добавлял другие предикторы по полученному списку, смотрел на рост R^2 на тренировочных данных для леса. В итоге я остановился на этих предикторах - 51, 52, 53, 54, 55, 17, 68, скорее всего именно они используются для расчёта цели. R^2 на тренировочных данных с ними > 0.9, но на тесте и валидациях всё плохо. Теперь нужно пробовать разные математические операции с этими предикторами, подбирать формулы итд, чтобы на кроссвалидации R^2 тоже рос. Дальше я это искать не буду :)

Дописал позже:
Ещё немного поэкспериментировал, наделал кучу новых предикторов из имеющихся, с разными математическими операциями. Как vtreat, так и лес очень сильно любят эти две комбинации: sum(51,52)  и average(51,52). Но получить формулу для целевого значения я так и не смог. И модели обученные на этих предикторах тоже не могут ничего адекватно предсказать.

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

У вас лес переобучился получается. На CV смотреть лучше. Я позже скажу секрет данных. По идее, он простой. Во входах много избыточности.
 

И еще, 0.9 это переобучение. R^2 больше 0.6 на обучающем множестве это реалистичный максимум.

 И еще - помните про взаимодействия. Одиночные связи могут вести в ложном направлении.

Я вот сам пытаюсь решить свою же задачку. Применил однослойную НС. На тесте R^2 не больше 0.148. Не подходит...

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