Проект завершен 🎉
Основной код был написан и успешно работал. Далее я занялся кропотливой полировкой.
Признаки - это те показатели на которых модель обучается: в начале проекта стремился извлечь как можно больше показателей из исходных данных (open, close, high, low, volume). Для этого использовал специальную библиотеку для технического анализа, а также нейросеть.
Затем потребовалось проверить, не дублируют ли показатели друг друга - прямо или косвенно. Ведь такое дублирование могло придавать отдельным признакам излишний вес и вводить модель в заблуждение.
В ходе множества итераций выяснилось, что признаки, сгенерированные нейросетью, лишь ухудшали результаты. После их удаления модель стала обучаться быстрее, а прогнозы - точнее. В итоге в работе осталась только классическая подборка технических показателей.
Порог - это граница между 0 и 1, на основе которой формируется прогноз (покупать/ не покупать). По умолчанию используется середина - 0.5. Чем выше значение порога, тем меньше прогнозов выдаёт модель, но тем увереннее она в оставшихся сигналах.
Здесь нейросеть оказалась полезной: она подсказала мне про коэффициент Шарпа для оценки соотношения риска и доходности. Я рассчитал коэффициент Шарпа для разных порогов и выбрал лучший вариант, с учётом того, что количество прогнозов должно составлять не менее 44 за полгода (эта цифра тоже была определена опытным путём).
На графике видно, что при пороге 0.653 точность прогнозов модели достигает 66 %, а “грязная” доходность составляет 117,4 % (это не реальная доходность, а суммарная доходность всех сгенерированных сигналов).
Я сейчас изучаю глубокое обучение и при таком подходе результаты могут быть интереснее, но это уже совсем другая история…
На этом мои полномочия все, спасибо за внимание. Проект можно посмотреть тут: https://github.com/ChtoGde/stocks_analyser