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)
Далее нам необходимо добавить индикаторы, сигналы и правила.
Комментариев нет:
Отправить комментарий