О тех индикаторах с точки зрения нейросетей.

Еще

Что если в качестве лейблов на выход подавать не рост/падение рынка завтра, а срабатывание каких то техиндикаторов? Есть несколько классических правил торговли. Ну например пробой снизу вверх Close BolingerUpperband это к покупке, и сверху вниз BolingerDownperband к шорту. Или дивергенция MACD. Или Close пробивает SMA. Ну а че вы смеетесь? Когда я работал в представительстве Финама, мы предлагали клиентам следовать корпоративной стратегии, а вся стратегия это пробои Болинджеров. Я, как человек который вообще тогда не понимал как это все делается, готовился услышать какую то хитрую систему для зарабатывания денег, от московских экспертов, а когда услышал «тайну», я такой «эээээ. ». Или вот дивергенция MACD, открываешь википедию и там прямо «это сильнейший технический индикатор, если дивергенция то вот прям точно точно!».
Месяц назад я пробовал подать на вход CNN+GramianAngular падение/рост рынка, без каких то видимых успехов. Может тут проблема в инструменте? Попробуем спрогнозировать с помощью нейросети срабатывание этих самых техиндикаторов, подав цены накануне. Причем усложним задачу, будем подавать не точное число баров, а фиксированное, скажем 30. То есть нейросетка получает избыточные данные: мы хотим предсказать пересечение Close c SMA(25) а мы ей 30 баров предлагаем.
Сразу скажу, что результаты хорошие. Особо я не утруждался долгим обучением, но видно как сетка очень шустро, от эпохи к эпохе улучшает показатели точности. Ине суть что мы предсказываем — Bolinger, MACD, SMA, результаты примерно одинаковы, или их можно сделать одинаковыми обучив нейросеть чуть подольше. И на test выборке все хуже не становится.
Архитектура такая:

О тех индикаторах с точки зрения нейросетей.

Угадывает она срабатывание тех индикаторов с точностью на test 85-90%.
Для любителей усваивать информацию зрительно, взял котировку какой то фишки, наложил на нее SMA25 и красными стрелками указал пересечение ее Close. Красные черточки сверху это пересечение сверху вниз, нижние-наоборот. Ну а зеленые это прогнозы. Как видим угадываем с высокой точностью.

О тех индикаторах с точки зрения нейросетей.

Ну и некоторые циферки

О тех индикаторах с точки зрения нейросетей.

Если сеть не путать и подавать точно число баров, то сеть начинает чуть быстрей обучаться, а так разницы нет, что позитивненько. Приятная инвариантность. И для смеха я сделал наоборот, дал сети недостаточное число данных (10 баров для пересечения с SMA(25)) — выкручивайся мол. Опять не стал долго обучаться, 10 минут и будя. Тем более что обучение застряла на определенной отметке, без какого то улучшения (что логично, как говорится иди незнаю куда, принеси то незнамо что-это трудно). Ну и на прогнозе чуда не произошло

О тех индикаторах с точки зрения нейросетей.

Если вместо 25 необходимых подать 20 баров, то результаты будет получше:

О тех индикаторах с точки зрения нейросетей.

Ну и если кто то дочитал до этого момента, вполне возможно задастся вопросом, что то типа «а зачем вообще все это нужно?!». Где профит?! Мани где?! Нет тут профитов и нет мани, мы ответили на вопрос-может ли CNN получив на выход сырой ряд ряд цен, спрогнозировать срабатывание тех индикаторов. То есть по сути, может ли CNN улавливать сложные конфигурации time series. Ответ — да, может. Ура товарищи. Вот вы можете по одному виду временного рядка сказать будет на следующем баре дивергенция MACD, или пересечение Bolinger или SMA? А моя нейросеть может.
Хотя одно практическое применение я могу придумать-ну вот например вы нашли какое то чудесное сочетание тех индикаторов, которые приносят профит. И хотите это показать публике. Но засвечивать Грааль не хотите. Ну так проставьте лейблы, и обучаете нейросеть по ним, и вот можете совать свою систему в продакшн, она еще и выглядеть будет круче, ибо «торговая система на основе нейросеть» звучит в наше время интересно, а кому нужна система на техниндикаторах?!
Для справедливости сеть все таки получила не сырой ряд данных, а предобработанный, будет интересно глянуть на сеть, если подать ей именно сырой. 1CNN. Вот этим я и займусь дальше.
А практический вывод из всего этого я вынес что надо поработать с lebeling.
Таки дела.

