R中的砖块图表

5
我正尝试使用从Yahoo Finance获得的数据构建砖形图表,并想知道是否有任何包可以实现此功能。我查看了大多数金融包,但只能找到蜡烛图表。如需了解更多关于砖形图表的信息,请使用此链接:这里
3个回答

4

非常酷的问题!显然,R中真的没有这样的东西。各个网站上都有一些尝试类似事情的(例如瀑布图),但它们都不太合适。所以......我用 做了一个小周末项目。


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 = "")

1

renko(df, size = 5, style = "classic") + 
    scale_y_continuous(breaks = seq(0, 150, 10)) +
    labs(x = "", y = "")

2

数据

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

1
我是R投资开发者,我使用了Roman的一些代码来优化Renko代码中的一些行。 Roman的ggplot技能非常棒。这个绘图功能只是因为Roman的代码才可能实现。
如果有人感兴趣:

https://github.com/Kinzel/k_rrenko

它需要以下软件包:xts、ggplot2和data.table。
"Ativo"需要是一个xts,其中一个列名为"close"才能正常工作。
编辑:
根据TeeKea的要求,使用方法很简单:
"Ativo"是2015-01-01至2015-06-01的EURUSD xts 15分钟数据。如果找不到"close"列,则使用最后一列。
> 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:

krenko_plot(Ativo, 0.01,withDates = F)

链接到图片krenko_plot

与plot.xts相比

plot.xts(Ativo, type='candles')

链接到图像plot.xts

有两个主要变量:大小和阈值。

“大小”是砖块的大小。需要运行。

“阈值”是新砖块的阈值。默认值为1。

第一个砖块被移除以确保可靠性。


你最好在这里展示如何使用那段代码,而不是仅仅贴一个链接。 - Taher A. Ghaleb
@TeeKea 谢谢你的评论。我会去做的。我在这里是新手。 - Guilherme Kinzel
太好了。谢谢! - Taher A. Ghaleb

0

这是一个快速而简单的解决方案,改编自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)。仅显示买入和卖出信号。请参阅上述引用...

enter image description here


1
瑞克诺图难道不具有非正常的x轴吗? - Roman
正确检测 - 无论如何,Renko实际上是基于绝对价格的涨跌而不是像上面展示的百分比(即alpha)。这将导致形状统一的方块,只有在达到一定的价格涨跌时才会绘制下一个方块 - 这反过来会导致x轴不规则,当它被时间表示时... - Robert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接