matplotlibでローソク足 (Pythonで株価チャート)
Pythonでグラフを描くためのモジュールmatplotlibをインストールすると、米Yahoo!ファイナンスから株価データをダウンロードする関数や、ローソク足を描く関数などが付いてきます。
ちょっと触ってみたのでメモ。
先に、ちょっと気になったニュース
はるか昔、地球には今の月以外にいくつも「失われた月」があったらしい
ジャイアントインパクト説の発展形。
機械が苦手な人でも使える!「ペーパーGPS」
田舎だと、「田んぼの真ん中で右折」 とか、そんなんが続いたりして困るのですけれども。
人力ボーカロイド支援ツール「UTAU」
matplotlibでローソク足
08/04/01~5月までのダウは、ローソク足でこんなかんじ

オマケで、2008年頭~5/9のダウと、日経平均の比較 (緑が日経平均。ダウは5/8まで)

以下 作業メモ。 あんまし面白くないです~
ググる:matplotlib
- matplotlib/pylab 配布サイト
- スクリーンショット&サンプルコード
私の場合、欲しいグラフのプログラムをコピペすればOK
- スクリーンショット&サンプルコード
- SciPy Cookbook-Matplotlib
MATLABと、有る程度互換性がある模様。おぼえれば綺麗なグラフを描けるようになるみたいです。
株価チャートを見たいだけなら、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買えるぐらい。)
プロの機関投資家などはアレとして、海外の個人投資家が、日本株個別銘柄について軽く調べたい、って思ったとき、かなりハードル高いかも。
ひょっとしたら、英語で提供されてるリソースがどこかに有るのかもわかりませんけれども。






