【问题标题】:quantmod ttr getSymbol & quotes hardcodedquantmod ttr getSymbol & 引号硬编码
【发布时间】:2012-08-07 08:11:49
【问题描述】:

我是 R 编程的新手,现在正在开发一个可以与 R 交互的系统。我的问题是:

如何从脚本中的硬编码而不是从“yahoo”“google”等各种来源获取引号?

为什么我需要在脚本中硬编码引号?

我使用 Rserve 作为我的下游系统,主系统获取数据并执行其他投资组合检查,然后调用 R-TTR-quantmod 包以计算财务数字。所以我不希望 R 重新获取这些引号,所以我希望引号被硬编码并从我的系统发送到Rserve,在那里它被执行并从那里返回结果。这样我的代码将依赖于 R 的标准计算,用户可以专注于其他业务逻辑。

为什么我不使用 csv 文件方法?

我在一个实时系统中,文件 io 会花费大量时间并且会降低我的系统速度。

例如:

library(quantmod)

library(TTR)

从 Yahoo! 中提取 S&P500 指数数据金融

getSymbols("^RIL", from="2000-01-01", to="2008-12-07")

计算 RSI 指标

rsi <- RSI(Cl(RIL),2)

所以这就是我需要的:

  • 而不是调用getSymbol 我想将数据作为 脚本中的变量。
  • 我认为数据有时可能非常大或有时非常小。
  • 那么在这种情况下我应该怎么做?

【问题讨论】:

  • 如果我理解正确,您可能会发现dput 很有用。它返回 R 数据结构的代码,您可以将其放入脚本中以复制数据项。
  • 如果数据已经存在,作为xts对象,可以直接使用。例如,如果数据在变量x 中,则可以使用rsi &lt;- RSI(x,2)rsi &lt;- RSI(Cl(x),2)

标签: r quantmod rserve


【解决方案1】:

我一直在编写一些代码来使用加载/保存来缓存 xts 对象。代码很简单:

getSymbols("^RIL", from="2000-01-01", to="2008-12-07")
save(RIL,file="cache/RIL.rdata")

然后在您进行分析的其他脚本中:

load("cache/RIL.rdata")
rsi <- RSI(Cl(RIL),2)

作为额外的好处,.rdata 文件被压缩。

一些统计数据:图表 1

我之前的方法有 1 分钟柱,每天一个 csv 文件。 303 个文件,总计 12MB,加载到 86,590 行 XTS 对象中耗时 5.64 秒(经过;用户时间为 5.34 秒)。

.rdata 文件为 2.8MB,耗时 0.056s。

图 2:

第一种方法:对数据重新运行 RSI(作为另一个计算的前导)。 第二种方法:让另一个离线进程对数据运行 RSI,并将其缓存到 .rdata 文件中。

加载 RSI 文件比重新计算 RSI 数据快 3 倍。

警告:在我的计时测试中,我使用了一个循环,它在第 1 遍时创建/保存,然后在第 2 到 20 遍时加载。我正在计时的是后一种加载。所以它在任何操作系统文件缓存中都是新鲜的。

【讨论】:

    猜你喜欢
    • 2018-03-14
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多