Форекс индикатор BPNN Predictor: прогноз цены с использованием нейронных сетей

Форекс индикатор BPNN Predictor – это индикатор, относящийся к категории предсказателей. Для прогнозирования дальнейшего поведения цены индикатор BPNN Predictor использует нейронную сеть с тремя слоями.

Прогнозирующий индикатор BPNN Predictor строит на ценовом графике три линии:

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

Дополнительно автором реализована еще одна версия индикатора, в которой используется EMA-сглаживание.

Форекс индикатор BPNN Predictor with Smoothing

Форекс индикатор BPNN Predictor with Smoothing

Обратите внимание, для полноценного функционирования индикатора необходима установка файла библиотеки BPNN.dll, который находится в архиве для скачивания.

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

Другие прогнозирующие индикаторы форекс

Форекс индикатор CTG Structure-x: прогноз по валютным парам Форекс индикатор FuturoFX: точный прогноз будущего движения цены Форекс индикатор FutureMACD: осциллятор-предсказатель

Fortrader Suite 11, Second Floor, Sound & Vision House, Francis Rachel Str. Victoria Victoria, Mahe, Seychelles +7 10 248 2640568

В поисках «Годзиллы». Нейросети и прогнозирование котировок на основе биржевых и «внешних» данных

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

«Цена не формирует сама себя… Если рынок выразить как метафоричное озеро, то биржевой график это лишь рябь на воде. Может быть это ветер подул, может камень в воду бросили, может рыбы плеснула, может Годзилла прыгает в 200 километрах на батуте. Мы видим лишь рябь.»

Действительно, пытаться предсказать поведение ряби на следующий день, имея в распоряжении только лишь данные о поведении ряби в прошлом, видится, как минимум, самонадеянным. Не тот масштаб модели. Поведение водной глади формируется за счет множества внешних и внутренних по отношению к водоему факторов. И вот на этом моменте мое любопытство не позволило мне пройти мимо. А что если все-таки поработать с этими факторами? Что получится, если учесть их в модели данных, предназначенных для «кормежки» нейросети?

«Но как же учесть миллионы, если не миллиарды возможных факторов влияющих на наш метафорический водоем?» — спросите вы. А я отвечу, что нас не интересуют ни движение мальков, ни случайно упавший с близлежащей скалы камушек, ни мерное покачивание удочки Дяди Вити-рыбака. Нас интересует Годзилла.

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

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

Для тех, кто хочет сразу перейти к делу и поэкспериментировать самостоятельно — весь код и данные содержатся на GitHub вот тут.

Начнем

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

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

По отношению к анализу новостей, очевидно, разумным решением будет применить методы sentiment analisys, а в отношении транзакционной активности… «Стоп. Что за зверь эта ваша «транзакционная активность»?» — повис вопрос на лице читателя. Тут мы подошли к моменту, когда пора определить наш объект исследования.

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

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

Итак, прежде, чем отправиться в увлекательное путешествие, заглянем в список того, что должно находится в нашем инвентаре:

  1. Данные о биржевых торгах;
  2. Данные об активности в биткоин-сети;
  3. Преобразованный поток тематических новостей;
  4. TensorFlow + Keras — one love.

Пункт 3 — предмет для описания в ближайшем будущем, а вот со всем остальным мы поработаем сейчас.

Поиск данных

Первое — данные о биржевых торгах. Найти их не должно быть тяжелой задачей. И действительно, быстрая пробежка по первым строкам результатов Google привела меня на investing.com. Здесь забираем CVS с максимальной глубиной во времени и дневной детализацией.

Пометка на полях: пользоваться рекомендую данными Investing.com Bitcoin Index, поскольку автоматически рекомендуемый Bitfinex Bitcoin US Dollar содержит бессовестные пропуски данных недельных масштабов.

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

