2013-01-21 6 views
6

Ho dati OHLC semplici e XTSCome si imposta la larghezza delle candele nel grafico a candela usando plot.xts?

SF <- structure(c(1.064, 1.07, 1.071, 1.08, 1.08, 1.076, 1.078, 1.08, 
1.08, 1.082, 1.081, 1.082, 1.074, 1.07, 1.073, 1.075, 1.081, 
1.084, 1.092, 1.091, 1.097, 1.095, 1.099, 1.094, 1.096, 1.097, 
1.096, 1.096, 1.097, 1.091, 1.078, 1.083, 1.088, 1.084, 1.081, 
1.095, 1.096, 1.085, 1.074, 1.075, 1.073, 1.07, 1.068, 1.072, 
1.084, 1.08, 1.081, 1.077, 1.081, 1.083, 1.084, 1.083, 1.082, 
1.082, 1.075, 1.074, 1.075, 1.092, 1.086, 1.092, 1.093, 1.098, 
1.102, 1.103, 1.099, 1.098, 1.1, 1.101, 1.098, 1.098, 1.1, 1.092, 
1.084, 1.087, 1.088, 1.084, 1.096, 1.099, 1.097, 1.086, 1.078, 
1.076, 1.076, 1.073, 1.064, 1.069, 1.071, 1.077, 1.075, 1.074, 
1.078, 1.078, 1.08, 1.079, 1.078, 1.073, 1.068, 1.07, 1.069, 
1.074, 1.08, 1.083, 1.089, 1.09, 1.096, 1.094, 1.092, 1.092, 
1.094, 1.094, 1.09, 1.092, 1.088, 1.08, 1.076, 1.078, 1.081, 
1.079, 1.08, 1.09, 1.084, 1.072, 1.073, 1.069, 1.066, 1.07, 1.067, 
1.072, 1.08, 1.079, 1.076, 1.077, 1.08, 1.08, 1.082, 1.081, 1.081, 
1.074, 1.072, 1.073, 1.074, 1.081, 1.084, 1.091, 1.092, 1.097, 
1.097, 1.099, 1.095, 1.095, 1.097, 1.097, 1.096, 1.094, 1.091, 
1.08, 1.083, 1.086, 1.083, 1.082, 1.095, 1.096, 1.086, 1.074, 
1.075, 1.073, 1.071, 1.072), .Dim = c(42L, 4L), .Dimnames = list(
NULL, c("Open", "High", "Low", "Close")), index = structure(c(1353427200, 
1353513600, 1353600000, 1353859200, 1353945600, 1354032000, 1354118400, 
1354204800, 1354464000, 1354550400, 1354636800, 1354723200, 1354809600, 
1355068800, 1355155200, 1355241600, 1355328000, 1355414400, 1355673600, 
1355760000, 1355846400, 1355932800, 1356019200, 1356278400, 1356451200, 
1356537600, 1356624000, 1356883200, 1357056000, 1357142400, 1357228800, 
1357488000, 1357574400, 1357660800, 1357747200, 1357833600, 1358092800, 
1358179200, 1358265600, 1358352000, 1358438400, 1358697600), tzone = "", tclass = c("POSIXct", 
"POSIXt")), .indexCLASS = c("POSIXct", "POSIXt"), tclass = c("POSIXct", 
"POSIXt"), .indexTZ = "", tzone = "", class = c("xts", "zoo")) 

plot.xts(SF, type='candles') 

Le candele stanno venendo fuori molto sottile. Come li allargo?

Esaminando il codice sorgente di plot.xts, vedo che la funzione interna xts plot.ohlc.candles viene chiamata per tracciare i dati OHLC come candele, a cui ... viene passato. H

plot.ohlc.candles(x, bar.col = bar.col, candle.col = candle.col, 
      ...) 

Tuttavia, se cerco di impostare la larghezza argomento = 0.5 nella mia funzione plot.xts chiamata, ottengo gli avvertimenti che la larghezza non è parametro grafica

