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

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

Какую проблему я хочу решить?

В качестве названия моей диссертации «Пусть машина читает свечные графики, как люди», я заставил компьютер «читать» свечные графики для прогнозирования движения цен. Вместо того, чтобы напрямую использовать числовые данные о ценах для прогнозирования, трейдеры-люди могут лучше работать благодаря чтению данных, сформированных в виде графиков, таких как графики цен. Свечной график - один из самых популярных трейдеров на протяжении долгого времени. Моя работа - воспроизвести такую ​​процедуру с помощью методов машинного обучения.

Задачу можно сформулировать следующим образом: учитывая k-дневный свечной график, я хочу, чтобы компьютер мог его проанализировать и спрогнозировать тренд цены (k + 1) -го торгового дня. Кроме того, я просто делю «тренд» на 2 класса: восходящий или нисходящий. Если цена закрытия (k + 1) -го торгового дня больше, чем цена закрытия k-го торгового дня, тренд считается «восходящим», напротив, тренд нисходящий. Определение тренда показано в Формуле 1, где «C» обозначает цену закрытия.

Что такое свечной график?

Как показано на рисунке 1, свечной график состоит из разных «палочек». Каждая ручка представляет движение цены (вверх или вниз) за определенный интервал, например 5 секунд, 5 минут, 1 день, 20 дней и так далее. Как показано на рисунке 2, палка состоит из теней (линий) и тела (блоков разного цвета), длина которых определяется 4 разными ценами в интервале: ценой открытия, максимума, минимума и цены закрытия. Если цена закрытия выше цены открытия, то направление цены интервала вверх, наоборот, направление вниз. Свечной график состоит из разного количества палочек, и трейдеры будут читать его, чтобы помочь им спрогнозировать тенденцию изменения цены в будущем.

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

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

Если бы меня спросили, какой подход я бы выбрал, если бы я хотел построить систему автоматической торговли, я бы все равно выбрал подход, который напрямую использует числовые данные. Один из моих консультантов также сказал мне: «Если бы я работал в промышленности, я бы не использовал такой трудоемкий и сложный подход. Я не хочу тратить свою жизнь зря! ». Но он также сказал: «Но, Hallblazzaer, вы сейчас проводите исследования». (С хитрой улыбкой).

Данные

Данные, которые я использовал для всех экспериментов и базовых уровней, были историческими ценами на 6 будущих товаров, которые были проданы Тайваньской фьючерсной биржей (TAIFEX). Причины, по которым я их выбрал, можно проверить в моей диссертации [1]. Подробная информация о данных приведена в таблице 1. Обратите внимание, что среди всех экспериментов и базовых показателей целью прогнозирования было выбрано значение TX, поскольку он имеет самый высокий объем торгов, а это означает, что системе автоматической торговли, основанной на TX, не нужно было заботиться о том, чтобы бесполезно в реальном мире. Однако с точки зрения проведения исследования обобщение алгоритма является одной из важных частей. Так что на самом деле мои эксперименты не охватили все аспекты, которые нужно улучшить в моих будущих работах.

Исходный уровень: IEM

Поскольку в каждой сказке есть плохие парни, которых нужно победить или преодолеть трудности, у каждой статьи есть базовая линия, которую нужно победить, независимо от того, разумны они или нет. В моем случае моим оппонентом была модель прогнозирования, основанная на прогнозировании с помощью числовых данных о ценах. Я реализовал модель [2], названную индексной моделью (IEM), которая использовала традиционные индексы для прогнозирования. Существует множество индексов, помогающих людям принимать торговые решения, например, простая скользящая средняя (SMA) [3], индекс товарного канала [4]. Каждый индекс рассчитывается по числовым формулам, основанным на знаниях и опыте в области антропологии. Мой подход основан на человеческом поведении, но знания и опыт должны быть получены на самом компьютере, поэтому IEM является для него хорошей базой.

