Лог-диаграмма в диаграмме функции блоттера. Возможно (?)?

Можно ли нарисовать диаграмму цен журналов в диаграмме. chart.Posn() или chart.Reconcile() функции blotter? Я попытался добавить log.scale = TRUE к вызову функции без успеха. Является ли базовая функция chart_Series еще слишком "экспериментальной" для поддержки этой функции или является неправильным вызовом функции?

chart.Posn(Portfolio = portfolio.st, Symbol = "GSPC", log.scale = TRUE)

Обновление: я пытаюсь использовать chart_Series() напрямую, устанавливая графический параметр ylog:

par(ylog=TRUE)
chart_Series(Cl(GSPC))

Но я получаю сообщение об ошибке: "масштаб журнала требует положительных оценок", несмотря на то, что данные все положительные.

Btw, GSPC - это временные ряды OHLCV из S & P 500, которые отображаются в chartSeries() и chart_Series(), но просто не имеют логарифмическую шкалу для обеих функций построения диаграмм.

Я нашел это старое сообщение не как решение, а как альтернатива:

Работает ли функция chart_Series() с логарифмической осью?

1 ответ

Я не думаю, что есть такие параметры, как log.scale которые распознает chart_Series. Вы можете просто сделать chart_Series(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
</as.posixct(first(index(position))))>

Вот как выглядит исходная диаграмма:

Новый сюжет с логарифмической шкалой:

licensed under cc by-sa 3.0 with attribution.