quantstrat 中的 applyIndicators 或 applyStrategy 时如何在自定义函数中获取当前 "symbol"
How to get current "symbol" inside custom function when applyIndicators or applyStrategy in quantstrat
我想在我的自定义指标函数中访问当前交易品种字符串,例如 "GOOG"。这是我能做的最基本的例子。
require(quantstrat)
Sys.setenv(TZ="UTC")
symbols <- c("GOOG", "AAPL")
getSymbols(symbols, src="yahoo")
strategy.st <- "test"
strategy(strategy.st, store=TRUE)
test_fun <- function(x){
print(symbol) ##### i want to access the current symbol eg "GOOG"
return(x)
}
add.indicator(strategy = strategy.st,
name = "test_fun",
arguments = list(x = quote(Cl(mktdata))),
label = "test_ind")
mktdata <- applyIndicators(strategy = strategy.st, GOOG)
Error in print(symbol) : object 'symbol' not found
Called from: print(symbol)
好问题。
从您的 applyIndicator
函数中获取符号作为一个独立的函数调用并没有多大意义,因为 mktdata = GOOG
参数已经包含了您想要的数据。我怀疑你想在 applyIndicator
调用中获取符号,但当你在调用 applyStrategy
时工作时......
你可以这样做:
require(quantstrat)
Sys.setenv(TZ="UTC")
symbols <- c("GOOG", "AAPL")
getSymbols(symbols, src="yahoo")
currency("USD")
stock(c("GOOG", "AAPL"), "USD")
strategy.st <- "test"
portfolio.st <- "test"
rm.strat(strategy.st)
initPortf(portfolio.st, symbols = symbols)
strategy(strategy.st, store=TRUE)
account.st <- "test"
initAcct(account.st, portfolios = portfolio.st, initEq = 1000)
initOrders(portfolio.st)
test_fun <- function(x){
symbol <- parent.frame(n = 2)$symbol
print(symbol) ##### i want to access the current symbol eg "GOOG"
return(x)
}
add.indicator(strategy = strategy.st,
name = "test_fun",
arguments = list(x = quote(Cl(mktdata))),
label = "test_ind")
applyStrategy(strategy.st, portfolio.st)
这对 applyStrategy
有效,因为几层以上的父环境围绕符号循环循环(每次迭代调用 applyIndicators
),symbol
保存当前符号正在计算指标。
这显然允许您从全局环境或其他环境中提取外部数据,如果您想构建更高级的指标,而不仅仅是 mktdata
对象中的当前交易品种的数据传递给 applyIndicators
.
(一种更简单的方法也是简单地从 OHLC 列名称中提取符号名称,如果列名称包含符号标签,则可能存在于 testfun
内的 x
对象中。 )
我想在我的自定义指标函数中访问当前交易品种字符串,例如 "GOOG"。这是我能做的最基本的例子。
require(quantstrat)
Sys.setenv(TZ="UTC")
symbols <- c("GOOG", "AAPL")
getSymbols(symbols, src="yahoo")
strategy.st <- "test"
strategy(strategy.st, store=TRUE)
test_fun <- function(x){
print(symbol) ##### i want to access the current symbol eg "GOOG"
return(x)
}
add.indicator(strategy = strategy.st,
name = "test_fun",
arguments = list(x = quote(Cl(mktdata))),
label = "test_ind")
mktdata <- applyIndicators(strategy = strategy.st, GOOG)
Error in print(symbol) : object 'symbol' not found
Called from: print(symbol)
好问题。
从您的 applyIndicator
函数中获取符号作为一个独立的函数调用并没有多大意义,因为 mktdata = GOOG
参数已经包含了您想要的数据。我怀疑你想在 applyIndicator
调用中获取符号,但当你在调用 applyStrategy
时工作时......
你可以这样做:
require(quantstrat)
Sys.setenv(TZ="UTC")
symbols <- c("GOOG", "AAPL")
getSymbols(symbols, src="yahoo")
currency("USD")
stock(c("GOOG", "AAPL"), "USD")
strategy.st <- "test"
portfolio.st <- "test"
rm.strat(strategy.st)
initPortf(portfolio.st, symbols = symbols)
strategy(strategy.st, store=TRUE)
account.st <- "test"
initAcct(account.st, portfolios = portfolio.st, initEq = 1000)
initOrders(portfolio.st)
test_fun <- function(x){
symbol <- parent.frame(n = 2)$symbol
print(symbol) ##### i want to access the current symbol eg "GOOG"
return(x)
}
add.indicator(strategy = strategy.st,
name = "test_fun",
arguments = list(x = quote(Cl(mktdata))),
label = "test_ind")
applyStrategy(strategy.st, portfolio.st)
这对 applyStrategy
有效,因为几层以上的父环境围绕符号循环循环(每次迭代调用 applyIndicators
),symbol
保存当前符号正在计算指标。
这显然允许您从全局环境或其他环境中提取外部数据,如果您想构建更高级的指标,而不仅仅是 mktdata
对象中的当前交易品种的数据传递给 applyIndicators
.
(一种更简单的方法也是简单地从 OHLC 列名称中提取符号名称,如果列名称包含符号标签,则可能存在于 testfun
内的 x
对象中。 )