Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Создание, тестирование и оптимизация торговых систем с использованием программы Metastok и языка R. Учебное пособие
.pdf
Рис. 24. Диалоговое окно Organizer
Рассмотрим пример импорта (экспорта) индикатора. Для этого необ-
ходимо:
Выполнить команду системного меню Tools, выбрать Indicator
1.
Builder
.
2.
В появившемся диалоговом окне Indicator Builder нажать
Organizer.
В окне Formula Organizer Wizard (рис. 24) выбрать Import
3.
formula files
файл (
Export formula files – для экспорта формул из файла в MetaStock).
Нажать кнопку Next.
4.
Для
, если Вы хотите импортировать формулы из MetaStock в
импортирования необходимо:
1. В окне Choose Source Folder" в поле Folder указать путь к файлам.
2. Нажать кнопку
Для
экспортирования необходимо:
Finish.
1. В окне Select Custom Indicators" выбрать из списка необходи-
мые функции и/или индикаторы.
2. Нажать кнопку
3. В окне
Select System Tests выбрать из списка необходимые си-
Next.
стемы.
4. Нажать кнопку
5. В окне
Select Explorations выбрать из списка необходимые
Next.
фильтры.
6. Нажать кнопку
7. В окне
Select Experts выбрать из списка необходимые советники.
Next.
31

8. Нажать кнопку Next. В окне Creat Self-Extracting Install Вы можете дополнительно указать, каким образом будут экспортированы формулы. При выборе опции Да будет создан файл "FOSetup.exe". В дальнейшем, при импорте формул, загружать MetaStock не потребуется. Все
необходимые действия будут выполнены при запуске "FOSetup.exe".
При выборе опции Нет формулы будут экспортированы обычным спосо-
бом.
В дальнейшем при импорте необходимо будет воспользоваться
стандартной процедурой MetaStock для импорта формул.
9. Нажать кнопку Next.
10. В окне Choose Destination Folder в поле Folder указать путь для
сохранения файлов.
11. Нажать кнопку Next.
12. В окне Password Protect, если необходимо, ввести пароль.
13. Нажать кнопку Finish.
32

Задания для самостоятельной работы
1. Создайте пользовательский индикатор, который будет вычислять среднюю цену (Median Price) по правилу: (high + low) / 2. Наложите
созданный индикатор на график цены.
2.
Используя формулы, создайте пользовательский индикатор По-
лосы Боллинжера (Bollinger Bands) и сравните результаты со встроенным
индикатором:
mov( C, 20, S ) + ( 2 * stdev( C, 20 ))
mov( C, 20, S ) - ( 2 * stdev( C, 20 ))
Постройте технический индикатор – «Ценовой осциллятор» (Price
3.
Oscillator) по формуле: mov(С, 10, E) - mov(С, 20, E). Постройте его график, а затем экспортируйте построенный индикатор в виде файла.
Создайте фильтр «Прорыв объема и цены» (Price and Volume
4.
Breakout), который будет выбирать акции, цены которых за последнюю
торговую сессию выросли более чем на 5 % при росте объема как минимум на 10 % от среднего значения за 50 предыдущих торговый сессий.
Постройте пользовательский индикатор по формуле
5.
BarsSince(BBandTop(C,20,S,2)-BBandBot(C,20,S,2)<50), постройте гра-
фик для этого индикатора в дополнительном окне и приведите интерпретацию поведения индикатора.
Постройте индикатор по формуле If(C>BBandTop(C,20,S,2),1,-1),
6.
выведите график поведения индикатора в отдельном окне и объясните,
по какому правилу индикатор принимает значения ±1.
Используя записи из дневника внутридневного трейдера (таб-
7.
лица), определите: 1) эффективность трейда (эффективность входа, выхода, итоговую эффективность); 2) сумму комиссионного вознаграждения брокера и биржи (тариф брокера 0,09 % от сделки, тариф биржи 0,1 %
от сделки); 3) прибыль/убыток, проведенной сделки. Если максимальная
цена за время нахождения в позиции была 152, минимальная – 112.
Эффективность торговых сигналов
Цена Эффективность, %
Вход в позицию 120
Выход из позиции 150
Итого по позиции
Постройте торговую систему, используя два встроенных индика-
8.
тора, протестируйте ее, установите стоп-ордера, проведите оптимизацию
системы. Сравните построенную торговую систему с системой «Купил и
33

