3Qu
3Qu личный блог
04 мая 2023, 20:51

Нейросети и стопы.

Недавно, после продолжительного перерыва, вернулся к занятиям машинным обучением (МО) и даже написал по этому поводу топик — Все надоело или Deep Lerning (Глубокое Обучение). С тех пор даже прочитал ~150 страниц книги «Глубокое обучение...» Искренне полагал, что за эти 150 страниц что-то узнал. Ан, нет, на 151 странице автор объявил, что это все так — объяснения для тех, кто вообще ничего о МО не слышал и автор, оказывается, только приступает к изложению материала.) Но кое что узнать все же было можно, автор показал несколько экземлов построения нейросетей (НС), прменяемых для классификации и регрессии, из которых уже можно попробовать сделать что-то свое.

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

В моей ТС используется классический трейлинг-стоп. Описывается он простым выражением — Сclose_deal = Сmax — Cstop. Система отслеживает максимальную цену актива Cmax, и при падении цены актива на величину Cstop от значения максимума Cmax, цена достигает значения Сclose_deal, и сделка закрывается.
У трейлинг стопа есть очень нехорошее свойство — с одной стороны, мы не можем определить максимум цены актива, пока цена не начнет падать, с другой — мы на каждой сделке вынуждены терять сумму, равную Cstop.
Возникает закономерный вопрос, а нельзя ли как-то уменьшить этот закономерный убыток трейлинга. Можно, если за несколько минут до достижения ценой Сclose_deal как-то спрогнозировать дальнейшее движение цены, и убедившись, что цена, таки да, достигнет это значение, закрыть сделку с меньшим убытком и большей прибылью.
И почему бы для такого прогнозирования не попробовать применить НС. Риска никакого, если НС ошибется, то как и прежде сделка закроется по тралу. Если не ошибется, сделка закроется раньше Сclose_deal, и мы получим дополнительную прибыль.
Давайте теперь сконструируем НС, оч простенькую — всего 3 слоя:

model = keras.Sequential([ layers.Dense(50, activation=«tanh»),
layers.Dense(50, activation=«tanh»),
layers.Dense(1)])

model.compile(optimizer=«adam», loss=«mse», metrics=[«mae»])

Обратите внимание, последний слой не содержит функции активации. Фактически, это встроенная в НС SVM.
В качестве исходных данных были взяты свечи OHLC, и на их базе был построен, точнее, смоделирован, последовательный временной ряд (ВР). Далее, из этого ВР случайным образом выбирались массивы данных для обучения и контрольные массивы, и все это подавалось на функцию обучения.

history = model.fit(train_data, train_targets, validation_data=(val_data, val_targets), \
epochs=num_epochs, batch_size=2048, verbose=2)

(val_data, val_targets) — это как раз контрольные массивы, которые никак не участвуют в обучении, но после каждой эпохи по ним производится контроль ошибок обучения.
После обучения получим примерно такой график ошибок.
Нейросети и стопы.
Как видим, обучается оч быстро, и уже после первой эпохи ошибка входит в оч узкий диапазон значений, а после 50-й эпохи, дальнейшее обучение уже не приносит результатов.

Средняя ошибка прогнозирования составила 22 п. В разных циклах обучения ошибка составляла от 20 до 23 п., что достаточно стабильно. Ошибку можно немного уменьшить, если не использовать параметры обучения по умолчанию, а также, возможно, немного модифицировать саму НС, но для эксперимента это не столь важно.
Что касается реального применения, то в модели это еще надо посмотреть, а это долгая история. Для реала же, в этом виде, это никак не пойдет, реал надо обучать не на смоделированном ВР, а на реальных данных (реальном ВР).

