Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Создание, тестирование и оптимизация торговых систем с использованием программы Metastok и языка R. Учебное пособие
.pdf
11. Итоговую статистическую информацию по тестируемой страте-
гии можно получить с помощью команды:
summary(as.ts(trade_return))
На экран будут выведены квантильные характеристики доходностей
торговой стратегии.
Примечание.
Вы можете в условии сигнала заменить числовые пара-
метры переменными и сравнить результаты работы системы для различных значений параметров.
2.7. Создание и оптимизация модельных портфелей
Пакет PortfolioAnalytics позволяет задавать различные виды ограничений и целевые функции для создания и оптимизации портфелей ценных бумаг (Bennett, 2014).
Поиск оптимального портфеля. Для поиска оптимального портфеля
будем использовать ограничения: сумма долей должна быть равна 1
(weight_sum constraint), доля каждого актива должна лежать в определенном интервале (box constraint). В качестве целевой функции будем минимизировать условную меру под риском (ES). В иллюстративном примере
будем использовать временные ряды, составленные из доходностей четырех активов:
CA (Convertible Arbitrage), CTAG (CTA Global), DS
(Distressed Securities), EM (Emerging Markets). Для проведения моделирования необходимо выполнить:
1. Подключить необходимые (предварительно установленные)
библиотеки:
library(PortfolioAnalytics)
library(PerformanceAnalytics)
2. Подключить встроенный набор данных edhec, указать необхо-
димые активы:
data(edhec)
R <- edhec[, 1:4]
colnames(R) <- c("CA", "CTAG", "DS", "EM")
funds <- colnames(R)
3. Вывести в консоль по пять записей с начала и конца временных
рядов, которые мы будем использовать при моделировании:
head(R, n=5); tail(R, n=5)
51

4. Создать портфель portf.init и добавить два ограничения: сумма
долей должна быть равна 1 и доля каждого актива должна лежать в интервале [0.05; 0.4]:
portf.init <- portfolio.spec(funds)
portf.init <-
add.constraint(portf.init, type="weight_sum",
min_sum=0.99, max_sum=1.01)
portf.init <- add.constraint(portf.init,
type="box", min=0.05, max=0.4)
5. Дополнительно добавить условие, которое позволит вычислить
доходность (mean), но не будет задействовано в оптимизации
(multiplier=0):
portf.init <- add.objective(portf.init,
type="return", name="mean", multiplier=0)
6. Задать целевую функцию оптимизации – будем минимизировать
условную меру под риском (expected shortfall):
portf.minES <-
add.objective(portf.init, type="risk", name="ES")
7. Провести оптимизацию и вывести решение на экран:
opt.minES <-
optimize.portfolio(R, portf.minES,
optimize_method="DEoptim", search_size=1000,
trace=TRUE, traceDE=0);
opt.minES
В результате выполнения кода будет сформирован портфель с оптимальными долями: 0.148, 0.398, 0.398, 0.050 для рядов CA, CTAG, DS,
EM соответственно и характеристиками: доходность (mean) 0.007109,
риск (ES) 0.02675.
Сравнение методов для создания случайных инвестиционных
портфелей.
менные ряды, составленные из доходностей четырех активов:
Для создания модельных портфелей будем применять вре-
CA
(Convertible Arbitrage), CTAG (CTA Global), DS (Distressed Securities),
EM
(Emerging Markets). Используем два типа ограничений: заемные
средства (leverage constraint) и допустимые доли активов в портфеле (box
constraint). Приведем графическое сравнение результатов моделирования
с использованием методов генерации портфелей – sample, simplex и grid.
Для проведения моделирования необходимо:
52

1. Подключить необходимые (предварительно установленные)
библиотеки:
library(PortfolioAnalytics)
library(PerformanceAnalytics)
2. Подключить встроенный набор данных, указать необходимые
активы:
data(edhec)
R <- edhec[, 1:4]
colnames(R) <- c("CA", "CTAG", "DS", "EM")
3. Создать модельный портфель pspec и добавить два ограничения:
использование заемных средств не допускается, доли активов не ограничены:
pspec <- portfolio.spec(assets=colnames(R))
pspec <- add.constraint(portfolio=pspec,
type="leverage", min_sum=0.99, max_sum=1.01)
pspec <- add.constraint(portfolio=pspec,
type="box", min=0, max=1)
4. Используя три различных метода (sample, simplex и grid) сгенерировать 1000 случайных портфелей
rp1 <- random_portfolios(portfolio=pspec,
permutations=1000, rp_method='sample')
rp2 <- random_portfolios(portfolio=pspec,
permutations=1000, rp_method='simplex')
rp3 <- random_portfolios(portfolio=pspec,
permutations=1000, rp_method='grid')
5. Для вывода квантильных характеристик сгенерированных случайных портфелей по каждому методу можно использовать команды:
summary(rp1); summary(rp2); summary(rp3)
6. Для каждого метода генерации портфелей вычислить статистические характеристики, которые будут определять положение конкретного портфеля на графике:
tmp1.mean <- apply(rp1, 1,
function(x) mean(R %*% x))
tmp1.StdDev <- apply(rp1, 1,
function(x) StdDev(R=R, weights=x))
tmp2.mean <- apply(rp2, 1,
function(x) mean(R %*% x))
tmp2.StdDev <- apply(rp2, 1,
function(x) StdDev(R=R, weights=x))
53

