Введение

Тестирование торговой стратегии с машинным обучением — важный шаг в определении эффективности вашей торговой стратегии, прежде чем рисковать реальными деньгами на рынке. Это процесс тестирования торговой стратегии на исторических данных для оценки ее эффективности и прибыльности. Акции энергетического сектора S&P 500 являются отличным выбором для этого упражнения, поскольку они представляют разнообразные компании и оказывают значительное влияние на более широкий рынок.

В этом уроке мы обсудим, как протестировать торговую стратегию машинного обучения, используя акции энергетического сектора S&P 500 в качестве своей совокупности акций. Мы будем реализовывать ежедневную стратегию, которая будет покупать и/или продавать при открытии, позволяя переносить позиции из одного периода в другой. Мы также обсудим разумный порядок взвешивания/ранжирования торговых сигналов, позволяющий открывать длинные и короткие позиции со стартовым запасом в 100 000 долларов США.

Цели обучения

После завершения этого урока вы сможете:

  • Разработайте торговую стратегию с использованием машинного обучения, используя акции энергетического сектора S&P 500 в качестве совокупности акций.
  • Внедрите ежедневную стратегию, которая покупает и/или продает при открытии и позволяет переносить позиции из одного периода в другой.
  • Узнайте, как протестировать торговую стратегию машинного обучения на исторических данных.
  • Сравните различные методы машинного обучения, используемые для прогнозирования цен на акции, и выберите лучшую стратегию.
  • Оцените эффективность и прибыльность торговой стратегии, используя показатели эффективности.
  • Оптимизируйте настройки тестирования и параметры модели, чтобы повысить эффективность торговой стратегии.

Краткое изложение торговой стратегии

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

  • Ежедневная торговая стратегия с начальным капиталом 100 000, инвестирование только в акции энергетического сектора.
  • Модель случайного леса с размером окна 10 дней и 20, поскольку количество переменных, используемых при построении модели, используется для получения прогнозируемых значений доходности.
  • Помимо стандартных индикаторов генерируются полосы Боллинджера и в качестве индикаторов используются пересечения близких значений с полосами.
  • Среднее значение открытия. Максимальное, минимальное и близкое значения для акции являются дополнительным индикатором.
  • Максимальное количество сделок в день — 20, выбранное на основе прогнозируемой доходности.
  • Откройте длинную сделку в определенный день, если прогнозируемая доходность превышает 1,2, и войдите в короткую сделку, если прогнозируемая доходность меньше 0,985.

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

  • Мы генерировали торговые сигналы и управляли портфелем на основе технических индикаторов и прогнозов для ограниченного набора акций.
  • Мы генерируем набор технических индикаторов, таких как RSI, импульс, sma и импульс, для каждой акции во вселенной, используя функцию genIndicators, и сохраняем полученные данные в фрейме данных, называемом индикаторами.
  • Мы генерируем прогнозы с помощью таких моделей, как случайный лес, повышение, SVM, GLM для каждой акции на основе индикаторов, используя функцию genPredictions.
  • Мы используем прогнозы для генерации сигналов покупки и продажи для каждой акции с помощью функции genSignals и сохраняем полученные данные в фрейме данных, называемом сигналами.
  • Затем мы моделируем торговлю на основе этих сигналов, применяя торговые правила для генерации притоков и оттоков денежных средств и соответствующим образом обновляя стоимость портфеля. Этот процесс выполняется для каждого торгового дня в данных.
  • Наконец, мы рассчитываем различную статистику производительности портфеля с помощью функции портфеляStats на основе закрытых позиций и значений портфеля, сгенерированных в ходе торгового моделирования.
  • Вышеуказанные шаги затем повторяются для всех моделей машинного обучения, перечисленных выше, после чего одна из них выбирается на основе результата.
  • Выбранная модель дополнительно уточняется путем изменения параметров

Предварительная обработка: загрузка данных

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

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

