Здравствуйте. Пока биток скачит, я прокачиваю свои умения. Сегодня я расскажу вам о том, как осваиваю нейронные сети, для помощи в торговле.
Есть много видов нейронных сетей, я же пока осваиваю многослойные перцептроны(и они есть разные, и с терминологией там все сложно).
Начнем с перцепторонов.
Искусственный нейрон – это математическая модель человеческого нейрона. Его задача принять, обработать и передать сигнал.
Искусственная нейронная сеть(ИНС) – это совокупность соединённых определенным образом искусственных нейронов. ИНС имеет входы и выходы.
Искусственные нейронные сети интересны тем, что они умеют делать прогнозы и классифицировать объекты (находить паттерны). Так же их можно научить делать вещи алгоритм выполнения, которых мы еще не знаем и не придумали. Например, торговать на бирже с прибылью, хрен знает как это делается.
ИНС также имеет слои: входной, скрытый и выходной.
Входной слой – это слой нейронов на который подаются входные данные.
Скрытый слой – это слой для которого входными данными есть выходы с предыдущих слоев. Скрытых слоем может быть много.
Выходной слой – слой на котором мы получаем ответ от нашей нейронной сети. Входом для нее является выход с крайнего скрытого слоя.
Схему простой ИНС можно посмотреть ниже.
Кружочки — это искусственные нейроны. Нейронная сеть имеет 3 слоя: входной, скрытый, выходной. Показанная нейронная сеть имеет 3 входа, и 1 выход. Обратите внимание, что количество нейронов в скрытом слое может быть любым*. А вот количество нейронов во входном слое зависит от количества входных данных. Для выходного слоя отличия только в том, что количество нейронов зависит от выходных данных. На выходе данной нейронной сети мы можем получить на выходи либо 1, либо 0 (либо true, либо false). На этом я прекращаю читать лекцию о ИНС, так-как это не цель данной статьи, и я много сил потратил на освоение, чтобы вот-так сразу все выложить вам =) Пока не готов это сделать.
Для реализации нейронных сетей важно уметь работать с матрицами. И это важно не только для программиста, но и для языка программирования на котором пишется ИНС. И дело в том, что я пишу на C++ и заменять ничем его не собираюсь. А он зараза даже и не знает, что существуют такие штуки, как матрицы. Не собираюсь менять С++ так как уверен, что на этом языке можно реализовать либо-что. So:
Моя реализация матриц:
Моя реализация перцептрона:
И для меня только в момент написания этой статьи открылся факт, что реализация перцептрона (она же нейронная сеть!!!) занимает меньше памяти, чем реализация матриц и действий над ними.
Теперь немного про цель исследования:
Многие трейдеры заметили то, что цена биткоина может зависить от открытия/закрытия short/long позиций на бирже bitfinex.
BITFINEX:BTCUSD
BITFINEX:BTCUSD longs
BITFINEX:BTCUSD shorts
Зависимость состоит в том, что цена движется в верх после того как закрываются массово лонги, а в низ после закрытия шортов. Получается, что подозрение на то. Что крупный игрок стрижет хомяков.
И моя задача постараться нейронную сеть делать то, что делает этот крупный игрок. Алгоритма его действий не знаю. И мне по барабану на это, так-как это и есть фишка нейронных сетей. Их можно обучить делать то, алгоритма выполнения чего ты не знаешь.
Проблема 1:
К сожалению, я еще не понял, где tradingview берет данные для построения своих графиков шортов и лонгов. Но так как действовать нужно, то я решил идти на пролом.
Для того, чтобы скормить моей нейронке эти данные я решил тупо переписать все из графика РУКАМИ! (программист блин). Взял месячный график, так-как там данных меньше.
Получились такие вот таблички:
Теперь нужно придумать, что будет эталонными выходными данными.
Придумал такое. На вход подаю данные о лонгах, шортах и цене, а на выходе ожидаю получить 1 если следующий месяц цена падала, а 0 если росла.
Тоесть, для первого месяца ответ должен бить 1. Так как в седеющем месяце цена падала.
На картинке ожидаемый выход нейронки это колонка у0, там показан расчет выходов для 4х первых месяцев:
Все просто. Если цена закрытия меньше чем цена открытия месяца, значит в этом месяце цена падала, и мы на выходе получаем 1.
И обучаю этому нейронку пока не начинает выдавать правильные ответы:
Видно, что на данных картинках сеть уже обучена и выдает правильные ответы.
Проблема 2, прозрение: Когда все уже сделано и можно попробовать получить прогноз на следующий месяц, я осознаю, что та зависимость о которой говорил, она проявлялась на дневном тайм-фрейме, а никак не на месячном. Такие вот дела.
Ну по крайней мере можем попробовать спрогнозировать цвет свечи следующего месяца (Декабрь 2018).
Снова переписываю руками данные в программу, переношу ту вычеркнутую троку эталонный ответ для которой рассчитать мы не могли.
Получается, что сеть думает о, что следующий месяц будет красный. НО!!! Пока писалась статья. То входные данные уже поменялись. И еще примечательно, что свечи еще не закрылись и ценой закрытия выступала текущая цена.
Надеюсь это было достаточно сложно, что бы вы не стали искать неточности=). И ребята, просьба к вам. Подскажите как в реальном времени по api получать данные о лонгах и шортах. Что бы не было так как сейчас, что пока я писал статью, а входные данные уже стали не актуальны. Если я не найду такую возможность, то я забью и начну свёрточные сети изучать. Спасибо.
Не думал что нейронную сеть можно в 4 кб поместить.
@tetegolos , ну да, получается, что в 5 кб влезает. За-то я эти 5 кб 2 месяца не мог реализовать.