На рисунке 3 показана архитектура IEM, в которой истории цен конвертируются в 10 различных значений индексов на основе 10 традиционных индексов, соответственно. Основываясь на определении каждого индекса, каждое значение индекса может напрямую отображать тенденцию изменения цены. В [2] представлен детерминированный слой тренда, который преобразует каждое значение индекса в тренд (только вверх / вниз, с двоичной классификацией) непосредственно перед дальнейшим анализом. Затем эти 10 трендов объединяются классификатором для прогнозирования движения цены. В [2] 4 различных классификатора реализованы и используются для сравнения производительности, включая нейронную сеть, SVM, наивный байесовский алгоритм и случайный лес. В своей диссертации я реализовал все из них для сравнения, и лучшая производительность (наивысшая точность) была у Наивного Байеса, точность которого могла достигать 77,52%.

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

Модель на основе VGG16-CAE (сверточный автокодировщик)

Это первая модель, которую я построил, простая, интуитивно понятная модель глубокого обучения. В то же время у него была ужасная производительность, которая сильно подорвала мою уверенность в проведении исследований и заставила меня засыпать моими советниками огромным количеством сомнений, таких как «Как вы могли это сделать?», «Почему вы ожидали, что это сработает?».

Архитектура модели была такой, как показано на рисунке 4. Он состоял из 2 частей: предварительно обученной сети VGG16 для выбора признаков и полносвязных слоев (FC) для классификации. Я обучил эту модель, как показано на Рисунке 5, вдохновленным [5]. Основная идея [5] состоит в том, чтобы обучить модель на основе VGG16-CAE преобразовывать графики свечей в глубокие особенности, используя глубокие функции для кластеризации и анализа результатов кластеризации. Я подумал, если модель [1] достаточно хороша для кластеризации, почему бы не использовать ее для классификации?

Результат оказался не таким, как я ожидал. Автокодер на шаге 1 показал себя очень хорошо. По произвольному свечному графику Auto-Encoder мог реконструировать свечной график, который был очень похож на исходный ввод от глубоких функций. Однако на шаге 2, какие бы графики свечей ни моделировались, они предсказывали бы их с одинаковыми метками.

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

Предиктор комбинирования эффектов паттерна (PECP)

Итак, что случилось с моделью на основе VGG16-CAE? Мои советники и я думали, что проблема может заключаться во входных данных, то есть в самом свечном графике. Исходными данными для модели были 20-дневные свечные графики, как показано на рисунке 2, но в оттенках серого. Однако люди-трейдеры не могут напрямую прогнозировать тенденцию изменения цены на таких длинных интервальных графиках. Вместо этого они будут рассматривать меньшие регионы. Это означает, что модель действовала не как настоящие люди.

Как показано на рисунке 6, разные графики свечей с короткими интервалами предполагают разные эффекты окончательного тренда, которые также называются «паттернами». Люди-трейдеры объединят эффекты каждого паттерна и определят окончательный тренд цены. Обратите внимание, что на рисунке 6 рассматриваются только схемы с тремя палочками. Однако в целом люди будут рассматривать более разные модели, такие как 1-палка, 2-палка, 5-палка и так далее, и учитывать их эффекты. В моих экспериментах, независимо от предиктора объединения эффекта паттерна или его преемников, я установил интервал для графиков с длинными интервалами на 20 (20-дневные графики) и интервал для более коротких интервальных графиков на 3 (3-дневные графики).

Основываясь на теории, я разработал предиктор комбинирования эффектов паттерна (PECP). Архитектура PECP, как показано на рисунке 7, содержит 18 ResNet-18 для создания временного эффекта и FC Layers для определения окончательных эффектов. Моя первоначальная идея заключалась в следующем: каждый трехдневный паттерн должен влиять на тренд 21-го дня; если бы я мог предсказать их и объединить их по порядку времени, я мог бы точно определить тренд 21-го дня. Как я обучал модель, показано на рисунке 8, где процесс обучения можно разделить на 2 этапа. Первым этапом было обучение 18 ResNet-18, и каждый ResNet-18 использовался для оценки эффекта тренда 21-го дня от каждого 3-дневного паттерна (было 18 3-дневных свечных графиков в течение 20 торговых дней). Второй этап - тренировка FC Layers для объединения результатов по времени для определения окончательной тенденции.

