投資のためのデータサイエンス

個人の投資活動に役立つデータ分析にまつわる話題を綴ります。

Pythonによる「三角持ち合い」パターンの自動識別

前回は、Pythonテクニカル分析ライブラリであるTA-Libを用いてローソク足チャートのパターンの識別を試みました。このパターン識別は「明けの明星」といったローソク3本位までのパターン識別はできるようですが、「三角持ち合い」といったより時間幅の広いパターン識別はできないようです。

この「三角持ち合い(又は三角保ち合い)」をPythonで自動的に識別する方法とコードが、以下のYouTubeチュートリアルビデオとして公開されていました。

https://www.youtube.com/watch?v=b5m7BZAHysk

この動画のコメント欄にはPythonコードへのリンクも掲載されています。今回、このコードを利用して「三角持ち合い」の識別を試してみました。コード自体はオリジナルを参照していただくとして、以下に修正上のいくつかのポイントを挙げます。
まず、このコードでは例として為替データを用いていますが、基本的に株価データと形式が同じなので、以前の投稿のように日本の株価データをダウンロードできるコードでデータを取り込み、列名を対象コード向けに変更する等を行います。

# ライブラリのインポート
import numpy as np
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
from scipy.stats import linregress
import matplotlib.pyplot as plt
import yfinance as yf
import pandas_ta as ta
import matplotlib.dates as mdates
from datetime import datetime, timedelta
from pandas_datareader import data as pdr
import mplfinance as mpf
# yahooサイトからデータをダウンロード
# Define the stock symbol and timeframe
symbol = '9254.T'
end_date = datetime.today()
start_date = end_date - timedelta(days=180)  # 6 months before today
yf.pdr_override()
# yahooサイトからデータをダウンロード
stock_data = pdr.get_data_yahoo(symbol, start_date, end_date)
df = stock_data.reset_index().drop(columns=['Adj Close'])
df.columns = ['time','open','high','low','close','volume']

このコードにおける「三角持ち合い」の判定アルゴリズムは、(1)各データ点について、その点がその近傍の点群の中で最も大きい(小さい)場合に、上側(下側)の「ピボット点」とする、(2)上側・下側それぞれのピボット点をデータとする回帰線をひき、その傾きから三角持ち合いかどうかを判定する、というものです。このコードは主として以下の関数からなります。

# ピボットを識別する
def pivotid(df1, l, n1, n2):
    """ データフレームdf1のローソク足データについて、
      位置lの点のn1前と n2後からなる近傍で
       最大(最小)の点をピボットと判定する """
# 三角持ち合いパターンを識別する
def detect_flag(df1, candle, backcandles, window, plot_flag=False):
    """ ピボットの識別がなされている
       データフレームdf1のローソク足データについて、
      位置candleからスタートして長さbackcandlesの系列について
      順次「三角持ち合い」かどうかを判定する """

基本的にはどちらの関数もほぼそのまま利用可能です。ただし、detect_flag()については、オリジナルのコードでは、その引数に株価やピボット点を含むデータフレームが入っていません。しかしこのデータフレームが不要ということはもちろんなく、関数の中のコードでグローバル参照しています。これは元の著者の修正のし忘れと思われるため、引数を加える形で修正しました。
これも前回投稿と同じく、これだけで株の購入を決めることはできませんが、「三角持ち合い」を効率的に判定することができるようになります。