是否可以在chart.Posn()函数中的绿色和红色箭头附近添加“买入”和“卖出”等文本。 (不是手动尝试坐标,我需要一个自动解决方案)我稍微更改了函数的源代码并增加了箭头的大小:
如果需要一个最小的可重现示例,我可以提供,但这是 R 图形参数的基本问题。
感谢您的帮助。
编辑最小可重现示例:
library(quantstrat)
start_date <- as.Date("2018-02-02")
end_date <- as.Date("2018-09-24")
init_date <- as.Date("2018-01-01")
init_equity <- "50000"
adjustment <- TRUE
symbol <- "AAPL"
getSymbols(symbol, src = "yahoo",
from = start_date, to=end_date,
adjust = adjustment)
portfolio.st <- "basic_port"
account.st <- "basic_account"
strategy.st <- "basic_strategy"
rm.strat(portfolio.st)
rm.strat(account.st)
stock(symbol, currency = currency("USD"), multiplier = 1)
initPortf(name = portfolio.st, symbols = symbol, initDate =init_date)
initAcct(name = account.st, portfolios = portfolio.st,
initDate = init_date, initEq =init_equity)
initOrders(portfolio.st, symbol, init_date)
strategy(strategy.st, store = TRUE)
add.indicator(strategy = strategy.st, name = "SMA",
arguments = list(x = quote(Cl(mktdata)), n=10),
label ="nFast")
add.indicator(strategy = strategy.st, name = "SMA",
arguments = list(x = quote(Cl(mktdata)), n=30),
label = "nSlow")
add.signal(strategy = strategy.st,
name= "sigCrossover",
arguments = list(columns = c("nFast", "nSlow"),
relationship = "gte"),
label = "longenter")
add.signal(strategy = strategy.st,
name= "sigCrossover",
arguments = list(columns = c("nFast",
"nSlow"),
relationship = "lt"),
label = "longexit")
#Add rules for entering positions
#enter long position
add.rule(strategy.st,
name = "ruleSignal",
arguments = list(sigcol = "longenter",
sigval = TRUE,
orderqty = 100,
ordertype = "market",
orderside = "long",
orderset= "ocolong",
prefer = "Close",
TxnFees = -.8,
replace = FALSE),
type = "enter",
label = "EnterLong")
#stoploss long
add.rule(strategy = strategy.st,
name = "ruleSignal",
arguments = list(sigcol = "longenter",
sigval = TRUE,
TxnFees=-.8,
replace = FALSE,
orderside = "long",
ordertype = "stoplimit",
orderqty = "all",
tmult = TRUE,
prefer = "Close",
order.price=quote(as.numeric(mktdata$AAPL.Low[timestamp])),
orderset="ocolong"),
type = "chain", parent = "EnterLong",
path.dep=TRUE,
label = "stop_loss_long",
enabled=TRUE)
#Apply strategy
applyStrategy(strategy.st, portfolios = portfolio.st,debug = TRUE)
updatePortf(portfolio.st)
updateAcct(account.st)
updateEndEq(account.st)
st<- "2018-05-01 00:00:00"
fn<-"2018-06-20 00:00:00"
chart.Posn(portfolio.st, Symbol = symbol, Dates = paste(st, fn, sep="::"))
最佳答案
您可以使用基本 R 函数text
,您可以在其中指定位置和标签,如下所示:
library(quantstrat)
start_date <- as.Date("2018-02-02")
end_date <- as.Date("2018-09-24")
init_date <- as.Date("2018-01-01")
init_equity <- "50000"
adjustment <- TRUE
symbol <- "AAPL"
getSymbols(symbol, src = "yahoo",
from = start_date, to=end_date,
adjust = adjustment)
#> [1] "AAPL"
portfolio.st <- "basic_port"
account.st <- "basic_account"
strategy.st <- "basic_strategy"
rm.strat(portfolio.st)
rm.strat(account.st)
stock(symbol, currency = currency("USD"), multiplier = 1)
#> [1] "AAPL"
initPortf(name = portfolio.st, symbols = symbol, initDate =init_date)
#> [1] "basic_port"
initAcct(name = account.st, portfolios = portfolio.st,
initDate = init_date, initEq =init_equity)
#> [1] "basic_account"
initOrders(portfolio.st, symbol, init_date)
strategy(strategy.st, store = TRUE)
add.indicator(strategy = strategy.st, name = "SMA",
arguments = list(x = quote(Cl(mktdata)), n=10),
label ="nFast")
#> [1] "basic_strategy"
add.indicator(strategy = strategy.st, name = "SMA",
arguments = list(x = quote(Cl(mktdata)), n=30),
label = "nSlow")
#> [1] "basic_strategy"
add.signal(strategy = strategy.st,
name= "sigCrossover",
arguments = list(columns = c("nFast", "nSlow"),
relationship = "gte"),
label = "longenter")
#> [1] "basic_strategy"
add.signal(strategy = strategy.st,
name= "sigCrossover",
arguments = list(columns = c("nFast",
"nSlow"),
relationship = "lt"),
label = "longexit")
#> [1] "basic_strategy"
#Add rules for entering positions
#enter long position
add.rule(strategy.st,
name = "ruleSignal",
arguments = list(sigcol = "longenter",
sigval = TRUE,
orderqty = 100,
ordertype = "market",
orderside = "long",
orderset= "ocolong",
prefer = "Close",
TxnFees = -.8,
replace = FALSE),
type = "enter",
label = "EnterLong")
#> [1] "basic_strategy"
#stoploss long
add.rule(strategy = strategy.st,
name = "ruleSignal",
arguments = list(sigcol = "longenter",
sigval = TRUE,
TxnFees=-.8,
replace = FALSE,
orderside = "long",
ordertype = "stoplimit",
orderqty = "all",
tmult = TRUE,
prefer = "Close",
order.price=quote(as.numeric(mktdata$AAPL.Low[timestamp])),
orderset="ocolong"),
type = "chain", parent = "EnterLong",
path.dep=TRUE,
label = "stop_loss_long",
enabled=TRUE)
#> [1] "basic_strategy"
#Apply strategy
applyStrategy(strategy.st, portfolios = portfolio.st,debug = TRUE)
#> [1] "2018-04-19 02:00:00 AAPL 100 @ 42.8836602855443"
#> [1] "2018-04-20 02:00:00 AAPL -100 @ 42.3376887640763"
#> [1] "2018-05-09 02:00:00 AAPL 100 @ 46.4970046592104"
#> [1] "2018-06-19 02:00:00 AAPL -100 @ 45.9659223045418"
#> [1] "2018-07-17 02:00:00 AAPL 100 @ 47.6952277265372"
#> [1] "2018-07-30 02:00:00 AAPL -100 @ 47.1346935681311"
#> $basic_port
#> $basic_port$AAPL
#> <environment: 0x7fa52528db88>
updatePortf(portfolio.st)
#> [1] "basic_port"
updateAcct(account.st)
#> Warning in rbind(deparse.level, ...): mismatched types: converting objects to
#> numeric
#> [1] "basic_account"
updateEndEq(account.st)
#> [1] "basic_account"
st<- "2018-05-01 00:00:00"
fn<-"2018-06-20 00:00:00"
chart.Posn(portfolio.st, Symbol = symbol, Dates = paste(st, fn, sep="::"))
text(8, 1000, "BUY")
text(35, 1000, "SELL")
由 reprex package 于 2022 年 7 月 22 日创建(v2.0.1)
关于r - 在图表位置箭头附近添加文本标签。记事本的 Posn () 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73077189/