Ниже приведено краткое описание каждого используемого пакета:

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

  • Размер окна — определяет количество дней, в течение которых данные о запасах используются для обучения модели. Для модели машинного обучения, к которой мы пришли, размер окна равен 10, поскольку это дало нам наилучшую отдачу.
  • Самый длинный индикатор. Самый длинный индикатор, определяемый в разделе создания индикаторов, представляет собой скользящее среднее за 40 дней, поэтому это значение инициализируется как 40. Это позволяет нам иметь достаточно данных, чтобы начать торговать с первого дня.
  • Максимальное количество дневных сделок — максимальное количество сделок в данный день установлено на уровне 20.
  • Первоначальный капитал, как упоминалось ранее, установлен на уровне 100 000, а пороговые значения длинных и коротких позиций установлены на уровне 1,02 и 0,985 соответственно.

После установки всех параметров файл секторов импортируется в среду, которая затем используется для фильтрации совокупности акций. Далее удаляются символы, которые не остаются в S&P 500 на протяжении всего периода тестирования. Код для обоих этих шагов приведен ниже:

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

В приведенном ниже коде используются пакеты Parallel и foreach в R для определения количества доступных ядер ЦП в системе, создания кластера рабочих процессов и регистрации их для параллельных вычислений с помощью пакета doParallel.

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

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

Генерация индикаторов

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

  • Среднее — это среднее значение значений открытия, максимума, минимума и закрытия для каждой акции в данный день.
  • Полосы Боллинджера — для данных об акциях были созданы полосы Боллинджера, и в качестве индикаторов были добавлены следующие поля:
  • Dn — Нижнее значение полосы
  • Up — Верхнее значение полосы
  • Mavg — значение простой скользящей средней за 5 дней, с использованием которого были созданы полосы.
  • Пересечения с полосами Боллинджера -
  • UpperBB — 1, если значение закрытия акции больше верхнего значения полосы, и 0 в противном случае.
  • LowerBB — 1, если значение закрытия акции ниже нижнего значения полосы, и 0 в противном случае.
  • TrendUp — 1, если значение закрытия акции больше простой скользящей средней, и 0 в противном случае.
  • TrendDn — 1, если значение закрытия акции меньше простой скользящей средней, и 0 в противном случае.

Код для генерации этих индикаторов приведен ниже —

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

Ниже приведен список индикаторов, которые уже были предоставлены и сохранены в коде.

  • 1, 10 и 20-дневный импульс
  • Разница MACD
  • Простые скользящие средние за 5, 10, 20 и 40 дней
  • Соотношения 5-дневных SMA с 10, 20 и 40 SMA; Соотношение 10-дневных SMA с 20- и 40-дневными SMA.
  • Значения RSI за 5, 10 и 20 дней

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

Всем отношениям со знаменателем, равным нулю, присваивается значение NA, а затем они удаляются из генеральной совокупности.

Дата и символ добавляются обратно в фрейм данных, а день недели добавляется в качестве индикатора.

Модели машинного обучения

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

Мы реализовали различные модели машинного обучения и выполнили настройку гиперпараметров с использованием вложенной перекрестной проверки, чтобы максимизировать доходность портфеля. В основном мы исследовали линейные модели (логистическая регрессия), модели мешков (случайный лес), машины опорных векторов (svm), нейронные сети, модели повышения (машины повышения градиента, xgbTree).

Для каждого дня в окне бэктестинга мы рассматриваем окно в 10 дней, рассматриваем данные за последние 10 дней как данные тестирования и делаем прогнозы на текущий день. Чтобы измерить производительность модели, мы используем метрики R_square и записываем их в кадр данных прогнозов. Поскольку мы разрабатываем модели машинного обучения каждый день в течение двух лет, общее бэктестирование занимало очень много времени, особенно в случае машин с повышением градиента, где мы реализовали вложенную перекрестную проверку. В следующем разделе этого руководства я расскажу больше о моделях и другой важной терминологии.

Вложенная перекрестная проверка

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

