Добавить в цитаты Настройки чтения

Страница 11 из 12

[1] 5852 15

> options("scipen"=100, "digits"=4) )

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

# избавляемся от экспоненциального формата представления цифр

> Курс <-Мои.данные[1:5831 ,2]

# загружаем данные по курсу доллара США к рублю с 30 июня 1992 г. по 30 марта 2018 г.

> Курс0<-Курс[5831, ]

# обозначаем как Курс0 – курс доллара США к рублю на 30 марта 2018 г.

> Курс0

2018-03-30

57.2649

# смотрим курс доллара США к рублю на 30 марта 2018 г.

> Лот<-1000

# устанавливаем размер торгуемого микролота=1000 долларам США

> Цена_Лота<-Лот*Курс0

# находим цену лота в рублях на 30 марта 2018 г.

> Цена_Лота

2018-03-30

57264.9

# цена лота в рублях на дату покупки лота по курсу закрытия

Теперь предположим, что в данном случае мы планируем торговать в течение всего апреля 2018 года, то есть в течение 21 торгового дня. При этом в зависимости от характера торговых сигналов (о них мы подробнее поговорим немного позже) трейдер будет открывать или закрывать длинную (короткую) позицию по ценам закрытия на конец торгового дня, либо воздерживаться от участия в торгах. С целью риск-менеджмента составим интервальный прогноз, в рамках которого курс доллара к рублю на момент закрытия торгов будет находится с 1 апреля по 28 апреля 2018 года.

При этом будем исходить из того, что с 50% вероятностью курс прогнозируемой валюты может за месяц торгов либо упасть, либо вырасти. Заметим, что в биржевой торговле вероятность удачно закрыть позицию, чаще всего, колеблется в диапазоне 45,0%-55,0% и лишь очень хорошему трейдеру при удачном стечении обстоятельств на рынке удается повысить ее до 60,0-65,0% и чуть более. Поэтому хочу еще раз повторить, что любой выход на валютный рынок сопряжен с серьезным риском потерь, который нельзя совсем устранить, а можно лишь минимизировать.

Для прогнозирования нам необходимо найти так называемые квантили, а, точнее сказать процентили, по изменениям курса интересующей нас валюты. Квантилем в математической статистике называют такое значение, которое заданная случайная величина (в данном случае это разница между текущим и предыдущими курсами доллара с лагом в один, два, три … 250 торговых дней) не окажется выше (либо ниже) определенного уровня с заранее заданной вероятностью. Если вероятность задана в процентах, то квантиль называется процентилем. Подробнее о процентилях можно прочитать в моей книге см. главу 1 «Как предсказать курс доллара. Расчеты в Excel для снижения риска проигрыша».

Для того, чтобы найти процентили, сначала на основе данных по курсу закрытия курса доллара к рублю на конец 30 марта 2018 г. построим прогноз на следующий торговый день на момент закрытия с 0.1 % уровнем риска (или 99.9% уровнем надежности). Причем, 0.1% риска свидетельствует о том, что существует лишь один шанс из 1000, что курс валюты выйдет за рамки интервального прогноза. (Заметим, что эта оценка риска основана на прошлых данных, но после сильных колебаний на рынке, она может измениться). Для наших расчетов воспользуемся функцией quantile, в которой для верхнего интервала прогноза установим уровень надежности =0.999, а для нижнего интервала прогноза – на уровне 0.001, что по сути означает уровень надежности =1-0.001=0.999 или 99.9%. При этом команда diff(Курс, 1) означает разницу между курсами валют с лагом в один день.

Для получения интервального прогноза с лагом в один торговый день с 0.1% уровнем риска введем следующий день:

> НижПрогноз <– Курс0+quantile(diff(Курс, 1), 0.001)

> НижПрогноз

2018-03-30

54.458959

> ВерхПрогноз<-Курс0+quantile(diff(Курс, 1), 0.999)

> ВерхПрогноз

2018-03-30

60.808652