Однако результаты ошеломили меня, как это сделала модель на основе VGG16-CAE, потому что я получил ужасный отказ на шаге 1. Результаты шага 1 были как результаты модели на основе VGG16-CAE, независимо от того, какие 3-дневные графики свечей были предоставлены в ResNet-18. моделей, каждая модель будет предсказывать их по одной и той же метке, не говоря уже об использовании этих результатов для обучения слоев FC на шаге 2. PECP также не удалось.

Я думал, что при разработке PECP было две основные проблемы. Во-первых, я использовал слишком глубокую сеть (ResNet-18) для анализа свечных графиков, размер которых составлял всего 48x48 пикселей. Из-за этого я не мог быстро отлаживать и тщательно настраивать гиперпараметры модели, потому что обучение моделей занимало бы много времени. Другой, по моей первоначальной идее, PECP должен быть методом стекирования и ансамбля. Основываясь на объяснениях моих советников, мой дизайн был неправильным, потому что на самом деле 18 ResNet-18 можно было сократить до одного ResNet-18, как показано на рисунке 9. Благоприятного ансамбля модели не стало. В результате я переработал PECP.

Предиктор комбинации эффектов паттерна V2 (PECP-V2)

Перепроектированный PECP (PECP-V2) был таким, как показано на рисунке 10, который содержал 18 неглубоких 2D CNN (3-5 слоев) для анализа графиков свечей и 1D CNN для прогнозирования тренда на основе конкатенированных глубоких особенностей, созданных из 2-D CNN. PECP-V2 был сквозной моделью, что означало, что 2D CNN и 1D CNN не нуждались в отдельном обучении. Это снижает сложность тренировочного процесса. Обратите внимание, что в PECP-V2 проблема ансамбля не рассматривалась, потому что я просто хотел проверить, возможна ли идея «комбинировать шаблоны с более короткими интервалами для прогнозирования».

Каждый входной трехдневный свечной график был преобразован в одномерный вектор, который получил название «свечной график с глубоким представлением». Эти глубокие представления были объединены с более крупными одномерными векторами для дальнейшего анализа для одномерных CNN. Использование 1D CNN было основано на [6] [7] [8], в которых CNN использовалась для обработки задачи прогнозирования временных рядов. В таком сценарии 1D CNN анализирует не пространственные, а временные отношения входных данных, что позволяет 1D CNN решать задачу прогнозирования временных рядов. В моем сообщении [9] я также просто рассказываю, как это работает. Но моя реализация была неправильной, и я нашел ее, пока не закончил и не обучил модель с разными гиперпараметрами.

Согласно [6] [7] [8], входными данными должны быть временные ряды, как показано на Рисунке 11, которые представляют 18 графиков трехдневных свечей, которые были объединены вместе с вектором по порядку времени. Однако в моей реализации глубокие представления были объединены, как показано на рисунке 12, которые объединены вместе с каналом в порядке времени. Хотя он по-прежнему связан с порядком времени, нельзя было гарантировать, был ли такой подход подтвержден. Я тоже исправляю это в последних версиях.

Хотя результаты были еще хуже - точность была хуже, чем у модели на основе VGG16-CAE и PECP, но PECP-V2 не предсказал все входные графики свечей в соответствии с одним и тем же трендом. Казалось, что модель может читать шаблоны по некоторым причинам, но дизайн модели ограничивал это. В результате я еще больше улучшил PECP-V2.

1D модель на основе CNN (Deep Candlestick Predictor, DCP)

Следующей версией PECP-V2 была модель на основе 1D CNN. Основываясь на предложении моих советников, в моей диссертации он назывался Deep Candlestick Predictor, DCP, архитектура которого представлена ​​на рисунке 13. DCP состоял из 3 компонентов, Chart Decomposer для разделения исходных длинных интервальных графиков (20 дней) на короткие интервальные. (3 дня), Autoencoder для преобразования входных диаграмм в глубокие представления и 1D CNN для анализа и прогнозирования.

