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