загрузка нужных библиотек
library(xts)
library(plotly)
Загружаю котировки, беру последние 500 свечей и удаляю обьемы
P <- file.choose() |> readRDS() |> lapply(\(x) tail(x[,1:4],n=500))
Оставляю только те пары у которых есть в названии USD
p <- P[grep("USD", names(P))]
меняю “EURUSD” на “USDEUR” итд пары.. 1 / p[[i]]
for(i in grep("USD$", names(p))) p[[i]] <- 1 / p[[i]]
Моя нормализация, вернее обычная стандартизация (x - mean(x)) / sd(x) которую я применяю к первым 100 свечам потом по полученым параметрам продлеваю график
my_scale <- function(x,y) (y - mean(x)) / sd(x)
p2 <- lapply(p, \(x) my_scale(x = x[1:100,],y = x))
# Определяем набор цветов
colors <- c("blue", "red", "green", "purple", "orange", "black", "gray")
# Создаем пустой график
fig <- plot_ly()
# Для каждой валютной пары в p2
for(i in 1:length(p2)) {
data <- cbind.data.frame(date=index(p2[[i]]) , coredata(p2[[i]]))
# Добавляем график свечей для валютной пары к основному графику
fig <- fig %>%
add_trace(data=data,
x = ~date,
type="candlestick",
open = ~Open, close = ~Close,
high = ~High, low = ~Low,
line = list(width = 1),
name = names(p2)[i],
increasing = list(line = list(color = colors[i])),
decreasing = list(line = list(color = colors[i])))
fig <- layout(fig ,
xaxis = list(rangeslider = list(visible = F),
title = ""),
yaxis = list(side = "left"))
}
# Показываем график
fig