Блог им. AleksandrBaryshnikov

Способ избавиться от шума в ценовых данных

Когда я начинал торговать, в первых сделках не было ни стопов, и тейк-профитов, ни даже индикаторов. Только лента свечей и покупки и продажи по наитию. Я осознанно делал это, понимая, что если будет минус — то я буду расценивать его как плату за опыт и навыки. Но, поскольку жадность присуща всем людям, торговал я одним контрактом.

После добавились и стопы, и тейк-профиты, и я убедился в том, какое они зло. Стопы гарантируют медленный, постепенный, но неизбежный слив депозита, а профиты серьёзно ограничивают потенциальную прибыль. Много раз испытывал досаду, когда сделка закрылась по условной заявке, а рынок продолжил движение в направлении профита. Когда такое же происходило со стопом вследствие прокола — испытывал ярость и злость. Всё таки, видимо, профессия трейдера вредна для здоровья, поэтому на старость нужно заработать столько, чтобы всю её провести на курортах.

В моменты срабатывания стопов и была подмечена такая вещь, что цена совершает резкий бросок в сторону стопа, возвращаясь на профитный тренд. Но стоп уже сработал и ты на обочине этого праздника жизни. А поскольку стоп сработал «по рынку», то за счёт проскальзывания потерялось больше.

Вследствие длительных наблюдений за такими процессами (как в ручной торговле, когда условные заявки ставил сам, так и в полуавтоматической, когда условные заявки выставлялись по одному клику с заранее заданными отступами, так и в полностью автоматической, когда робот входил в сделку и после исполнения лимитного или рыночного ордера выставлял условный стоп-лосс+тейфк-профит), в голову неоднократно приходила идея, что если бы вот все вот эти выбросы, этот шум убрать, то стоп-лоссы срабатывали бы в разы реже, и только действительно тогда, когда цена пошла против тебя.

Использовать для этих целей разного рода средние скользящие мне показалось не особо эффективной практикой. Можно было бы пофантазировать и подумать над разного рода алгоритмами усреднения цены по соседним барам или исключения выбросов, но проблема заключается в том, что для каждого инструмента размер и частота выбросов свои, не говоря уже о том, что они меняются со временем. Конечно, хотелось бы эксплуатировать механизм, который подстраивался бы под эти особенности сам. Тем более, что к тому моменту уже существовало чёткое понимание, что торгуя одним активом, каши не сваришь. В портфеле должно быть хотя бы 20 инструментов, с балансировкой распределения капитала между ними.

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

И тут на глаза попался такой тип нейросетей, который называют Автокодировщиками. Плюсом послужило ещё и то, что для данного типа сетей не нужна обучающая выборка — он учится на тех данных, которые ему скармливаешь. Более того, такой нейросети можно скормить данные по разным инструментам, хоть весь рынок — чем больше, тем лучше. Чем больше данных будет на обучении, тем плотнее будет заполнено внутреннее многомерное пространство сети, тем лучше она будет прогнозировать номальное значение цены в том месте, в котором был выброс.

Вот как выбросы/шум устраняются на примере изображений — оригинал:
Способ избавиться от шума в ценовых данных

изображения с выбросами:
Способ избавиться от шума в ценовых данных

изображения, где выбросы были устранены:
Способ избавиться от шума в ценовых данных

При конструировании этой сети я не ставил целью получить большое качество на выходе, поскольку интересовало, как отработает сам принцип. Как видно, нейросеть заменила чёрные квадраты, случайно сгенерированные на оригинальных изображениях, аппроксимированным от соседних участков изображением.
Теперь на очереди реализация этого подхода на ценовых данных, посмотрим на результат.

29 комментариев
На картинках уже плохо отработала система устранения выбросов. Потому, наверное, что алгоритм все размазывает, не разбираясь, есть выброс или нет. Впрочем, ценовые данные другие, попробуйте, вдруг Вам повезет.
avatar
SergeyJu, идеал недостижим в принципе, но можно, используя этот подход, существенно улучшить результаты, по крайней мере, сейчас я думаю именно так. Практика покажет.
avatar
заранее понять выброс это или нет невозможно. будет все равно 50 на 50.
avatar
Susanin, это мы проверим, на 30 наиболее ликвидных акциях и 10 фьючерсах.
avatar
bascomo, попробуйте. если вы думаете что будущие приращения зависят от прошлых вас ждет большое разочарование.
avatar
Susanin, я не собираюсь прогнозировать как абсолютные или относительные значения приращений, так и абсолютное значение цены, мне это не интересно. Тут речь шла ровно про то, чтобы убрать шум.
avatar
bascomo, так это тоже самое. отличить шум можно только пост фактум. 
avatar
Susanin, правильно и хорошо обученная нейросеть может убирать его и в реальном времени. Ну в доли секунды.
avatar
bascomo, попробуйте самыми простыми словами описать, что в ценах есть сигнал. 
avatar
SergeyJu, сигналы мы придумываем сами. Я бы даже сказал, мы придумываем то, что можно назвать сигналами, придумывая, таким образом, и сами сигналы.

Вот вам сигналы, например. Даже закодированные в 0 или 1 — как раз тот формат, который так любит кушать нейросеть.



