【发布时间】:2017-06-24 13:58:28
【问题描述】:
美好的一天!
朋友们,我真的需要你的帮助!
我的问题是: 如何在特定价格设置止损?
Quantstrat 的工作方式如下(对于多头头寸): 止损价 = 入场价 - 入场价 * 门槛。
例如,我尝试运行我的代码。但是 StopLossLONG 不起作用。
如何编写停止代码?
library('TTR')
library('blotter')
library("quantmod")
require(quantstrat)
from <- "2016-04-01"
to <- "2016-07-01"
SPY <- getSymbols.yahoo('SPY',
env = .GlobalEnv,
return.class = 'xts',
index.class = 'Date',
from = from,
to = to,
periodicity = "daily",
auto.assign = FALSE)
SPY <- SPY[, c(1, 2, 3, 4, 5)]
names(SPY) <- c('Open','High','Low','Close','Volume')
level <- function(ts, level) {
ts$level <- level
res <- ts$level
names(res) <- c("")
return(res)
}
rm(list = ls(.blotter), envir = .blotter)
symbols = "SPY"
currency('USD')
initDate = from
from = from
to = to
initEq = 100000
strName = "test"
stock(symbols, currency = "USD", tick_size = 0.001, multiplier = 1)
getInstrument(symbols, type = "instrument")
strategy.st <- strName
portfolio.st <- strName
account.st <- strName
rm.strat(portfolio.st)
rm.strat(strategy.st)
initPortf(portfolio.st, symbols = symbols, 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)
addPosLimit(portfolio.st, symbols, timestamp = initDate, maxpos = 1, minpos = -1)
# indicators
add.indicator(strategy.st, name = "level",
arguments = list(ts = quote((mktdata)), level = 208.0),
label = "LEV208")
add.indicator(strategy.st, name = "level",
arguments = list(ts = quote((mktdata)), level = 212.0),
label = "LEV212")
add.indicator(strategy.st, name = "level",
arguments = list(ts = quote((mktdata)), level = 207.0),
label = "LEV207")
# signals
add.signal(strategy.st, name = "sigCrossover",
arguments = list(columns = c("Close", "LEV208"),
relationship = "gt"),
label = "OPEN")
add.signal(strategy.st, name = "sigCrossover",
arguments = list(columns = c("Close", "LEV212"),
relationship = "gt"),
label = "CLOSE")
# rules
add.rule(strategy.st, name = "ruleSignal",
arguments = list(sigcol = "OPEN", sigval = TRUE,
orderside = "long",
ordertype = "market",
prefer = "Open",
orderqty = 1,
replace = FALSE,
osFUN = osMaxPos
),
type = "enter",
label = "LE"
)
add.rule(strategy.st, name = "ruleSignal",
arguments = list(sigcol = "CLOSE", sigval = TRUE,
orderside = "long",
ordertype = "market",
prefer = "Open",
orderqty = "all",
replace = FALSE
),
type = "exit",
label = "LX"
)
add.rule(strategy.st,
name = "ruleSignal",
arguments = list(sigcol = "OPEN",
sigval = TRUE,
replace = FALSE,
orderside = "long",
ordertype = "stoplimit",
threshold = quote(0.005),
orderqty = "all",
orderset = "ocolong"),
type = "chain",
parent = "LE",
label = "StopLossLONG",
enabled = FALSE
)
applyStrategy(strategy.st, portfolio.st)
save.strategy(strategy.st)
orderbook <- getOrderBook(portfolio.st)
orderbook
谢谢!
【问题讨论】:
标签: r quantstrat