【发布时间】:2019-10-30 03:42:11
【问题描述】:
我正在研究基本的 RSI 交易信号。当股票低于 20 RSI 时买入 100 股,当股票高于 80 RSI 时平仓。
发生的情况是,一旦股票跌破 20,我就买入 100 股,如果股票再次跌破 20 而没有先达到 80 RSI,我最终会再买入 100 股(总共 200 股)。
一旦我有了一个职位,我就不想再添加了。谢谢你。
rm.strat(portfolio.st)
rm.strat(strategy.st)
rm.strat(account.st)
#setup
Sys.setenv(TZ = "UTC")
stock.str = "AAPL"
currency('USD')
stock("AAPL", currency= "USD", multiplier = 1)
initDate = "2010-01-01"
startDate = "2011-01-01"
to = Sys.Date()
initEq = 100000
portfolio.st = account.st = strategy.st = 'rsi'
getSymbols("AAPL", from = initDate)
initPortf(portfolio.st, symbols = stock.str,
initDate = initDate)
initAcct(account.st,
portfolio.st,
initDate = initDate, initEq = initEq)
initOrders(portfolio.st, initDate = initDate)
strategy(strategy.st, store = T)
add.indicator(strategy.st,
name = "RSI",
arguments = list(
price = quote(Cl(mktdata)),
n = 14,
maType = "EMA"
),
label = "rsi14")
add.signal(strategy.st,
name = "sigThreshold",
arguments = list(
column = "rsi14",
threshold = 20,
cross = T,
relationship = "lt"
),
label = "crossBelow")
add.signal(strategy.st,
name = "sigThreshold",
arguments = list(
column = "rsi14",
threshold = 80,
cross = T,
relationship = "gt"
),
label = "crossAbove")
add.rule(strategy.st,
name = "ruleSignal",
arguments = list(
sigcol = "crossBelow",
sigval = T,
orderqty = 100,
ordertype = "market",
orderside = "long"
),
type = "enter",
label = "enter")
add.rule(strategy.st,
name = "ruleSignal",
arguments = list(
sigcol = "crossAbove",
sigval = T,
orderqty = "all",
ordertype = "market",
orderside = "long"),
type = "exit",
label = "exit"
)
out = applyStrategy(strategy.st,
portfolio.st)
【问题讨论】:
标签: r quantmod quantstrat