Блог им. egenui

Как создаются красивые трендовые эквити.

Самая обычная и распространенная ошибка в построении трендовых систем, это когда вы получаете сигнал в конце периода, но открываете/закрываете позицию в этом же периоде. Этот пост об этом.

Скачаем данные и создадим скользящую среднюю по месячным данным SP500

require(quantmod)
require(xts)
require(TTR)
require(PerformanceAnalytics)

getSymbols('^GSPC', src='yahoo', from = '1900-01-01')
monthlyGSPC <- Ad(GSPC)[endpoints(GSPC, on = 'months')]

movAvg <- SMA(monthlyGSPC, 10)

signal <- monthlyGSPC > movAvg
gspcRets <- Return.calculate(monthlyGSPC)
Далее построим две системы одна с ошибкой заглядывания, вторая корректная. Суть системы простая, месячная SMA с периодом 10, выше покупаем, ниже продаем.

lookahead <- signal * gspcRets
correct <- lag(signal) * gspcRets

И построим результаты систем, на обычной шкале, и на логарифмической.

compare <- na.omit(cbind(gspcRets, lookahead, correct))
colnames(compare) <- c("S&P 500", "Lookahead", "Correct")
charts.PerformanceSummary(compare)
rbind(table.AnnualizedReturns(compare), maxDrawdown(compare), CalmarRatio(compare))
logRets <- log(cumprod(1+compare))
chart.TimeSeries(logRets, legend.loc='topleft')

Как создаются красивые трендовые эквити.
Как создаются красивые трендовые эквити.

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

Как создаются красивые трендовые эквити.
    ★13
    16 комментариев
    Тимофей Мартынов подсветка что-то слабая) и она меняется после редактирования на произвольную )
    avatar
    В какой платформе это все делается?
    avatar
    sergeygaz, это язык R
    avatar

    Можно еще например при расчете скользящего среднего забыть указать fill=NA:
     
    sma <- rollmeanr(prices, ma_periods, fill=NA)

    В результате полученное среднее будет заглядывать вперед на величину периода, а эквити будет поражать воображение.

    avatar
    Marco, Спасибо, интересно!
    avatar
    Да уж! На злобу дня! Как раз хотел обсудить эту тему на некотором сайте, где у них там выставлены подобные резалты(не буду пока называть какой, но они там мне коечто продали), но меня там просто забанили, закрылись в домике, и говорят что не пустят :) 
    Народ, а дайте ссылки на внятное описание quantmod'а и PErformanceAnalytics'а? Или на R-bloggers искать? В частности, интересует решение задачи:
    1) получить тиковые данные по инструменту (желательно с финама, но умеет ли квантмод с финамом работать?) за период N дней,
    2) сформировать собственные свечки исходя из тиковых данных,
    3) представить данные OHLC или хотя бы C в ts или ином векторизованном формате для работы иных пакетов (н-р, fGarch или rugarch).

    Пасиб!
    Не совсем понял про сделку внутри периода.
    Имеется ввиду, что тестер получает сигнал о пересечении МА на цене закрытия, а сделка совершается по уровню МА?

    Если я получаю сигнал о пересечении МА на цене закрытия и совершаю сделку по цене закрытия то тут заглядывания вроде нет.
    Alex, весь смысл поста можно уложить в следующее предложение. В случае выше, если свеча N закрывается выше сигнальной линии, то доходность надо считать начиная со свечи N+1.
    avatar
    есть еще способ рисовать эквити — отрицательное проскальзывание и комиссии…
    avatar
    Есть еще вариант сделать систему, которая будет зарабатывать не заглядывая в будущее, но наверное это совсем для слабаков :D
    avatar
    SECRET, что за вариант?
    Alex, сделать зарабатывающую систему — это и есть вариант :)
    avatar
    SECRET, это про которую Vanuta писал? )
    Alex, я не в курсе, наверное он у меня в BL :)
    avatar
    Хотя бы ссылку на источник указываете :)) 
    avatar

    теги блога evgen000

    ....все тэги



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