Вначале о грустном. Не понимая теорию нейросетей (НС) у вас вряд ли получится построить на ней ТС. Поэтому лучше для начала почитать теорию, например, Хайкин Саймон. «Нейронные сети. Полный курс». Книга уже достаточно старая и в ней нет новомодных веяний, но она дает базовые представления о НС.
И второе, мы будем далее для построения систем использовать пакет scikit-learn для Python. рекомендую ознакомиться. Есть и более продвинутые пакеты, скажем, TensorFlow и др., но их использовать мы не будем, и ограничимся более простым scikit-learn.
Теперь о том, чего здесь не будет. Здесь не будет теории НС, разве эпизодически и оч кратко. Здесь не будет описания пакетов Python, работы с графикой и пр. Обо всем этом вы можете прочесть в интернете, книгах, и документации Python.
В топике мы будем обсуждать только применение НС к ТС и их построению.
Так как тема достаточно велика, в один топик не влезет, сегодня мы займемся самыми общими вопросами. Следующая часть будет недели через две, раньше не получается.
Применением НС в ТС я заинтересовался года три назад. Интерес был достаточно абстрактным, и я эпизодически почитывал в инете сайты, типа, Хабр и прочую популярщину. Я ранее немного сталкивался с НС и МО, и, в общем, ничего нового это мне не дало, разве, посмотрел какие-то простые реально работающие экземплы, что, в общем тоже неплохо.
Потом нашел книгу Хайкина, и месяца три ее читал, поняв наконец, что и как делают нейросети, как это работает и как НС обучаются. Книга замечательная, но как применить это в ТС осталось загадкой.
Стал смотреть в инете, как люди применяют МО к рыночным данным. Подбираются некие предикторы, с помощью них строятся модели, выясняется, что модели ничего не дают, после чего выбираются другие предикторы. И так до бесконечности.
Теперь разберемся — что есть предиктор. Предиктор — это некая предобработка рыночных данных, а по простому, это всего навсего индикатор, пусть даже сложный, но все равно индикатор. Если мы вспомним, что нейрон НС представляет собой сумматор с коэффициентами, типа y = a0x1 + a1x2 +… + anxn, а выход нейрона нелинеен, т.к. на выходе стоит сигмоид или другая нелинейная функция, т.е. выход нейрона Y = Fnl(y), то совокупность таких нейронов вполне может при обучении самостоятельно построить любой даже очень сложный предиктор. Т.е. предикторы, как таковые, не нужны. Можно просто добавить к НС немного нейронов или слоев нейронов, и нейросеть прекрасно самостоятельно справится с построением предикторов.
Так родилась идея подавать на входы НС непосредственно значения ценового ряда.
Скажем, для обработки НС нам нужно n отсчетов истории. Формируем вектор C =[c0,c1,c2,....,cn] отсчетов, берем НС с n входами, и подаем на них наш вектор. Вроде все.
Однако не все Сегодня цена актива 100р, завтра 130р, послезавтра уже 200р. НС обученная на 100р не сможет адекватно реагировать на 130, а тем более на 200р. Это уже другой диапазон значений. Стало быть, не зависимо от цены актива, значения ценового ряда должны всегда находиться в одном диапазоне.
Делаем просто. Пусть c0 — текущая цена актива. Преобразуем наш вектор к виду: xi = (ci — c0)/c0, получим новый вектор X =[x0,x1,x2,.....xn], который мы и будем подавать на входы НС. Это всего навсего нормирование. Теперь все изменения цены лежат в одном диапазоне и считаются относительно текущего значения. Можно все значения нашего вектора умножить на какой либо постоянный коэффициент, чтобы привести его значения к динамическому диапазону нейрона. Вот теперь точно все!
Ан нет, опять не все. Допустим в ценовом ряду появилась «шпилька» — резкий выброс значения. Теперь на протяжение времени n эта шпилька будет попадать на входы нейронов и засвечивать их, примерно аналогично пересвету при фотографировании. С одной стороны, шпильку надо убрать, с другой стороны лучше бы оставить, причем, таким образом, чтобы шпилька лежала в динам диапазоне НС. Имхо, шпильки, да и вообще, выбросы, лучше ограничивать тем же сигмоидом, пропустив через него все компоненты вектора Х.
Вот теперь точно все. Мы знаем что и как подавать на входы НС. Правда, что с этим делать дальше пока неизвестно, и пока мы эти вопросы не решим к НС близко можно не подходить — без толку.
>>«Так родилась идея подавать на входы НС непосредственно значения ценового ряда.»
По-моему эта идея со старта у всех раждается), во влажных фантазиях когда трейдер видит какие нейросети умеют делать крутые штуки в разных областях, тут же возникает идея, а что если… подать на вход голые котировки).
Не знаю пока как нейросети (подозреваю, что так же), но другие алгоритмы ML вполне конкретно реагируют на качество входящего признакового пространства, качество в смысле насколько признаки сами по себе имеют предиктивную силу. Вообще предобработка данных и генерация более интересного признакового пространства — не рокет-саенс, но творческий процесс, а на результат способно повлиять драматически! Вот думаю, что с нейросетями все точно так же будет.