Таким образом на основе этого прогноза, построенного по данным на 30 марта 2018 г., можно с 99.9% уровнем надежности утверждать, что курс доллара к рублю по итогам торгов в следующий торговый день, то есть 2 апреля 2018 г., должен был находиться в диапазоне от 54.4590 руб. и до 60.8087 руб. Если же нужно построить прогноз с лагом в 2,3,4 … 250 торговых дней, то одна из команд в этом коде приобретет вид diff(Курс, 2,3,4 … 250). А в случае использования операторов циклов вместо этих конкретных цифр ставят букву n.

Далее построим аналогичные интервальные прогнозы на период от одного, двух … и до 250 торговых дней (в календарном году около 250 торговых дней). Для прогнозов будем использовать данные по курсам доллара к рублю за период с 30 июня 1992 г. по 30 марта 2018 г. С этой целью введем код, в котором используется оператор циклов for(n in 1:250), «пробегающий» значения от 1 до 250. При этом в R используются фигурные скобки {}, чтобы создать новую функцию, в которой «упаковано» сразу несколько операторов. В некоторых ситуациях фигурные скобки можно опускать, тем не менее начинающим программистам рекомендуется всегда их ставить.

Прогноз по курсу валюты с заданным количеством дней торгов и 0.1% уровнем риска:

Вывод.данных<-data.frame()

# создаем таблицу для вывода данных с 0 колонок и 0 строк

for(n in 1:250) {

# оператор циклов for

# вектор 1:250 означает последовательность 1, 2 … 250.

НижПрогноз<-round(Курс0+quantile(diff(Курс, n), 0.001),digits=4)

# нижний интервал прогноза, digits=4 – округлить на 4 цифры





# функция round означает округлить

ВерхПрогноз<-round(Курс0+quantile(diff(Курс, n), 0.999),digits=4)

# верхний интервал прогноза

Вывод.данных<-c(Вывод.данных, data.frame(n, НижПрогноз, ВерхПрогноз))

# заполняем таблицу данных

show(data.frame(n, НижПрогноз, ВерхПрогноз, row.names='Дней торгов'))

# команда показать вывод данных

>Табл.05 <– data.frame(matrix(unlist(Вывод.данных0), nrow=250, byrow=T), stringsAsFactors=FALSE)

# преобразуем лист с выводом данных в табл.05

>ДнейТоргов <-Табл.05[, 1]

# присваиваем колонке 1 из табл. 05 имя первой переменной

НижПрогноз <-Табл.05[, 2]

# присваиваем колонке 2 из табл. 05 имя второй переменной

ВерхПрогноз<-Табл.05[, 3]

# присваиваем колонке 3 из табл. 05 имя третьей переменной

Табл.5 <-data.frame(ДнейТоргов, НижПрогноз, ВерхПрогноз)

# создаем таблицу с тремя обозначенными переменными для последующей работы

Табл.5

# выводим таблицу с тремя обозначенными переменными – см. табл. 5

В результате получим следующие интервальные прогнозы (в целях экономии места, здесь они даются не полностью) – см. табл. 5.

>Табл. 5. Нижние и верхние интервальные прогнозы с лагом от 1 до 250 дней

Источник: расчеты автора

Судя по табл. 5, своего максимума верхний интервал прогноза =91.1698 руб. достигает при прогнозе на 250 дней. Такой же лаг и у минимума нижнего интервала прогноза= 36.4774 руб. Воспользуемся соответствующими встроенными функциями, чтобы не тратить время на поиск этих важных для трейдера параметров интервальных прогнозов.

> max(ВерхПрогноз)

# находим максимум по верхнему интервалу прогноза

[1] 91.1698

> which.max(ВерхПрогноз)

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

[1] 250

> min(НижПрогноз)

# находим минимум по нижнему интервалу прогноза

[1] 36.4774

> which.min(НижПрогноз)

# находим в таблице порядковый номер минимума по нижнему интервалу прогноза

[1] 250

> НижПрогноз[21]

# находим нижний интервал прогноза с лагом в 21 день

[1] 47.3384

> ВерхПрогноз[21]

# верхний интервал прогноза с лагом в 21 день

[1] 71.1137

>plot(НижПрогноз, main = 'Интервальный прогноз на 250 торг. дней',