Warning messages: 
1: In plot.window(...) : "width" is not a graphical parameter 
2: In plot.xy(xy, type, ...) : "width" is not a graphical parameter 
3: In axis(1, at = xycoords$x, labels = FALSE, col = "#BBBBBB", ...) : 
    "width" is not a graphical parameter 
4: In axis(1, at = xycoords$x[ep], labels = names(ep), las = 1, lwd = 1, : 
    "width" is not a graphical parameter 
5: In axis(2, ...) : "width" is not a graphical parameter 
6: In title(width = 0.5) : "width" is not a graphical parameter 
There were 12 warnings (use warnings() to see them) 
> warnings() 
Warning messages: 
1: "width" is not a graphical parameter 
2: "width" is not a graphical parameter 
3: "width" is not a graphical parameter 
4: "width" is not a graphical parameter 
5: "width" is not a graphical parameter 
6: "width" is not a graphical parameter 
7: "width" is not a graphical parameter 
8: "width" is not a graphical parameter 
9: "width" is not a graphical parameter 
10: "width" is not a graphical parameter 
11: "width" is not a graphical parameter 
12: "width" is not a graphical parameter 

non sono in grado di utilizzare quantmod o xtsExtra poiché sto provando a tracciare due grafici diversi (un grafico temporale e un altro grafico a linee XY normale) affiancati.

risposta

7

È possibile ignorare gli avvisi, ma è necessario impostare width su qualcosa di molto grande. Guardando a plot.ohlc.candles, è possibile vedere che lo width si basa sull'indice dell'oggetto xts, che è in secondi.

R> xts:::plot.ohlc.candles 
function (x, width = 0.2, order = 1:4, bar.col = "grey", candle.col = "white", 
    ...) 
{ 
    segments(.index(x), x[, order[2]], .index(x), x[, order[3]], 
     col = bar.col, ...) 
    rect(.index(x) - width, x[, order[1]], .index(x) + width, 
     x[, order[4]], col = candle.col, ...) 
} 
<environment: namespace:xts> 

Questo imposterà la larghezza di 1/4 giorni:

plot.xts(SF, type='candles', width=60*60*24*0.25) 

1/4 day candle chart

+0

l'ho capito anch'io :) +1 per chiarimenti però :) –

1

Poiché le candele sono solo linee, è possibile utilizzare il parametro lwd per aumentare le larghezze della linea. Purtroppo non v'è un errore se lo si utilizza direttamente:

plot.xts(SF, type='candles',lwd=2) 
Error in axis(1, at = xycoords$x[ep], labels = names(ep), las = 1, lwd = 1, : 
    formal argument "lwd" matched by multiple actual arguments 

Questo appare come un problema nel modo in cui le opere involucro plot.xts.

È possibile farlo funzionare impostando utilizzando par:

opar <- par(lwd=2) 
plot.xts(SF, type='candles') 
par(opar) # reset to original parameters 

Anche se questo colpisce la griglia e il confine grafico troppo.

+0

Sfortunatamente, lwd = 2 sta interessando tutto il resto, come hai detto, rendendo il grafico sgradevole. Alla ricerca di qualcosa che preservi gli assi, le griglie ecc. –

6

Come detto Joshua, qui è quello che ho fatto per ottenere corretta tabella

candlecolors <- ifelse(SF[,'Close'] > SF[,'Open'], 'RED', 'GREEN') 
plot.xts(SF, type='candles', width=25000, candle.col=candlecolors, bar.col='BLACK') 

Questo mi ha dato la seguente tabella.

SF

+0

c'è un modo per regolare automaticamente la larghezza (= 25000?) Per evitare di impostarla manualmente a seconda dell'orizzonte temporale? – RockScience

+0

non eccezionale anche come di solito in finanza si desidera visualizzare solo i giorni di trading, non i fine settimana – RockScience

0

E per quanto riguarda il pacchetto zoom? Poi si può ingrandire e ridurre comunque lo si voglia tramite zm() alla fine del codice di "complotto", come

plot(datax) 
lines(datay) 
zm() 

?

Problemi correlati