Блог им. Svips

Учим нейросеть угадывать закрытие часа фьючерса РТС

    • 20 февраля 2013, 09:10
    • |
    • Svips
  • Еще

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

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

★33
79 комментариев
Сорри за звук сразу ((((
Надо менять микрофон…
avatar
а как осуществлено преобразование цен во входные биты?
avatar
inc, В библиотеке есть метод AddValueToEntry, туда даете число, и библиотека уже сама его преобразовывает в биты.
avatar
inc, Цена 159000 в бинарном виде будет как 100110110100011000, инженерный калькулятор в виндовс может помочь как это работает.
avatar
Svips, только «програмист» а не «инженерный»
avatar
inc, )) ну это обычное преобразование систем счисления.
avatar
Правильно я ли я понял что у вас по сути она подобрала коэффициенты к уравнению вида F(X) = k1*x1 + k2*x2 + k349*x349 +k350*x350? Очень похоже это curve fitting
avatar
BiTrader, )) Мне сложновато мыслить подобными уравнениями ) Так как в сети 2 слоя, в первом 3 нейрона у каждого из которых по 350 входов, во втором слое 1 нейрон у него 3 входа. В итоге получаем что сеть подобрала значения к 350*3 + 3 = 1053 весам данной сети. То что вы записали в уравнении, это похоже только на обучение первого слоя, в итохе должно быть F(X1), F(X2), F(X3), и дальше F(Xвых) = F(X1) * k21 + F(X2) * k22 + F(X3) * k23. Если в ваших терминах.
avatar
Svips, под k21 я понимаю второй слой первый нейрон и тд
avatar
Svips, оч интересно, пишите еще! спасибо
avatar
krasoffka, На профит )
avatar
последний раз подобные окошки видел лет 10 назад
Александр Дрозд, Да, консоль — быстро просто производительно. Некогда работать над интерфейсом, даже над отлавливанием и проганием защит от дурака, как например в этом видео, не верно указан размер данных, не верно указан флаг в конфиг файле… Ибо таких прог в день можем написать от 1 до 10, так как идеи генерятся очень быстро, и все надо проверить, каждую нужно прогнать…
avatar
Svips, 350 входов на нейрон, повторяются ли входы у нейронов, или другими словами одни и те же данные поступают на несколько нейронов? просто не думал что их может быть настолько много, и правильно ли я понимаю что обучение сети это некий алгоритм оптимизации позволяющий найти такие коэффициенты, при которых сеть будет давать безошибочные ответы нейросети на обучаемых данных, потому как прямым перебором все растянулось бы на значительно долгий период?
avatar
krasoffka, не совсем понял, что значит повторяются ли входы у нейронов? У каждого нейрона во входном слое свои 350 входов, на все 3 нейрона подаются один вход в 350 бит.

350 это еще мало, и сеть маленькая… это просто для примера, что бы обучение быстро прошло.

Да, это некий алгоритм оптимизации, он «стандартизирован» и хорошо описан. Их есть несколько. Простыми перебором без вариантов.
avatar
Svips, эмммм… например на 1 вход 1 нейрона подается значение выражения a>b, в других нейронах есть ли на входе это же значение выражения a>b. извиняюсь за может не корректную формулировку
avatar
krasoffka, )))) если мы говорим про первый слой нейронов, то да. Т.е. например у нас 2 нейрона в первом слое, у них по 4 входа и 1 нейрон во втором слое у него получается 2 входа так как ниже 2 нейрона. Входной вектор тоже в этом сулчае должен быть равне 4рем. У нас есть входные данные: 0101, подаем их на первый нейронв Н1 = 0101, а так же на второй нейрон Н2 = 0101, эти 2 нейрона дают на выходе, Н1 = 1, Н2 = 0, в итоге мы имеем вход для нейрона вторго слоя 10, и подаем его Нвтрсл = 10, и этот нейрон выдает на выходе 0 — шортим )
avatar
Хочу разочаровать.

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

