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 п., что достаточно стабильно. Ошибку можно немного уменьшить, если не использовать параметры обучения по умолчанию, а также, возможно, немного модифицировать саму НС, но для эксперимента это не столь важно.
Что касается реального применения, то в модели это еще надо посмотреть, а это долгая история. Для реала же, в этом виде, это никак не пойдет, реал надо обучать не на смоделированном ВР, а на реальных данных (реальном ВР).

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

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

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

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

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

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

    С уважением
  • Synthetic
    04 мая 2023, 22:09
    Чтобы успешно применять нейронные сети, на мой непросвещенный взгляд, надо сначала поменять полностью образ мышления и набор моделей рынка. Например, для человека, который сегодня использует модель с полутора параметрами, применение нейронной сети с миллиардом параметров может показаться противоестественным. А миллиард нынче не так уж и много.
  • Synthetic
    04 мая 2023, 22:14
    3Qu, 
    Если мы не знаем расписания, прибытие автобуса можно считать случайным несколько раз. Но после достаточно продолжительного периода наблюдений расписание будет вычислено. Даже если там тысячи маршрутов.

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

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