Торговые сигналы!

Торговые сигналы! | ML для поиска закономерностей по Atamanу.

Жил был такой трейдер Ataman и были у него критерии робастности системы: фичей не больше трех и параметры фича не должна выглядеть «тут читаю, тут не читаю, тут рыбу заворачиваю». В чем проблема когда мы используем нейросети, или там случайный лес или градиентый бустинг? В том это условие внутрь не засунуть, нейросеть (случайный лес) будет использовать все фичи, и нарежет их, как захочет, хоть в мелкую стружку. Что делать и как с этим бороться?
Я сделал три цикла с GradientBoosting, и ограничил глубину деревьев 3. Вуаля!
Здесь  можно посмотреть как это выглядит на питоне + база данных+ код WealthLab.
Результаты?
Ну вот например на тренировочной выборке 2010-04.2018 нашлось такое:

if ((AroonDownClose_20_[Bar] >= 75.0)&&(AroonDownClose_20_[Bar] <= 100.0)) //
if ((StochD14_5_[Bar] >= 1.9416)&&(StochD14_5_[Bar] <= 10.3487)) //
Загоняем, считаем:

Названия строк Коли    Profit %
test 374 0,36
2006 17 0,50
2007 43 0,83
2008 79 0,04
2009 35 0,52
2018 61 0,56
2019 87 0,41
2020 52 -0,03
train 647 0,88
2010 57 1,89
2011 78 0,59
2012 65 0,55
2013 112 -0,33
2014 85 2,45
2015 85 0,40
2016 56 1,86
2017 89 0,26
2018 20 2,28
Общий итог 1021 0,69

Видим что если на трайне доходность была 0,88, то на тесте доходность упала до 0,36. Таки дела. По графику видно что это  система из разряда «ловли ножа». Дело такое 
Или вот система только с одной фичей:

if ((TRIXClose_10_[Bar]  >= -4.0825)&&(TRIXClose_10_[Bar]  <= -0.799)) //

Названия строк Коли    Profit %
test 154 -0,13
2006 11 7,03
2007 7 6,07
2008 72 -9,41
2009 29 9,29
2019 3 5,51
2020 32 7,86
train 176 4,35
2010 12 5,29
2011 47 6,37
2012 18 -2,32
2013 24 0,22
2014 46 6,07
2015 6 5,76
2016 4 1,12
2017 10 4,64
2018 9 8,24
Общий итог 330 2,26


Тут с трейна доходность в 4,35 упала до теста -0,13. «Виноват» 2008 год с его 72 сделками по -9,41%. 

Тоже система из разряда «ловля ножей».
Ну вот как то так






37 комментариев
Атаман же руками торговал и ML не юзал ни в каком виде. 
Но, насколько я помню, он именно на контртренде специализировался. Так что ловля ножей это похоже.
Я тоже, кстати, считаю, что больше 3 фич — перебор почти всегда. Хотя есть системы с 4 фичами. А если фичи всего 3, то GB становится совсем уж вырожденный.
avatar
SergeyJu, он торговал вполне статистически.

Там была некоторая ниша на буме доткомов и позже — шорт сильно выросшего шлака, с большим стопом и коротким тейком. Это очень далеко от курва индикаторов.
avatar
quant_trader, шорт сильно выросшего шлака на повышенных объемом с горизонтом день-два работал еще в 2015, а может и позже. Насколько понимаю, ключевой вопрос в этом деле — чтобы этот шлак в нужный момент(!) дали в шорт.
avatar
Technocratus, на каком рынке? Он конечно еще долго работал но не так феерично. Шлаки на Штатах нормально давали в шорт видимо, не знаю как сейчас.
avatar
quant_trader, наждак
avatar
SergeyJu, в том то и дело. зачем делать ручками то что железный болван сделает точней и быстрей раз в 10. вот я за несколько часов получил допустим 50 комбинаций на дневках с доходностью на тестах от +0,4% на сделку. сколько бы мне потребовалось времени чтобы найти их вручную?!  
avatar
Марат, а не переподгонка ли это? 
avatar
Тут есть робастность?
Похоже, сеткой вы выцепили статистический артефакт.
avatar

Мож я чего не догоняю, но: 

— Случайный лес не склонен к переобучению.
— Бустинг с неглубокой глубиной тоже не особо переобучается.
— Ограничение глубины в 3 при кол-ве фичей 3 — разве дерево может быть глубже, чем кол-во фичей?
— Для одного признака ML особо нужен, да и для двух тоже.

avatar
Replikant_mih, например, если делим значения RSI на 4 зоны куплено-перекуплено и продано-перепродано, то одна фича а бинарное дерево глубины 2 выходит. 
avatar
SergeyJu, надо матчасть подтянуть, видимо, я чет думал, что признак если заюзан где-то, то ниже уже не будет, но вообще да, походу может), спсб.
avatar
Replikant_mih, я не использую только три фичи, я загнал  40 фичей. но я не хочу чтобы бустинг использовал больше трех одномоменто. Так что ML тут я использую для перебора фичей чтобы найти те комбинации из трех и менее фичей, которые продемонстрируют стабильность по годам. Насчет глубины больше чем фичей-легко. Ведь каждый уровень дерева разбивает значение фичи только на 2 части (ну например Гэп > 1% и Гэп<=1), а как например со случаем когда -1<=ГЭП>=2?! Для этого я и использую глубину три.   
avatar
Марат, не больше 3-х фичей из 40 фичей — это в смысле одному дереву или в смысле всему алгоритму подается признаковое пространство только из 3 фичей, а там каким-то перебором моделям загоняются разные комбинации по 3 признака? Ну т.е. в первом случае это гипер-параметром регулируется, во втором, видимо, только какой-то кастомной реализацией.
avatar
Replikant_mih, не если код посмотреть то там четко видно три цикла. 40*40*40 комбинаций из трех фичей подается

