Недавно, после продолжительного перерыва, вернулся к занятиям машинным обучением (МО) и даже написал по этому поводу топик — Все надоело или 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 п., что достаточно стабильно. Ошибку можно немного уменьшить, если не использовать параметры обучения по умолчанию, а также, возможно, немного модифицировать саму НС, но для эксперимента это не столь важно.
Что касается реального применения, то в модели это еще надо посмотреть, а это долгая история. Для реала же, в этом виде, это никак не пойдет, реал надо обучать не на смоделированном ВР, а на реальных данных (реальном ВР).
вам с такой логикой надо книжки писать и инфоцыганить. А вот меня бы смутила ситуация когда HC преждевременно бы закрыла сделку и после этого бы произошёл разворот и +100500 прибыли было бы упущено.
И, можно подумать, что вы-то, уж, никогда не ошибаетесь и ничего не пропускаете.)
1. сигнала на открытие может долго не быть.
2. НС может опять сразу закрыть по якобы стопу такие повторно открытые позиции.
3. в целом внешние стопы не нужны, вот даже и коллеги решили отодвинуть попойку чтобы попытаться подсказать с этим.
А зачем тебе вообще нужны стопы?
Любая ТС — это некая форма прогноза цены актива. Если тебе ТС говорит, что актив развернулся, это кагбэ повод закрыть сделку или перевернуться.
А так получается, что ты входишь в сделку системно, а закрываешься по трейлинг-стопу.
Почему тогда не попробовать входить несистемно (например, по высокой волатильности), а выходить по системе?)
С уважением
Если у вас это не так, и ваша система никогда не ошибается — вам и стопы не нужны.
Не?
Бро!
Я уже писал тебе, что у меня все системы реверсивные.
Ну т.е. если ТС решила, что рынок развернулся, то и она сама разворачивается.
Никаких TP и SL.
А уж ошибается она или нет — я сужу по просадкам.
С уважением
P.S. Я правильно понимаю, что трейлинг-стоп никогда не ошибается?
У меня, так уж, кстати, не реверсивная система. Могу запросто закрыть сделку и следующую открыть в ту же сторону.
А реверсивный аналог своей системы пробовал?
Вместо трейлинг-стопа стоп по убытку от капитала?
С уважением
Если не секрет, конечно.
Как по мне — в точности наоборот, асимметричные входы и выходы должны иметь под собой какое-то, хотя бы вербальное обоснование.
Например — я художник, я так вижу)
С уважением
Скажу еще раз, все процессы на рынке вероятностные. Стало быть, ни я, ни вы, не знаем когда и куда пойдет рынок и пойдет ли вообще. Куда угодно, в любой момент.
А стало быть, не фиг заморачиваться.)
И все же — я тебя сегодня не понимаю
Если не против — задам тебе пару вопросов
Если против — сотри этот пост, плз
ВОПРОС 1.
Да, мы не знаем, куда пойдет рынок, и пойдет ли куда-то вообще.
Почему из этого следует, что рыночная цена — это случайный процесс?
С уважением
Если мы не знаем расписания автобусов (электричек и пр.), то приход автобусов (электричек и пр.) — случайный процесс. Так и называется — случайный для наблюдателя. И уже в этом случае прогнозировать мало что возможно или даже невозможно вовсе.
Тогда
ВОПРОС 2 (сорри — многобукофф)
Классический случайный процесс в ТВиМС предполагает множественность реализаций этого процесса (отсюда усреднение по ансамблю и прочие групповые понятия).
Если бы планета Земля была множественной (как в романе Саймака «Кольцо вокруг Земли»), так, чтобы курсы Si и SBER немного отличались бы на разных экземплярах планеты Земля, последовательность цен могла бы служить реализацией случайного процесса.
Напротив, в моменте нам известна лишь одна планета Земля и всего одна реализация случайных процессов Si и SBER.
В таком случае ТВиМС четко говорят нам: для того, чтобы делать выводы о случайном процессе, исходя из единственной его реализации, нам нужно сделать некие существенные предположения — например, счесть данный процесс стационарным (чтобы была возможность заменить усреднение по реализациям усреднением по времени).
НО
Очевидно, что рыночные процессы нестационарны в узком смысле. Иначе бы волатильность так не менялась бы со временем.
И что нам в итоге дает предположение о случайности процесса цен?
С уважением
Но есть одно но, которое несколько упрощает ситуацию — это «в узком смысле». Однако, здесь дискуссия заканчивается.))
А у меня еще так много вопросов накопилось...
С уважением
Тут все по Байесу.
Оценивать нужно вклад от всех четырех исходов:
1а. Сеть +, а цена к стопу — небольшая потеря, результат как без сети;
1б. Сеть -, цена к стопу — ноль, т.е. лучше чем без сети;
2а. Сеть +, цена от стопа — результат как без сети;
2б. Сеть -, цена от стопа — результат непредсказуемый, т.к. «перезайти» — это уже следующая итерация усложнения системы, которую нужно оценивать отдельно. А в имеющемся виде — недополученная прибыль в размере средней ожидаемой оставшейся прибыли.
Если суммарный вклад от 2б будет превышать суммарный вклад от 1б, то модификация ухудшила работу изначальной системы.
Это может быть очень опасной идеей, в зависимости от реализации