Из всего представленного перечня датасетов, нам понадобятся:

  • bh.dat.gz — содержит хэш-суммы блоков. Формат: идентификатор блока (blockID), хэш-сумма (hash), временная метка записи блока в блокчейн (block_timestamp), количество транзакций в блоке (n_txs);
  • tx.dat.xz — содержит информацию о транзакциях. Формат: идентификатор транзакции (txID), идентификатор блока, в который записана транзакция (blockID), количество входов (n_inputs), количество выходов (n_outputs);
  • txout.dat.xz —содержит информацию о выходах для каждой транзакции. Формат: идентификатор транзакции (txID), порядковый номер (output_seq), идентификатор адреса, куда отправляется выход (addrID), объем отправленных монет (sum).

Сопоставим данные файлов друг с другом следующим образом:

На выходе получаем таблицу суммарного объема выходов, записанных в блокчейн биткоина с 17.07.2010 по 08.02.2018. И вроде все чудесно, только покоя не дает тот факт, что данные ограничиваются 08 февраля 2018 года. А ведь дальше занимательный период волатильности, начавшегося как раз в феврале 2018 года. А волатильность — это источник информации. Разбрасываться информацией — кощунство. Потому обращаемся к API blockchain.com, потому как более удобного варианта я не нашел.

Получаем недостающие данные следующим образом:

Пометка на полях: качать информацию с blockchain.com оказалось делом, мягко говоря, небыстрым. В процессе работы над статьей, наряду с лопнувшим терпением, я получил данные из 11949 дополнительных блоков, что соответствует двум дополнительным месяцам. Я посчитал, что этого будет достаточно.

Теперь объединяем полученные датасеты, и мы готовы к этапу предварительной обработки информации.

Data pre-processing

Первое, что бросается в глаза, это формат данных нашего биржевого датасета.

Кроме того, что данные приведены в текстовом формате, выгрузка совсем некстати содержит запятые и разнородные ‘K’, и ‘M’ в значениях объемов, что не дает конвертировать данные во float-формат стандартными методами. Дотошное гугление рыночных данных с пристрастием не дало результатов такого же широкого временного диапазона. Что ж. Регулярные выражения Python, дайте мне силы!

Посмотрим на хвост полученного нами датафрейма.

267 элементов датасета не содержат информации о динамике изменения стоимости. Удалим их повышения общей информативности данных ради.

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

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

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

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

Делим датасет на тренировочную и тестовую выборки и извлекаем зависимую переменную — цену закрытия:

Полученные данные нормализуем.

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

Тестирование нейронной сети

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

PrintDot() — коллбэк отвечающий за вывод красивых точек в процессе обучения модели. Позаимствовал его из официальной документации по TensorFlow. Очень уж он мне понравился. Выглядит он незамысловато:

Задача его — рисовать точки, отражая эпохи.
Что ж, запустим тренировку нашей модели и посмотрим на результат.

Проверим эффективность модели на тестовой выборке.

Результат: 506/506 — 0s — loss: 36201.9241 — mae: 66.5216 — mse: 36201.9219

MSE в 45430.1133 долларов оставляет нас со среднеквадратическим отклонением в 190.27 долларов. Многовато.

Теперь проведем обучение и тестирование сети на данных, содержащих выходы транзакций.

Результат: 506/506 — 0s — loss: 24382.0926 — mae: 48.5508 — mse: 24382.0918

MSE в 24382.0918 долларов значит, что среднеквадратическое отклонение сократилось до 156.15 долларов, что, конечно, не сказка, но улучшение налицо.

Момент истины. Произведем прогнозирование и нарисуем как соотносятся предсказанные значения цен закрытия с реальными ценами.

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

Выводы

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

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

Источник https://smart-lab.ru/blog/651217.php

Источник https://fortrader.org/indicators-forex/information-indikators/foreks-indikator-bpnn-predictor-prognoz-ceny-s-ispolzovaniem-nejronnyx-setej.html

Источник https://habr.com/ru/post/489582/