Посчитал изменения цен за 5 минут (закрытие минус открытие) для RIM6 и графически представил, насколько цена бегает в среднем и может бегать в течение этих 5 минут. Это я уже делал и показывал, но на этот раз я добавил диаграмму плотности распределения и диаграмму размаха. Ниже под графиком есть другой график — пояснение к диаграмме размаха.
Диаграмма размаха дает представление о том, какой будет размер тела свечи с вероятностью 50% — 60 пунктов и какой размер с вероятностью более 95% — не более примерно 250 пунктов. Видно также, что цена может теоретически улететь на 800 пунктов за 5 минут.
Данные взял за последние 10 дней. Если взять за последние 30, можно увидеть выброс на 1600 пунктов.
Также это можно использовать для расстановки заявок в стакане, если вы используете математическую модель для предсказания цены.
Графики
* нажмите на картинку, чтобы увеличить и более четко увидеть текст и цифры
* синие горизонтальные линии на втором графике — это ± 1 сигма и 2 сигмы.
Пояснение
Текстовая часть выдачи кода
> source("D://Dropbox//R//earnings-RTS.r") [1] "sdT = 110.317631956078" [1] "meanT - 2 * sdT = -218.883720702279" [1] "meanT - 1 * sdT = -108.566088746201" [1] "meanT + 1 * sdT = 112.069175165954" [1] "meanT + 2 * sdT = 222.386807122032"
Код на R
#install.packages("tseries") #install.packages("rusquant", repos="https://R-Forge.R-project.org") # Установка пакетов. Она не требуется, если уже все установлено. library(tseries) library(rusquant) # Подключение библиотек if (length (RIM6) == 0) { getSymbols("RIM6", src = "Finam", from = Sys.Date() - 10, period = "5min") } # Получение данных, если их нет abs.returns <- Cl(RIM6) - Op(RIM6) # Абсолютные доходности dev.off() # Очистка графика через выключение графического устройства R par(mfrow=c(3,1)) # Создаем график с 3 строками и 1 столбцом hist(abs.returns, breaks=100, col = "blue", border = "gray", xlab = "Absolute Returns", ylab = "Frequency", main = "Histogram of absolute returns for RIM6 (5 min)") # Гистограмма размеров свечей axis(1, at = seq(-800, 800, by = 100), las = 1) # Корректируем значения x-координат d <- density(abs.returns) # Функция плотности распределения plot(d, main = "Density of absolute returns") # Диаграмма плотности распределения polygon(d, col="red", border="blue", lwd = 2) # Закрашиваем диаграмму axis(1, at = seq(-800, 800, by = 100), las = 1) # Корректируем значения x-координат meanT <- as.numeric(mean(abs.returns, na.rm=TRUE)) sdT <- as.numeric(sd(abs.returns, na.rm=TRUE)) abline(v = meanT + 1 * sdT, col = "blue", lwd = 2) abline(v = meanT + 2 * sdT, col = "blue", lwd = 2) abline(v = meanT - 1 * sdT, col = "blue", lwd = 2) abline(v = meanT - 2 * sdT, col = "blue", lwd = 2) print (paste("sdT = ",sdT)) print (paste("meanT - 2 * sdT = ",meanT - 2 * sdT)) print (paste("meanT - 1 * sdT = ",meanT - 1 * sdT)) print (paste("meanT + 1 * sdT = ",meanT + 1 * sdT)) print (paste("meanT + 2 * sdT = ",meanT + 2 * sdT)) v.abs.returns <- as.vector(abs.returns) # Получение вектора boxplot(v.abs.returns , xlab="Absolute returns" , col="green", horizontal = TRUE, outline = TRUE, staplewex = 1) # Диаграмма размаха, содержит медиану, верхний и нижний квантили, наблюдаемые максимум и минимум и выбросы axis(1, at = seq(-800, 800, by = 100), las = 1) # Корректируем значения x-координат text(x = fivenum(v.abs.returns), labels = fivenum(v.abs.returns), y = 1.3) # Добавление текста
Список источников
Polygon Drawing
Set or Query Graphical Parameters
How to specify the actual x axis values to plot as x axis ticks in R
Квантиль
Box Plots