tmp3.mean <- apply(rp3, 1,
function(x) mean(R %*% x))
tmp3.StdDev <- apply(rp3, 1,
function(x) StdDev(R=R, weights=x))
7. Построим график для сравнения методов генерирования модельных портфелей:
plot(x=tmp1.StdDev, y=tmp1.mean, col="blue",
main="Random Portfolio Methods", ylab="mean",
xlab="StdDev")
points(x=tmp2.StdDev, y=tmp2.mean,
col="red", pch=2)
points(x=tmp3.StdDev, y=tmp3.mean,
col="lightgreen", pch=5)
legend("bottomright", legend=c("sample", "simplex", "grid"),col=c("blue", "red", "lightgreen"),pch=c(1, 2, 5), bty="n")
В результате выполнения этой команды на экране графическое окно
с характеристиками (риск – StdDev, доходность – mean) сформированных
портфелей (рис. 31).
Рис. 31. Сравнение модельных (случайных) портфелей для четырех рядов
Для того чтобы каждый раз при использовании генератора случайных чисел в R получать идентичные последовательности чисел, можно
использовать функцию set.seed(), которая фиксирует число, служащее
начальной точкой для запуска алгоритма генерации (псевдо-)случайных
чисел. В качестве аргумента функции указывают любое целое число,
например set.seed(42).
54

Задания для самостоятельной работы
1. Скачать котировки Microsoft (MSFT) c yahoo за последние 6 месяцев. Конвертировать котировки в формат xts. Установить период 1 неделя. Построить график цены в виде японских свечей: рост – зеленый
цвет, падение – красный цвет.
2. Построить линейный график цен ПАО «Газпром» (GAZP) за последний год, период – 1 день. Добавить простую (SMA) и экспоненциальную (EMA) скользящую среднюю с окном сглаживания 21 день
закрытия (Close). Установить зеленый цвет для SMA, красный – EMA.
Определить количество и даты пересечения индикаторов на графике.
3. Провести тестирования торговых стратегий, предложенных в
первом разделе. Оформить отчет о тестировании по требованиям, указанным в первом разделе.
4. Для временного ряда цен закрытия (Close) ПАО «Сбербанк»
(SBER) построить технический индикатор – индекс относительной силы
использованием встроенной функции RSI() пакета TTR. Период –
с
14 дней. Записать условия формирования сигналов для открытия и закрытия позиций при пересечении сигнальных линий 20 и 80.
5. Провести оценку функции плотности распределения логарифмических доходностей для индекса Доу Джонса за период с 2017 по 2018
год с помощью полигона гистограмм и построить график распределения
вероятностей.
6. Провести проверку
гипотезы о нормальности распределения логарифмических доходностей для временного ряда котировок Apple
(AAPL) для периода 1 неделя и 1 месяц. Сравнить результаты, сделать
выводы.
7. Построить нелинейную регрессию для временного ряда индекса
Доу Джонса (DJIA) и проверить ее качество. Вычислить границы
0,95–доверительного интервала для уравнения регрессии и наложить их
на график регрессии.
8. Для индекса RTS
вычислить логарифмические доходности за последние 252 торговых сессий, построить гистограмму логарифмических
доходностей и вычислить центральные моменты (математическое ожидание, дисперсию, коэффициент асимметрии и эксцесса).
9. Загрузите данные с сервера yahoo для котировок акций GE, KO,
AAPL, MCD за последний год. По ценам закрытия вычислите логариф-
мические доходности и для полученных временных рядов сформируете
портфель с ограничением
долей: инвестиции в каждый актив не менее
15 %. Сделайте выводы.
по ценам
55

Заключение
В пособии кратко рассмотрены возможности программы Metastock
и языка программирования R для проведения статистического тестирования торговых стратегий. Для принятия решения о целесообразности
использования тестируемой торговой стратегии необходимо рассматривать множество параметров. В пособии приведены иллюстративные
примеры для оценки эффективности торговых сигналов, текущих и зафиксированных убытков, волатильности рынка с использованием как
графического
языка программирования.
Для практического закрепления представленного материала в каждом разделе приведены задания для самостоятельной работы.
Для дальнейшего самостоятельного изучения вопросов создания и тестирования торговых стратегий следует обратиться к специальной литературе, а также интернет-ресурсам, рекомендованным в конце пособия.
В качестве перспективного программного
чётов выделим язык программирования Python, которому будет посвящено
следующее пособие.
интерфейса программы Metastock, так и скриптового
языка для проведения рас-
56

