在使用Quantstrat的applystrategy函数时,如果遇到问题,可以尝试手动提供OHLCV数据,而不是使用getSymbols函数。
以下是一个示例代码,展示了如何手动提供OHLCV数据和使用applystrategy函数:
# 加载所需的库
library(quantstrat)
# 创建一个空的策略对象
strategy.st <- strategy("example_strategy")
# 定义策略的参数和信号生成函数
strategy.st <- add.signal(strategy = strategy.st, name = "sigCrossover",
arguments = list(columns = c("Close", "Close"),
relationship = "gte"),
label = "long")
# 定义策略的规则和交易规则
strategy.st <- add.rule(strategy = strategy.st, name = "ruleSignal",
arguments = list(sigcol = "long", sigval = TRUE, orderqty = 100,
ordertype = "market", orderside = "long"),
type = "enter")
strategy.st <- add.rule(strategy = strategy.st, name = "ruleSignal",
arguments = list(sigcol = "long", sigval = TRUE, orderqty = "all",
ordertype = "market", orderside = "long"),
type = "exit")
# 创建一个空的portfolio对象
portfolio.st <- portfolio.st("example_portfolio")
# 创建一个空的账户对象
account.st <- account.st("example_account", portfolios = "example_portfolio",
initEq = 100000)
# 创建一个空的交易记录对象
trades.st <- trades.st("example_trades", portfolios = "example_portfolio")
# 手动创建OHLCV数据
dates <- as.Date(c("2022-01-01", "2022-01-02", "2022-01-03"))
prices <- data.frame(
Date = dates,
Open = c(100, 110, 120),
High = c(120, 130, 140),
Low = c(90, 100, 110),
Close = c(110, 120, 130),
Volume = c(1000, 2000, 3000),
Adjusted = c(110, 120, 130)
)
# 将OHLCV数据添加到mktdata对象中
mktdata <- xts(prices[, -1], order.by = prices$Date)
# 使用applyStrategy函数运行策略
out.st <- applyStrategy(strategy = strategy.st, portfolios = "example_portfolio",
symbol = "example_symbol", mktdata = mktdata,
account = account.st, verbose = TRUE)
在上面的示例中,我们手动创建了一个包含OHLCV数据的data.frame,并将其转换为xts对象。然后,我们将该mktdata对象传递给applyStrategy函数进行策略回测。
请注意,我们需要确保手动提供的OHLCV数据与策略中使用的数据类型和列名称一致。
通过手动提供OHLCV数据,我们可以避免使用getSymbols函数,并且更容易调试和排除问题。