MySQLからデータを取得し、Pythonのmatplotlibでローソク足を描画します。
環境
- OS:MacOS10.11
- python:2.7.12
- MySQL 5.6
テーブル
MySQLのテーブル形式は以下のとおり。日足でも週足でもなんでも構いません。
データベース名はdbnameとしています
create table price_table( date datetime not null, code varchar(8) not null, open double precision null, high double precision null, low double precision null, close double precision null, volume double precision null ) ; create unique index idx_price on price(date,code) ;
休日考慮
シンプルにローソク足だけ表示します
休日がある場合には間を空けます
#!/bin/env python # coding:utf-8 import matplotlib.pyplot as plt from matplotlib.finance import candlestick_ohlc import time import MySQLdb connection = MySQLdb.connect(host="localhost",db="dbname",user="root",passwd="") cursor = connection.cursor() code = "6758" date='2016-04-01' cursor.execute("select date,open,high,low,close,volume from price_table where code=%s and date>=%s",[code,date]) result = cursor.fetchall() ohlc=[] fdate=[] # float ddate=[] # datetime for row in result: tmp=time.mktime(row[0].timetuple()) ohlc.append((tmp,row[1],row[2],row[3],row[4],row[5])) # unix time ddate.append(row[0]) fdate.append(tmp) cursor.close() connection.close() # graph上のfloat型の日付と、表示文字列を紐付けている plt.xticks( fdate[::5], [x.strftime('%Y-%m-%d') for x in ddate][::5] ) ax = plt.subplot() candlestick_ohlc(ax,ohlc) plt.xlabel('Date') plt.ylabel('Price') plt.title("title") plt.legend() plt.show()
休日考慮しない
シンプルにローソク足だけ表示します
休日を無視して詰めて描画します。テクニカルを重ね合わせる場合はこちらのほうが都合がいいです
#!/bin/env python # coding:utf-8 import matplotlib.pyplot as plt from matplotlib.finance import candlestick_ohlc import time import MySQLdb connection = MySQLdb.connect(host="localhost",db="dbname",user="root",passwd="") cursor = connection.cursor() code = "6758" date='2016-04-01' cursor.execute("select date,open,high,low,close,volume from price_table where code=%s and date>=%s",[code,date]) result = cursor.fetchall() ohlc=[] fdate=[] # float ddate=[] # datetime adr=1 for row in result: tmp=adr ohlc.append((adr,row[1],row[2],row[3],row[4],row[5])) ddate.append(row[0]) fdate.append(adr) adr=adr+1 cursor.close() connection.close() # graph上のfloat型の日付と、表示文字列を紐付けている plt.xticks( fdate[::5], [x.strftime('%Y-%m-%d') for x in ddate][::5] ) ax = plt.subplot() candlestick_ohlc(ax,ohlc) plt.xlabel('Date') plt.ylabel('Price') plt.title("title") plt.legend() plt.show()
これでとりあえずチャートが表示されます