Стратегия в этом посте будет касаться не обычных технических индикаторов, а некоторых из моих собственных разработок. Кроме того, мы увидим разницу между эффективностью стратегии на тестовых и обучающих данных, а также с изменениями размера обучающих данных и длины прогноза.
В отличие от моих предыдущих постов, здесь я буду использовать динамический таймфрейм для получения данных за последние несколько дней. Но прежде чем мы начнем, давайте импортируем необходимые библиотеки.
Я определил дату начала для извлечения данных как дату на 365 дней/1 год в прошлом. Вы можете использовать статический формат даты, но такой вариант поможет вам получать самые свежие данные при каждом запуске этого кода.
Затем я создал несколько индикаторов и изменил имена некоторых столбцов, чтобы потом легко ссылаться на их код.
Кратко объясню индикаторы, которые я использовал. Я создал столбец под названием «dif». Он измеряет изменение цены закрытия относительно вчерашнего диапазона цен. Мы пытаемся проверить, есть ли какая-то корреляция между сегодняшним закрытием по отношению к вчерашней волатильности. После этого я создал столбец с названием «sec_dif», это разность второго порядка изменения цен закрытия. Здесь мы измеряем изменение в dif относительно изменения вчерашнего диапазона.
Мы также используем другой индикатор, называемый diff_v, который используется для измерения изменения диапазона цен сегодня по сравнению с тем, что было днем ранее.
После этого я рассчитал рыночную доходность. Обратите внимание, что эти отчеты сделаны в будущем. Поскольку прогноз создается в конце дня или непосредственно перед его закрытием, мы можем просто умножить прогнозируемый тренд на эту доходность и легко измерить эффективность стратегии.
После создания индикаторов мы вычисляем доходность и столбцы сигналов, необходимые для измерения эффективности стратегии и для обучения алгоритма соответственно. Мы будем использовать доходность предыдущего дня как часть индикаторов, чтобы увидеть, есть ли какая-либо корреляция между тенденцией на завтра и сегодняшними рыночными показателями.
Мы масштабируем данные после выбора наших индикаторов с помощью MinMaxScaler. Эта функция масштабирования уменьшает значения функций до диапазона от 0 до 1.
Затем мы определяем размер тестовых данных, в данном случае я выбрал 20 дней, которые представляют данные за последний месяц.
После этого я использовал классификатор дерева решений с возрастающей сложностью, добавляя больше глубины и признаков, чтобы увидеть, насколько хорошо алгоритм предсказывает.
Я построю график эффективности стратегии с возрастающей сложностью (1-9, 9 - самые сложные), а также измерю точность этих алгоритмов.
Нет четкого указания на какую-либо тенденцию или то, как работают алгоритмы, в целом этот результат очень неоднозначен. Теперь давайте выведем эффективность на обучающих данных и визуализируем эффективность.
Здесь наблюдения очень ясны. Вы можете ясно видеть, что более сложные алгоритмы очень хорошо справляются с предсказанием тренда, а менее сложные больше похожи на подбрасывание монеты. Учитывая что это обучающие данные, мы могли ожидать, что наиболее сложный алгоритм будет лучше работать с тестовыми данными. Но, к сожалению, это не так. Как видите, эффективность за последние 20 дней на графике выше ясно показывает, что все алгоритмы почти одинаково плохи. Причина этого в том, что мы не используем данные, доступные до этого момента, для прогнозирования. Другими словами, мы не делаем прогноз для последних данных, используя алгоритм, обученный на всех данных до этого дня, но мы предполагаем, что данные прошлого (365 дней - 20 дней) будут иметь ту же тенденцию, что и следующие 20 дней, что в большинстве случаев не так. Давайте проверим это, уменьшив количество прогнозируемых дней до 5, и тогда мы увидим заметную разницу в эффективности алгоритмов на тестовых данных.
Здесь вы можете видеть, что алгоритмы, которые переобучаются или не соответствуют обучающим данным, работают плохо, а алгоритмы, которые лучше всего обучаются, имеют стабильную эффективность. Обратите внимание, что вы видите только 4 из 9 алгоритмов, поскольку большинство из них перекрываются. Если вы хотите проверить точность стратегии, вы можете снова вывести код, содержащий точность, с новыми тестовыми данными. Здесь, в идеале, когда кто-то использует данные временного ряда, нам нужно использовать подход типа LSTM для прогнозирования. То есть использовать данные за «x» дней для обучения алгоритма, а затем делать прогнозы на следующий день. Это значительно повысит вашу точность. Мы рассмотрим это в следующем посте.
Комментариев нет:
Отправить комментарий