quantmod ttr getSymbol&报价硬编码

时间:2012-08-07 08:11:49

标签: r quantmod rserve

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

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

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

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

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

我在一个实时系统和文件io会花费大量时间并且会减慢我的系统。

例如:

library(quantmod)

library(TTR)

从雅虎拉出S& P500索引数据金融

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

计算RSI指标

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

所以这就是我需要的:

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

1 个答案:

答案 0 :(得分:0)

我刚刚研究了一些使用load / save来缓存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文件被gzip压缩。

一些统计数据:图表1

我以前的方法有1分钟的条形,每天一个csv文件。 303个文件,总计12MB,加载到86,590行XTS对象花了5.64s(已经过去;用户时间是5.34s)。

.rdata文件为2.8MB,需要0.056秒。

图表2:

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

加载RSI文件的速度比新计算RSI数据快3倍。

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