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