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()
これでとりあえずチャートが表示されます