Осень — подходящая пора для размышлений, рефлексии, ожидания всплесков волатильности, грусти, романтики (нужное подчеркнуть)!
Немного размышляя о том, хорошие ли у меня трендовые системы, построил тривиальную систему на минутках, которая наращивает лонги и сокращает шорты, если цена выше 60-минутной скользящей средней, а также сокращает лонги и наращивает шорты, если цена ниже этой скользящей средней. Казалось бы, проще стратегию не придумать:) Пусть это будет самый очевидный бенчмарк, который трендовая система должна обогнать ну хотя бы в два раза, чтобы её запускать на реале.
Верхний график — цены закрытия минуток.
Средний график — поминутная эквити в процентах.
Нижний график — размер открытой позиции в каждую минуту (в контрактах или в акциях).
Всё с января 2010 по сентябрь 2016.
Обыкновенные акции Сбербанка:
Фьючерс на Сбербанк-ао:
Фьючерс на индекс РТС:
Фьючерс на курс доллар/рубль:
Пища для размышления прям.
на 60 мин — вероятно существенно жрут комиссии, так вы не показали ПФ — думаю если меньше 1,5 — система реально в минус может работать....
Спасибо, и удивляете и порой вразумляете.
1. Позиция однонаправленная, из-за масштаба всё слилось и нижний график на таком масштабе оказался неинформативен. Вот кусочек этого график, первые 10000 минут:
2. Это не для торговли, это не система, которую нужно торговать. Считайте, что это — индикатор трендового потенциала, который лежит на поверхности.
2. да, я понимаю, что это бенч- как Вы говорите,- марк.
1. Про позиции я неверно истолковал текст. Теперь разобрался.
Спасибо за объяснения.
1) это не первая минута торгов;
2) это не последняя минута торгов;
3) цена выше средней цены за последний час;
4) не перебрали ли с позицией в лонг.
Для шорта 3 и 4 условие симметричны.
Учитывается ли вечерка.
Что будет на Газпроме и на Лукойле, можете проверить?
И еще одни содержательный вопрос.
Вот есть эта эквити. И есть другая эквити. Как узнать, какая лучше. Вы же с этого начали, но по дороге забыли :)
1. Максимально открытая позиция (по модулю) в денежном выражении по текущей цене не превосходит размер депозита, т.е. торговли (с точностью до округлений) ведется с не более чем с первым плечом.
2. Могу проверить, если отправите мне на почту файлы с минутками по газпрому и лукойлу (формат типа финамовского).
3. Возможны два подхода:
3.1. Технико-математический — вводить метрики и делать строгое сравнение.
3.2. Смысловой — понимать суть дела.
Что Вы добавляли/сбрасывали по 1 контракту и делали ограничение на объем открытой позиции в контрактах.
Если добавки, сбросы 10% от депо, лимит 100%, то возникает (а) некоторая нетривиальная обратная связь — при росте депо увеличивается экспозиция (б) всего 10 шагов, следоватьльно число 10 является также параметром этой системы.
И (в) Вы не ответили, вечерку на фьючах торговали?
(а) — да, в каком-то смысле это похоже на искусственный краткосрочный опцион (покупка).
(б) — да.
(в) — да, на фьючерсах вечерние данные торговались, но со своими ограничениями по времени, чтобы также первую и последнюю минуты пропустить.
вообще мне такие идеи нравятся! регулярно сам просчитываю различные «быстрые» условия для спекуляций… единственное что иногда они уж очень сильно могут набирать позиции против трэнда, хотя вроде условия на вход появляются… НО!!! потом они все таки дают прилично заработать. но для этого нужны большой депо и стальные шары.
ограничение на макс позицию конечно выглядит логичным и обязательным условием, но мне кажется что на этом как раз все и сливают..
it<-«sber»
ff<-read.table(paste0(«data1/»,as.character(it),".txt"),sep=";",header=F)
dat<-ff[,1]
tim<-ff[,2]/100
opn<-ff[,3]
hgh<-ff[,4]
low<-ff[,5]
cls<-ff[,6]
L<-length(dat)
L<-10000
dep<-10^9
maxlong<-1*dep
addlong<-0.1
maxshort<-(-1*dep)
addshort<-(-0.1)
mova<-st<-allpos<-array(0,dim=L)
lng<-sht<-0
pos<-0
m<-60
for(l in m:L) mova[l]<-mean((low[(l-m+1):(l)]+hgh[(l-m+1):(l)])/2)
for(l in (m+1):L)
{
newpos<-0
if(opn[l]-mova[l]>0.0) if(pos*opn[l]<maxlong) if(tim[l]>1000) if(tim[l]<1839)
{
newpos<-addpos<-floor(min(addlong*dep,maxlong-pos*opn[l])/opn[l])
pos<-pos+addpos
lng<-lng+1
}
if(mova[l]-opn[l]>0.0) if(pos*opn[l]>maxshort) if(tim[l]>1000) if(tim[l]<1839)
{
newpos<-addpos<-floor(max(addshort*dep,maxshort-pos*opn[l])/opn[l])
pos<-pos+addpos
sht<-sht+1
}
if(F) if(tim[l]>=1830) if(pos!=0)
{
newpos<-addpos<-(-pos)
pos<-pos+addpos
}
allpos[l]<-pos#*opn[l]/dep
if(l>1) st[l]<-st[l]+allpos[l-1]*(cls[l]-cls[l-1])
st[l]<-st[l]+newpos*(cls[l]-opn[l])
}
par(mfcol=c(3,1),mar=c(2,2,2,1))
plot(cls[1:L],type=«l»)
plot(100*cumsum(st)/dep,type=«l»)
plot(allpos,type=«h»)
print(lng)
print(sht)