В вашем случае сеть просто запомнила все образцы.
Это легко проверить подав на вход сети данные которые не использовались в обучении.
avatar
habanera, Все верно вы говорите. У сети конечно есть собственная память. Но маленькая поправочка. В сети всего 4 нейрона. Входных данных больше 320… В видео я подавал данные которые не участвовали в обучении, и сеть давала как правильные так и не правильные ответы, после чего дообучалась. Если не ошибаюсь, то даже в плюсик можно было отторговать работая по ценам открытия\закрытия баров. Но в любом случае я с вами согласен. Чем больше данных для обучения, тем выше вероятность, что сеть нашла алгоритм, чем запомнила нужные входы. Это видео для демонстрации, и никак не претендует на реальную работу. Желание дать больше 1000 баров и писать видео несколько недель нет ))) Ну вы понимаете…
avatar
Svips, Забыл добавить. Информация в нейронной сети запоминается не в нейронах, а в синапсах.
В вашей сети 320*4 = 1280 синапсов.
avatar
habanera, верно. Только 320*3 = 960 и плюс 3 синапса выходного нейрона = 963
avatar
habanera, еще для эксперимента, оставил в сети всего 1 нейрон, и запустил обучаться на тех же 320 барах. Тоже обучилась. Дольше обучалась, но обучилась )
avatar
habanera, Еще поправка ) входных данных больше 400
avatar
Сейчас сеть сказала что в 12:00 цена будет ниже 158810… посмотрим.
avatar
Svips, угадала )) Сейчас гляну где будет цена в 13:00
avatar
Svips, говори что бар будет красным, т.е. цена в 13:00 будет ниже 158760
avatar
Лучшая нейронная сеть — это твоя голова!
avatar
Joystick, +1, жаль что в ней есть эмоции ))))
avatar
Svips, а если их нет? Эмоций в голове…
Joystick, но с токой головой соревноваться почти не реально=(
avatar
Svips, скажите, а если скормить сети данные не за 2 месяца за более? Есть в этом толк?
Александр Шевченко, Конечно, так и нужно делать.
avatar
Очередная наука про подгонку исторических данных под реальность :)
avatar
astic, Скорее автоматический поиск закономерностей ))
avatar
Svips, не занимайся ерундой не для того они предназначены :)
avatar
astic, ну пока эта ерунда не плохо себя показывает — www.dirextrade.com
avatar
Какие имеются статистические доказательства того, что представленная нейросеть способна работать на новых данных?
avatar
Сергей Рожков, выше приведенный сайт.
avatar
Сергей Рожков, но там естественно далеко не представленная нейросеть, а гораздо сложнее. Видео, это просто демонстрация возможностей.
avatar
Сергей Рожков, в своем ЖЖ нет нет пишу что да как происходит…
avatar
Это не доказательство. Как минимиум слишком короткий период наблюдений. Случайный (random, броуновское блуждание) алгоритм вполне может и не такие графики сделать на коротком периоде. Я надеюсь это не результаты исторического моделирования хотя-бы?
avatar
Сергей Рожков, Согласны, что 4 недели это не срок. Но это только то время, которое мы показали публично. До нового года робот успешно торговал 3 месяца. Посмотрим сколько он еще продержится без переобучения. И естественно это не результаты исторического моделирования, это сделки робота в реальном времени, можете последить и убедиться. У нас достаточно опыта, что бы понимать то что результаты теста на истории в алготрейдинге ничего общего не имеют с реальной работой того же алгоритма на тикающем реалтайм рынке.
avatar
Svips, т.е. сеть уже больше трех месяцев работает без переобучения, я правильно понял? это принципиальная позиция или просто экперимент? т.е. в реальной работе вы планируете постоянное переобучение или все-таки фиксацию обученной сети на какие-либо промежутки времени?
Каленкович Алексей (enki), Да, сеть уже больше трех месяцев работает без переобучения. Это не принципиальная позиция, пока результат ее работы устраивает мы ее не переобучаем. Как только начнет лосить больше чем надо, запустим на обучение.
avatar
sam063rus, не знаю, еще не было прецедентов )))))) Но думаю так как у него хорошо получается тянуть позы, то если уж встанет в нужную сторону то возьмет все )))
avatar
Svips, не было прецедентов с какого времени? когда начали реально торговать
Каленкович Алексей (enki), да, небыло в данных на которых она обучалась и на которых она работает сейчас в реальном времени на реальном рынке. Торгует с конца прошлого года.
avatar
Svips, результат вполне ожидаемый. характер рынка за последние несколько месяцев не менялся. интересно было посмотреть как поведет себя сеть за сентябрь 2012. именно эта сеть. или она при обучении видела те данные и полностью на них оптимизирована?
Каленкович Алексей (enki), Да, обучалась на данных 2012 года. На них же и стартанула торговать с 10-го месяца. Получается что обучена на данных (грубо) с 01.01.2012 до 01.10.2012. С тех пор работает и показывает положительную динамику с удовлетворительными просадками. Можно конечно ее запустить на обучение, что бы она уже приняла во внимание все свои косяки за этот период времени, но блин сколько это займет времени, неизвестно. Пробовали пусть ради теста, в итоге после двух недель беспрерывного обучения еще не дошла до 100% сигналов.Поэтому пока не трогаем. Но думаю еще пару недель, и придется поставить параллельно обучаться. А эти «знания» продолжат торговать.
avatar
Svips, немного непонятно ваше стремление к 100% обученности сети. думаю лучше искать другие критерии для оценки. например ввести fuzzy logic в оценку качества предсказаний (это уже пошли «мои секреты»). в прошлом году как раз собирался вернуться к нейросетевым исследованиям. надеюсь что в ближайшее время все-таки начну. спасибо за ваш «пинок под зад», еще острее дали почувствовать перспективность НС в которой я вобщем-то никогда и не сомневался.
Каленкович Алексей (enki), Да, тоже приходим к тому, что на больших массивах данных достичь 100% просто нереально, или на это уйдет очень много времени в подборе топологии сети и ее обучении. Гораздо легче остановиться на каком-то приемлемом коэффициенте ошибки и не допускать что бы ее значение росло.

