Тестирование торговой стратегии можно разделить на четыре этапа:
1. Получение исторических данных.
2. Формулирование торговой стратегии и определение правил.
3. Выполнение торговой стратегии на исторических данных.
4. Оценка ее эффективности.
В этой статье мы протестируем нашу стратегию в R. Пакет quantmod позволяет нам легко скачать исторические данные с Yahoo Finance. Приведенная ниже строка кода загружает котировки индекса NSE ( Nifty).
> getSymbols("^NSEI")
Quantmod также обеспечивает возможности визуализации данных. Приведенная ниже команда строит график данных NSE.
> chartSeries(NSEI,TA=NULL)
TA = «Null» означает не используется никакой технический индикатор. Следующий шаг - выбрать торговую стратегию. В этом примере мы возьмем MACD (схождение - расхождение скользящих средних). В стратегии пересечения скользящих средних вычисляются две скользящие средние: медленная и быстрая. Разница между быстрой и медленной скользящими средними называется линией MACD. Третья средняя называется сигнальной линией; это 9-дневная экспоненциальная скользящая средняя MACD. Если линия MACD пересекает сигнальную линию снизу вверх, то это бычий сигнал, и мы открываем длинную позицию. Если линия MACD пересекает сигнальную линию сверху вниз, то это медвежий сигнал, и мы открываем короткую позицию. Для расчета средних значений мы выбираем цену закрытия NSE. Эта задача выполяется с помощью следующей команды:
> data=NSEI[,4]
Для корректной работы функций необходимо исключить строки, содержащие значения NA. Это можно сделать с помощью следующей команды:
> NSEI<- span="">na.omit(NSEI) ->
Приведенная ниже команда рассчитывает MACD для цен закрытия.
> macd=MACD(data, nFast=12, nSlow=26, nSig=9, maType=SMA, percent=FALSE)
В зависимости от требований торговой системы можно выбирать различные параметры для быстрой, медленной и сигнальной средних. Здесь мы придерживаемся стандартных параметров. MACD - это функция в quantmod, которая вычисляет схождение - расхождение скользящих средних, данные - это цена закрытия для NSE, nFast - быстрая скользящая средняя, nSlow - медленная скользящая средняя, maType = SMA указывает, что мы выбрали простую скользящую среднюю, percent = FALSE подразумевает, что мы вычисляем разницу между быстрой скользящей средней и медленной скользящей средней. Установка TRUE вернула бы процентную разницу между быстрой скользящей средней и медленной скользящей средней.
Следующая команда строит график для цены закрытия NSE вместе с параметрами MACD.
> chartSeries(NSEI,TA="addMACD()")
Как говорилось ранее, наша торговая стратегия заключается в следующем:
- если линия MACD пересекает сигнальную линию снизу вверх, то это бычий сигнал, и мы открываем длинную позицию по NSE;
- если линия MACD пересекает сигнальную линию сверху вниз, то это медвежий сигнал, и мы открываем короткую позицию по NSE.
Следующая команда генерирует соответствующий торговый сигнал. Мы используем оператор lag, чтобы избежать "заглядывания в будущее".
> signal = Lag(ifelse(macd$macd < macd$signal, -1, 1))
Мы будем тестировать нашу стратегию на исторических данных по NSE с 17.09.2007 по 22.09.2015. Торговый сигнал применяется к цене закрытия.
> returns=ROC(data)*signal
Функция ROC дает нам процентную разницу между двумя ценами закрытия. Мы можем выбрать период, для которого мы хотим определить доходность. Последующая команда выбирает результаты между 02.06.2008 и 22.09.2015.
> returns = returns["2008-06-02/2015-09-22"]
Суммарная доходность может быть рассчитана и визуализирована с использованием следующих команд:
> portfolio=exp(cumsum(returns))
> plot(portfolio)
4-й этап тестирования - это оценка эффективности стратегии. Пакет performance analytics в R предоставляет консолидированную платформу для наблюдения за параметрами, связанными с эффективностью. Здесь можно отслеживать такие показатели, как просадки, риски и т.д.
Приведенные ниже команды обеспечивает вывод вышеупомянутых параметров и многое другое!
> library(PerformanceAnalytics)
> table.Drawdowns(returns,top=10)
> table.DownsideRisk(returns)
> charts.PerformanceSummary(returns)
Комментариев нет:
Отправить комментарий