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

суббота, 31 июля 2021 г.

Тестирование торговых стратегий на исторических данных с помощью Quantstrat. Часть 14. Скачивание и хранение больших объемов исторических котировок

Часть 1. Подготовительные действия.
Часть 2. Инициализация.
Часть 3. Добавление индикаторов.
Часть 4. Добавление сигналов.
Часть 5. Добавление правил.
Часть 6. Запуск тестирования стратегии на исторических данных.
Часть 7. Анализ результатов тестирования.
Часть 8. Продолжаем тестировать торговые стратегии в Quantstrat. Реверсивная стратегия.
Часть 9. Тестирование нескольких активов.
Часть 10. Сравнение результатов тестирования торговой стратегии в Quantstrat и TSLab.
Часть 11. Оптимизация параметров
Часть 12. Стоп-лоссы.

Если вы тестируете свои стратегии на длинных периодах при небольших таймфреймах (например 5 мин), то можете столкнуться с определенными проблемами.

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

Во-вторых, и это главное, при скачивании данных ММВБ из архива котировок Финама с помощью пакета rusquant максимальный период для скачивания котировок за один раз ограничен.

Например, если вам нужны 5-минутные свечи за три года, все прекрасно скачается. Однако если вы захотите скачать эти же данные за 4 года, вы получите сообщение об ошибке. Поэтому вам придется скачивать котировки частями и склеивать их с помощью команды rbind. Я попытался немного автоматизировать данный процесс. Приведенный ниже код скачивает 5-минутные котировки Роснефти с 1 января 2007 года по 31 декабря 2020 года, и объединяет их в одном объекте ROSN0.

 

library("xts")

library("rusquant")

 

# Дата начала торговли

start_date <- "2007-01-01"

# Дата окончания торговли

end_date <- "2009-12-31"

# Наши активы, которыми мы торгуем

symbols <- c("ROSN")

# Скачиваем исторические данные

ROSN0 <- getSymbols(symbols, from=start_date, to=end_date,  src="Finam", period="5min", auto.assign=FALSE)

 

start_dates <- c("2010-01-01", "2013-01-01", "2016-01-01", "2019-01-01")

end_dates <- c("2012-12-31", "2015-12-31", "2018-12-31", "2020-12-31")

for (i in 1:4)

{

  getSymbols(symbols, from=start_dates[i], to=end_dates[i],  src="Finam", period="5min"

  ROSN0 <-rbind(ROSN0, ROSN)

}

 

Теперь, чтобы не нужно было повторять этот процесс, необходимо сохранить файл со скачанными котировками на диске или в облаке. Самый простой способ сделать это - использовать нативный для R файла .rds, который предназначен для хранения различных объектов r. Его преимуществом является высокая скорость обработки, а также то, что он сохраняет специфичную для R информацию - атрибуты, типы переменных и т.д.

 

Сохранение данных в файл производится с помощью команды:

 

# Сохранение объекта в файл

saveRDS(object = NLMK0, file = "NLMK.rds")

 

Для загрузки данных из файла в рабочее окружение используется команда:

 

# Загрузка файла из объекта

NLMK <- readRDS(file = "NLMK.rds")

 

Далее, предположим, что вы загрузили котировки по нескольким акциям, с которыми вы постоянно работаете. Сохранить их на диске одной командой можно в файле .Rdata. Это делается следующим образом:

 

# Сохранение объектов в файл

save(NLMK0, ROSN0, VTBR0, file = "myQuotesData.Rdata")

 

Аналогично производится загрузка данных из файлов:

 

# Загрузка файлов из объекта

load("myQuotesData.Rdata")

 

Также можно сохранить данные в традиционно используемом для этого формате .csv. Хотя производительность в данном случае будет намного ниже, но зато данные можно будет использовать и других программах, понимающих этот формат. Для сохранения используется функция write.zoo:

 

# Сохранение объекта в файл csv

write.zoo(NLMK0,file="NLMK.csv",row.names=FALSE,col.names=TRUE,sep=",")

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

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