我正尝试使用从Yahoo Finance获得的数据构建砖形图表,并想知道是否有任何包可以实现此功能。我查看了大多数金融包,但只能找到蜡烛图表。如需了解更多关于砖形图表的信息,请使用此链接:这里。
非常酷的问题!显然,R中真的没有这样的东西。各个网站上都有一些尝试类似事情的(例如瀑布图),但它们都不太合适。所以......我用 data.table 和 ggplot 做了一个小周末项目。
rrenko
仍然存在错误、不稳定性和视觉上的问题,我希望能优化它们(代码中充满了注释和调试记录),但主要思路应该在那里。欢迎反馈和改进意见。
注意事项:仍然存在数据转换出现问题的情况,特别是当大小非常小或非常大时。这应该可以在不久的将来修复。此外,
renko()
函数目前期望一个包含两列的数据框:date
(x轴)和close
(y轴)。
devtools::install_github("RomanAbashin/rrenko")
library(rrenko)
renko(df, size = 5, style = "modern") +
scale_y_continuous(breaks = seq(0, 150, 10)) +
labs(x = "", y = "")
renko(df, size = 5, style = "classic") +
scale_y_continuous(breaks = seq(0, 150, 10)) +
labs(x = "", y = "")
set.seed(1702)
df <- data.frame(date = seq.Date(as.Date("2014-05-02"), as.Date("2018-05-04"), by = "week"),
close = abs(100 + cumsum(sample(seq(-4.9, 4.9, 0.1), 210, replace = TRUE))))
> head(df)
date close
1: 2014-05-02 104.0
2: 2014-05-09 108.7
3: 2014-05-16 111.5
4: 2014-05-23 110.3
5: 2014-05-30 108.9
6: 2014-06-06 106.5
https://github.com/Kinzel/k_rrenko
它需要以下软件包:xts、ggplot2和data.table。> head(Ativo)
Open High Low Close
2015-01-01 20:00:00 1.20965 1.21022 1.20959 1.21006
2015-01-01 20:15:00 1.21004 1.21004 1.20979 1.21003
2015-01-01 20:30:00 1.21033 1.21041 1.20982 1.21007
2015-01-01 20:45:00 1.21006 1.21007 1.20978 1.21002
2015-01-01 21:00:00 1.21000 1.21002 1.20983 1.21002
2015-01-02 00:00:00 1.21037 1.21063 1.21024 1.21037
krenko_plot(Ativo, 0.01,withDates = F)
与plot.xts相比
plot.xts(Ativo, type='candles')
有两个主要变量:大小和阈值。
“大小”是砖块的大小。需要运行。
“阈值”是新砖块的阈值。默认值为1。
第一个砖块被移除以确保可靠性。
这是一个快速而简单的解决方案,改编自Python脚本此处。
# Get some test data
library(rvest)
url <- read_html("https://coinmarketcap.com/currencies/bitcoin/historical-data/?start=20170602&end=20181126")
df <- url %>% html_table() %>% as.data.frame()
# Make sure to have your time sequence the right way up
data <- apply(df[nrow(df):1, 3:4], 1, mean)
# Build the renko function
renko <- function(data, delta){
pre <- data[1]
xpos <- NULL
ypos <- NULL
xneg <- NULL
yneg <- NULL
for(i in 1:length(data)){
increment <- data[i] - pre
incrementPerc <- increment / pre
pre <- data[i]
if(incrementPerc > delta){
xpos <- c(xpos, i)
ypos <- c(ypos, data[i])
}
if(incrementPerc < -delta){
xneg <- c(xneg, i)
yneg <- c(yneg, data[i])
}
}
signal <- list(xpos = xpos,
ypos = unname(ypos),
xneg = xneg,
yneg = unname(yneg))
return(signal)
}
# Apply the renko function and plot the outcome
signals <- renko(data = data, delta = 0.05)
plot(1:length(data), data, type = "l")
points(signals$xneg, signals$yneg, col = "red", pch = 19)
points(signals$xpos, signals$ypos, col = "yellowgreen", pch = 19)
注意:这不是砖图表(感谢@Roman)。仅显示买入和卖出信号。请参阅上述引用...