是否可以在blotter函数chart.Posn()中使用日志图表?

是否可以在blotter函数chart.Posn()中使用日志图表?,r,charts,quantmod,quantstrat,blotter,R,Charts,Quantmod,Quantstrat,Blotter,是否可以在blotter的chart.Posn()或chart.confidence()函数中绘制对数价格图?我尝试向函数调用添加log.scale=TRUE,但没有成功。底层的chart\u系列函数是否仍然过于“实验性”,无法支持此功能,还是函数调用不正确 chart.Posn(Portfolio = portfolio.st, Symbol = "GSPC", log.scale = TRUE) 更新:我一直在尝试直接使用chart\u Series()函数,设置ylog图形参数: par

是否可以在blotter的
chart.Posn()
chart.confidence()函数中绘制对数价格图?我尝试向函数调用添加
log.scale=TRUE
,但没有成功。底层的
chart\u系列
函数是否仍然过于“实验性”,无法支持此功能,还是函数调用不正确

chart.Posn(Portfolio = portfolio.st, Symbol = "GSPC", log.scale = TRUE)
更新:我一直在尝试直接使用
chart\u Series()
函数,设置ylog图形参数:

par(ylog=TRUE)
chart_Series(Cl(GSPC))
但我收到一个错误“对数刻度需要正界限”,尽管数据都是正的

顺便说一句,GSPC是标准普尔500指数的OHLCV时间序列xts,在
chartSeries()
chart_series()
中绘制,但两种绘图功能都不具有对数刻度

我发现这篇老文章不是一个解决方案,而是一个替代方案:


我不认为有任何像
log.scale
这样的参数是
chart\u Series
可以识别的。您可以简单地执行
chart\u系列(log(Cl(GSPC))
。您还可以对
chart.Posn
进行一些基本修改,以将内容放在日志范围内。使用
chart.Posn
的源代码作为起点

这是一个你可以修改的函数的例子。你可以用任何你喜欢的方式进一步修改它

# We need an example.  So,
# Source this code from the directory containing quantstrat, or at least source the macd.R demo in quantstrat.
source("demo/macd.R")


log.chart.Posn <- function(Portfolio, Symbol, Dates = NULL, env = .GlobalEnv) {
  pname<-Portfolio
  Portfolio<-getPortfolio(pname)
  x <- get(Symbol, env)
  Prices <- log(x)
  chart_Series(Prices)
  #browser()
  if(is.null(Dates)) Dates<-paste(first(index(Prices)),last(index(Prices)),sep='::')

  #scope the data by Dates
  Portfolio$symbols[[Symbol]]$txn<-Portfolio$symbols[[Symbol]]$txn[Dates]
  Portfolio$symbols[[Symbol]]$posPL<-Portfolio$symbols[[Symbol]]$posPL[Dates]

  Trades = Portfolio$symbols[[Symbol]]$txn$Txn.Qty

  Buys = log(Portfolio$symbols[[Symbol]]$txn$Txn.Price[which(Trades>0)])
  Sells = log(Portfolio$symbols[[Symbol]]$txn$Txn.Price[which(Trades<0)])

  Position = Portfolio$symbols[[Symbol]]$txn$Pos.Qty

  if(nrow(Position)<1) stop ('no transactions/positions to chart')

  if(as.POSIXct(first(index(Prices)))<as.POSIXct(first(index(Position)))) Position<-rbind(xts(0,order.by=first(index(Prices)-1)),Position)
  Positionfill = na.locf(merge(Position,index(Prices)))

  CumPL = cumsum(Portfolio$symbols[[Symbol]]$posPL$Net.Trading.PL)
  if(length(CumPL)>1)
    CumPL = na.omit(na.locf(merge(CumPL,index(Prices))))
  else
    CumPL = NULL

  if(!is.null(CumPL)) {
    CumMax <- cummax(CumPL)
    Drawdown <- -(CumMax - CumPL)
    Drawdown<-rbind(xts(-max(CumPL),order.by=first(index(Drawdown)-1)),Drawdown)
  } else {
    Drawdown <- NULL
  }

  if(!is.null(nrow(Buys)) && nrow(Buys) >=1 ) (add_TA(Buys,pch=2,type='p',col='green', on=1));
  if(!is.null(nrow(Sells)) && nrow(Sells) >= 1) (add_TA(Sells,pch=6,type='p',col='red', on=1));
  if(nrow(Position)>=1) {
    (add_TA(Positionfill,type='h',col='blue', lwd=2))
    (add_TA(Position,type='p',col='orange', lwd=2, on=2))
  }
  if(!is.null(CumPL))  (add_TA(CumPL, col='darkgreen', lwd=2))
  if(!is.null(Drawdown)) (add_TA(Drawdown, col='darkred', lwd=2, yaxis=c(0,-max(CumMax))))
  plot(current.chob())



}

log.chart.Posn(Portfolio = portfolio.st, Sym = "AAPL", Dates = NULL, env = .GlobalEnv)
add_MACD() # Simply added to make the plot almost identical to what is in demo/macd.R
我们需要一个例子。所以, #从包含quantstrat的目录中获取此代码,或者至少在quantstrat中获取macd.R演示。 来源(“demo/macd.R”) log.chart.Posn