Внешний цикл перекрестной проверки используется для оценки производительности модели на невидимых данных и оценки ее эффективности обобщения. Обычно это предполагает деление набора данных на k сгибов, где k — определяемый пользователем параметр, и использование k-1 сгибов для обучения, а оставшийся сгиб — для тестирования. Этот процесс повторяется k раз, при этом каждая складка используется в качестве тестового набора один раз, а показатели производительности усредняются для получения общей оценки производительности модели.

Внутри каждого сгиба внешнего цикла внутренний цикл перекрестной проверки используется для настройки гиперпараметров или выбора модели. Он включает в себя дальнейшее разделение обучающего набора на m сгибов, где m — еще один определяемый пользователем параметр, и использование m-1 сгибов для обучения и оставшегося сгиба для проверки. Различные значения или модели гиперпараметров оцениваются в наборе проверки, и выбирается наиболее эффективные значения или модель гиперпараметров. Этот процесс повторяется для каждой складки во внешнем цикле, в результате чего получается набор оптимизированных значений гиперпараметров или выбранных моделей для каждой складки.

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

Значения R-квадрата

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

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

Математически R-квадрат рассчитывается как пропорция суммы квадратов различий между прогнозируемыми значениями и средним значением зависимой переменной, деленная на сумму квадратов различий между наблюдаемыми значениями и средним значением зависимой переменной. Формула R-квадрата:

R2= 1 — РССТСС

Здесь,

  1. RSS — Сумма квадратов остатков
  2. TSS — Общая сумма квадратов

В следующем коде я вычисляю значение R Square для модели GBM.

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

Случайный лес

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

В задачах регрессии случайный лес использует несколько деревьев решений для прогнозирования непрерывных выходных значений. Каждое дерево решений в случайном лесу обучается на случайном подмножестве данных, обычно получаемом посредством начальной загрузки (случайная выборка с заменой), и случайном подмножестве функций. Это вносит разнообразие среди деревьев и помогает уменьшить переоснащение, что является распространенной проблемой в задачах регрессии, где цель состоит в том, чтобы хорошо обобщить невидимые данные.

Детальный анализ кода

Подготовка данных

  • Поезд создается как подмножество стандартного фрейма данных, фильтруя строки на основе диапазона дат, определенного от и до. Столбцами, выбранными для поезда, являются все столбцы от третьего столбца ([3:ncol(stock)]) до предпоследнего столбца (train[-ncol(train)]), за исключением последнего столбца, который имеет значение dow.
  • columns_to_remove определяется как вектор имен столбцов, которые необходимо удалить из кадра данных поезда, включая «cross.trenddn», «cross.trendup» и «cross.lowerBB».
  • Столбцы, указанные в columns_to_remove, удаляются из кадра данных поезда с использованием синтаксиса подмножества R [, !(colnames(train) %in% columns_to_remove)].

Обучение моделей

Модель rf.model создается с помощью функции ranger(), которая представляет собой пакет R для подгонки моделей случайного леса. Для mtry установлено значение 20, что указывает количество переменных, выбранных случайным образом при каждом разбиении, а для num.trees установлено значение 4000, которое определяет количество деревьев в модели случайного леса.

Оценка модели

rsq рассчитывается как среднее значение r.squared из rf.model, округляется до трёх десятичных знаков и сохраняется для дальнейшего анализа.

Логистическая регрессия