33 Комментария
  • Artemunak
    04 мая 2023, 21:03
    «Риска никакого, если НС ошибется, то как и прежде сделка закроется по тралу. Если не ошибется, сделка закроется раньше Сclose_deal, и мы получим дополнительную прибыль.»

    вам с такой логикой надо книжки писать и инфоцыганить. А вот меня бы смутила ситуация когда HC преждевременно бы закрыла сделку и после этого бы произошёл разворот и +100500 прибыли было бы упущено.
      • Artemunak
        04 мая 2023, 21:30
        3Qu, звучит так себе.
        1. сигнала на открытие может долго не быть.
        2. НС может опять сразу закрыть по якобы стопу такие повторно открытые позиции.
        3. в целом внешние стопы не нужны, вот даже и коллеги решили отодвинуть попойку чтобы попытаться подсказать с этим.
  • Мальчик buybuy
    04 мая 2023, 21:15
    Добрый вечер, бро!

    А зачем тебе вообще нужны стопы?

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

    А так получается, что ты входишь в сделку системно, а закрываешься по трейлинг-стопу.

    Почему тогда не попробовать входить несистемно (например, по высокой волатильности), а выходить по системе?)

    С уважением
      • Мальчик buybuy
        04 мая 2023, 21:26
        3Qu, так вроде ТС должна говорить, что рынок пошел не туда?

        Не?

        Бро!

        Я уже писал тебе, что у меня все системы реверсивные.
        Ну т.е. если ТС решила, что рынок развернулся, то и она сама разворачивается.
        Никаких TP и SL.

        А уж ошибается она или нет — я сужу по просадкам.

        С уважением

        P.S. Я правильно понимаю, что трейлинг-стоп никогда не ошибается?
          • Мальчик buybuy
            04 мая 2023, 21:37
            3Qu, это я понял

            А реверсивный аналог своей системы пробовал?
            Вместо трейлинг-стопа стоп по убытку от капитала?

            С уважением
              • Мальчик buybuy
                04 мая 2023, 21:41
                3Qu, почему?

                Если не секрет, конечно.

                Как по мне — в точности наоборот, асимметричные входы и выходы должны иметь под собой какое-то, хотя бы вербальное обоснование.

                Например — я художник, я так вижу)

                С уважением
                  • Мальчик buybuy
                    04 мая 2023, 21:53
                    3Qu, разумно, бро

                    И все же — я тебя сегодня не понимаю
                    Если не против — задам тебе пару вопросов
                    Если против — сотри этот пост, плз

                    ВОПРОС 1.

                    Да, мы не знаем, куда пойдет рынок, и пойдет ли куда-то вообще.
                    Почему из этого следует, что рыночная цена — это случайный процесс?

                    С уважением
                     
                      • Мальчик buybuy
                        04 мая 2023, 22:25
                        3Qu, ну Ок

                        Тогда

                        ВОПРОС 2 (сорри — многобукофф)

                        Классический случайный процесс в ТВиМС предполагает множественность реализаций этого процесса (отсюда усреднение по ансамблю и прочие групповые понятия).

                        Если бы планета Земля была множественной (как в романе Саймака «Кольцо вокруг Земли»), так, чтобы курсы Si и SBER немного отличались бы на разных экземплярах планеты Земля, последовательность цен могла бы служить реализацией случайного процесса.

                        Напротив, в моменте нам известна лишь одна планета Земля и всего одна реализация случайных процессов Si и SBER.

                        В таком случае ТВиМС четко говорят нам: для того, чтобы делать выводы о случайном процессе, исходя из единственной его реализации, нам нужно сделать некие существенные предположения — например, счесть данный процесс стационарным (чтобы была возможность заменить усреднение по реализациям усреднением по времени).

                        НО

                        Очевидно, что рыночные процессы нестационарны в узком смысле. Иначе бы волатильность так не менялась бы со временем.

                        И что нам в итоге дает предположение о случайности процесса цен?

                        С уважением
                          • Мальчик buybuy
                            04 мая 2023, 22:37
                            3Qu, ну Ок

                            А у меня еще так много вопросов накопилось...

                            С уважением
  • Synthetic
    04 мая 2023, 22:09
    Чтобы успешно применять нейронные сети, на мой непросвещенный взгляд, надо сначала поменять полностью образ мышления и набор моделей рынка. Например, для человека, который сегодня использует модель с полутора параметрами, применение нейронной сети с миллиардом параметров может показаться противоестественным. А миллиард нынче не так уж и много.
  • Errar
    04 мая 2023, 22:20
    Присоединяюсь к Artemunak.
    Тут все по Байесу.
    Оценивать нужно вклад от всех четырех исходов:
    1а. Сеть +, а цена к стопу — небольшая потеря, результат как без сети;
    1б. Сеть -, цена к стопу — ноль, т.е. лучше чем без сети;
    2а. Сеть +, цена от стопа — результат как без сети;
    2б. Сеть -, цена от стопа — результат непредсказуемый, т.к. «перезайти» — это уже следующая итерация усложнения системы, которую нужно оценивать отдельно. А в имеющемся виде — недополученная прибыль в размере средней ожидаемой оставшейся прибыли.
    Если суммарный вклад от 2б будет превышать суммарный вклад от 1б, то модификация ухудшила работу изначальной системы.
  • Kot_Begemot
    05 мая 2023, 08:45
     Далее, из этого ВР случайным образом выбирались массивы данных для обучения и контрольные массивы, и все это подавалось на функцию обучения.

    Это может быть очень опасной идеей, в зависимости от реализации
  • CloseToAlgoTrading
    05 мая 2023, 08:55
    Судя по графику ошибки, сеть ничему не обучилась… :(
  • Konstantin Ignatev
    06 мая 2023, 14:47
    По моему экспоненциальное сглаживание или тэта быстрее и точнее с такой задачей совладает. Ну а если хотите помучиться, то во первых попробуйте входные данные обработать методом Бокса- Кокса, а на выходе создайте датасет ошибок и на них обучите какую нить тэту или наивную классификацию, в большинстве случаев это работает.

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

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