quantmodのチャートをクリックして、特定の日を選んだり、直線を引いたりしたいと思った。
quantmodにはzooomという関数がある。これはチャートの2点をクリックするとその期間をzoomしてくれるというものだ。
その関数のソースを調べてみた。その中でget.chobという関数でチャートオブジェクトを得ている。このオブジェクトにはチャートに関する様々な情報が格納されていた。また、関数chartSeriesのソースを調べると、実際に描くのはchartSeries.chobという関数であることがわかり、さらにchartSeries.chobを調べて、チャートオブジェクトの情報のうちで、使えそうなものを見つけた。それらの調査から次のような関数を作った。
この関数は、実行するとlocatorの十字が表示されるので、クリックすると、その日のデータを表示するというものである。参考として関数内で得ている値も表示した。プログラムと実行結果は次の通り。
3行めのcoがチャートオブジェクトである。
xdataはチャートを描くxts型のデータ。
xsubsetはsubsetで指定されたデータを整数値で示したもの、例えば125,126,127,...などとなっている、xdata内の行番号の列である。
nはデータ数(=xsubsetの長さ)
dxは1日分のデータのx軸上の幅である。
chartSeries.chobのソースによれば、i番目のデータのx座標は 1+(i-1)*dx を中心とするので、その前後 dx/2 の範囲をi番目のデータと認識するようにした。8行めである。
14行目以降が表示されたものである。
これができるといろいろできそうだ。
2016年6月25日土曜日
2016年6月20日月曜日
新高値更新回数を数える・・・累積最大値cummax
5月29日に、新高値の回数を数える問題を考えた。
当日の最高値がそれ以前の最高値以上となる日数を数える問題だ。
for文で回していたのだが、cummaxの存在を忘れていた。
zはxts型のオブジェクト(約1年分の4値データ)である。
これだけでOKだ。
一応解説しておく。
Hiは4値のうちの高値を求める関数。高値のベクトル(実はxts型)となる。
cummaxは累積最大値。それ以前の最大値からなるベクトルとなる。(xts型)
sum関数内では、TRUEは1、FALSEは0として扱われる。
恥ずかしいことです。
なお、前日以前の最高値と当日の高値が同じ場合は、本来は新高値ではないけれど、上の方法では新高値としてカウントされてしまう。
それを避けるなら、
lagで前日までの最高値を求め、当日の高値の方が高い日を数える。lagを使うと初日にNAが入る。NAが入るとsumはNAになってしまう。従って、na.rm=TでNAは除いて数えている。
当日の最高値がそれ以前の最高値以上となる日数を数える問題だ。
for文で回していたのだが、cummaxの存在を忘れていた。
zはxts型のオブジェクト(約1年分の4値データ)である。
これだけでOKだ。
一応解説しておく。
Hiは4値のうちの高値を求める関数。高値のベクトル(実はxts型)となる。
cummaxは累積最大値。それ以前の最大値からなるベクトルとなる。(xts型)
sum関数内では、TRUEは1、FALSEは0として扱われる。
恥ずかしいことです。
なお、前日以前の最高値と当日の高値が同じ場合は、本来は新高値ではないけれど、上の方法では新高値としてカウントされてしまう。
それを避けるなら、
lagで前日までの最高値を求め、当日の高値の方が高い日を数える。lagを使うと初日にNAが入る。NAが入るとsumはNAになってしまう。従って、na.rm=TでNAは除いて数えている。
2016年6月12日日曜日
複数チャート(plot.xts)
quantmodのチャートは詳細で素晴らしいのだが、画面分割できない。こんなに素晴らしくなくてよいので、ざっくり複数のチャートを見る方法を探ってみた。
あった。plot.xtsでチャートを描いてくれる。

zはxts型のオブジェクトである。ポイントはwidthであろか。width=25000。この位の大きさでないと、線のようなチャートになる。
また、通常のローソク足とは違って、土日など空いている日は空間が開く。これはこれでいいのではないかと思って受け入れることにする。
髭の色がgrayなので見にくい。髭・陽線・陰線の色などを指定すると次のようになる。

これに、移動平均線とボリンジャーバンドを入れると次の通り。

線が出てこないので日数をちょっと増やした。
SMAとBBandsはモジュールxtsの関数。5日移動平均が青色、25日移動平均が緑、ボリンジャーバンドはデフォルトの20日移動平均と±2σのラインを赤で描いてある。
これを複数描いたのが次の図だ。画面分割、余白調整、最小値の1.5倍及び整数倍に横線、コード・銘柄・最終終値を付け加えた。
2016年6月10日(金)に至る最終の3日間終値が前日の終値を上回っているマザーズの銘柄のチャート。
期間は2016年4月以降である。
線が左端から描かれているのは、データは約1年分を与えて、チャートを描く範囲のみを制限しているからである。

あった。plot.xtsでチャートを描いてくれる。

zはxts型のオブジェクトである。ポイントはwidthであろか。width=25000。この位の大きさでないと、線のようなチャートになる。
また、通常のローソク足とは違って、土日など空いている日は空間が開く。これはこれでいいのではないかと思って受け入れることにする。
髭の色がgrayなので見にくい。髭・陽線・陰線の色などを指定すると次のようになる。

これに、移動平均線とボリンジャーバンドを入れると次の通り。

線が出てこないので日数をちょっと増やした。
SMAとBBandsはモジュールxtsの関数。5日移動平均が青色、25日移動平均が緑、ボリンジャーバンドはデフォルトの20日移動平均と±2σのラインを赤で描いてある。
これを複数描いたのが次の図だ。画面分割、余白調整、最小値の1.5倍及び整数倍に横線、コード・銘柄・最終終値を付け加えた。
2016年6月10日(金)に至る最終の3日間終値が前日の終値を上回っているマザーズの銘柄のチャート。
期間は2016年4月以降である。
線が左端から描かれているのは、データは約1年分を与えて、チャートを描く範囲のみを制限しているからである。

登録:
投稿 (Atom)