2017-09-24 57 views
2

我正在学习如何在技术交易规则(TTR)包中使用R的技术交易能力。假设一个密码组合和BTC是其参考货币。历史小时数据(60周期)采用cryptocompare.com API收集并转换为zoo对象。其目的是为每个加密项创建一个14阶段的RSI(并可能在一个画布中全部可视化)。对于每个密码,我希望RSI输出为14 NA,接着是46个计算值。但是我得到了360个输出。我在这里错过了什么?技术交易规则(TTR)包中的RSI输出

require(jsonlite) 
require(dplyr) 
require(TTR) 

portfolio <- c("ETH", "XMR", "IOT") 

for(i in 1:length(portfolio)) { 
    hour_data <- fromJSON(paste0("https://min-api.cryptocompare.com/data/histohour?fsym=", portfolio[i], "&tsym=BTC&limit=60", collapse = "")) 
    read.zoo(hour_data$Data) %>% 
    RSI(n = 14) %>% 
    print() 
} 

而且,我的时间序列数据是在下面的表格(第一列时间戳):

  close high low open volumefrom volumeto 
1506031200 261.20 264.97 259.78 262.74 4427.84 1162501.8 
1506034800 258.80 261.20 255.68 261.20 2841.67 735725.4 

是否TTR使用更传统的OHLC(开盘价,最高价,最低价,收盘价)的订单?

回答

3

RSI()函数需要一个单变量价格序列。你向它传递了一个有6列的对象,所以它将它转换为一个单变量向量。您需要对read.zoo()的输出进行子集化,以便只有"close"列传递给RSI()

+0

很好。 'RSI(read.zoo(hour_data $ Data)[,2],n = 14)'有效。我不知道RSI背后的数学(那只是需要收盘价)。 – moazzem

+0

@moazzem:是的,我希望它变得“更聪明”,但是在当前状态下很难,因为如果对象具有多个列,那么就不知道*要使用哪个列。 TTR函数的最佳提示是参数的名称。如果是“OHLC”,那么该功能需要OHLC价格,“HL”需要高价低价等。如果它只是“价格”,那么这是一个单变量价格。如果它是'x',那么它可能是价格,音量或任何系列。 –

+0

我对密码以及R完全陌生.TTR是一个很好的包。我将首先研究指标背后的数学问题,并逐渐让剧本“我更聪明”。 – moazzem