Блог им. 3Qu

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

    • 04 мая 2023, 20:51
    • |
    • 3Qu
  • Еще

Недавно, после продолжительного перерыва, вернулся к занятиям машинным обучением (МО) и даже написал по этому поводу топик — Все надоело или 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 комментария
«Риска никакого, если НС ошибется, то как и прежде сделка закроется по тралу. Если не ошибется, сделка закроется раньше Сclose_deal, и мы получим дополнительную прибыль.»

вам с такой логикой надо книжки писать и инфоцыганить. А вот меня бы смутила ситуация когда HC преждевременно бы закрыла сделку и после этого бы произошёл разворот и +100500 прибыли было бы упущено.
avatar
Artemunak, 
А вот меня бы смутила ситуация когда HC преждевременно бы закрыла сделку и после этого бы произошёл разворот и +100500 прибыли было бы упущено.
А меня бы не смутила.) Ведь всегда можно зайти еще раз. Или нет?
И, можно подумать, что вы-то, уж, никогда не ошибаетесь и ничего не пропускаете.)
avatar
3Qu, звучит так себе.
1. сигнала на открытие может долго не быть.
2. НС может опять сразу закрыть по якобы стопу такие повторно открытые позиции.
3. в целом внешние стопы не нужны, вот даже и коллеги решили отодвинуть попойку чтобы попытаться подсказать с этим.
avatar
Добрый вечер, бро!

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

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

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

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

С уважением
Мальчик buybuy, стопы нужны исключительно для того, чтобы вовремя остановится, если процесс пошел не туда. А любой рыночный прогноз, особенно более-менее долгосрочный, это вопрос вероятностей.
Если у вас это не так, и ваша система никогда не ошибается — вам и стопы не нужны.
avatar
3Qu, так вроде ТС должна говорить, что рынок пошел не туда?

Не?

Бро!

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

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

С уважением

P.S. Я правильно понимаю, что трейлинг-стоп никогда не ошибается?
Мальчик buybuy, 
P.S. Я правильно понимаю, что трейлинг-стоп никогда не ошибается?
Все ошибаются, и ты не исключение. Просадки, ведь, есть.)
У меня, так уж, кстати, не реверсивная система. Могу запросто закрыть сделку и следующую открыть в ту же сторону.
avatar
3Qu, это я понял

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

С уважением
Мальчик buybuy, нет, и не вижу смысла.
avatar
3Qu, почему?

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

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

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

С уважением
Мальчик buybuy, я художник, я так вижу.)
Скажу еще раз, все процессы на рынке вероятностные. Стало быть, ни я, ни вы, не знаем когда и куда пойдет рынок и пойдет ли вообще. Куда угодно, в любой момент.
А стало быть, не фиг заморачиваться.)
avatar
3Qu, разумно, бро

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

ВОПРОС 1.

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

С уважением
 
Мальчик buybuy, 
Почему из этого следует, что рыночная цена — это случайный процесс?
Если мы не знаем расписания автобусов (электричек и пр.), то приход автобусов (электричек и пр.) — случайный процесс. Так и называется — случайный для наблюдателя. И уже в этом случае прогнозировать мало что возможно или даже невозможно вовсе.
avatar
3Qu, ну Ок

Тогда

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

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

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

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

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

НО

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

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

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

И что нам в итоге дает предположение о случайности процесса цен?
Хотя бы общее понимание. А если еще нестационарный, то… вообще можно забыть — разница с СБ и так оч невелика. Практически, он и есть.)
Но есть одно но, которое несколько упрощает ситуацию — это «в узком смысле». Однако, здесь дискуссия заканчивается.))
avatar
3Qu, ну Ок

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

С уважением
Чтобы успешно применять нейронные сети, на мой непросвещенный взгляд, надо сначала поменять полностью образ мышления и набор моделей рынка. Например, для человека, который сегодня использует модель с полутора параметрами, применение нейронной сети с миллиардом параметров может показаться противоестественным. А миллиард нынче не так уж и много.
avatar
Synthetic, у автомобиля, если разобраться, уже тысячи параметров, и ничего, как-то ездим.))
avatar
3Qu, 
Если мы не знаем расписания, прибытие автобуса можно считать случайным несколько раз. Но после достаточно продолжительного периода наблюдений расписание будет вычислено. Даже если там тысячи маршрутов.
avatar
Synthetic, интересное мнение, но
1. вы разделили (и правильно сделали) что вы считаете процесс случайным и действительно он является случайным.
2. автобус изначально не подходит как случайный процесс, если он идет по маршруту, а если по полям и лесам с пьяным водителе, то да, подходит.
1. Совпадение — пересечение независимых событий,
одноразовая связь (кошка пересеклась с собакой на улице).
2. Случайность — совмещение независимых событий,
неустойчивая связь (кошка пересекается с собакой во дворе).
3. Тенденция (тренд) — устойчивые связи (в подъезде).
4. Закономерность — постоянные связи (в квартире).
Василий Федорович, 
2. автобус изначально не подходит как случайный процесс, если он идет по маршруту, а если по полям и лесам с пьяным водителе, то да, подходит.
А дисциплинированный трейдер, торгующий строго по задуманной стратегии, подходит под случайный процесс?
Или, по Вашему, это может быть только пьяный вусмерть случайный чувак, случайно получивший доступ к чужому счету?

avatar
Synthetic, пересечение любого человека и компьютера не может быть случайным.
Василий Федорович, пересечение случайного процесса с неслучайным = случайный процесс.
avatar
3Qu, )))))), да, подловили, 1:0 в вашу пользу.
Присоединяюсь к Artemunak.
Тут все по Байесу.
Оценивать нужно вклад от всех четырех исходов:
1а. Сеть +, а цена к стопу — небольшая потеря, результат как без сети;
1б. Сеть -, цена к стопу — ноль, т.е. лучше чем без сети;
2а. Сеть +, цена от стопа — результат как без сети;
2б. Сеть -, цена от стопа — результат непредсказуемый, т.к. «перезайти» — это уже следующая итерация усложнения системы, которую нужно оценивать отдельно. А в имеющемся виде — недополученная прибыль в размере средней ожидаемой оставшейся прибыли.
Если суммарный вклад от 2б будет превышать суммарный вклад от 1б, то модификация ухудшила работу изначальной системы.
avatar
svgr, 
Возможно после выполнения каких-то условий по текущей просадке можно будет статистически поставить меньше чем Сclose_deal.
Нельзя. Сущности закрытия разные.
avatar
 Далее, из этого ВР случайным образом выбирались массивы данных для обучения и контрольные массивы, и все это подавалось на функцию обучения.

Это может быть очень опасной идеей, в зависимости от реализации
avatar
Судя по графику ошибки, сеть ничему не обучилась… :(
CloseToAlgoTrading, или почти всему научилась уже за первую эпоху.
avatar
По моему экспоненциальное сглаживание или тэта быстрее и точнее с такой задачей совладает. Ну а если хотите помучиться, то во первых попробуйте входные данные обработать методом Бокса- Кокса, а на выходе создайте датасет ошибок и на них обучите какую нить тэту или наивную классификацию, в большинстве случаев это работает.

теги блога 3Qu

....все тэги



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