2024-08-15

【備忘録】一目均衡表

一目均衡表(いちもくきんこうひょう)は、株式、商品、為替の取引相場の罫線表(チャート)分析法の一つです。都新聞(現 東京新聞)商況部部長の細田悟一が私設研究所を設立して、7 年の歳月と延べ 2000 人の人手をかけて開発しました。1935 年(昭和10年)に「新東転換線」として同紙で発表されています。

戦後、細田がペンネームを「一目山人(いちもくさんじん)」と改めたのに合わせて、この「新東転換線」を「一目均衡表」と改名しました。現在では一目均衡表は日本発のテクニカル分析ツールとして海外の投資家にも参照され、「Ichimoku」として広く知られています。

「一目均衡表」は細田の遺族が経営する株式会社経済変動総研の登録商標です。

Wikipedia より引用・編集

株式の取引をするようになって、ラジオ日経の「マーケットプレス」を聞いていると、ときどき一目均衡表を用いた分析例が紹介されます。先週の歴史的な東京市場の暴落を経験して、長期的な視点で自分でも分析できるようにしようと思い、一目均衡表の作成方法を調べました。

ただ、一目均衡表については、まだ内容を咀嚼できておらず、とても使いこなせるレベルではありません。本ブログで紹介する Python のスクリプトも、yfinance で取得したデータを使っているということ以外は、参考サイト [1] で紹介されているスクリプトのほぼ丸写しです。そのため、自分向けの備忘録として公開します。🙇🏻

下記の OS 環境で動作確認をしています。

RHEL 9.4 x86_64
Python 3.12.1
jupyterlab 4.2.4
matplotlib 3.9.1.post1
mplfinance 0.12.10b0
yfinance 0.2.41

以下の作業は JupyterLab 上でおこなっています。

まず、必要なパッケージをインポートします。

import matplotlib.pyplot as plt
import mplfinance as mpf
import yfinance as yf

過去1年分の日経平均株価 (^N225) を取得します。

symbol = '^N225'
ticker = yf.Ticker(symbol)
df = ticker.history(period='1y')
df

 

データフレームの列を追加して、一目均衡表の5本の補助線を算出します。

# 基準線に使用するデータを作成
high = df['High']
low = df['Low']

max26 = high.rolling(window=26).max()
min26 = low.rolling(window=26).min()
df['basic_line'] = (max26 + min26) / 2

# 転換線に使用するデータを作成
high9 = high.rolling(window=9).max()
low9 = low.rolling(window=9).min()
df['turn_line'] = (high9 + low9) / 2

# 先行スパン1に使用するデータを作成
span1 = (df['basic_line'] + df['turn_line']) / 2
df['span1'] = span1.shift(25)

# 先行スパン2に使用するデータを作成
high52 = high.rolling(window=52).max()
low52 = low.rolling(window=52).min()
span2 = (high52 + low52) / 2
df['span2'] = span2.shift(25)

# 遅行線に使用するデータを作成
df['slow_line'] = df['Close'].shift(-25)

df

 

mplfinance でローソク足チャートを描画し、基準線、転換線、雲、遅行線を追加します。

# 基準線に使用するデータを作成
high = df['High']
low = df['Low']


max26 = high.rolling(window=26).max()
min26 = low.rolling(window=26).min()
df['basic_line'] = (max26 + min26) / 2


# 転換線に使用するデータを作成
high9 = high.rolling(window=9).max()
low9 = low.rolling(window=9).min()
df['turn_line'] = (high9 + low9) / 2


# 先行スパン1に使用するデータを作成
span1 = (df['basic_line'] + df['turn_line']) / 2
df['span1'] = span1.shift(25)


# 先行スパン2に使用するデータを作成
high52 = high.rolling(window=52).max()
low52 = low.rolling(window=52).min()
span2 = (high52 + low52) / 2
df['span2'] = span2.shift(25)


# 遅行線に使用するデータを作成
df['slow_line'] = df['Close'].shift(-25)

apd = [
    mpf.make_addplot(df['basic_line'], color='red', width=1),                       # 基準線
    mpf.make_addplot(df['turn_line'], color='blue', width=1),                       # 転換線
    mpf.make_addplot(df['span1'], color='magenta', linestyle='dotted', width=0.5),  # 先行スパン1
    mpf.make_addplot(df['span2'], color='darkcyan', linestyle='dotted', width=0.5), # 先行スパン2
    mpf.make_addplot(df['slow_line'], color='orange', width=1),                     # 遅行スパン
]

labels = ['basic', 'turn', 'span1', 'span2', 'slow']

# 抵抗帯(雲)
# 先行スパン1 (span1) が上にある雲(マゼンタ)と、先行スパン2 (span2) が上にある雲(シアン)の2種類に分ける。
y1 = df['span1'].values
y2 = df['span2'].values
fb_span1 = dict(y1=y1, y2=y2, where=y1>y2, alpha=0.1, color='magenta', interpolate=True)
fb_span2 = dict(y1=y1, y2=y2, where=y1<y2, alpha=0.1, color='darkcyan', interpolate=True)
fb_span_both = [fb_span1, fb_span2]

title = '%s (%s)' % (
    ticker.info['longName'],
    ticker.info['symbol'],
)

# チャートを表示
mpf.plot(
    df,
    title=title,
    type='candle',
    style='yahoo',
    datetime_format='%y-%m-%d',
    xrotation=0,
    addplot=apd,
    returnfig=True,
    fill_between=fb_span_both,
    figsize=(12, 6),
    #tight_layout=True,
)

plt.savefig('n255_ichimoku.png')
# チャートを表示
plt.show()

 

トレンド変換の可能性を示す雲のねじれを色を変えて表したかったので、その部分のみ機能を追加しました。

参考サイト

  1. 【Python】【テクニカル指標】一目均衡表とローソク足への追加描画|ただかつ@株式投資を科学する [2023-06-19]
  2. Using kwarg fill_between with mplfinance

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

0 件のコメント: