【问题标题】:R - Quantstart: Testing Strategy on Multiple EquitiesR - Quantstart:多个股票的测试策略
【发布时间】:2017-02-03 12:04:42
【问题描述】:

我正在构建一个包含一些指标的基本交易策略。我的问题是我希望它在多个股票上运行,而不必指定我要测试的每个股票。

目前我可以使用向量一次获取多个符号,如下所示

 # Get Shares from Yahoo Finance
 Stocks<- ASX_200_Companies_Copy$Code
 getSymbols(Stocks, from = from, to = to, src =  "yahoo", adjust =  TRUE)

我可以在 Excel 文档中轻松生成带有股票代码列表的矢量。所以这将为我生成 200 个单独的符号。在我生成所有指标后,我将在单个资产上创建如下测试策略

# Test the strategy
test_Master <- applyIndicators(strategy.st.Master, mktdata = OHLC(BHP.AX))
Master_Strategy <- applySignals(strategy = strategy.st.Master, mktdata = test_Master)

在这种情况下,我一次只能测试一项资产的策略,如果我想在大型数据集中找到趋势,这将是无效的。

将 Stocks 指定为 OHLC 的参数会产生以下错误

 test_Master <- applyIndicators(strategy.st.Master, mktdata = OHLC(Stocks))
 Error in Cl(mktdata) : subscript out of bounds: no column name containing "Close"

我想简单地 cbind 生成的几个单独的股票。但是,这也不起作用。

Stocks <- cbind(BHP.AX, CBA.AX)
test_Master <- applyIndicators(strategy.st.Master, mktdata = OHLC(Stocks))
Error in runSum(x, n) : ncol(x) > 1. runSum only supports univariate 'x'

即使我确实成功地 cbind 每个符号,我想该策略也会针对 Stocks 向量中的每个符号测试 OHLC 上的指标。

是否可以同时针对多种资产测试 quantstrat 策略?

任何想法/反馈将不胜感激。

【问题讨论】:

  • 欢迎来到 Stackoverflow!。我强烈建议使用环境,它们的结构有助于轻松操作和应用各种功能/策略。请参阅example
  • 如果你已经解决了这个问题,你可以添加答案。这将帮助其他有同样问题的人。
  • @OdeToMyFiddle、quantstrat 和blotter 已经在内部广泛使用环境来尽可能避免复制,并作为持久信息的存储容器。
  • 感谢@BrianG.Peterson 的解释。我没有使用过quantstratblotter,但我是您PerformanceAnalytics 包的重度用户。此外,您的PortfolioAnalytics 包简化了很多优化问题,感谢您创建和维护如此优秀的包!

标签: r quantstrat


【解决方案1】:

quantstrat 默认执行您所要求的操作。

这是一个例子:

data(stratBBands) #load a test strategy, you'd use your own
symbols = c("XLF", "XLP", "XLE", "XLY", "XLV", 
            "XLI", "XLB", "XLK", "XLU")

getSymbols(symbols
           , src='yahoo'
           , index.class=c("POSIXt"
           ,"POSIXct")
           , from='1999-01-01')

out<-try(applyStrategy(strategy=stratBBands 
                      , portfolios='bbands'
                      , parameters=list(sd=2,n=60)) )

或者您可以查看quantstrat 中包含的几乎任何示例,因为几乎所有示例都使用多个符号。

【讨论】:

  • #Brian,我刚刚在上面运行了你的代码并得到了一个错误:“Portfolio bbands not found,使用 initPortf() 创建一个新的投资组合”。在关注你和其他人的 quantstrat 示例时,我通常会看到 iniitPortf() 现在正在使用(也许 quantstrat 不需要它,大约在 2017 年年中 ??),所以我包括以下行: initPortf(portfolios = "bbands" , 符号),但仍然出现错误,“缺少参数'符号',没有默认值”。有什么建议吗,cmets? (我现在转到您提到的其他示例,但我在这里发表评论以抓住每一个机会学习 QS)。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-08-14
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多