рекомендации

среда, 14 марта 2018 г.

Пример кодирования торговой стратегии в R с использованием пакета Quantmod

Перевод. Оригинал здесь. 

Тестирование торговой стратегии можно разделить на четыре этапа: 
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(datanFast=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) 
  
 

Комментариев нет:

Отправить комментарий