Post

Google Colabで均衡表の活用

Google Colabで均衡表の活用

はじめに

もうこの情報は古いので今はもう同じようにはいきません。

サンプル記事として残しておきます。

過去にこういうことをしていましたよという紹介程度です。

環境構築

Google Colabを利用するのが簡単なのでこちらの方法を記載します。

Dockerで実装してましたがPCに負荷がかかってるので…

Googleのコンピュータに負担してもらいます。

無料のサービスですがこの程度の処理なら全然問題なく使えます。

ライブラリのインポート

1
2
!pip install mplfinance
!pip install yfinance

ライブラリからインストール

1
2
3
4
5
6
7
8
9
10
11
12
import datetime

import pandas as pd
from pandas_datareader import data

import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib.style as style

import mplfinance as mpf
import yfinance as yf
yf.pdr_override()

一目均衡表作成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
def glaph(symbol, start, end, time):
    df = data.get_data_yahoo(symbol, start, end, interval=time)

    date = df.index

    # カラム追加
    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の算出
    df['span1'] = (df['basic_line'] + df['turn_line']) / 2

    # 先行スパン2の算出
    high52 = high.rolling(window=52).max()
    low52 =  low.rolling(window=52).min()

    df['span2'] = ( high52 + low52 ) / 2

    # 遅行スパンの算出
    df['slow_line'] = df['Adj Close'].shift(-25)

    # 一目均衡表の表示
    lines = [
            mpf.make_addplot(df['basic_line'].to_numpy()), #基準線
            mpf.make_addplot(df['turn_line'].to_numpy()), #転換線
            mpf.make_addplot(df['slow_line'].to_numpy()), #遅行スパン
            ]

    labels = ["basic","turn","slow","span"]

    fig, ax = mpf.plot(df, type='candle', figsize=(16,6), style='nightclouds', xrotation=0, addplot=lines, returnfig=True,
                      fill_between=dict(y1=df['span1'].values, y2=df['span2'].values, alpha=0.5, color='gray') )
    ax[0].legend(labels)

    # 線の太さを変更
    for line in ax[0].lines:
        line.set_linewidth(0.5)

    plt.show()

各基本数値足の陰陽数カウント

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
def multi_basic(symbol, start, end, time, *slow_values):
    df = data.get_data_yahoo(symbol, start, end, interval=time)

    for slow in slow_values:

        # 遅行スパンの算出
        df['slow_line'] = df['Adj Close'].shift(-(slow-1))

        # f'{slow}dayC' 列を追加
        df[f'{slow}dayC'] = ''

        # 初期化
        count = 1
        prev_trend = ''

        for i in range(2, len(df) - slow + 1):
            # slow_line と Open を比較して一致すれば"寄引同時"" 一致しなければ"陽" か "陰" を割り当て
            if df.at[df.index[i], 'slow_line'] == df.at[df.index[i], 'Open']:
                current_trend = '寄引同時'
            elif df.at[df.index[i], 'slow_line'] > df.at[df.index[i], 'Open']:
                current_trend = ''
            else:
                current_trend = ''

            # 前日と同じトレンドの場合、連続カウントを増やす
            if current_trend == prev_trend:
                count += 1
            else:
                count = 1

            # 2連続カウントを表示
            if count >= 2:
                df.at[df.index[i], f'{slow}dayC'] = f'{count}{current_trend}'
            else:
                df.at[df.index[i], f'{slow}dayC'] = current_trend

            # 前日のトレンドを更新
            prev_trend = current_trend

    return df

使用方法

表示制限の解除

1
2
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)

過去1年間の期間を指定

1
2
end = datetime.datetime.today()
start = (pd.Period(end, 'D') - 365).start_time

グラフの描画

1
2
3
4
5
6
# 日経平均の週足の例 glaph('^N225', start, end, '1wk')
# 個別株の日足の例  glaph('6098.T', start, end, '1d')
# 各足は[1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo]が指定可能
# 1mo以上は過去の期間を長めに調整、1h以下に関しても短めに調整しないとエラーが出ます
# glaph('6098.T', '2023-08-20', '2023-09-22', '1h')のように日付を細かく変えてみてください
glaph('6098.T', start, end, '1wk')

各基本数値足の陰陽数を表示

1
2
3
4
# 各基本数値を必要な数だけ指定可能 日足で3と5しか使わないなら以下のようになる
# df = multi_basic('5010.T', start, end, '1d', 3, 5)
df = multi_basic('5010.T', start, end, '1d', 3, 5, 9, 13, 17, 21, 26, 33, 42)
df

時間論の基本数値・複合数値

基本数値 【9 :一節 × 】 【 17:二節 △ 】 【26:一期(三節) ⚪︎ 】

複合基本数値

・33:一期一節 ⚪︎×

・42:一期二節 ⚪︎△

・51

・65:□

・76:一巡(三期)

・83

・97

・101

・129:□□

・172:□△

・200〜257:□×□

・226:一環(三巡)

・676:一巡環(三環)

基本数値足について

例えば3日足であれば3本前の寄りつきを始値として、当日の引けを終値として作成する。

髭の無いローソク足になるのが特徴。

陰陽を見るだけなら遅行スパンの日数を変えれば簡単に見ることができる。

あとがき

遅行スパンのパラメータは26だけでなく、各基本数値を碁石のように並べて使うことができるそうです。

北海道の方から均衡表の一巻、二巻(完結編)、四巻(型譜)の計3冊の原著を安価でお譲りいただきました。

自分なりに気付いたことを追記していきます。

何か間違いがありましたら、またご指摘くださると幸いです。(もし見られていれば…)

This post is licensed under CC BY 4.0 by the author.