Список литературы
1. Pfaff B. Financial Risk Modelling and Portfolio Optimization with R /
B. Pfaff. – Chichester : John Wiley & Sons, 2016. − 437 p.
Georgakopoulos Н. Quantitative Trading with R. Understanding
2.
Mathematical and Computational Tools from a Quant’s Perspective /
Н. Georgakopoulos. − New York : Folk Creations, 2015. − 291 p.
3.
Mastering R for Quantitative Finance / E. Berlinger, F. Illes,
M. Badics, A. Banai, G. Daroczi. –
346 p.
Backtesting Trading Strategy in R. – URL: https://analyticsprofile.com/
4.
algo-trading/backtesting-trading-strategy-in-r/ (дата обращения: 03.12.2019).
Сафин В.И. Создание и оптимизация торговых систем
5.
в Metastock / В.И. Сафин. – Москва : Форекс-Клуб, 2004. – 180 с.
Шарп У. Инвестиции / У. Шарп, Г. Александер, Дж. Бейли. –
6.
Москва : Инфра-М, 2014. – 1028 с.
Швагер Дж. Технический анализ. Полный курс / Дж. Шварер. –
7.
Москва : Альпина Бизнес Букс, 2006. – 806 c.
Семёнов М.Е. Исследование операций на рынке ценных бумаг:
8.
учебное пособие / М.Е. Семёнов. – Томск : Изд-во ТУСУРа, 2007. – 180 с.
Колби Р. Энциклопедия технических индикаторов / Р. Колби. –
9.
Москва : Альпина Бизнес Букс, 2004. – 837 с.
Shamsieva A. Validation of Optimal Strategy for Portfolio Management
10.
Using Technical Analysis. IFAC Proceedings / A. Shamsieva. − Vol. 45 (2). –
P. 1313–1318.
11.
Burghardt G. Deciphering Drawdowns / G. Burghardt, R. Duncan, L.
Liu // Risk magazine, Risk management for investors. – 2003. – P. 16−20.
Pardo R. The Evaluation and Optimization of Trading Strategies /
12.
R. Pardo. − New Jersey : Wiley & Sons, 2008. – 431 p.
Portfolio optimization with R/Rmetrics / D. Wurtz, Y. Chalabi,
13.
W. Chen, A. Ellis. – Zurich : Rmetrics Association and Finance Online Publishing, 2009. – 274 p.
Семёнов М.Е. Создание и оптимизация торговых систем
14.
в Metastock : учебное пособие / М.Е. Семёнов. – Томск : Изд-во ТУСУРа,
2009. – 30 с.
Щербицкий С.Г. Статистическое оценивание торговых стратегий /
15.
С.Г. Щербицкий, М.Е. Семёнов // Перспективы развития фундаментальных
наук : труды XI Международной конференции студентов и молодых учёных.
Россия, Томск, 22–25 апреля 2014 г., Национальный исследовательский Томский политехнический университет. − Томск, 2014. – С. 703–706.
Birmingham : Packt Publishing, 2015. −
57

16. Шитиков В.К. Классификация, регрессия, алгоритмы Data Min-
ing с использованием R / В.К. Шитиков, С.Э. Мастицкий. − URL:
https://github.com/ ranalytics/data-mining (дата обращения: 03.12.2019).
Sharipova A.M. Robustness Measure for Portfolio Management
17.
Strategy / A.M. Sharipova, V.Yu. Arkov // Bulletin of the South State Ural
University. Ser. Computer Technologies, Automatic Control, Radio Electronics. – 2017. – Vol. 17, no. 3. – P. 88–98.
18.
Bennett R. Portfolio Optimization Objectives with Portfolio Analyt-
ics. R/Finance / Bennett R. – URL: http://past.rinfinance.com/agenda/
2014/workshop/RossBennett.pdf (дата обращения: 03.12.2019).
Cross Validated. – URL: https://stats.stackexchange.com/ (дата
19.
обращения: 03.12.2019).
Quantitative Finance. – URL: https://quant.stackexchange.com/ (дата
20.
обращения: 03.12.2019).
21. Metastock online community. – URL: http://forum.metastock.com/
(дата обращения: 03.12.2019).
58

Учебное издание
СЕМЁНОВ Михаил Евгеньевич
СОЗДАНИЕ, ТЕСТИРОВАНИЕ И ОПТИМИЗАЦИЯ
ТОРГОВЫХ СИСТЕМ С ИСПОЛЬЗОВАНИЕМ
ПРОГРАММЫ METASTOK И ЯЗЫКА R
Учебное пособие
Корректура Е.Л. Тен
Компьютерная верстка Д.В. Сотникова
Дизайн обложки Т.В. Буланова
Подписано к печати 05.12.2019. Формат 60х84/16. Бумага «Снегурочка».
Печать CANON. Усл. печ. л. 3,43. Уч.-изд. л. 3,10.
Заказ 262-19. Тираж 100 экз.
3
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
