3

ローソク足パッケージを使用しようとしていますが、一部の関数でエラーが発生します。たとえば、CSPDoji. この関数内では、Hi(TS) - BodyHiが返されますNULL。変数は両方とも xts で、長さとインデックスは同じです。詳細は次のとおりです。

library(candlesticks)
getSymbols("YHOO",src="google",from="2013-01-01")
head(YHOO)
debug(CSPDoji)
CSPDoji(YHOO)

function をステップ実行するとCSPdoji、次のようになりました。

Browse[2]> n
debug: if (!is.OHLC(TS)) {
    stop("Price series must contain Open, High, Low and Close.")
}
Browse[2]>
debug: NULL
Browse[2]>
debug: BL <- abs(Cl(TS) - Op(TS))
Browse[2]>
debug: CL <- Hi(TS) - Lo(TS)
Browse[2]>
debug: BodyHi <- as.xts(apply(cbind(Op(TS), Cl(TS)), 1, max))
Browse[2]>
debug: BodyLo <- as.xts(apply(cbind(Op(TS), Cl(TS)), 1, min))
Browse[2]>
debug: Doji <- reclass(BL < CL * maxbodyCL, TS)
Browse[2]>
debug: DFDoji <- reclass(Doji & (Hi(TS) - BodyHi <= CL * maxshadowCL), TS)  
Browse[2]>
debug: GSDoji <- reclass(Doji & (BodyLo - Lo(TS) <= CL * maxshadowCL), TS)  
Browse[2]> DFDoji
     [,1]
Browse[2]> class(Hi(TS))
[1] "xts" "zoo"
Browse[2]> class(BodyHi)
[1] "xts" "zoo"
Browse[2]> Hi(TS) - BodyHi
Data:
numeric(0)

Index:
numeric(0)
Browse[2]> head(Hi(TS))
           YHOO.High
2013-01-02     20.32
2013-01-03     20.10
2013-01-04     19.95
2013-01-07     19.58
2013-01-08     19.68
2013-01-09     19.75
Browse[2]> head(BodyHi)
            [,1]
2013-01-02 20.20
2013-01-03 20.05
2013-01-04 19.86
2013-01-07 19.56
2013-01-08 19.66
2013-01-09 19.73
Browse[2]>  length(Hi(TS))
[1] 177
Browse[2]> length(BodyHi)
[1] 177

の結果はHi(TS) - BodyHi別の xts になるはずです。しかし、それはNULLここにあります。何か不足していますか?

4

1 に答える 1

4

私はこのパッケージのメンテナーです。この問題は、R セッションのタイムゾーンが UTC に設定されていない場合のタイムゾーンの問題によって発生します。コマンドで解決できる

Sys.setenv(TZ="UTC")

セッションの開始時。これは、パッケージの説明 (?candlesticks) に記載されています。

これが問題の原因です。

R --vanilla

Sys.setenv(TZ="CET")
require(candlesticks)
TS <- getSymbols("YHOO", src="google", auto.assign=FALSE)

#calculate the highest price of the candle's body
BodyHi <- as.xts(apply(cbind(Op(TS), Cl(TS)), 1, max))

# compare these two xts-objects
head(TS, n=2)
           YHOO.Open YHOO.High YHOO.Low YHOO.Close YHOO.Volume
2007-01-03     25.85     26.26    25.26      25.61    26654067
2007-01-04     25.64     26.92    25.52      26.85    32565729

head(BodyHi, n=2)
            [,1]
2007-01-03 25.85
2007-01-04 26.85

# looks good, but:
head(cbind(TS, BodyHi), n=4)
           YHOO.Open YHOO.High YHOO.Low YHOO.Close YHOO.Volume   ..2
2007-01-02        NA        NA       NA         NA          NA 25.85
2007-01-03     25.85     26.26    25.26      25.61    26654067    NA
2007-01-03        NA        NA       NA         NA          NA 26.85
2007-01-04     25.64     26.92    25.52      26.85    32565729    NA

# because:
head(index(TS), n=2)
[1] "2007-01-03" "2007-01-04"
head(index(BodyHi), n=2)
[1] "2007-01-03 CET" "2007-01-04 CET"

これが、CSPDoji 関数が失敗する理由です。私はまだそれに対するよりエレガントな解決策を見つけていません。

于 2013-09-15T13:19:45.807 に答える