r - R / quastrat / applyStrategy
问题描述
R 新手。我正在尝试在 quanstrat 中运行交易策略,但我遇到了困难。任何帮助将不胜感激。代码如下,当我运行 applyStrategy 时收到以下错误: getPrice(mktdata, prefer = prefer) 中的错误:下标超出范围,从数据中无法识别价格
AUD_USD <- Quandl("BOE/XUDLADD", type = "xts")
colnames(AUD_USD) <- c("AUD_USD")
if (!exists('.blotter')) .blotter <- new.env()
.strategy <- new.env()
initdate = as.character("1999-01-01")
from = as.character("2000-01-01")
to = as.character("2018-06-01")
Sys.setenv(TZ = "UTC")
currency("USD")
stock("AUD_USD", currency="USD", multiplier = 1)
tradesize <- as.numeric(100000)
initeq <- as.numeric(100000)
strategy.st <- portfolio.st <- account.st <- "firststrat"
rm.strat(strategy.st)
initPortf(portfolio.st, symbols = c("AUD_USD"), initDate = initdate,
currency = "USD")
initAcct(account.st, portfolios = portfolio.st, initDate = initdate,
currency = "USD", initEq = initeq)
initOrders(portfolio.st, initDate = initdate)
strategy(strategy.st, store = TRUE)
add.indicator(strategy = strategy.st,
name = "SMA",
arguments = list(x = quote(mktdata[,1]), n = 200),
label = "SMA200")
add.indicator(strategy = strategy.st,
name = "SMA",
arguments = list(x = quote(mktdata[,1]), n = 50),
label = "SMA50")
test <- applyIndicators(strategy = strategy.st, mktdata = AUD_USD)
tail(test)
add.signal(strategy.st,
name = "sigCrossover",
arguments = list(columns = c("SMA.SMA50", "SMA.SMA200"),
relationship = "gt"),
label = "Crossover")
add.signal(strategy.st,
name = "sigComparison",
arguments = list(columns = c("SMA.SMA50", "SMA.SMA200"),
relationship = "lt"),
label = "Compare")
add.signal(strategy.st,
name = "sigThreshold",
arguments = list(column = "AUD.USD",
threshold = 1.5,
cross = FALSE,
relationship = "lt"),
label = "threshold_high")
add.signal(strategy.st,
name = "sigThreshold",
arguments = list(column = "AUD.USD",
threshold = 1,
cross = FALSE,
relationship = "gt"),
label = "threshold_low")
test2 <- applySignals(strategy = strategy.st, mktdata = test)
tail(test2)
add.rule(strategy.st, name = "ruleSignal",
arguments = list(sigcol = "threshold_low", sigval = FALSE,
orderqty = "all", ordertype = "market",
orderside = "short", replace = FALSE,
prefer = "Open"),
type = "enter")
add.rule(strategy.st, name = "ruleSignal",
arguments = list(sigcol = "threshold_high", sigval = TRUE,
orderqty = "all", ordertype = "market",
orderside = "long", replace = FALSE,
prefer = "Open"),
type = "enter")
applyStrategy(strategy = strategy.st, portfolios = portfolio.st)
解决方案
推荐阅读
- python - 如何使用 numpy 获取范围的最小值和最大值?
- java - 我如何将字符串放入我的对象数组中?
- vue.js - 无法从选择元素 vue.js 获取数据
- python - 聚类同时具有文本和数值的数据
- python-3.x - 多次调用时函数的独立变量
- javascript - Reactjs:手动重新加载页面后显示数据
- html - Microsoft Explorer Edge 相同的框阴影,两种不同的结果
- apache-spark - 具有数据存储的 hadoop 上的 AWS EMR 火花
- android - 任务“:app:processReleaseGoogleServices”执行失败。删除失败:...../values.xml
- node.js - Mongoose 不强制执行唯一性