avatar
bascomo, то есть Вы считаете, что в данных (в ценах) только шум, сигнала вообще нет. А сигналы — это привнесенные нашим разумом артефакты? 
avatar
SergeyJu, это философский вопрос, но да, если быть последовательным, то весь мир вокруг — то, как мы его видим, чувствуем и понимаем — это продукт нашего разума.  И если, к примеру, солнечная система существует безотносительно человека, то понятие «цена» придумано им, как и биржи, котировки и сигналы.
avatar
bascomo, все стандартные методы выделения сигнала на фоне шума базируются на их статистически значимых различиях. И чем более сигнал не похож на шум, тем лучше можно построить выделитесь. Незнание природы сигнала нисколько не облегчает его выделение. Скорее, делает всю поисковую деятельность совершенно случайной. 
avatar
SergeyJu, а я вот обнаружил в прошлом месяце, что именно направленная случайность делает поисковую деятельность максимально эффективной. Генетика. Напишу в следующем посте, хотя желания всё меньше и меньше. На этом сайте всегда были так много троллей? У некоторых ЧС из тысяч. Это за гранью.
avatar
bascomo, у меня ЧС под тысячу. Ненавижу пустой треп и пропаганду. 
avatar
На истории и так видно, был это шип или нет. Смысл исторический график сглаживать? Ну уж если так хочется -  да, обычная ma. А здесь нужно чтобы нейросеть в реальном масштабе времени говорила — это движение ложное, не бойся, сейчас назад откатит.
avatar
SAlex, проблема ma в том, что она всегда опаздывает, даже ema. А смысл не в том, чтобы исторический график сглаживать, а в том, чтобы обучить на истории модель, а после подсовывать обученной модели данные в реальном времени для оценки, чтобы она говорила, игнорировать этот пробой или выброс или нет. Она не определит это со 100%-й вероятностью, как и ни одна нейросеть в мире не работает со 100%-й вероятностью, но мне нужно просто увеличить вероятность правильных действий. И если она в этом хоть на 10% поможет — это уже прекрасно.
avatar
bascomo, тогда аналогия с сетью неверна. Вы же скармливаете сети фото целиком и говорите «убери артефакты». Она аппроксимирует соседние участки и убирает найденный артефакт.  В вашем случае, аналогия другая — вы даете фото постепенно, пиксель за пикселем, а нейросеть вдруг раз, и говорит что пиксель неверный. Это немного другая задача.
avatar
SAlex, нет, не так.
Берём, например, минутные бары за, скажем, последние полгода.
Выбираем размер окна, например, 60 баров — 1 час. Это и есть аналог картинки.
Готовим обучающий датасет: с 1 по 60 бар, потом со 2 по 61-й и так до конца выборки. И все эти семплы подаём на вход сети.

А когда предсказываем — подаём последние 60 баров, включая текущий.


P.S. Нейросеть, результаты работы которой представлены выше, обучалась на 13223 картинок из базы лиц знаменитостей http://vis-www.cs.umass.edu/lfw/#download. И вот эти знания она применила, чтобы убрать артефакты на тех 5 фото, что я «зашумил» чёрными квадратами случайных размеров и со случайным расположением.
avatar
bascomo, во-первых, просто подать кучу серий из 60-ти баров какой смысл? Из них надо вырезать шипы, чтоб нейросеть поняла что такое эталонный график. Так же как и в случае фото — в обучающих небыло черных прямоугольников, поэтому сеть и посчитала их артефактами. Во-вторых, полученная нейросеть в боевом режиме тупо сгладит поданные ей последние  60 баров, и что. 
avatar
bascomo, есть MA на базе цифровой обработки сигнала, задержки вроде получаются в полбара, но это особых преимуществ не дает.
avatar
Sergeyka, это что такое?
avatar
bascomo, что имено? Есть ЦОС фильтры Баттерворта, есть SuperSmother от Эллерса, есть фильтр Калмана => Optimal Tracking Filters.doc
На TradingView куча примеров и у Чечета (https://chechet.org/) есть курс по ЦОС в трейдинге.
avatar
Sergeyka, «задержка полбара»? Звучит слишком хорошо, имхо.
avatar
Sergeyka, ПС И очень странно, почему уменьшение задержек фильтров не приводит к повышению эффективности ТС?.. Получается, что при этом слишком много шума начинает пролезать?..
avatar
ch5oh, именно так. Стандартный фильтр, который «без задержки» по сути есть комбинация сглаживателя и оценки производной (скорости), взятых в некоторыми весами. Как следствие, инерция первой компоненты и шум второй.
avatar
У меня есть методика защиты от ложного срабатывания стопа.

Заключается в том, что любую покупку стоит совершать при «бычьей» дивергенции, в таком случае стоп вообще не надо ставить. Если дивергенция сразу сработала, то у нас часть позиции уходит практически сразу в плюс (позиция делится), если происходит прокол вниз, так называемый сквиз, то образуется шип, на самом шипе мы покупаем 2-ю часть (как правило на самом конце шипа), дополнительно можно использовать ещё 3-ю часть, но при условии, что цена становится чуть выше 1-й покупки.

Смысл в том, что дивергенция всегда в 100% случаев себя отрабатывает в самом конце тренда, не важно восходящего или нисходящего, но работает лучше в самом конце нисходящего тренда.

Можете закодировать и проверить сами.

Если покупаете где попало, то стоп обязателен!
avatar

теги блога bascomo

....все тэги



UPDONW