Рады что это вас с мотивировало, от части для этого и создавали топик, ведь интересная тема, а народ не придает ей должного значения. Нейросети скоростными поездами управляют, а тут какой то рынок быхххх… )))
avatar
Просто понимая, насколько сложна задача, которую вы пытайтесь решить, хотелось бы получить более-менее адекватное доказательство успешности системы в будущем (как доказывают статистические гипотезы, не обязательно академически строго, но хотя-бы увидеть попытку).
avatar
Сергей Рожков, Ну… доказательств нет. Если вас это устроит )))) Сами бы хотели получить эти данные. И единственный для нас способ, это вот так запускать стратегию торговать 1-5 контрактами и смотреть что будет. Все графики доступны на сайте, статистика тоже. Вот и посмотрим через год, как оно…
avatar
Svips, а как вы определите, какой срок наблюдений будет достаточным? Почему год, а не меньше или больше?

Не слишком ли вы легко расстрачиваете собственные ресурсы на эксперимент длинною в год, не имея предварительных вероятностных оценок того, что нейросеть способна работать на новых примерах (обобщать)? Ну типа того, что с надежностью 0.95 доходность системы лежит в границах (-5%,+15%) при следующих допущениях… Допущения можно обсуждать, критиковать, но это уже хоть какая-то опора.

Расскрою «страшный» секрет, из-за того, что на рынках существуют кросс-зависимости между инструментами и времеенные зависимости (все-таки рынок это временной ряд) мы имеем реально примерно 12 независимых испытаний. Именно 12 (группируем результаты по месяцам), а не столько, сколько совершено сделок. Внутри месяца зависимости нельзя игнорировать.
avatar
Сергей Рожков, Мы не определяем какой срок будет достаточным. Мы как и все алготрейдеры, когда видим, что система дает деньги, сразу вешаем ее на реальный счет и «доим» ее пока дает… Единственное наше приемущество или недостаток, так это то, что мы не знаем алгоритма наших систем, ибо нейросеть это настоящий черный ящик. Но как только нам что-то не нравится мы запускаем ее на обучение на всех данных с которыми она когда-либо сталкивалась и никогда не уменьшаем их количество. Т.е. не движемся окном или фреймом. Только для новых топологий или входных данных мы можем сократить этот интервал данных но не менее чем последние 6-9 месяцев. Если за этот срок она дает 100% сигналов, то дальше идет реалтайм, если там ее результаты устраивают, то пускается на реальный счет и так по кругу.
avatar
Ребят, всем кто не знает что такое нейросеть, а узнать хочется и понять как она работает, рекомендую прочитать это kond-mariya.narod.ru/nauka.html Что бы вы хоть отдаленно понимали о чем я говорю в ответах. И могли задавать более правильные вопросы. Спасибо.
avatar
Вот еще отличный материал: habrahabr.ru/post/40137/
avatar
Интересно, а почему часовики? 10-ти минутки, например, не пробовали монетизировать?
avatar
kashtan1, ))) мы пробовали много чего. Тут часовики просто для примера. Под них есть уже чуть разработанная база как и что давать сети, что бы она смогла смозговать… На них так же было удобно показать как сеть угадывает следующий бар, и что значение его вполне монетизируемо даже на такой кривой сети. Может если не лень будет, завтра даже запишу видео посчитав ПЛ по ценам открытия закрытия часовиков.
avatar
kashtan1, не то что бы 10-минутки, но и часовики для нейросети на данных OHLC слишком примитивны. Я вот буквально на выходных гонял нейросети для вычисления закрытия на понедельник фьючерса S&P500 и вот что получилось:

