0

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

如何从脚本中的硬编码而不是从“雅虎”“谷歌”等各种来源获取报价?

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

我使用 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我想将数据作为脚本中的变量传递。
  • 我假设数据有时可能非常大或有时非常小。
  • 那么在这种情况下我应该怎么做呢?
4

1 回答 1

0

我一直在编写一些代码来使用加载/保存来缓存 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.056 秒。

图表 2:

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

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

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

于 2012-08-08T00:16:26.827 回答