Фактически, то, что делали Chart Decomposer и 1D CNN, было таким же, как и PECP-V2 при предварительной обработке и анализе для прогнозирования, соответственно. Разница заключалась в автоэнкодере и объединенных глубоких функциях. Как я и планировал сделать после создания PECP, я заменил функцию уменьшения размерности нескольких 2D CNN (и ResNet-18) на одну 2D CNN. Но проблема заключалась в том, как создавать низкоразмерные глубокие особенности, которые были «достаточно хороши» для представления исходных диаграмм. Как я знал, Autoencoder был одним из способов достижения цели.

Как показано на рисунке 14, обучение автоэнкодера можно разделить на 2 этапа. Целью первого этапа было найти автоэнкодер, который может кодировать исходные входные данные для глубоких функций и декодировать их обратно в исходные входные данные, где чем больше выходной сигнал декодера будет похож на входной, тем лучше. Одним из важных свойств Autoencoder является производительность Encoder (глубокие функции достаточно хороши, чтобы соответствовать исходному вводу), основанная на сходстве между вводом и выводом кодировщика. Однако, правда может быть, Encoder хуже, но декодер достаточно хорош, чтобы восстановить его обратно. Единственный способ проверить это - напрямую использовать глубокие функции для обучения. В моем случае это был второй этап использования 1D CNN для анализа глубоких особенностей с целью прогнозирования.

Результаты показали, что после объединения глубинных объектов, как показано на рисунке 11, и использования 1D CNN для прогнозирования точность могла достигнуть 69,11%, что все еще хуже, чем у базовых показателей (77,52%). В результате я попытался передать обучение для дальнейшего повышения производительности DCP.

DCP x Трансферное обучение

Трансферное обучение - широко используемый подход для обучения моделей глубокого обучения. В большинстве случаев невозможно собрать необходимое количество данных для обучения, что приведет к тому, что модель не сможет достичь своей исходной производительности. Трансферное обучение заключается в обучении модели на (небольшом) целевом наборе данных на основе весов, которые обучаются на большом и тесно связанном наборе данных. В моих предыдущих экспериментах метод трансферного обучения также применялся при обучении моделей на основе VGG16 и ResNet-18, которые были основаны на предварительно обученных весах, выпущенных авторами моделей.

За исключением обучения IEM, при обучении каждой модели глубокого обучения я напрямую использовал все исторические данные о ценах 6 будущих товаров. Но, как я описывал ранее, моей целью прогноза был TX. Использование всех данных для обучения было просто для того, чтобы временно избавить меня от проблемы недостаточности данных при поиске доступных моделей. Мне все еще нужно было сделать акцент на модели TX. В результате, когда я обнаружил, что 1D CNN имеет высокий потенциал быть лучшей моделью, я перенес веса, обученные на всех товарах, для обучения TX. Результаты соответствовали моим ожиданиям - 80,96%. Основываясь на успехе, мы с моими советниками опубликовали статью в IDAA 2018 [1], мы даже полетели в Иокогаму, чтобы выступить на конференции. Однако все оказалось так непросто, как я думал. В моих экспериментах возникла критическая проблема, из-за которой я полностью переписал все коды и свою диссертацию. Я собираюсь обсудить их в следующей части.

Ссылка

[1] [Го. и другие. (2018), Deep Candlestick Predictor: основа для прогнозирования движения цены по свечным графикам]
[2] Джигар Патель и др. (2015), Прогнозирование движения акций и индекса цен акций с использованием методов подготовки детерминированных данных и машинного обучения
[3] Простое скользящее среднее
[4] Индекс товарного канала, CCI
[5] Guosheng Hu et al. (2017), Изучение глубокого представления акций: от свечных графиков до инвестиционных решений
[6] Денни Бритц (2015), Понимание сверточных нейронных сетей для НЛП
[7] Патти Райан (2017) , Прогнозы фондовых рынков с помощью естественного языка
[8] Тал Перри (2017), Сверточные методы для текста
[9] Hallblazzaer (2018), 學習 手記 : Приложение NLP на основе CNN