3Qu
3Qu личный блог
30 ноября 2022, 00:04

Прогнозирование котировок.

Сижу как-то раз за рюмкой чая (это было за год, два или три до моего прихода на Smart-Lab} и приходит мне в голову мысль — а почему бы не попробовать прогнозировать котировки.
Прогноз, естественно, на ТФ 1м, который я использую. Время прогноза пусть будет — 5 минут — вполне достаточное для моих сделок, а недостаточно, так прогноз можно и повторить на следующие 5 минут. Архивы котировок по фьючерсам SBRF и GAZR тоже имеются, минимум за год-два за последние 3 месяца перед экспирацией — хватит и на отладку и на проверку.
Все есть, только как реализовать прогнозирование? — ни одной мысли.
Собственно, не особо мне это было и нужно, рабочая система у меня уже была и меня она вполне устраивала, но мысль о прогнозировании засела, и я время от времени ее думал.
Ничего сколь-нибудь конструктивного в голову не приходило, и было решено для прогнозирования использовать нейросеть, тем более, незадолго до того я немного занимался машинным обучением и нейросетями в том числе.
От использования каких-либо предикторов сразу отказался. Плюс 2-3 слоя к нейросети, и если в данных есть какие-либо взаимосвязи, НС сама внутри себя построит нужные ей предикторы. В общем, подаем на НС поток цен 15-20 отсчетов Vc={C(t0-20),C(t0-19),...C(t0)}, нормируем их к динам диапазону НС — Vcn={c(t0-20),c(t0-19,… c(t0-1), 0} — c(t0) у нас всегда = 0, и пусть НС сама мучается с прогнозированием и поиском c(t0+5). И еще, у всякого метода есть область применимости, потому нельзя учить чему попало. Для этого из обучающей и проверочных последовательностей по возможности исключаем области истории, где прогнозирование невозможно. Иначе получим нечто такое.

Прогнозирование котировок.
По Х — прогноз значения цены С(t0+5),
по У — реальное значение цены С(t0+5)
Т.е., не получили ничего

Для реализации прогнозирования была выбрана распространенная и не самая сложная библиотека Python scikit-learn, обычный многослойный перцептрон, где-то ~150 нейронов. Обучаем на истории 3 месяца до экспирации фьючерса SBRF или GAZR — это где-то не более 15 минут, проверяем на тех же фьючерсах с другой датой экспирации. Получаем прогноз нормированного значения цены через 5 минут — c(t0+5).

 Прогнозирование котировок.
По Х — прогноз нормированного значения цены c(t0+5),
по У — реальное нормированное значение цены с(t0+5)

Прогноз в области нуля для сделок нас не интересует. Прогноз же в области отличной от нуля вполне удовлетворителен и может быть использован для открытия и закрытия сделок. В ходе сделки прогноз может быть повторен для дальнейшего продолжение сделки.
Что же мы имеем. Мы видим, что для прогноза на 5 мин уже вполне достаточно жалких 150 нейронов. У таракана около 1 млн. нейронов.
Оказывается, для прогнозирования котировок и трейдинга мозгов нужно много меньше чем у таракана. Как-то даже обидно. Хотя, кому как.

61 Комментарий
  • Мальчик buybuy
    30 ноября 2022, 00:33
    Полная шняга

    Данные для графика 2 в студию, плз. 2 инструмента, 1 линейный прогноз и 1 временной интервал.

    С уважением
  • dnmsk ☮
    30 ноября 2022, 00:50
    Бектест стратегии на истории сделок с учетом комиссии и проскальзывания на выборке за пределами обучаемой будет?
  • Vladimir N.
    30 ноября 2022, 01:59
    Прогнозирование никогда не будет работать. Можете и поколдовать ради разнообразия.

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

    Вам CashKing просто так писал что ли? Я вот его читал внимательно, все по делу.

    smart-lab.ru/mobile/topic/690717/

    smart-lab.ru/r.php?u=https%3A%2F%2Fm.lenta.ru%2Fnews%2F2021%2F04%2F15%2Fphysics%2Famp%2F&s=1491763882
      • Vladimir N.
        30 ноября 2022, 07:47
        3Qu, вот и зря, бред он не писал, как раз) 
      • Vladimir N.
        30 ноября 2022, 08:38
        3Qu, кстати, дайте ссылку почитать) любопытно)
  • darkcorp
    30 ноября 2022, 09:22
    А где-то можно посмотреть как закодено? Можно без конкретных параметров.
      • darkcorp
        30 ноября 2022, 12:54
        3Qu, Спасибо. 
        Почему решили использовать лог.регрессию, а не линейную?
          • darkcorp
            30 ноября 2022, 13:25
            3Qu, я к тому, что в модели увидел использование сигмоида, а эта функция применяется для классификации, а не прогнозирования. Могу ошибаться.
              • darkcorp
                30 ноября 2022, 13:45
                3Qu, Спасибо, я еще только учусь. На курсе по МЛ по теме НС изучали пока только классификацию изображений, а с временными рядами я работать еще не пробовал, хотя желание есть.
  • Кто нибудь делал сравнение прогноза и реальное его исполнение для нейронных сетей? Обратная связь результата и прогноза насколько точна? Не является ли нейронная сеть просто модным словом? Что нибудь типа такого анализа habr.com/ru/post/671142/ но для нейросетей?
    Вопрос 2: насколько быстро модели обучаются? Для режима реального времени подойдет ли?
    Какие конкретно модели нейросетей на Ваш взгляд лучше подойдут для алготрейдинга?
    • Rostislav Kudryashov
      30 ноября 2022, 15:18
      Константин Чащегоров, 15:02 если хочешь выжать всё возможное в реальном времени — рули на «C++ AMP. Построение массивно параллельных программ с помощью Microsoft Visual C++», «C++ AMP. Accelerated Massive Parallelism with Microsost Visual C++». На мощный графический процессор GPU. Из Quik'а связь через Lua C API.
      • Rostislav Kudryashov, Мне нравится 1С. Общий смысл:
        Там есть так называемая 3х звенная архитектура. Если коротко:
        Есть сервер БД: это либо бесплатный PostgreeSQL  либо платный Microsoft SQL. Операции в нем делает так называемый сервер предприятия 1С 8. Суть его работы: он читает предварительно подготовленный код (назовем это псевдокод) который выполняют тригеры БД. Сервер 1С запускает по 1 процессу на каждое ядро имеющегося ПК/сервера. Соотвественно каждый из этих процессов асинхронно делает все сам с БД. Я так понимаю на С++ все это придется писать самому.
        Так что если кто то хочет выжать все из квика то смысл примерно такой:
        1 Устанавливаем в качестве сервера БД Microsoft SQL 
        2 Делаем несколько регламентных заданий, каждое из которых дергает либо 1 инструмент из ODBC либо несколько.
        Я так понимаю быстрее чем тригеры MS SQL никто ничего пока не придумал. С++ это клиентский интерфейс писать и файловые базы
        Только вот происходят ли на нашем рынке такие активные движения цен? Есть ли смысл так мучать систему бесполезными расчетами

        Уточнение: 1С написан на с++. Соответственно все что в нем есть и все что он делает как тригеры для сервера БД это тоже как если взять другой компилятор С++. Допустим Вы до этого писали на компиляторе от Майкрософт а взяли от Борланд (если такая фирма еще есть). ТОлько назовите этот компилятор 1С

        Еще уточнение:
        Можно в квике сделать несколько таблиц в каждой из которых по 1 инструменту и каждая выводит в свой ODBC источник. Тогда уж точно выжать все получится.
        • Rostislav Kudryashov
          30 ноября 2022, 15:29
          Константин Чащегоров, 15:26 ты не понял! На GPU многие тысячи нитей-потоков.
          • Rostislav Kudryashov, GPU это что то типа возможности писать стоя.
            www.anekdot.ru/id/363956/
            Лично мое мнение ( сугубо частное)
            • Rostislav Kudryashov
              30 ноября 2022, 15:39
              Константин Чащегоров, 15:33 «Каждый имеет право на своё мнение». Но реальность — одна.
              У тебя это, скорее, не мнение, а «не знаю и знать не хочу»…
              • Rostislav Kudryashov, У меня это скорее простой расчет: если есть сервер БД, то он возьмет помаксимому все возможности пк/сервера. Соответственно если в ПК есть GPU. то сервер БД выжмет все из того что он может Разработчики сервера БД об этом постоянно думают. А если я сам буду писать это параллелизм на С++ то жизни не хватит.
                • Rostislav Kudryashov
                  30 ноября 2022, 15:54
                  Константин Чащегоров, 15:43 ха-ха
                  если в ПК есть GPU. то сервер БД выжмет все
                  достойно занесения в анналы
                  • Rostislav Kudryashov, russianblogs.com/article/27471086602/
                    Подробно не гуглил вот первая же ссылка
                    • Rostislav Kudryashov
                      30 ноября 2022, 16:16
                      Константин Чащегоров, 15:54 абсурдно надстраивать таблицы БД над барами Quik'а и общаться с сервером БД через язык SQL.  Хранимые процедуры не спасут.
                      • Rostislav Kudryashov, Ну не знаю. Когда мне впервые понадобилось выбрать из всех инструментов в квике только какие то по определенному условию, то я не смог поставить никакого фильтра. Например не смог отобрать все, которые выросли за последнюю неделю.
                        Так как я программист 1С то соответственно каждый кулик свое болото хвалит
                        Динамический список :
                        v8.1c.ru/platforma/dinamicheskiy-spisok/
                        Система компоновки данных
                        v8.1c.ru/platforma/sistema-komponovki-dannykh/
                        Сервер 1С Аналитика
                        analitica.ru/

                        • Rostislav Kudryashov
                          30 ноября 2022, 17:04
                          Константин Чащегоров, 16:34 ха-ха ещё раз. Ты начал с вопроса о вычислениях в реальном времени. Ты представляешь, что такое, обучение нейросети? И в реальном времени.
                          Если у тебя есть примеры в 1С — полный вперёд!

                          Не уверен, что 1С сможет даже строить регрессию по тикам в 0.001 сек, хотя бы в 0.1 сек. Принимая и возвращая данные в Quik — бог весть каким каналом.
                          Это уже задача для индикатора — его надо перерисовывать чаще, чем раз в минуту.
                          • Rostislav Kudryashov, Почему то мне кажется что в пределах секунды или даже минуты не происходит таких колебаний, на который можно покрыть хотя бы комиссию брокера. Какой смысл следить за тиками если Вы работаете через QUIK.
                            Как будто есть чей то робот который щедро раздает всем по выгодным ценам волатильность
                            • Константин Чащегоров, Дополнение. Если честно я вообще не понимаю зачем стремиться к скорости выставления заявок. Допустим в стакане уже есть заявки по цене 100, 101, 102, 103 и 110. При чем 110 это наша заявка.
                              С како бы скоростью чей либо робот ни выставлял заявки наша заявка в стакане уже есть. Если наступает момент когда в стакане только она то она  исполнится. 
                              Возможно я не прав но если например биржа обрабатывает стакан со временем в наносекунды а поступают заявки новые в микросекундах то все равно рано или поздно проскользнет на бирже запрос к БД биржи что типа получить все что в стакане на текущую наносекунду. (Т.е. скорость поступления заявок наверняка меньше, чем скорость их обработки биржей. Особенно в последние полгода)
                              И вообще наверняка большинство роботов выставляют не рыночные а лимитные заявки. Поэтому скорость вообще не важна. Пока не появится удовлетворяющая встречная лимитная заявка стакан вообще не сдвинется
                        • Rostislav Kudryashov
                          30 ноября 2022, 17:41
                          Константин Чащегоров, 18:34 если в Quik'е хочешь следить за многодневной историей бумаги — заведи диаграмму с её графиком. QLua справится с фильтрацией и чем угодно.
                          Но если захочешь отследить ВСЕ бумаги хотя бы только MOEX, — Quik забуксует с таким множеством графиков.
                          Тебе нужно какое-то интернет-приложение, запрашивающее данные напрямую с биржи. По RSS или не знаю, как там ещё.
                          • Rostislav Kudryashov, На данный момент мониторю 3500 инструментов.
                            40 из них в режиме «3-4 раза в минуту»
                            остальные в режиме 1 раз в 5-8 минут.
                            Это у меня 2- звенная архитектура сейчас
                            В 3-звенной все это ускоряется в разы.
                            (в августе mail.ru закрыл аренду серверов в облаке поэтому перешел на двухвенку на своем ноуте не самой большой мощности). Как только биржа оживет вернусь в 3 звенку. 
                            Данные принимает и выдает QUIK от СбербанкБрокер
                        • Rostislav Kudryashov
                          30 ноября 2022, 17:33
                          3Qu, 16:59 вот кстати! В SQLite есть хранимые процедуры? И если есть, какие команды они исполняют? Только SQL или что-то ещё?

                          PS обращаться к БД для сохранения и обработки коротенькой последовательности чисел, то же самое, что просить Путина починить кран на кухне.
                          Пусть даже не коротенькой, но без никаких реляционных связей. Что тут делать БД!?
                            • Rostislav Kudryashov
                              30 ноября 2022, 17:56
                              3Qu, 17:42 вообще-то все серии из истории котировок у меня в csv-файлах. Самую длинную историю в минутках на многие месяцы или в сотни мегабайт можно загрузить и преобразовать в числа в памяти за секунды. Если читать текст в память не по строкам, а сразу весь файл.
                              Так что «База данных» у меня — папки-каталоги с текстовыми файлами. Не залезая в СУБД, могу преобразовать, разделить, соединить любые файлы.
                              Всё как на ладони. И эти же файлы с разделителями ";" Excel читает как родные — так я настроил Windows.
                                • Rostislav Kudryashov
                                  30 ноября 2022, 18:12
                                  3Qu, ы не понял! После 1-5-секундной загрузки в память история котировок — плоский массив С++. В крайнем случае — vector STL. Доступ к его «барам» — со скоростью света. Какая там тебе «быстрая» СУБД.
                                  Но помимо скорости — «не умножай излишне сущности».
                                    • Rostislav Kudryashov
                                      30 ноября 2022, 18:45
                                      3Qu, 18:27 ну не надо так… Ускорение поиска в БД — по индексам.
                                      А я когда загружаю текстовый файл в память — строю по ходу индекс начала каждого дня. Даты упорядочены — бинарный поиск.
                                      А много-потоковый доступ к истории котировок — только по чтению. Какие мьютексы!?
        • Rostislav Kudryashov
          30 ноября 2022, 15:36
          3Qu, 15:26 эт-ты брось. Named Pipes дают очень хорошую скорость, а  Files Mapped to Memory могут быть ещё лучше.
            • Rostislav Kudryashov
              30 ноября 2022, 15:50
              3Qu, 15:44 в том-то и фокус, что на CPU «других потоков» в сотни раз меньше, чем на GPU.
              А если не хочешь вычислять асинхнонно — никто не мешает, повиси в синхроне в main() функции Lua-скрипта.
                • Rostislav Kudryashov
                  30 ноября 2022, 16:10
                  3Qu, 15:56 QLua легко и без задержех регистрирует события с частотой 0.001 сек. А чтобы раз минуту плюхнуть через Lua C API в C-DLL данные за предшествующие 15-20 минутных баров для прогноза следующей 5-минутки  — какие задержки!?
                  Пусть даже не 15-20 баров,  а хоть 15-20 сотен или тысяч — без разницы. Но вообще-то каждую минуту нужно передать только один новый бар.
                  Git-компилятор в Lua разгоняется до скорости native C уже на второй итерации.
  • Пафос Респектыч
    30 ноября 2022, 15:02
    Полная шняга, на истории кажется что работает, а чуть график вправо проедет — оказывается там уже другая модель нужна 
      • Пафос Респектыч
        30 ноября 2022, 15:14

        3Qu, нет, не про любую, но про предложенный вами подход — не просто можно, а нужно. Он изначально мертворожденный )

        А завязывать с рынком не нужно, играйтесь, кто запрещает-то?

  • сергей иванов
    30 ноября 2022, 16:16
    шляпу какую то нарисовал, кому это из здешних нужно то? петрушку свою тут понаписывал епт… лучше в кабак проплати местным, чтобы посидели уважаемые с икрой, шашлычком и вискариком… тебе потом и скажут по итогу мероприятия как косить баблишко… а не этой все хурмой маятся…
  • Replikant_mih
    30 ноября 2022, 18:51
    Это что вы такое выкинули из первой выборки где на графике кружок, что привело к такой линии на втором графике??
      • Replikant_mih
        30 ноября 2022, 21:50
        3Qu, Нуу, написано, конечно). Просто это драматически изменило ситуацию, вот и хочется понять по каким признаком эти «где прогнозирование, по нашему мнению, невозможно.» участки определяются).
          • Replikant_mih
            30 ноября 2022, 23:54
            3Qu, Секрет, понял). Странно, что не пошло, с такой линией на графике. Вообще она выглядит нереалистично, если честно, слишком граально).

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн