平均足はトレンドの流れを確認する上で便利なテクニカルチャートです。通常のローソク足とは異なり、「始値・終値・高値・安値」の四本値をそれぞれ平均するなどして、トレンドがわかりやすいようにローソク足を描くため、陽線と陰線に連続性があり、相場の流れを読むことに適しています。
yfinance で取得した4本値 (OHLC) データから平均足データを作成します。
下記の OS 環境で動作確認をしています。
|
Fedora Linux Workstation | 41 x86_64 |
| Python | 3.13.0 | |
| jupyterlab | 4.3.2 | |
| matplotlib | 3.9.3 | |
| mplfinance | 0.12.10b0 | |
| numpy | 2.2.3 | |
| pandas | 2.2.3 | |
| yfinance | 0.2.50 |
以下の作業は、Jupyter Lab 上でおこなっています。
準備
最初に必要なライブラリをインポートしておきます。
import matplotlib.pyplot as plt import mplfinance as mpf import numpy as np import pandas as pd import yfinance as yf
チャート作成に関連する関数を2つ定義しておきます。
まずはチャートのタイトルを作成する処理 get_chart_title です。
def get_chart_title(ticker: yf.Ticker, symbol: str, ctype: str) -> str:
try:
title = '%s (%s) - %s' % (ticker.info['longName'], symbol, ctype)
except KeyError:
title = '%s - %s' % (symbol, ctype)
return title
次はチャートのタイトルを作成する処理 gen_chart です。
def gen_chart(df: pd.DataFrame, title: str):
fig = plt.figure(figsize=(12, 4))
ax = fig.add_subplot(111)
mpf.plot(
df,
type='candle',
style='default',
volume=False,
xrotation=0,
ax=ax
)
ax.set_title(title)
ax.grid()
plt.tight_layout()
# plt.savefig('output.png')
plt.show()
日足データの取得
例として、日経平均株価 (^N225) の過去 6ヶ月分の日足データを取得します。
symbol = '^N225' ticker = yf.Ticker(symbol) df0 = ticker.history(period='6mo', interval='1d') df0
必要な列だけを残します。
df = df0[['Open', 'High', 'Low', 'Close']] df
ローソク足チャート
mplfinance で日足のローソク足チャートを作成します。
ctype = 'Candlestick Chart' gen_chart(df, get_chart_title(ticker, symbol, ctype))
平均足データの作成
まず、4本値データと同じインデックスと列を持った空のデータフレームを用意しておきます。もっとスマートなやり方があるとは思いますが、とりあえず取得したデータフレーム df を df_mean へコピーして、中身を NaN で埋めています。
df_mean = df.copy()
for col in df.columns:
df_mean[col] = np.nan
df_mean
楽天証券が提供するトレーディング・ツール「マーケットスピード II」のオンラインヘルプ、テクニカル指標/チャート形状 [2] で説明されている定義に従って、一行ずつ平均足データを作成します。
"""
【参考・引用サイト】
https://marketspeed.jp/ms2/onlinehelp/ohm_007/ohm_007_05.html
"""
for i, dt in enumerate(df.index):
# 1本目の平均足
# 前日の平均足がなく始値が算出出来ないため、描画対象外
if i == 0:
continue
# 【平均足の始値】
if i == 1:
# 2本目の平均足:前日の平均足がないため、始値を下記値より算出する
# 始値=(前日の始値+前日の高値+前日の安値+前日の終値)/4
p_open = df.iloc[0].mean()
else:
# 始値=(前日の平均足の始値+前日の平均足の終値)/2
p_open = df_mean.iloc[i - 1][['Open', 'Close']].mean()
# 【平均足の終値】
# 終値=(当日の始値+当日の高値+当日の安値+当日の終値)/4
p_close = df.iloc[i].mean()
"""
陰線:始値>=終値
陽線:始値<終値
平均足の高値と安値は、当日の高値と安値を用いる。但し、
平均足が陰線で当日の高値<平均足の始値の場合、平均足の高値=平均足の始値とする。
平均足が陽線で当日の安値>平均足の始値の場合、平均足の安値=平均足の始値とする。
"""
# 【平均足の高値】
if p_open >= p_close: # 平均足が陰線
p_high = max(p_open, df.iloc[i]['High'])
else:
p_high = df.iloc[i]['High']
# 【平均足の安値】
if p_open < p_close: # 平均足が陽線
p_low = min(p_open, df.iloc[i]['Low'])
else:
p_low = df.iloc[i]['Low']
df_mean.iloc[i] = [p_open, p_high, p_low, p_close]
df_mean
平均足チャート
ローソク足チャートと同様に、mplfinance で平均足チャートを作成します。
ctype = 'Heikin Ashi Chart' gen_chart(df_mean, get_chart_title(ticker, symbol, ctype))
まとめ
楽天証券の口座でトレーディングをしている新米トレーダーで、自動売買実現に向けて取り組んでいます。
リアルタイムの情報を取得するためにいろいろ試しましたが、Windows 上で表計算ソフト Excel のアドイン「マーケットスピード II RSS [3]」(以下、MS2 RSS と呼びます)を利用するのがもっとも確実そうだという結論に至りました。
MS2 RSS では、本体の「マーケットスピード II [4]」上に表示される情報を取得できますが、全てではありません。
今回取り上げた「平均足チャート」は、本体の「マーケットスピード II」のチャート上では利用できますが、チャートにプロットされた平均足のデータは MS2 RSS では取得できません。日足などの OHLC データは MS2 RSS で取得できますので、平均足データを使いたければ、VBA でマクロを用意して算出するしかなさそうです。
MS2 RSS では売買用の関数も提供されているので、自動売買は Excel 上で実現することになり、判定基準などの必要な機能は VBA で用意することになります。そういうわけで、いまさらながら VBA の話題を本ブログで取り上げることになるかもしれません。一方、実装前の確認やシミュレーションは依然として Linux 上の Python でおこなっています。
株価の値動きの確認には Parabolic SAR を頻繁に利用していますが、ローソク足より平均足の方が相性が良さそうなことを知り [5] [6]、評価をはじめたところです。
参考サイト
- 平均足 | マーケットスピードオンラインヘルプ
- テクニカル指標/チャート形状 | マーケットスピード II オンラインヘルプ | 楽天証券のトレーディングツール
- マーケットスピード II RSS | 楽天証券のトレーディングツール
- マーケットスピード II | 楽天証券のトレーディングツール
- Parabolic SAR - Wikipedia
- Parabolic SAR Secrets: Pro Trader Shares Tested Tactics [Updated on 2024-10-22]
にほんブログ村
#オープンソース










0 件のコメント:
コメントを投稿