держи» (Buy & Hold). Если построенная система дает прибыль меньше,
чем система «Купил и держи», то в систему следует ввести дополнительные параметры и протестировать ее повторно.
Оформите отчет по результатам тестирования. Отчет должен со-
9.
держать:
условия тестирования;
принципы работы индикатора 1, индикатора 2;
описание систем;
формулы механических торговых систем;
оптимизированные переменные;
использование стоп-ордеров;
результаты тестирования;
отчеты по результатам тестирования (System Report);
сравнение прибыльности системы со стратегией «Купил и Держи».
34

Раздел 2. Среда программирования R
2.1. Обзор возможностей языка R для работы с временными рядами
Язык R (http://www.r-project.org) – это язык программирования для
статистической обработки данных и работы с графикой, а также свободная программная среда вычислений с открытым исходным кодом. В базовой поставке R поддерживаются основные математические операции и
обеспечена возможность расширяемости функционала с помощью пакетов. Пакеты представляют собой библиотеки для работы специфических
функций или специальных областей
Кроссплатформенная система статистического анализа и визуализации данных R состоит из следующих основных частей (Шитиков, 2014):
язык программирования высокого уровня R, позволяющий од-
ной строкой реализовать различные операции с объектами, векторами,
матрицами, списками и т. д.;
большой набор функций обработки данных, собранных в отдель-
ные пакеты (package);
развитая система поддержки, включающая обновление компо-
нентов среды, интерактивную помощь и различные образовательные ресурсы, предназначенные как для начального изучения R, так и последующих консультаций по возникающим затруднениям.
Под термином package (пакет) будем понимать совокупность функций, html-страниц руководства пользователя и примеров объектов данных,
предназначенных для тестирования или обучению работы. Термин
(библиотека) определяет директорию, которая может содержать один или
несколько пакетов. Функции (function objects) – это поименованные программы, предназначенные для создания новых объектов или выполнения
определенных действий над ними. Объекты, предназначенные для хране-
ния данных (data objects), – это отдельные переменные, векторы, матрицы
и массивы, списки, факторы, таблицы данных.
Вектор (упорядоченный набор значений) создаётся с
функции
c() (от англ. concatenate – сцепить, объединить):
применения.
library
помощью
a <- c(1, 2, 5, 8, 10, 12:23)
Список отличается от вектора тем, что элементами списка могут
быть не только атомарные значения, но также другие списки, т. е. этот
тип данных является рекурсивным. Список создаётся с помощью функ-
list():
ции
y <- list(1:3, "str1", T, list("a", "b", F))
35

Матрица (двумерный массив) создаётся с помощью функции
matrix(). По умолчанию элементы в матрице располагаются по столб-
цам:
b <- matrix(1:12, 3, 4)
Фрейм данных (Data Frame) – это двумерный массив (таблица) с
именованными столбцами. Фрейм создаётся с помощью функции
data.frame():
n <- c(2, 3, 5);
s <- c("abc", "bca", "cbdac");
b <- c(TRUE, FALSE, TRUE)
df <- data.frame(n, s, b)
В базовой комплектации R имеется целое семейство функций, предназначенных для организации векторизованных вычислений над матрицами, списками и таблицами данных. Создадим квадратную матрицу M
и найдем минимальные значения в каждой строке матрицы:
M <- matrix(seq(1,16), 4, 4)
apply(M, 1, min)
В R используется интерфейс командной строки, для удобства работы можно использовать интегрированные среды разработки (IDE) c
графическим интерфейсом пользователя, например настольное приложение RStudio. Кроме этого, возможно исполнение скрипта на языке R онлайн (https://rdrr.io/snippets/).
Общий алгоритм работы в R/RStudio можно представить следую-
щим образом:
загрузка данных и необходимых предварительно установленных
пакетов;
проведение визуализации и анализа исходных данных;
автоматизация работы, создание и оптимизация торговых стра-
тегий;
сохранение результатов работы, полученных во время сессии R.
Язык программирования R поддерживает основные форматы файлов операционной системы (*.txt, *.csv). Для чтения и записи специальных форматов (например, DBF, SPSS, DTA, Stata) можно установить дополнительные пакеты, например,
foreign.Для установки этого пакета
достаточно выполнить команду:
install.packages("foreign")
Для просмотра списка установленных пакетов в консоли достаточно
выполнить команду rownames(installed.packages()).
36

При запуске R/RStudio загружаются только базовые пакеты.
Для инициализации любого другого пакета перед непосредственным использованием его функций нужно ввести команду
library(<имя_па-
кета>).
Для работы с временными рядами реализовано множество пакетов,
отличающихся функционалом. Кратко приведем описание пакетов, которые будем использовать при дальнейшем изложении материала.
Пакет
quantmod предназначен для получения котировок из раз-
личных источников, а также для визуализации исходных финансовых
временных рядов. Пакет
quantmod обеспечивает онлайн- и офлайн- до-
ступ к финансовым временным рядам в формате xts.
Пакет
ектами класса
xts предназначен для работы с временными рядами как объ-
xts (eXtensible Time-Series).
В пакете TTR реализованы основные индикаторы для проведения
технического анализа.
Пакет
quantstrat – используется для тестирования торговых
стратегий.
Пакет
fPortfolio – для формирования портфелей ценных бумаг,
вычисления характеристик портфеля (эффективная граница, меры риск и
т. д.), анализа доходности портфельных инвестиций (Wurtz, 2009).
Пакет
PortfolioAnalytics – предназначен для моделирования
и визуализации решения задачи портфельного инвестирования. Пакет
PortfolioAnalytics предоставляет возможность задавать различ-
ные типы ограничений и целевых функций. Для поиска оптимального
портфеля пакет
PortfolioAnalytics поддерживает различные ме-
тоды решения задачи оптимизации, которые могут быть сформулирована
как задачи линейного и нелинейного программирования.
Более детальная классификация R-пакетов для проведения математического моделирования финансовых временных рядов (копулярные
модели, моделирование Монте-Карло, оптимизация, робастность, прогнозирование, технический анализ, визуализация) приведена в монографии (Pfaff, 2016, c. 378).
RStudio можно выделить любую функцию и нажать клавишу F1
В
для получения подсказки. Кроме того, имеются функции подсказки для
командной строки:
help(Имя) или ?Имя. В R cимвол # означает, что
оставшаяся часть строки содержит комментарий (невыполняемый код).
37

2.2. Знакомство с графическим интерфейсом пользователя RStudio
В основе графического интерфейса пользователя среды разработки
RStudio лежит стандартный графический интерфейс операционной си-
стемы Windows/Mac. Доступ к функциям осуществляется с помощью главного и контекстного меню, инструментальных панелей, диалоговых окон и
т. д. В среде RStudio пользователь может работать с несколькими окнами
одновременно как с одним целым. Для начала работы со средой RStudio
необходимо:
Нажать кнопку Пуск и далее Программы – RStudio – RStudio
1.
или выбрать иконку на рабочем столе.
После запуска программы необходимо загрузить исходный файл
2.
(*.r), сохраненный на диске, с помощью команды
создать новый рабочий файл с помощью команды
Script
. На рабочем столе отобразится основное окно (рис. 25).
File – Open File… или
File – New File – R
Рис. 25. Графический интерфейс пользователя RStudio
В верхней части окна расположено основное меню, через которое
можно выполнить любую команду, заложенную в программу:
меню команд управления файлами,
гации по исходным кодам,
основного окна,
Plots – меню команд работы с графиками, Session – меню
View – меню команд управления интерфейсом
Edit – Code – меню команд для нави-
38
File –

команд для управления настройками текущей сессии, Build – меню команд для управления настройками проектов RStudio,
манд для проведения отладки исходного кода,
профилизации исходного кода,
тельных инструментов,
Help – доступ к справочной системе.
Tools – меню команд вызова вспомога-
Profile – меню команд для
Debug – меню ко-
В верхней части рабочего экрана (рис. 25) расположена горизонталь-
ная панель инструментов
ToolBar. С ее помощью, например, можно от-
крыть или сохранить файл с исходным кодом.
Основное рабочее пространство среды RStudio разделено на четыре
части
Source, Console, History, Packages.
RStudio поддерживает выполнение кода непосредственно из окна
Source. Выполняемые команды отправляются в Console, где появляется
также результат их выполнения. При выполнении команд вывод результатов может быть осуществлен в графическом виде (график, гистограмма) в отдельное графическое окно или файл. Во время работы
RStudio создает базу данных всех команд, которые пользователь вводит
Console. Имеется возможность просмотра этой базы данных при по-
в
мощи панели
предусмотрено окно
History. Для управления дополнительными пакетами
Packages.
Среда RStudio предоставляет стандартные возможности текстового
редактора с исходным кодом. Это копирование и удаление с использование возможностей буфера обмена. Для этого можно использовать команды меню
Edit или горячие клавиши операционной системы. Кроме
этого в RStudio реализована синтаксическая подсветка ключевых слов
языка, поддерживается автоматическое завершение кода при помощи
клавиши
Tab. Одним из преимуществ RStudio является встроенный
Viewer данных. Для настройки внутренних окон и закладок на них можно
воспользоваться командой из главного меню
Pane Layout
.
Tools – Global options –
2.3. Загрузка данных в программу R/Rstudio
Для работы в R/RStudio обычно используют файлы с расширением
*.txt, в которых значения переменных разделены знаками табуляции (tabdelimited files), а также файлы с расширением *.csv (comma separated
values), в которых значения переменных разделены запятыми. При этом це-
лая и дробная действительных переменных (double) разделена точкой.
Файл с данными рекомендуется явно указать рабочую директорию
программы, т.е. папку, из которой R по умолчанию будет загружать данные. Для этого нужно выполнить команду
setwd("D:/My_R_Project")
39

Для того чтобы выяснить путь к рабочей директории R на своем компьютере, используйте команду getwd().
Основной функцией для импортирования данных в рабочую среду R
является
read.table(). Эта мощная функция позволяет достаточно
тонко настроить процесс загрузки внешних файлов, в связи с чем она
имеет большое количество управляющих аргументов. Для вызова файла
помощи достаточно выполнить команду ?read.table.
Для загрузки файла
MyData.txt, который хранится в рабочей ди-
ректории R, достаточно выполнить команду
MyTS <- read.table(file =
"MyData.txt", header = TRUE)
Для загрузки файла *.csv предназначена функция read.csv(), которая работает аналогично. Если файл с данными хранится не в рабочей
директории, то нужно явно установить значение аргумента file функциях
read.table() и read.csv(). При этом пользователям операцион-
ных систем Windows необходимо помнить, что для указания полных путей к файлам в программе R используется прямой одинарный (
/) либо
двойной обратный слеш (\\).
Для загрузки файла с данными в RStudio можно использовать команду меню
File – Import Dataset, далее выбрать тип файла и в диалого-
вом режиме указать необходимые параметры.
В качестве ресурсов для онлайн-загрузки данных можно использовать:
Yahoo Finance (http://finance.yahoo.com/);
Quandl (http://www.quandl.com/);
Google Finance (http://www.google.com/finance);
Federal Reserve Bank of St. Louis(http://research.stlouisfed.org/fred2/).
Для загрузки котировок акций компании
Microsoft (MSFT) с сервера
Yahoo Finance можно в консоли выполнить следующие команды:
library(quantmod)
getSymbols("MSFT", src = "yahoo")
Для загрузки с сервера Federal Reserve Bankследует использовать
команду
getSymbols("MSFT", src = "FRED")
Для работы с данными российских бирж, надо установить библиотеку
rusquant. Для загрузки котировок индекса РТС за последний год
с сервера
Финам (finam.ru)следует выполнить команды:
library(rusquant)
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
