На R можно не только делать полезные расчеты, но и представлять их в красивом виде.
Посчитал изменения цен за 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="http://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
РТС большой… нет не так… огромный любитель рисовать ДИВЕРЫ в огромных количествах
на всех таймфреймах