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

четверг, 15 октября 2020 г.

Тестирование торговых стратегий на исторических данных с помощью Quantstrat. Часть 2. Инициализация.

Первая часть

4. Тестирование торговой стратегии

Процесс тестирования стратегии в Quantstrat можно представить в общем виде следующим образом:

 

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

Второй этап - добавление индикаторов, торговых сигналов и условий открытия/закрытия позиций.

Третий этап - это уже непосредственно запуск тестирования нашей стратегии на исторических данных.

На четвертом этапе мы обновляем состояние портфеля и счета с учетом результатов проведенных на этапе тестирования сделок.

И наконец, последний этап - подведение итогов. Здесь мы генерируем отчеты и графики, показывающие результаты торговли. 

 

Теперь пройдем последовательно по всем этим этапам. Здесь мы начинаем писать код. Пояснения в основном будут представлены в виде комментариев к коду для экономии места и времени.

 

4.1 Инициализация 

 

# Загружаем необходимые библиотеки

library("quantstrat")

library("rusquant")

 

# Первоначальные настройки

 

# Установка часового пояса

Sys.setenv(TZ = "UTC")

# Задаем валюту

currency('RUR')

# Дата инициализации портфеля

# Эта дата должна быть более ранней, чем start_date.

init_date <- "2011-12-31"

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

start_date <- "2012-01-01"

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

end_date <- "2016-12-31"

 

Поскольку индекс данных является объектом типа Date, для того чтобы работали определенные ордера, например, правила цепочки (которые содержат стоп-лосс и тейк-профит), часовой пояс должен быть установлен как UTC, поскольку это часовой пояс для объекта класса Date. Если вместо этого используется системный часовой пояс по умолчанию, временные метки не будут совпадать, и поэтому будут сбои ордеров.

 

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

symbols <- c("SBER")

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

getSymbols(symbols, from=start_date, to=end_date,  src="Finam", period="day")

head(SBER)

 

# Определяем метаданные для наших котировок.  

# Начальный депозит (100 000)

init_equity <- 1e5 

# Учет дивидендов при расчете доходности (True - учитывать, False - # не учитывать)

adjustment <- FALSE

# В этом случае мы задаем валюту в RUR

# с мультипликатором, равным 1. Мультипликатор для акций он всегда 

# должен быть равен 1.

stock(symbols, currency = "RUR", multiplier = 1)

 

Далее переходим к следующему этапу инициализации. Для работы Quantstrat требуются три разных объекта:

- счет, который состоит из портфелей;

- портфель, который состоит из стратегий;

- и сама стратегия.

Наконец, прежде чем продолжить, вы должны удалить любые остатки предыдущих запусков стратегий и очистить значения нашего портфеля и счета. с помощью команды удаления стратегий rm.strat(), которая принимает строку с названием стратегии. Сохраненные в памяти данные могут приводить к появлению ошибок.

 

# Присвоим имена нашим портфелю, счету и объектам стратегии. 

# Имена могут быть любыми.

portfolio.st <- "Port.CrossMA"

account.st <- "Acct.CrossMA"

strategy.st <- "Strat.CrossMA" 

# Удаляем остатки предыдущих запусков стратегий и очищаем значения 

# нашего портфеля и счета

rm.strat(portfolio.st)

rm.strat(account.st) 

 

Теперь мы должны инициализировать портфель, счет, ордера и стратегию для получения результатов.

Для инициализации портфеля initPortf() требуется имя портфеля, вектор для тикеров, используемых в тестировании, дата инициализации и валюта.

Вызов инициализации счета initAcct() идентичен вызову инициализации портфеля, за исключением того, что вместо имени нового портфеля, используется имя счета.

Для инициализации ордеров initOrders() требуется портфель и дата инициализации.

Вызов инициализации стратегии strategy() нуждается в названии этой новой стратегии, и параметр store должен иметь значение TRUE.

 

# Инициализация портфеля

initPortf(name = portfolio.st, symbols = symbols, initDate = init_date, currency = "RUR"

# Инициализация счета

initAcct(name = account.st, portfolios = portfolio.st, initDate = init_date, currency = "RUR", initEq = init_equity) 

# Инициализация ордеров

initOrders(portfolio = portfolio.st, symbols = symbols, initDate = init_date) 

# Инициализация стратегии

strategy(strategy.st, store = TRUE)

 

Далее нам необходимо добавить индикаторы, сигналы и правила.

 

 

Источники:

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

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