Я работаю над базовым торговым сигналом RSI. Купите 100 акций, когда акции опустятся ниже 20 RSI, и закройте позицию, когда акции поднимутся выше 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)