GLM, что означает «Обобщенная линейная модель», расширяет концепцию линейной регрессии для обработки более широкого диапазона распределений данных и типов ответов. Линейная регрессия предполагает, что переменная ответа (зависимая переменная) подчиняется нормальному распределению, а связь между переменными-предикторами (независимыми переменными) и переменной ответа является линейной.

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

  1. Во-первых, мы подгоняем GLM к обучающим данным (обучению) с помощью функции glm(). Формула nextreturn ~ . — nextopen — nextclose указывает формулу модели, где nextreturn — это переменная ответа, а . представляет все остальные переменные в наборе данных, за исключением nextopen и nextclose которые исключаются с помощью оператора —. Аргументу семейства присвоено значение inverse.gaussian, что указывает на то, что переменная ответа соответствует обратному распределению Гаусса, которое является одним из многих вариантов распределения (гауссово, гамма, пуассоновское, квазибиномиальный, биномиальный и другие возможные варианты), доступные в GLM.
  2. Затем мы используем функцию predict() для получения прогнозируемых значений переменной ответа (nextreturn) на основе подобранной модели GLM (glm.fit), используя тестовые данные в качестве входных данных. Аргументу типа присвоено значение response, что указывает на то, что прогнозируемые значения должны находиться в исходном масштабе переменной ответа.
  3. После прогнозирования значений ответа мы вычисляем значение R-квадрата для модели GLM. Функция summary() используется для получения сводной статистики из подобранной модели GLM, а отклонение и null.deviance извлекаются из сводки. Значение R-квадрата рассчитывается как 1 — deviance/null.deviance, а функция round() используется для округления результата до трех десятичных знаков.

Машины опорных векторов (SVM)

SVM особенно известны своей способностью обрабатывать сложные данные с множеством функций, включая как линейно разделяемые, так и нелинейно разделяемые данные. Основная идея SVM заключается в том, чтобы найти гиперплоскость, которая лучше всего разделяет точки данных на разные классы таким образом, чтобы максимизировать запас, который представляет собой расстояние между гиперплоскостью и ближайшими точками данных из каждого класса. Эти точки данных называются опорными векторами, отсюда и название «Машины опорных векторов». Гиперплоскость выбирается такой, чтобы обеспечить наилучшее разделение классов и минимизировать ошибку классификации.

Детальный анализ кода

В этом коде мы сначала подгоняем модель SVM к обучающим данным и прогнозируем значения ответа. Затем значения R Square рассчитываются для дальнейшего анализа. Подробные шаги следующие:

  1. Параметр ядра указывает тип ядра, которое будет использоваться для преобразования данных в многомерное пространство. Мы установили для ядра значение radial для использования ядра радиальной базисной функции (RBF). Параметр стоимости определяет стоимость неправильной классификации, а параметр эпсилон используется для указания эпсилон-трубки вокруг функции регрессии, которая используется для определения допуска к ошибкам прогнозирования.
  2. В строке номер 266 мы используем функцию R2_Score() из пакета MLmetrics для расчета оценки R-квадрата между прогнозируемыми значениями (svm.predicted) и фактическими значениями ответа. переменная nextreturn в тестовых данных (test). Показатель R-квадрата является мерой того, насколько хорошо модель SVM соответствует данным: более высокое значение указывает на лучшее соответствие.

SVM популярны по нескольким причинам.

  1. Эффективность в многомерных пространствах: SVM могут эффективно обрабатывать наборы данных с большим количеством функций, что делает их подходящими для задач, включающих большое количество переменных или многомерных данных.
  2. Устойчив к выбросам: SVM менее чувствительны к выбросам по сравнению с некоторыми другими алгоритмами машинного обучения, такими как линейная регрессия или логистическая регрессия, поскольку они направлены на максимизацию разницы между классами и меньше зависят от отдельных точек данных.
  3. Обработка нелинейности: SVM могут обрабатывать нелинейно разделимые данные, используя различные типы функций ядра, такие как линейная, полиномиальная, радиальная базисная функция (RBF) или сигмовидная, что позволяет им моделировать сложные отношения между переменными.
  4. Регуляризация. SVM по своей сути включают методы регуляризации, такие как использование поля и параметра soft-margin, что помогает предотвратить переобучение и повысить производительность обобщения.

Нейронные сети

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

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

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

