目次
休日を考慮した OHLC チャート
休日を考慮した OHLC チャート (OHLC chart) を作成するためには、
mpl_finance
モジュールの
plot_day_summary_ohlc
関数
(または plot_day_summary_oclh
) を使います。
ここで、
plot_day_summary_ohlc
関数の必須な引数は
ax
,
quotes
の 2 つです。
ax
:Axes
インスタンスquotes
: (time, open, high, low, close, ...) シーケンスのシーケンス (二次元配列)
オプション引数については、
ticksize
,
colorup
,
colordown
が有ります。
ticksize
: 始値と終値の tick mark の長さcolorup
: 終値が始値以上の時の色colordown
: 終値が始値未満の時の色
ここで注意として、
mpl-finance 0.10.0 時点では
plot_day_summary_oclh
関数で描画したそれぞれの線の太さが均一になっていません。
気になるようであれば、
plot_day_summary_oclh
関数で取得した
Line2D
リストの各オブジェクトのプロパティを変更することで、
線の太さを均一にできます。
Example
source code
import mpl_finance
import numpy
from matplotlib import dates
from matplotlib import pyplot
from datetime import datetime as DateTime
from matplotlib.dates import DateFormatter
def make_mpl_dates(year, month, day):
return dates.date2num(DateTime(year, month, day))
# time, open, high, low, close, volume
quotes = numpy.array([
[make_mpl_dates(2019, 1, 14), 90, 105, 85, 100, 1000],
[make_mpl_dates(2019, 1, 15), 110, 110, 110, 110, 1100],
[make_mpl_dates(2019, 1, 16), 125, 125, 115, 120, 1200],
[make_mpl_dates(2019, 1, 17), 120, 140, 120, 140, 1300],
[make_mpl_dates(2019, 1, 18), 130, 145, 130, 135, 1200],
[make_mpl_dates(2019, 1, 21), 125, 125, 110, 110, 1100],
[make_mpl_dates(2019, 1, 22), 115, 120, 90, 105, 900],
[make_mpl_dates(2019, 1, 23), 110, 115, 100, 110, 1100],
[make_mpl_dates(2019, 1, 24), 130, 135, 125, 125, 1400],
[make_mpl_dates(2019, 1, 25), 120, 140, 115, 135, 1500]])
fig = pyplot.figure()
ax = fig.add_subplot(1, 1, 1)
ticksize = 8
colorup = "deeppink"
colordown = "blue"
mpl_finance.plot_day_summary_ohlc(ax, quotes, ticksize,
colorup,
colordown)
# 線の太さを均一にしたい場合は、
# ↑の plot_day_summary_ohlc を削除して、
# ↓の plot_day_summary_ohlc と for の # を削除する
# lines = mpl_finance.plot_day_summary_ohlc(ax, quotes, ticksize,
# colorup,
# colordown)
# for l in lines:
# l.set_linewidth(1.0)
# l.set_markeredgewidth(2.0)
ax.xaxis.set_major_formatter(DateFormatter("%Y-%m-%d"))
ax.grid(color="lightgray")
fig.autofmt_xdate(rotation=90, ha="center")
pyplot.tight_layout()
pyplot.savefig("ohlc_chart_plot_day_summary_ohlc.png")
result
休日を詰めた OHLC チャート
休日 (及び出来高なしの日) を詰めた OHLC チャート (OHLC chart) を作成するためには、
mpl_finance
モジュールの
plot_day_summary2_ohlc
関数
(または plot_day_summary2_ochl
) を使います。
ここで、
plot_day_summary2_ohlc
関数の必須な引数は
ax
,
opens
,
highs
,
lows
,
closes
の 5 つです。
ax
:Axes
インスタンスopens
: 始値のシーケンスhighs
: 高値のシーケンスlows
: 安値のシーケンスcloses
: 終値のシーケンス
オプション引数については、
ticksize
,
colorup
,
colordown
が有ります。
ticksize
: 始値と終値の tick mark の長さcolorup
: 終値が始値以上の時の色colordown
: 終値が始値未満の時の色
ここで注意点として、
mpl-finance 0.10.0 時点では
plot_day_summary2_ohlc
,
plot_day_summary2_ochl
関数で OHLC チャートを作成する時、
「始値 (open)」と「終値 (close)」が等しい時の色が
colordown
で指定したものになっています。
気になるようであれば、
終値のそれぞれの値に見た目に影響が出ない程度の数値 (例えば 0.001) を足すことで、
始値と終値が等しい時でも
colorup
で指定した色にすることができます。
Example
source code
import mpl_finance
import numpy
from matplotlib import dates
from matplotlib import pyplot
from datetime import datetime as DateTime
from matplotlib.ticker import Formatter
class MyIndexDateFormatter(Formatter):
def __init__(self, times, fmt):
self.times = times
self.fmt = fmt
def __call__(self, x, pos=None):
index = int(x)
if index < 0 or index >= len(self.times):
return ""
else:
t = dates.num2date(self.times[index])
return t.strftime(self.fmt)
def make_mpl_dates(year, month, day):
return dates.date2num(DateTime(year, month, day))
# time, open, high, low, close, volume
quotes = numpy.array([
[make_mpl_dates(2019, 1, 14), 90, 105, 85, 100, 1000],
[make_mpl_dates(2019, 1, 15), 110, 110, 110, 110, 1100],
[make_mpl_dates(2019, 1, 16), 125, 125, 115, 120, 1200],
[make_mpl_dates(2019, 1, 17), 120, 140, 120, 140, 1300],
[make_mpl_dates(2019, 1, 18), 130, 145, 130, 135, 1200],
[make_mpl_dates(2019, 1, 21), 125, 125, 110, 110, 1100],
[make_mpl_dates(2019, 1, 22), 115, 120, 90, 105, 900],
[make_mpl_dates(2019, 1, 23), 110, 115, 100, 110, 1100],
[make_mpl_dates(2019, 1, 24), 130, 135, 125, 125, 1400],
[make_mpl_dates(2019, 1, 25), 120, 140, 115, 135, 1500]])
times = quotes[:, 0]
opens = quotes[:, 1]
highs = quotes[:, 2]
lows = quotes[:, 3]
closes = quotes[:, 4]
fig = pyplot.figure()
ax = fig.add_subplot(1, 1, 1)
ticksize = 8
colorup = "deeppink"
colordown = "blue"
mpl_finance.plot_day_summary2_ohlc(ax,
opens,
highs,
lows,
closes,
# closes + 0.001,
ticksize,
colorup,
colordown)
formatter = MyIndexDateFormatter(times, "%Y-%m-%d")
ax.xaxis.set_major_formatter(formatter)
ax.grid(color="lightgray")
fig.autofmt_xdate(rotation=90, ha="center")
pyplot.tight_layout()
pyplot.savefig("ohlc_chart_plot_day_summary2_ohlc.png")
result