我一直在经历Guy的量子讲座(下面的链接),并且在反复尝试重新执行代码之后,我得到一些初始错误,这些错误阻止了讲座中的大多数后续代码的运行。 / p>
以下是代码(从讲座中复制,只需很少的重新安排):
rm(list=ls(all=TRUE)) #added this to delete memory
library(quantstrat)
library(blotter) #added this hoping it would rectify the errors
library(FinancialInstrument) #added this hoping it would rectify the errors
# initialize portfolio, accounts and orders
qs.strategy <- "qsFaber"
initPortf(qs.strategy, 'SPY', initDate = '1997-12-31')
initAcct(qs.strategy, portfolios = qs.strategy, initDate = '1997-12-31', initEq= 1e6)
以下是我遇到的错误:
1)
> initPortf(qs.strategy, 'SPY', initDate = '1997-12-31')
Error in exists(paste("portfolio", name, sep = "."), envir = .blotter, :
object '.blotter' not found
2)
> initAcct(qs.strategy, portfolios = qs.strategy, initDate = '1997-12-31', initEq= 1e6)
Error in exists(paste("account", name, sep = "."), envir = .blotter, inherits = TRUE) :
object '.blotter' not found
当我使用Windows 64位时,我不得不直接下载吸墨纸,但是尽管从讲座中复制了代码,但我不确定为什么我会收到这些错误。我的搜索努力表明,一部分吸墨纸演变成了FinancialInstrument包,但即使在清除内存和加载FinancialInstruments之后,我仍然会遇到同样的错误。
任何帮助都将受到高度赞赏。
答案 0 :(得分:7)
吸墨纸和quantstrat包将事物存储在.GlobalEnv
中(这是他们不在CRAN上的一个原因。)当你运行rm(list=ls(all=TRUE))
时,你正在移除这些包期望的东西能够在您的工作区找到。为了使一切工作,您必须将几个环境放回到globalenv()中。运行这两行代码后,我认为您的代码可以运行。
.blotter <- new.env()
.strategy <- new.env()
过去,FinancialInstrument用于在.instrument
中创建.GlobalEnv
环境(之后期望它存在)。几年前,我对其进行了更改,以便.instrument
现在存储在FinancialInstrument命名空间中。由于在Guy的幻灯片之后发生了这种变化,因此代码不兼容。幻灯片14-15应更改为
currency("USD")
getInstrument("USD")
stock("SPY", "USD")
getInstrument("SPY")
或者更密切地关注他原来的代码,
get("USD", envir=FinancialInstrument:::.instrument)
get("SPY", envir=FinancialInstrument:::.instrument)
通过将包级别对象存储在包的命名空间中,用户可以自由地删除globalenv()
中的所有内容,而不会破坏任何包的代码。
答案 1 :(得分:3)
Guy Yollin的作品是很好的学习材料,但不幸的是它们有点过时(2011)。在过去的两年里,对于印记,量子和其他软件包进行了很多改动,盖伊的工作表中的大部分代码将不再如此。
就quantstrat包而言,您可能需要查看芝加哥R / Finance 2013会议的表格;你可以在http://www.rinfinance.com/agenda/2013/workshop/Humme+Peterson.pdf获得一份副本。
更新:Guy Yollin已将其幻灯片更新至2013年8月的最新量化版,可在此处http://www.r-programming.org/papers