matplotlibでローソク足 (Pythonで株価チャート)

| | | | | | |



Pythonでグラフを描くためのモジュールmatplotlibをインストールすると、米Yahoo!ファイナンスから株価データをダウンロードする関数や、ローソク足を描く関数などが付いてきます。
ちょっと触ってみたのでメモ。


先に、ちょっと気になったニュース

はるか昔、地球には今の月以外にいくつも「失われた月」があったらしい

ジャイアントインパクト説の発展形。

機械が苦手な人でも使える!「ペーパーGPS」

田舎だと、「田んぼの真ん中で右折」 とか、そんなんが続いたりして困るのですけれども。

人力ボーカロイド支援ツール「UTAU」

via スラド
デモ動画

matplotlibでローソク足

08/04/01~5月までのダウは、ローソク足でこんなかんじ
http://boxheadroom.com/wp/wp-content/uploads/2008/05/dji2.png

オマケで、2008年頭~5/9のダウと、日経平均の比較 (緑が日経平均。ダウは5/8まで)
http://boxheadroom.com/wp/wp-content/uploads/2008/05/usj.png

以下 作業メモ。 あんまし面白くないです~


ググる:matplotlib


株価チャートを見たいだけなら、Webでも見れるし、国内株対応のちゃんとした、テクニカル指標などにも対応したソフトが無料も含めいろいろありますし、図として使う際はエクセルなどで作成したほうが後の取り回しがよさげ。なので、あまり使わないような気もします
(残念ながら、matplotlibはGoogle App Engineでは使えません。)

ARToolKitに使う関係でNumPyを勉強しようとして、先に関連モジュールのmatplotlibを触ることに。。。。なんだか、すごく遠回りしてる気がする。(大汗

matplotlibモジュールをインストール

Enthought Python を丸ごとインストールするのが悩まなくてすむかも。
(私はモジュール単位で選んでインスコできるenstallerというのを使いました。)

コード

ローソク足を描画する

基本はこちらのコードを使いました。デフォルトだと色が変なので、日本の一般的な色に修正(始値<終値で白、始値>終値で黒)

修正箇所は。。。インテルの株価引っ張ってもアレなので、ダウジョーンズ指数に変更

日付を今年はじめから5月に。

date1 = datetime.date( 2008, 1, 1)
date2 = datetime.date( 2008, 5, 30 )
quotes = quotes_historical_yahoo( 'INTC', date1, date2) #修正前
quotes = quotes_historical_yahoo( '^DJI', date1, date2) #修正後

INTCとか^DJIってのが銘柄を指定するコード、tickerというモノ、らしいです。
matplotlibは米ヤフーファイナンス使ってるので、日本株のデータは取得できません残念。引っ張ってくる裏技って無いのかしらん?

#修正前
candlestick(ax, quotes, width=1 ,alpha =0.75)
#修正後。描画色を指定する
import candle #下のモジュールをインポート
candlestick(ax, quotes, width=1 ,alpha =1.0,colorup="w",colordown="k")

デフォルトだと、白で描画したとき、縁取りが無いので見えないので、candelestick関数だけパッチをあてます。
candle.pyの名で保存。先のリンク先のプログラムで、financeモジュールより後で インポートしてやります。

from pylab import *
"""candle.py financeモジュールより引用改変。
元のモジュールのライセンスに従います"""
def candlestick(ax, quotes, width=0.2, colorup='k',
   colordown='r',alpha=1.0):
   OFFSET = width/2.0
   lines = []
   patches = []
   for q in quotes:
       t, open, close, high, low = q[:5]
       if close>=open :
           color = colorup
           lower = open
           higher=close
           height = close-open
       else           :
           color = colordown
           lower = close
           higher= open
           height = open-close
       vline = Line2D(
           xdata=(t, t), ydata=(low, lower),
           color='k',
           linewidth=0.5,
           antialiased=True,
           )
       vline2 = Line2D(
           xdata=(t, t), ydata=(high,higher),
           color='k',
           linewidth=0.5,
           antialiased=True,
           )

       rect = Rectangle(
           xy    = (t-OFFSET, lower),
           width = width,
           height = height,
           facecolor = color,
           linewidth=0.25,
           #edgecolor = color,
           edgecolor = 'k',
           )
       rect.set_alpha(alpha)
       lines.append(vline)
       lines.append(vline2)

       ax.add_line(vline)
       ax.add_line(vline2)
       patches.append(rect)
       ax.add_patch(rect)
   ax.autoscale_view()

   return lines, patches

日付表示の指定方法や、グラフの線へのキャプションの付け方などは、まだ勉強中です。。。

テネシー州リンチバーグ在住のジャック・ダニエルさん(仮名)が日本株を買いたくなったら、どうやってデータ収集するんだろう?

上記のコードいじってて、ふと思ったのですけれども。

アメリカの田舎在住のおっちゃんでも、ソニーとかパナソニックの名前ぐらいは知ってますよね?(たぶん)
で、日本人ならば、気になる銘柄について調べたければ、それっぽい出版社から出てる適当なチャート用ソフトを買ったり、ネットでチェックすれば済む話。(ちゃんとした株価データを買おうと思うと、それなりに、ちょっとした釣り道具程度のお金がかかるけど。釣りはしませんが。。。っていうかPS3買えるぐらい。)

プロの機関投資家などはアレとして、海外の個人投資家が、日本株個別銘柄について軽く調べたい、って思ったとき、かなりハードル高いかも。
ひょっとしたら、英語で提供されてるリソースがどこかに有るのかもわかりませんけれども。

Tags: ,

Related posts

Tags: ,

Comments are closed.