平均足はトレンドの流れを確認する上で便利なテクニカルチャートです。通常のローソク足とは異なり、「始値・終値・高値・安値」の四本値をそれぞれ平均するなどして、トレンドがわかりやすいようにローソク足を描くため、陽線と陰線に連続性があり、相場の流れを読むことに適しています。
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]
にほんブログ村
#オープンソース