avatar
Replikant_mih, все ML склонно к переобучению. что-то больше, а что-то меньше. дерево может быть глубже, чем количество фич. кто ему мешает делать еще одну фильтрацию по тому-же признаку что был на уровень выше, если критерий отрабатывает.
avatar
day0markets, ну, когда «что-то больше, что-то меньше», то то, что меньше вполне можно описать как «не склонен», а так-то понятно), для этого к ML человек и приставлен.
avatar
— Ограничение глубины в 3 при кол-ве фичей 3 — разве дерево может быть глубже, чем кол-во фичей?

А почему нет-то? Ты точно чего-то не догоняешь ))
Пафос Респектыч, ага, не догонял, теперь вот догнал и перегнал)), как удобно быть гибким и умным).
avatar
фичей не больше трех
 
Не знаю, что вообще можно интересного выцепить тремя фичами?

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

Просто у фич предсказательная сила бывает сильно отличается в зависимости от значений других фич, и невозможно сказать какая конкретная вдруг окажется весьма полезной на глубине дерева скажем три или четыре, условно.
Пафос Респектыч, ну скажем так это мое виденье рынка. Не больше трех фичей и разбивка каждой фичи не более чем на три части, иначе подгонка. Я не спорю что для более сложных зависимостей нужна большая глубина, но я торговать такие закономерности не хочу. И я использую фичи по максимуму, только я задаю условие электронному болвану-хочешь нарисовать классификатор?! Изволь, но используй для этого не 10 фичей, а макимум три. А насчет вычислительных мощностей… если запустить на 1 ядре это потребует 45 часов, так что не так мои расчеты и просты с точки зрения вычислений 
avatar
Марат, не знаю что у вас за программа, которая 45 часов считает, и что она столько считает, может весь рынок американский. Та вообще сейчас компьютеры считают быстро особенно если это в память на одной машине помещается.
Пафос Респектыч, У меня очень часто мои идеи упираются в вычислительные мощности и это стандартная практика для Data Science. Приходится что-то придумывать.
avatar
Replikant_mih, не ну если идеи в стиле перебрать все варианты то ничего удивительного )) а так вообще лучше конечно выбирать более эффективные алгоритмы, но для этого нужно хорошо понимать что ты делаешь и что хочешь получить/
Пафос Респектыч, «для этого нужно хорошо понимать что ты делаешь и что хочешь получить» — прям как будто из цитатника статусов вконтакте). Это все понятно. Понятно, что если стрелять точечно или если брать что-то быстрое упрощенное, то это быстро, но не всегда это можно, не всегда это подходит, не всегда это удобно.
avatar
Replikant_mih, да не, причём тут точечно или упрощённое? Инструменты надо понимать как работают которыми ты пользуешься, потому что можно пользоваться ими коряво а можно нормально. Или один и тот же алгоритм можно написать так что он будет иметь полиномиальную сложность вместо линейной )) и т д

Зато если долго считает можно почувствовать себя крутым типа во я какую сложную штуку написал, какой мощный комп она грузит! ))
Пафос Респектыч, Ну, коряво != медленно, не коряво != быстро).
avatar
Replikant_mih, если медленно — значит коряво ) потому что плохо масштабируется, а если плохо масштабируется то это максимум студенческая поделка зачёт сдать.

Пафос Респектыч, какие-то абстрактные рассуждения), медленно — что такое, для начала? Медленно само по себе или относительно чего-то? 

Короче нет конкретики, нет смысла и продолжать.

avatar
Replikant_mih, медленно в смысле теории сложности вычислений конечно же, в каком же ещё —
ru.wikipedia.org/wiki/Вычислительная_сложность
ru.wikipedia.org/wiki/Временная_сложность_алгоритма
Пафос Респектыч, Ни в одной из этих статей слово «медленно» в соответствующем контексте не упоминается)). Что логично, без системы координат, без бенчмарка нет никаких «медленно» и «быстро». Может быть линейная сложность и при этом алгоритм может быть медленным, потому что на время влияет куча факторов.
avatar
Replikant_mih, ну да если вызовов sleep() навставлять то будет медленным. Как из быстрого сделать медленный это в целом понятно, а вот как сделать так чтобы быстро считалось то что нужно — уже бывает что и не совсем ))
Пафос Респектыч, смотря что считать и как. можно даже дневки на америке гонять неделю.
avatar
day0markets, можно, но как говорится «тут уже помощник нужен!» ))
Марат, 40*39*38/6=9880. Не так уж и мало вариантов для перебора. 
Я такую штуку использовал для того, чтобы понять, какие фичи «любят» друг друга, а какие просто плохие. 
Один мой знакомый выбирал несколько десятков деревьев получше, но не идентичных и торговал их пакетом. В общем, результат не вызвал особого восторга. Как обычно, дело еще и в нюансах.
avatar
а куда он делся, Атаман?
я на AI забил :( мучал его с 2013, в 2014 с ним удалось заработать, рынок был удачный. но и только. в итоге в 2020 решил что именно он — слабое звено. попробую годик без него, посмотрю.

глубина 3 и количество фич это перпендикулярные параметры. фичи вы сами выбираете, хотите все или нет. а глубина деревьев, это сколько вопросов можно к этому параметру задать. типа если >2, то… иначе если>1, то…
avatar
ПBМ, умер он. 
avatar
SergeyJu, чтож.
avatar

теги блога Марат

....все тэги



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