Или как улучшить торговлю на основе результатов торговли в прошлом.
Или как ничего из этого не выходит.
Или как рынок не обмануть.
Рассмотрим классическую стратегию покупки (и очень редкой продажи) нашего рынка на ночь:
Всё просто и относительно этой простоты неплохо, но напрягает, что есть затяжные периоды боковика, которые без переподгонки убрать не получается (у меня) даже на истории.
Возникает соблазн как-нибудь пофильтровать будущие сделки на основе результатов прошлых сделок.
Иными словами торговать эквити по эквити.
Возьмём скользящие окна из прошлых сделок по 5, 10, 20, 30, 50 и 100 штук.
На этих сделках посчитаем их средний финрез, среднюю амплитуду (по модулю) и ско этих сделок.
И разложим эквити на две эквити, если, например, средний финрез (первая колонка) меньше (первая строка) или больше (вторая строка) такого-то значения. Получим следующие картинки. Каждая картинка для своего размера окна от 5 до 100 сделок.
В шапке первое число это сколько сделок попало в данную эквити. Второе число это размер средней сделки в отфильтрованной эквити.
Как-то грааля не обнаружилось.
Если хотим ровную эквити, это достижимо. Затяжные боковики отбрасываются, но также отбрасываются и жирные плюсовые сделки.
Если хотим не пропустить жирные плюсовые сделки, приходится терпеть боковики и уже нет смысла выкидывать и так ровные почти линейные эквити. Ну и вторая проблема линейных эквити — у них ощутимо падает средняя сделка.
Это в общем похоже на способ отнормировать сделки по волатильности, но в этом способе есть явный недостаток — вырастает среднее плечо без увеличения доходности и приходится часто сидеть в 2-3 раза большем плече по отношению к исходной эквити, что, конечно, некомфортно.
Кому интересно погонять это разложение, вот код на R:
par(mfcol=c(2,3))
for(wdw in c(5,10,20,30,50,100))
{
w=h=vector(); for(i in wdw:length®) if(mean(mean(r[(i-wdw+1):(i-1)]))<=(0.0036/1)) {w=c(w,r[i]); h=c(h,rhor[i])}
plot(h,cumsum(w),type="l",main=paste0(as.character(length(w))," ",as.character(round(100*mean(w),2)),"%"))
w=h=vector(); for(i in wdw:length®) if(mean(mean(r[(i-wdw+1):(i-1)]))>(0.0036/1)) {w=c(w,r[i]); h=c(h,rhor[i])}
plot(h,cumsum(w),type="l",main=paste0(as.character(length(w))," ",as.character(round(100*mean(w),2)),"%"))
w=h=vector(); for(i in wdw:length®) if(mean(abs(r[(i-wdw+1):(i-1)]))<=(0.011/1)) {w=c(w,r[i]); h=c(h,rhor[i])}
plot(h,cumsum(w),type="l",main=paste0(as.character(length(w))," ",as.character(round(100*mean(w),2)),"%"))
w=h=vector(); for(i in wdw:length®) if(mean(abs(r[(i-wdw+1):(i-1)]))>(0.011/1)) {w=c(w,r[i]); h=c(h,rhor[i])}
plot(h,cumsum(w),type="l",main=paste0(as.character(length(w))," ",as.character(round(100*mean(w),2)),"%"))
w=h=vector(); for(i in wdw:length®) if(mean(sd(r[(i-wdw+1):(i-1)]))<=(0.018/1)) {w=c(w,r[i]); h=c(h,rhor[i])}
plot(h,cumsum(w),type="l",main=paste0(as.character(length(w))," ",as.character(round(100*mean(w),2)),"%"))
w=h=vector(); for(i in wdw:length®) if(mean(sd(r[(i-wdw+1):(i-1)]))>(0.018/1)) {w=c(w,r[i]); h=c(h,rhor[i])}
plot(h,cumsum(w),type="l",main=paste0(as.character(length(w))," ",as.character(round(100*mean(w),2)),"%"))
}
На входе этому коду требуется только два ряда: r (доходности) и rhor (их датировка).
1/3 профита был сделан на кризисе 2008г
что не гуд
Сначала вы все усилия бросаете на то, чтобы получить узко-стационарный ВР эквити, а потом, считая его не достаточно узко стационарным, пытаетесь привести к стационарному «торгуя эквити по эквити». Мне кажется, что вы совершенно не те системы пытаетесь модернизировать таким способом.
И весёлыми картинками подтверждаются. )))
я бы это рассматривал, как две разные стратегии.
И как бы она отаботала на мартовском гэпе в 2014м?
И да, на падающем рынке лонг бывает слабоват, ну так это настолько естественно, что не настораживает ))
Но чтобы не скучать долгие годы, мы конечно к нему шортика добавим. Отдельно, в другом месте наковыряем ))
Если сделки совершаются ежедневно, а эквити по ним показывает «боковик» — т.е. чередуются убытки с прибылью, то вопрос в первую очередь к «качеству» сделок на таком виде рынка. «Фильтровать» сами сделки я смысла не вижу.
Я бы посоветовал «отфильтровать» те моменты рынка, когда используемая стратегия не дает результата. Это не так легко, как кажется на первый взгляд, не осуществимо. Смысл такого фильтра достаточно простой: система не торгует вообще на подобных этапах рынка, либо торгует по другому алгоритму, который позволяет зарабатывать на подобном рынке.
Про проблему гладкости эквити я просто промолчу — это абсолютно не то, что надо оптимизировать, если есть прибыль на длительном периоде.