20 取引日分の 1 時間ごとの FX データに関数を適用したいと考えています (多くの例の 1 つとして)。
から始めましたrollapply(data,width=20*24,FUN=FUN,by=24)
。それはうまくいっているように見えました。私は常に 480 小節が渡されたと主張することさえできました...それが私が望んでいたものではないことに気付くまで. これらの 480 バーの開始時間と終了時間は、夏時間の変更と市場の休日のために、長年にわたって変動していました。
だから、私が欲しいのは、データがある各日の 22:00 から 22:00 までを 1 日として扱う関数です。(ニューヨークの夏時間の 21:00 から 21:00 - 私のデータのタイムゾーンは UTC で、開始時刻は東部標準時の午後 5 時に定義されています)
だから、私はこれを核として独自のrollapply関数を作りました:
ep=endpoints(data,on=on,k=k)
sp=ep[1:(length(ep)-width)]+1
ep=ep[(width+1):length(ep)]
xx <- lapply(1:length(ep), function(ix) FUN(.subset_xts(data,sp[ix]:ep[ix]),...) )
次に、これを on="days"、k=1、width=20 で呼び出しました。
これには 2 つの問題があります。
- 日数は取引日数ではなく日数です! そのため、通常は 4 週間分のデータではなく、3 週間弱のデータが得られます。
- カットオフは UTC の午前 0 時です。22:00 (または 21:00) のカットオフを使用するように変更する方法がわかりません。
更新: 上記の問題 1 は間違っています! XTS
endpoints
関数は、暦日ではなく取引日で機能します。私がそうでないと思った理由は、タイムゾーンの問題により、週が 6 日間の取引のように見えたためです。日曜から金曜までです。タイムゾーンの問題が修正されたら (私の自己回答を参照)、 と を使用するwidth=20
と、on="days"
実際に 4 週間分のデータが得られます。
(一般的に重要なのは、この 4 週間の間に取引休日がある場合、4 週間 1 日分のデータ、つまり常に正確に 20 取引日分のデータを受け取ることを期待しているということです。)
データを 24 時間単位の 5 つのチャンクに分割できると考えて、データを数週間に分割する機能の開発に着手しましたが、これは間違ったアプローチのように感じられます。また、誰かがこの車輪を私の前に発明したのではないでしょうか?