10章の株の取引量のプログラムやっと動きました…

集合知プログラミング

集合知プログラミング

誤植が多すぎとか、絶賛されてたりとか、非常に評価の二分する本です。

他にも苦労はしましたが、ともかくp264からのコードですが、まずYahooから株データを落としてこようにも、Yahooにつながらない。多分これはYahooのせいなんだけど、404とか返ってくるからURLが変わっちゃったんだとマジで思って、しかも404だとプログラムの実行が止まってしまって、どうにもなら無いので、他の株データをcsvで落とせるところから落としてグラフ書いて遊んでました。

まぁそれで色んな関数の存在を知ったのですが、そこでそれらで代用して出来るんじゃないかと思ってやってみました。まずこんなコードを書いて(参考 http://d.hatena.ne.jp/noazoh/20091023/1256293199 )、


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import datetime
from pylab import *

def downyahoo():
tickers=['YHOO','AVP','BIIB','BP','CL','CVX',
'DNA','EXPE','GOOG','PG','XOM','AMGN']

date1 = datetranslate("1996/03/12")
date2 = datetranslate("2006/11/26")

for tk in tickers:
print tk
f = matplotlib.finance.fetch_historical_yahoo(tk, date1, date2)

print f

def datetranslate(date):
d = date.split('/')
startDate = datetime.date(int(d[0]),int(d[1]),int(d[2]))
return startDate

def main():
downyahoo()

if __name__ == '__main__':
main()

適当な名前で保存して実行します。pylabはmatplotlibをインストールすれば使えるようになります。

すると、~/.matplotlib/finance.cache/に、残念なことにMD5エンコードされたわけの分からない名前のファイルが出来ますwしかし一つでも404がでたらアウトのオリジナルより保存して再開できる方が全然いいので、頑張って全部落とします。で、このあと使いやすいようにティッカーを使って"YHOO.csv"等名前を変えておきます。

次に、stockvolume.pyですが、ソースはオライリーから落としてきたような記憶がありますが、そのままでは404ですぐ終了してしまうのと、やはり間違いがあるので、直します。


#!/usr/bin/env python

import nmf
import urllib2
from numpy import *

tickers=['YHOO','AVP','BIIB','BP','CL','CVX',
'DNA','EXPE','GOOG','PG','XOM','AMGN']

shortest=300
prices={}
dates=None

for t in tickers:
# Open the URL
#rows=urllib2.urlopen('http://ichart.finance.yahoo.com/table.csv?'+\
# 's=%s&d=11&e=26&f=2006&g=d&a=3&b=12&c=1996'%t +\
# '&ignore=.csv').readlines()
file = "%(t)s.csv" % locals()
f = open(file,'r')
rows=f.readlines()

# Extract the volume field from every line
prices[t]=[float(r.split(',')[5]) for r in rows[1:] if r.strip()!='']
if len(prices[t])
前書きにはpythonは可読性が高いとありましたが[]の入れ子などは、emacs-lispの()の嵐よりきつかったです。まぁ主な間違いはshortestを設定しておきながら、最後から5行めrange(300)とかやっちゃうところでしょう(直しましたが)。しかし全体を見ると一体これだけでどれほど悩まされたか。もう24時間以上起きてますwww少しでも皆さんの参考になればと、うpしときます。

#なんとか応用して株でもうからねーかなーwwww

追記:はてなって']'かっこ二つつづけて書くと消えちゃうのね。せっかく修正してるつもりなのに括弧とじが無いところがあったのであせりましたw