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

четверг, 19 марта 2020 г.

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


В этом посте мы протестируем нашу торговую стратегию в R. Тестирование торговой стратегии может быть реализовано в четыре этапа.

Получение исторических данных

Пакет Quantmod позволил легко получить исторические данные из Yahoo Finance. Код ниже скачивает данные NSE (Nifty).

getSymbols("^NSEI")
Quantmod предоставляет различные функции для визуализации данных. Команда ниже создает диаграмму для данных NSE.
chartSeries(NSEI, TA=NULL)

TA=”Null” означает, что не следует использовать какой-либо технический индикатор. В ближайшее время мы увидим применение технического индикатора на графике.

Сформулируйте торговую стратегию и укажите правила

Следующим шагом является выбор торговой стратегии. Мы выберем MACD (Moving Average Convergence Divergence) для этого примера. В стратегии пересечения скользящих средних вычисляются две средние: медленная скользящая средняя и быстрая скользящая средняя. Разница между быстрой скользящей средней и медленной скользящей средней называется линией MACD. Третья средняя называется сигнальной линией; также вычисляется 9-дневная экспоненциальная скользящая средняя сигнала MACD. Если линия MACD пересекает сигнальную линию вверх, то это бычий сигнал, и мы открываем длинную позицию. Если линия MACD пересекает сигнальную линию вниз, то это медвежий знак, и мы открываем короткую позицию. Мы выбираем цену закрытия для расчета средних значений. 

Следующая команда выполняет эту задачу.
data=NSEI[,4]
Команда ниже вычисляет MACD для цены закрытия.
macd = MACD(data, nFast=12, nSlow=26,nSig=9,maType=SMA, percent = FALSE)
Можно выбрать различные параметры для быстрого, медленного и сигнального средних в зависимости от торговых требований. Здесь мы придерживаемся стандартных параметров. MACD - это функция в Quantmod, которая вычисляет схождение - расхождение скользящего среднего, data - это цена закрытия для 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 с 2007-09-17 по 2015-09-22. Торговый сигнал применяется к цене закрытия, чтобы получить доходность нашей стратегии.
returns = ROC(data)*signal
Функция ROC обеспечивает процентную разницу между двумя ценами закрытия. Мы можем выбрать продолжительность периода, за который мы хотим увидеть прибыль. Следующая команда выбирает прибыли между 2008-06-02 и 2015-09-22.

Накопленный доход можно рассчитать и построить с помощью следующих команд:
portfolio = exp(cumsum(returns))
plot(portfolio)

Оценка показателей эффективности

4-й шаг тестирования - оценка показателей эффективности. Пакет performance analytics в R предоставляет консолидированную платформу для наблюдения за параметрами эффективности. Мы можем наблюдать различные показатели, такие как просадки.

Следующая команда предоставляет сводку вышеупомянутых параметров и многое другое!
table.Drawdowns(ret, top=10)
table.DownsideRisk(ret)
charts.PerformanceSummary(ret)


Вот краткая версия кода.

require(quantmod)
require(PerformanceAnalytics)
getSymbols('^NSEI')
chartSeries(NSEI, TA=NULL)
data=NSEI[,4]
macd = MACD(data, nFast=12, nSlow=26,nSig=9,maType=SMA,percent = FALSE)
chartSeries(data, TA='addMACD()')
signal = Lag(ifelse(macd$macd < macd$signal, -1, 1))
returns = ROC(data)*signal
returns = returns['2008-06-02/2015-09-22']
portfolio = exp(cumsum(returns))
plot(portfolio)
table.Drawdowns(returns, top=10)
table.DownsideRisk(returns)
charts.PerformanceSummary(returns)
Обновление

Мы заметили, что некоторые пользователи сталкиваются с проблемами при загрузке рыночных данных с платформ Yahoo и Google Finance. Если вы ищете альтернативный источник рыночных данных, вы можете использовать Quandl.

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

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