2016年5月28日土曜日

値がない場合の処理・・・新高値のスクリーニング

値がない場合の処理は頭痛の種だ。今回の経緯は次の通り。

本日新高値を付けた銘柄を検索したいと思った。

いつも通りだが、ytは日本株式市場の各銘柄の直近約1年間の4本値(+α)データ(xts型)からなるリスト。たとえば、yt[[1]]は極洋の約1年間のデータ。

【行番号2~3】dayには本日の日付が入っている。day="2016-05-27"

【行番号4~12】zをytのうちの1つのデータとする。すなわち1銘柄のデータである。

【行番号14~16】max(Hi(z))==Hi(z[day])で本日が新高値かどうかの判定ができる。

【行番号17~27】これを全銘柄に適用すると、中には出来高のないものも存在するのが頭の痛いところである。

【行番号28~33】出来高のないものの検出にis.nullやis.na、is.nanなどを試みたが駄目であった。

【行番号34~36】直接sapplyした悲惨な結果が。

【行番号37、38】ところで、z["2016"]とすれば、2016年の全データが指定できる。z[day]で返るものは、xtsデータで、複数の値が返ることが想定されている。したがって、lengthを調べれば値がないことがわかるのではないか。

【行番号39】全銘柄に適用してみよう

【行番号40~45】うまくいった。

ifelseでlengthが0の時は0、それ以外の時はHi(z[day])を採用するようにした。0はFALSE扱いになることを用いている。



値がないことをlengthで判断したという、どうということのない話題であった。

xts型のデータの判定なのでnrowを使う方が適切かもしれない。というのはlengthで返るのはnrow×ncolだから。悩ましいが結局はxtsは何者であるかという理解が問われる問題であったようだ。

ちなみに

0 件のコメント:

コメントを投稿