Немного поясню: 9 секторов (через биржевые фонды) и биржевой фонд на выходе (как аналог фьючерса S&P500)…
Как итог — ошибки порядка 0.5-1.5% для дневных данных
Ну, как я понимаю, алгоритму все равно 10 мин или час, если OHLC на вход подается, но при таком же %% удачных предсказаний на 10 мин кривая доходности еще красивее была бы
avatar
kashtan1, алгоритму как раз не все равно, ибо именно ему обучается нейросеть. Но неплохие результаты есть, отчасти именно на них работает робот на сайте. И простым OHLC тут не отделаешься, это было бы слишком просто )
avatar
Svips, Сеть угадывает направление. А какие особенности стратегии робота, результаты торговли которого выложены на сайте? Открывается в начале дня, закрывается вечером? Оптимизируются стопы, размер позиции и как она набирается? Что еще кроме направления «считает» сеть?
avatar
Владимир С., Робот на сайте — скальпер, сеть получает определенные данные на вход, и «говорит» будет рынок расти или падать, исходя из этого робот держит позицию.
avatar
Svips, А вероятность определения цены актива сетью низкая? Пытались это делать? Какие результаты? Пару лет назад видел простую сеть, которая определяла close следующего часа на акциях Газпрома. Фикция это или нет сказать не могу точно)
avatar
Владимир С., Это возможно, но очень сложно. Пытались, что то получалось, но слишком много сил и времени на это уходило. Не делаем это сейчас.
avatar
Svips, Смотрели ли вы на софт по сетям? Он не пригоден в принципе, поэтому написали свой?
avatar
Владимир С., Несмотрели. Пользуемся только своими разработками.
avatar
Svips, Что еще подаете на вход?) Объем, сантимент? Намекните хотя бы)
avatar
Владимир С., Это закрытая информация )))) Используем только данные цен.
avatar
Да, очень интересное видео. :) Никогда не писал ничего на основе нейронных сетей, но всегда было интересно попробовать. Кто его знает даст ли это стабильные прибыли в трейдинге, но все равно ж интересная штука. :)
avatar
KMiNT21, Штука не просто интересная, а завораживающая ))) Особенно когда первый раз удается обучить сеть на истории на 100% и потом она пару дней выдает 90% сигналы… ум… потом уже никакой способ анализа рынка не устроит. )))
avatar
Svips, а что, если нацелится на другой конечный результат? Не 1/0, а на вероятный процент изменения цены? Т.е., пусть первый бит — это будет знак + или -, а остальные Х бит — это коэффициент? Правда, как это «в лоб» сделать — я пока не представил.

Или, как вариант, высчитывать коэффициент итерациями по минутным данным. Пример:

В текущем варианте часовых данных получили ответ из «черного ящика» 1 или 0. Далее — через минуту берем новую порцию данных и снова получаем 1/0 (например, для второго сети, которая обучена на минутах). Через минуту — еще. И в реал-тайм пересчитываем вероятность и выдаем пользователю результат. А он — или ждет дальнейших итераций, или принимает решение… как-то примерно так, что ли…
avatar
KMiNT21, Конечно можно как угодно уже кружить. Более того, можно этой же сети, что в видео, давать данные не по закрытию часа, ка каждую минуту, и она будет сообщать как закроется текущий час. Идей очень много. Жаль что только на их проверку уходит очень много времени… А если на выходе сети больше оного бита, так вообще…
avatar
Svips, первое, что приходит в голову глядя на вашего робота — надо на выходе выдавать не 0 или 1, а хотя бы 3 значения 0, 1 и скажем 2 — это находиться вне рынка, т.к. есть моменты на рынке когда лучше не торговать (если велика вероятность ошибки или высока цена ошибки)
cheralor, Возможно, но в это случае сложность возрастает в разы, а вероятность положительного результата уменьшается в разы. Так как имея на выходе больше 1 бита, сеть увеличивает время обучение. Более того, так как тут идет обучение с учителем, то что бы научить сеть выдавать, скажем 2, то нам самим надо знать когда это «2» уместно. А мы этого к сожалению не знаем. Или знаем с очень низкой вероятностью. Соответственно это только усложнит все, а результата не даст. В таком случае, если вы понимаете что сейчас не время торговать, легче просто руками выключить робота.
avatar

теги блога Svips

....все тэги



UPDONW
Новый дизайн