2011-08-28 3 views
9

quantmod를 사용하여이 https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20110826/19da3834/attachment.png과 같은 플롯을 생성하고 싶습니다.quantmod를 사용하여 chartSeries plot에 선을 그리는 방법은 무엇입니까?

저는 약간의 좌절감을 느낍니다. 매우 간단한 작업입니다. 나는 quantmod를 사용하여 차트에 선을 그릴 수 있기를 원합니다. 며칠간 노력한 후에 나는 아무데도 가지 않습니다. 나는 quantmod :: addLines 함수로이를 수행하는 방법에 대한 예제를 볼 수 없다. (이것은 찾을 수있는 유일한 비슷한 질문이다. http://r.789695.n4.nabble.com/quantmod-plot-trendline-td894632.html)

내 문제는 다음과 같다. 지정된 일자/시각/꺾은 시각의 수평선. 이 행은 특정 막대에서 시작하여 길이가 n (예 : 5) 막대 일뿐입니다 (추가적으로 지정된 y 값의 행 바로 위에 텍스트를 추가하고 싶습니다).

내가 시도 몇 가지 :이

시도 그리고

getSymbols("SPY") 

lines.SPY <- (Hi(SPY) + Lo(SPY))/2 
names(lines.SPY) <- c("lines") 
lines.SPY$BuySell <- ifelse(lag(lines.SPY$lines) > lines.SPY$lines, 1, -1) 

chartSeries(SPY, subset="2011-08::", theme=chartTheme('white', 
up.col='blue', dn.col='red')) 
addTA(lines.SPY$lines[lines.SPY$BuySell == -1,], type='p', col='darkred', pch="_", on=1, cex = 2.5) 
addTA(lines.SPY$lines[lines.SPY$BuySell == 1,], type='p', col='green4', pch="_", on=1, cex = 2.5) 

하지만이 ... 실제로 줄 수없는 내가 흐름 텍스트를 추가 해야할지 모르겠다 ...

getSymbols("SPY") 

subset = "2011-03::" 

dev.new() 
chartSeries(SPY, subset=subset, theme="white") 
test <- xts(rep(coredata(last(Cl(SPY))), 20), order.by=index(last(SPY, n=20))) 
addTA(test, on=1, col="red", legend=NULL, lwd=3) 

다시 텍스트를 추가 할 수 없습니다. 이 접근 방식의 또 다른 문제점은 내가 맨 위에있는 전설을 제거 할 수 없다는 것입니다. 내가 수십 또는 하나의 차트 범례에 그 라인의 수백을 그리는 원하기 때문에 당신의 아이디어/코드 예제 미리 ...

감사를 표시 할 수 없습니다한다/...

안부, SAMO.

+0

나는 좋은 대답/해결책 https://mailman.stat.ethz.ch/pipermail/r-sig-finance/2011q3/008425.html을 받았습니다. 감사. – Samo

답변

3

(저는 R-sig-finance에서 Stergios Marinopoulos의 답을 복사하고 있습니다) 텍스트와 세그먼트와 함께 새로운 chart_Series() 함수를 사용하십시오.

require(quantmod) 
getSymbols("SPY") 
chart_Series(SPY, subset="2011-08::", type = "candlesticks") 
text(9, 112.00, "SOME TEXT", adj=0); 
segments(9, 111.5, 12, 111.5) ; 

일부 추가 설명. 메시지를 추가하려면 text(x,y,"message") 여기서 x는 막대 번호입니다 (가장 왼쪽 막대에 1 개, 왼쪽 또는 왼쪽에 0 또는 음수를 사용하여 그릴 수 있습니다). y는 차트의 값입니다. adj의 경우 0은 왼쪽 정렬, 1은 오른쪽 정렬, 0.5는 가운데 정렬을 의미합니다. 0..1 범위를 벗어나면 그에 따라 적절하게 이동합니다 (그러나 어쩌면 현명하지 않을 수도 있습니다).

세그먼트 (x1, y1, x2, y2)는 (x1, y1)에서 (x2, y2)로 선을 그립니다. 여기서 x는 막대 인덱스이고 y는 가격입니다.

다음 20 % 불투명 한 적색, 이등변 삼각형을 그리는 : 다각형 (c (20,30,40), C (5290,5320,5290), COL = "#의 ff000033")

즉 모든 R 그래픽 기능을 사용할 수 있습니다. 그러나 chart_Series()를 사용해야합니다.

+0

대런, thnx. 나는 함수의 내부 코드를 포함 할 때이 방법에 문제가있을 필요 (quantmod) getSymbols ("SPY") drawSomething <α- 함수() { \t chart_Series (SPY, 집합 = "2011-08 :: ", type ="촛대 ") \t 텍스트 (9,112.00,"SOME TEXT ", adj = 0); \t 세그먼트 (9, 111.5, 12, 111.5); } drawSomething() 이렇게하면 text.default (9, 112, "SOME TEXT", adj = 0)에 오류가 발생합니다. plot.new가 아직 호출되지 않았습니다. 줄거리 (chart_series (...))를 사용하면 문제를 해결할 수 있지만 선, 텍스트 및 add_TA는 수백 개가 있으므로 다시 칠하는 데 시간이 걸립니다.이 문제를 해결하는 방법은 무엇입니까? – Samo

+0

@ Samo 문제는 이전 줄이므로 오류 메시지가 산만합니다. 함수에 플롯을 생성하는 함수를 사용하면 함수를 인쇄해야합니다. 나는. 첫 줄을'print (chart_Series (SPY, subset = "2011-08 ::", type = "촛대"))로 변경하십시오. –

+0

어쩌면 해결책이 있습니까? http://stackoverflow.com/questions/8639928/issue-with-quantmod-add-ta-and-chart-series-lines-and-text-nex 질문이 게시되었습니다. – Samo