Детальный анализ кода

  1. Скрытый параметр указывает количество скрытых слоев и количество нейронов в каждом скрытом слое нейронной сети. В данном случае нейронная сеть имеет 3 скрытых слоя по 20, 20 и 5 нейронов в каждом скрытом слое соответственно.
  2. Параметру line.output присвоено значение TRUE, что указывает на то, что выходной слой нейронной сети должен использовать функцию линейной активации, подходящую для задач регрессии.
  3. Мы используем ту же функцию R2_Score() из пакета MLmetrics для расчета оценки R-квадрата, а затем она сохраняется в предварительном кадре данных для дальнейшего анализа.

Машины для повышения градиента

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

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

Детальный анализ кода

Мы реализуем машины для повышения сортности в нашей торговой стратегии следующим образом.

  1. Сначала мы подгоняем модель машины повышения градиента (GBM) к обучающим данным (поезду) с помощью функции gbm(). Для параметра распределения установлено значение гауссово, поскольку это, похоже, проблема регрессии с переменной непрерывного отклика. Другие параметры, такие как n.trees (количество деревьев в ГБМ), установлены на 1000, сжатие (скорость обучения ГБМ) установлено на 0,01, установлено взаимодействие.глубина (максимальная глубина каждого дерева в ГБМ). как 3, cv.fold (количество сверток перекрестной проверки) установлено равным 5, а для verbose установлено значение false, чтобы отключить журналы выполнения моделей.
  2. Здесь gbm внутренне выполнит k-кратную перекрестную проверку, чтобы найти оптимальные деревья среди числа деревьев, которые мы указываем в параметре n.trees.
  3. После обучения модели мы выполняем перекрестную проверку модели GBM (gbm.model), используя функцию gbm.perf с методом «cv». Он возвращает оптимальное количество деревьев (n.trees.cv) на основе перекрестной проверки производительности модели.
  4. Наконец, мы прогнозируем переменную ответа, вычисляем оценку R Square и сохраняем ее для дальнейшего анализа.

Преимущества машин повышения градиента

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

Результаты портфолио

Функция «portfolioStats» принимает в качестве входных данных торговые данные, стоимость портфеля и период времени и рассчитывает различные показатели эффективности портфеля. Он рассчитывает такие показатели, как средний выигрыш, средний убыток, процент выигрышных длинных и коротких сделок, совокупный доход, средний доход портфеля, коэффициент Шарпа, максимальная просадка и транзакционные издержки. Он также генерирует график доходности портфеля с течением времени. Выходные данные представляют собой список вычисленных показателей производительности.

Случайный лес –

Размер окна = 10

Случайный лес — это алгоритм машинного обучения, который можно использовать для задач прогнозирования. Он может обрабатывать как категориальные, так и непрерывные переменные-предикторы и способен фиксировать нелинейные связи между предикторами и переменной отклика. Важно обеспечить высокое качество данных, правильность обучения и проверки модели, а также соответствие используемых показателей оценки задаче прогнозирования.

Мы заметили, что модель случайного леса с размером окна 10 показала наилучшие результаты с точки зрения доходности. Ниже приведены показатели производительности для 5-дневного и 12-дневного окна, которые не принесли таких же результатов, как 10-дневное окно.

Теперь мы также объясним модели, которые не сработали так хорошо:

Результаты GLM:

Как мы видим, модель работает не очень хорошо. Пригодность обобщенной линейной модели (GLM) для данных о запасах зависит от различных факторов, таких как тип переменной отклика, предположения о распределении и природа переменных-предсказателей.

Если переменная ответа представляет собой двоичный результат, такой как сигнал покупки/продажи, или категориальную переменную, такую ​​​​как «вверх» или «понижение» цен на акции, то подходящим подходом может быть логистическая регрессия, которая является разновидностью GLM.

Если переменная ответа является непрерывной, например, цены на акции, то может подойти линейная регрессия. Однако цены на акции часто демонстрируют ненормальное и гетероскедастическое поведение, нарушая предположение о нормальности линейной регрессии.

Результаты SVM

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

Результаты нейронной сети

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

Результаты GBM

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