以前の投稿でローソク足のシグナルをまとめましたが、自分の注目している銘柄にシグナルが発生したかどうかを日々チェックしたいということで、プログラミングを使って自動でシグナル発生を察知できるようにしたいと思います。
以前のローソク足のシグナルをまとめた投稿はこちらを参照ください。
ローソク足のパターンまとめ
ローソク足の売買シグナルをプログラミングで自動察知する
必要なモジュールのインポート
例のごとく必要なモジュールをインポートします。
今回使用するモジュールで重要なのはTA-Libというテクニカル指標を簡単に取得できるpythonのモジュールになります。
このモジュールのインストールするのは若干手こずるかもしれません。。。ただ、先人たちが割とネット上に解決策を書いてくれているので、そちらを参考にしてみてください。
今回はインストールできたことが前提ですすみます。
import pickle
import pandas as pd
import numpy as np
import talib
import datetime
ローソク足のシグナルのマスターを取得
ローソク足のシグナルのマスターを取得してデータフレームにしたいと思います。
以前の投稿のローソク足のパターンまとめを基にエクセルやcsvにし、それを読み込んでください。
私はエクセル化しているので、読み込むと以下のコード読み込みます。
candle_master = pd.read_excel('candle_chart_master.xlsx',header = 1)
candle_master.head()
すると、以下のようなデータフレームになります。

このデータフレームを以下のコードで、少し綺麗にしつつ、必要なローソク足の名前と買いシグナル、売りシグナルの項目のみにします。
candle_master = pd.read_excel('candle_chart_master.xlsx',header = 1)
candle_master = candle_master.reset_index(drop=True)
#売りシグナルのTA-Lib関数がnanになっているので埋める
for i,v in enumerate(candle_master['TA-Lib関数']):
if v != v:
candle_master.iloc[i,7] = candle_master.iloc[i-1,7]
#不要なnanの行は削除
candle_master = candle_master[candle_master['ローソク足タイプ(英語)']==candle_master['ローソク足タイプ(英語)']]
#不要なタイトル行は削除
candle_master = candle_master[candle_master['TA-Lib関数']!='TA-Lib関数']
#TA-Lib関数の文字列を編集
candle_master['TA-Lib関数'] = [i.split('= ')[1] for i in candle_master['TA-Lib関数']]
candle_master['TA-Lib関数'] = [i.split('(')[0] for i in candle_master['TA-Lib関数']]
#nanの箇所を'-'で埋める
candle_master = candle_master.fillna('-').set_index('TA-Lib関数')
#不要な売買シグナルは削除
unnecessary_signal = list(candle_master[candle_master['サイン']=='-'].index)
candle_master = candle_master.drop(unnecessary_signal)
#必要な項目だけにする
candle_master = candle_master.drop(['No','ローソク足形状','説明','TA-Lib関数名'],axis=1)
#買いシグナルと売りシグナルでmasterを分ける
bullish_candle_master = candle_master[candle_master['サイン']=='買い']
bearish_candle_master = candle_master[candle_master['サイン']=='売り']
すると以下のようなTA-Libの関数名とローソク足名、売買シグナル(サイン)のみのデータフレームが作成できます。
TA-Lib関数名が買いと売りで重複するものがあるので、買いシグナル用と売りシグナル用で分けています。


株価データの取得
次に株価のデータを取得します。
株価データの取得方法は以前の投稿のこちらを参考にしてください。
【Python】スクレイピングで株価データを取得する
私はpickleでデータを保管しているので、保存していたデータをロードしてデータフレームにします。今回は7042 アクセスグループのデータをサンプルとして利用します。
load_path = 'kabuka/7042-アクセスグループ.pkl'
with open(load_path, mode='rb') as f:
d = pickle.load(f)
d.head()
以下のようなデータが得られている想定です。

ローソク足パターンをTA-Libで取得する
TA-Libの使い方のdocumentationはこちらにあります。
TA-Lib documentation
ページを見ると以下のように書いているかと思いますが、最初はよくわらかないと思います。
integer = CDL2CROWS(open, high, low, close)
open, close, low, highはそれぞれ「始値」「終値」「安値」「高値」であることはわかると思います。重要な点はTA-Libが受け取る引数はnumpy arrayだということです。
したがって、先程のデータフレームの「始値」「終値」「安値」「高値」の列をnumpy arrayにします。
2019/06/22更新:talib version ‘0.4.17’で実施したところpandasのSeriesでも受け取ってくれるようでした。1年くらい前はnumpyのみだったと記憶があり。。。
なので、下記のようにnumpyでも、pandasのままでもどちらでも良いとおもいます。outputも入力と一致する形式で返ってきます。
#numpyの場合
o = np.array(d['始値'])
c = np.array(d['終値'])
l = np.array(d['安値'])
h = np.array(d['高値'])
#pandasの場合
o = d['始値']
c = d['終値']
l = d['安値']
h = d['高値']
次に、関数の前にtalibというのをつけてあげる必要があります。
array = talib.CDL2CROWS(o, h, l, c)
上記のように記述するとarrayにはnumpy arrayが返ってきます。
これをデータフレームに入れていきます。
talibのローソク足のパターンを検出する関数は全部で61種類あるので、ひとまずすべての項目を入れてデータフレームにします。
df = d.copy()
df['CDL2CROWS'] = talib.CDL2CROWS(o, h, l, c)
df['CDL3BLACKCROWS'] = talib.CDL3BLACKCROWS(o, h, l, c)
df['CDL3INSIDE'] = talib.CDL3INSIDE(o, h, l, c)
df['CDL3LINESTRIKE'] = talib.CDL3LINESTRIKE(o, h, l, c)
df['CDL3OUTSIDE'] = talib.CDL3OUTSIDE(o, h, l, c)
df['CDL3STARSINSOUTH'] = talib.CDL3STARSINSOUTH(o, h, l, c)
df['CDL3WHITESOLDIERS'] = talib.CDL3WHITESOLDIERS(o, h, l, c)
df['CDLABANDONEDBABY'] = talib.CDLABANDONEDBABY(o, h, l, c)
df['CDLADVANCEBLOCK'] = talib.CDLADVANCEBLOCK(o, h, l, c)
df['CDLBELTHOLD'] = talib.CDLBELTHOLD(o, h, l, c)
df['CDLBREAKAWAY'] = talib.CDLBREAKAWAY(o, h, l, c)
df['CDLCLOSINGMARUBOZU'] = talib.CDLCLOSINGMARUBOZU(o, h, l, c)
df['CDLCONCEALBABYSWALL'] = talib.CDLCONCEALBABYSWALL(o, h, l, c)
df['CDLCOUNTERATTACK'] = talib.CDLCOUNTERATTACK(o, h, l, c)
df['CDLDARKCLOUDCOVER'] = talib.CDLDARKCLOUDCOVER(o, h, l, c)
df['CDLDOJI'] = talib.CDLDOJI(o, h, l, c)
df['CDLDOJISTAR'] = talib.CDLDOJISTAR(o, h, l, c)
df['CDLDRAGONFLYDOJI'] = talib.CDLDRAGONFLYDOJI(o, h, l, c)
df['CDLENGULFING'] = talib.CDLENGULFING(o, h, l, c)
df['CDLEVENINGDOJISTAR'] = talib.CDLEVENINGDOJISTAR(o, h, l, c)
df['CDLEVENINGSTAR'] = talib.CDLEVENINGSTAR(o, h, l, c)
df['CDLGAPSIDESIDEWHITE'] = talib.CDLGAPSIDESIDEWHITE(o, h, l, c)
df['CDLGRAVESTONEDOJI'] = talib.CDLGRAVESTONEDOJI(o, h, l, c)
df['CDLHAMMER'] = talib.CDLHAMMER(o, h, l, c)
df['CDLHANGINGMAN'] = talib.CDLHANGINGMAN(o, h, l, c)
df['CDLHARAMI'] = talib.CDLHARAMI(o, h, l, c)
df['CDLHARAMICROSS'] = talib.CDLHARAMICROSS(o, h, l, c)
df['CDLHIGHWAVE'] = talib.CDLHIGHWAVE(o, h, l, c)
df['CDLHIKKAKE'] = talib.CDLHIKKAKE(o, h, l, c)
df['CDLHIKKAKEMOD'] = talib.CDLHIKKAKEMOD(o, h, l, c)
df['CDLHOMINGPIGEON'] = talib.CDLHOMINGPIGEON(o, h, l, c)
df['CDLIDENTICAL3CROWS'] = talib.CDLIDENTICAL3CROWS(o, h, l, c)
df['CDLINNECK'] = talib.CDLINNECK(o, h, l, c)
df['CDLINVERTEDHAMMER'] = talib.CDLINVERTEDHAMMER(o, h, l, c)
df['CDLKICKING'] = talib.CDLKICKING(o, h, l, c)
df['CDLKICKINGBYLENGTH'] = talib.CDLKICKINGBYLENGTH(o, h, l, c)
df['CDLLADDERBOTTOM'] = talib.CDLLADDERBOTTOM(o, h, l, c)
df['CDLLONGLEGGEDDOJI'] = talib.CDLLONGLEGGEDDOJI(o, h, l, c)
df['CDLLONGLINE'] = talib.CDLLONGLINE(o, h, l, c)
df['CDLMARUBOZU'] = talib.CDLMARUBOZU(o, h, l, c)
df['CDLMATCHINGLOW'] = talib.CDLMATCHINGLOW(o, h, l, c)
df['CDLMATHOLD'] = talib.CDLMATHOLD(o, h, l, c)
df['CDLMORNINGDOJISTAR'] = talib.CDLMORNINGDOJISTAR(o, h, l, c)
df['CDLMORNINGSTAR'] = talib.CDLMORNINGSTAR(o, h, l, c)
df['CDLONNECK'] = talib.CDLONNECK(o, h, l, c)
df['CDLPIERCING'] = talib.CDLPIERCING(o, h, l, c)
df['CDLRICKSHAWMAN'] = talib.CDLRICKSHAWMAN(o, h, l, c)
df['CDLRISEFALL3METHODS'] = talib.CDLRISEFALL3METHODS(o, h, l, c)
df['CDLSEPARATINGLINES'] = talib.CDLSEPARATINGLINES(o, h, l, c)
df['CDLSHOOTINGSTAR'] = talib.CDLSHOOTINGSTAR(o, h, l, c)
df['CDLSHORTLINE'] = talib.CDLSHORTLINE(o, h, l, c)
df['CDLSPINNINGTOP'] = talib.CDLSPINNINGTOP(o, h, l, c)
df['CDLSTALLEDPATTERN'] = talib.CDLSTALLEDPATTERN(o, h, l, c)
df['CDLSTICKSANDWICH'] = talib.CDLSTICKSANDWICH(o, h, l, c)
df['CDLTAKURI'] = talib.CDLTAKURI(o, h, l, c)
df['CDLTASUKIGAP'] = talib.CDLTASUKIGAP(o, h, l, c)
df['CDLTHRUSTING'] = talib.CDLTHRUSTING(o, h, l, c)
df['CDLTRISTAR'] = talib.CDLTRISTAR(o, h, l, c)
df['CDLUNIQUE3RIVER'] = talib.CDLUNIQUE3RIVER(o, h, l, c)
df['CDLUPSIDEGAP2CROWS'] = talib.CDLUPSIDEGAP2CROWS(o, h, l, c)
df['CDLXSIDEGAP3METHODS'] = talib.CDLXSIDEGAP3METHODS(o, h, l, c)
df.head()
一旦、全部の関数をいれましたが、売買シグナルに関係がある項目だけにします。
対象とするcandleは以下になります。
TA-Lib関数 | ローソク足タイプ(英語) | ローソク足タイプ(日本語) | サイン |
---|---|---|---|
CDLGAPSIDESIDEWHITE | Bullish Side By Side White Lines | 下放れ並び赤 | 買い |
CDLGAPSIDESIDEWHITE | Bearish Side By Side White Lines | 上放れ並び赤 | 売り |
CDLTRISTAR | Bullish Three Stars | 強気の三ツ星 | 買い |
CDLTRISTAR | Bearish Three Stars | 弱気の三ツ星 | 売り |
CDLONNECK | Bearish On Neck Line | あて首線 | 売り |
CDL3WHITESOLDIERS | Three White Soldiers | 赤三兵 | 買い |
CDLDARKCLOUDCOVER | Dark Cloud Cover | 被せ線 | 売り |
CDLHANGINGMAN | Hanging Man | 首吊り線 | 売り |
CDLEVENINGDOJISTAR | Evening Doji Star | 三川宵の十字星 | 売り |
CDLTASUKIGAP | Upside Tasuki Gap | 上放れたすき線 | 買い |
CDLTASUKIGAP | Downside Tasuki Gap | 下放れたすき線 | 売り |
CDL3BLACKCROWS | Three Black Crows | 黒三兵(三羽鳥) | 売り |
CDL3STARSINSOUTH | Three Star in the South | 南の三ツ星 | 買い |
CDLCONCEALBABYSWALL | Concealing Baby Swallow (bull) | 小燕包み | 買い |
CDLINVERTEDHAMMER | Inverted hammer | 金槌(カナヅチ/トンカチ) | 買い |
CDLBREAKAWAY | Bullish Breakaway | 強気の放れ三手 | 買い |
CDLBREAKAWAY | Bearish Breakaway | 弱気の放れ三手 | 売り |
CDLUPSIDEGAP2CROWS | Bearish Upside Gap Two Crows | 三川上放れ二羽烏 | 売り |
CDLTHRUSTING | Thrusting Line | 差込み線 | 売り |
CDLSHOOTINGSTAR | Shooting Star | 流れ星 | 売り |
CDLPIERCING | Piercing Pattern | 切り込み線(切り返し線) | 買い |
CDLIDENTICAL3CROWS | Identical Three Crows | 雪崩三羽烏(同時三羽) | 売り |
CDLXSIDEGAP3METHODS | Bullish Upside Gap Three Methods | 上放れ三法 | 買い |
CDLXSIDEGAP3METHODS | Bearish Downside Gap Three Methods | 下放れ三法 | 売り |
CDLHARAMI | Bullish Harami | 強気のはらみ線 | 買い |
CDLHARAMI | Bearish Harami | 弱気のはらみ線 | 売り |
CDLTAKURI | Dragonfly Doji with very long lower shadow | たくり線 | 買い |
CDLMORNINGSTAR | Morning Star | 三川明けの明星 | 買い |
CDLBELTHOLD | Bullish Belt Hold | 寄付坊主 | 買い |
CDLBELTHOLD | Bearish Belt Hold | 大引坊主 | 売り |
CDLDOJISTAR | Bullish Doji Star | 強気の寄り引き同事線 | 買い |
CDLDOJISTAR | Bearish Doji Star | 弱気の寄り引き同事線 | 売り |
CDLKICKING | Bullish Kicking | 強気の行き違い線 | 買い |
CDLKICKING | Bearish Kicking | 弱気の行き違い線 | 売り |
CDLSEPARATINGLINES | Bullish Separating Line | 強気の振分け線 | 買い |
CDLSEPARATINGLINES | Bearing Separating Line | 弱気の振分け線 | 売り |
CDLSTALLEDPATTERN | Bearish Deliberation\n(Stalled Pattern) | 赤三兵思案星 | 売り |
CDLRISEFALL3METHODS | Rising Three Methods | 上げ三法 | 買い |
CDLRISEFALL3METHODS | Falling Three Methods | 下げ三法 | 売り |
CDL3LINESTRIKE | Bullish Three-Line Strike | 強気の三手打ち | 買い |
CDL3LINESTRIKE | Bearish Three-Line Strike | 弱気の三手打ち | 売り |
CDLHIKKAKEMOD | Modified Hikkake Pattern | 改善版引っ掛け | 買い |
CDLHAMMER | Hammer | カラカサ線 (たくり線) | 買い |
CDLCOUNTERATTACK | Bullish Counter Attack | 強気の出会い線 | 買い |
CDLCOUNTERATTACK | Bearing Counter Attack | 弱気の出会い線 | 売り |
CDLHARAMICROSS | Bullish Harami Cross | 強気のはらみ寄せ線 | 買い |
CDLHARAMICROSS | Bearish Harami Cross | 弱気のはらみ寄せ線 | 売り |
CDLUNIQUE3RIVER | Unique Three River Bottom | 変形三川底 | 買い |
CDLADVANCEBLOCK | Advance Block | 赤三兵先詰まり | 売り |
CDL3INSIDE | Three Inside Up | はらみ上げ | 買い |
CDL3INSIDE | Three Inside Down | はらみ下げ | 売り |
CDLHIKKAKE | Bullish Hikkake Pattern | 強気の引掛けパターン | 買い |
CDLHIKKAKE | Bearish Hikkake Pattern | 弱気の引掛けパターン | 売り |
CDLABANDONEDBABY | Bullish Abandoned Baby | 強気の捨て子線 | 買い |
CDLABANDONEDBABY | Bearish Abandoned Baby | 弱気の捨て子線 | 売り |
CDLLADDERBOTTOM | Bullish Ladder Bottom | はしご底 | 買い |
CDLSTICKSANDWICH | Stick Sandwich | 逆差し二点底 | 買い/売り |
CDLHOMINGPIGEON | Bullish Homing Pigeon | 小鳩返し | 買い |
CDLINNECK | Bearish In Neck Line | 入り首線 | 売り |
CDLMATCHINGLOW | Matching Low | 二点底 | 買い |
CDLMORNINGDOJISTAR | Morning Doji Star | 三川明けの十字星 | 買い |
CDL2CROWS | Two Crows | 二羽烏 | 売り |
CDL3OUTSIDE | Three Outside Up | 包み上げ | 買い |
CDL3OUTSIDE | Three Outside Down | 包み下げ | 売り |
CDLEVENINGSTAR | Evening Star | 三川宵の明星 | 売り |
CDLENGULFING | Bullish Engulfing | 強気の抱き線(包み線) | 買い |
CDLENGULFING | Bearish Engulfing | 弱気の抱き線(包み線) | 売り |
CDLMATHOLD | Bullish Mat Hold | 強気の押え込み線 | 買い |
CDLMATHOLD | Bearish Mat Hold | 弱気の押え込み線 | 売り |
少しややこしいですが、以下のようなコードでデータフレームを上記の項目だけにします。
candle_col = ['日付','始値','高値','安値','終値','出来高','終値調整']
candle_col.extend(list(set(list(candle_master.index))))
df = df.loc[:,candle_col]
すると以下のようなデータフレームが得られていると思います。

売買シグナルの取得
TA-Libではシグナルが発生したときの足が陽線であれば100、陰線であれば-100という数字が入っているようです。(※明確にそのように書いているわけではないので推測です)
試しに三川明けの明星(MORNINGSTAR)があるかどうかを探してみます。
三川明けの明星は基本的に陽線で発生するので、CDLMORNINGSTARの列が100になっているかどうかで判断します。
df[df['CDLMORNINGSTAR']==100]

本日の売買シグナルの発生有無の確認
最終的にやりたいことは、直近の日付で何か売買シグナルが発生しているかを確認することなので、直近の日付のすべての売買シグナルをチェックしていきます。
#買いシグナルの発生有無
bullish_signal_col = [col for col in bullish_candle_master.index if df.loc[df.index[-1],col] == 100]
#売りシグナルの発生有無
bearish_signal_col = [col for col in bearish_candle_master.index if df.loc[df.index[-1],col] == -100]
#買いシグナルが発生していれば表示
if len(bullish_signal_col) != 0:
for s in bullish_signal_col:
print(s,bullish_candle_master.loc[s,'ローソク足タイプ(日本語)'],bullish_candle_master.loc[s,'サイン'])
#売りシグナルが発生していれば表示
elif len(bearish_signal_col) != 0:
for s in bearish_signal_col:
print(s,bearish_candle_master.loc[s,'ローソク足タイプ(日本語)'],bearish_candle_master.loc[s,'サイン'])
#買い、売りどちらもシグナルがない場合
else:
print('シグナルなし')
結果はこちらになります。
CDLBELTHOLD 寄付坊主 買い
CDLENGULFING 強気の抱き線(包み線) 買い
CDLMORNINGSTAR 三川明けの明星 買い
10倍株名柄をまとめてシグナルをチェックする
以前の投稿(下記リンク参照)で紹介した10倍株銘柄の本日時点でのローソク足シグナルが出ているかどうかをまとめてチェックしてみました。
「いま仕込んでおくべき10倍株教えます!」に従って銘柄検索してみた
結果は以下になります。
次回は、移動平均などのテクニカル指標をチェックししていきたいと思います。
===============================
3180 ビューティガレージ
シグナルなし
===============================
3134 Hamee
シグナルなし
===============================
1431 Q-LibWork
シグナルなし
===============================
3985 テモナ
シグナルなし
===============================
3457 ハウスドゥ
シグナルなし
===============================
7042 アクセスグループ
CDLBELTHOLD 寄付坊主 買い
CDLENGULFING 強気の抱き線(包み線) 買い
CDLMORNINGSTAR 三川明けの明星 買い
===============================
3674 オークファン
CDLBELTHOLD 寄付坊主 買い
===============================
6175 ネットマーケティング
シグナルなし
===============================
6038 イード
CDLBELTHOLD 寄付坊主 買い
CDL3OUTSIDE 包み上げ 買い
===============================
6171 土木管理総合試験所
シグナルなし
===============================
6558 クックビズ
シグナルなし
===============================
6577 ベストワンドット
CDLHIKKAKE 弱気の引掛けパターン 売り
===============================
3566 ユニネク
CDLHANGINGMAN 首吊り線 売り
CDLHIKKAKE 弱気の引掛けパターン 売り
===============================
3696 セレス
CDLHARAMI 強気のはらみ線 買い
===============================
3474 G-FAC
CDLHANGINGMAN 首吊り線 売り
===============================
6048 デザインワン
CDLHARAMI 強気のはらみ線 買い
===============================
3695 GMOリサーチ
CDLHIKKAKE 強気の引掛けパターン 買い
===============================
6044 三機サービス
シグナルなし
===============================
3189 ANAP
シグナルなし
===============================
6199 セラク
シグナルなし
===============================
3965 CAP
CDLHARAMICROSS 強気のはらみ寄せ線 買い
CDLHARAMI 強気のはらみ線 買い
CDLHOMINGPIGEON 小鳩返し 買い
===============================
9270 SOU
シグナルなし
===============================
6036 KeePer技研
CDLHARAMI 強気のはらみ線 買い
CDLHOMINGPIGEON 小鳩返し 買い
===============================
6087 アビスト
シグナルなし
===============================
7813 プラッツ
CDLHANGINGMAN 首吊り線 売り
===============================
2424 ブラス
CDLSHOOTINGSTAR 流れ星 売り
===============================
3276 日本管理
シグナルなし
===============================
3172 ティーライフ
シグナルなし
===============================
6061 ユニバ園芸
CDLIDENTICAL3CROWS 雪崩三羽烏(同時三羽) 売り
===============================
3986 ビーブレイク
シグナルなし
===============================
2970 グッドライフC
CDLINVERTEDHAMMER 金槌(カナヅチ/トンカチ) 買い
===============================
3480 ジェイ・エス・ビー
CDLHARAMI 弱気のはらみ線 売り
===============================
3496 アズーム
シグナルなし
===============================
2820 やまみ
CDLHIKKAKE 強気の引掛けパターン 買い
===============================
3992 ニーズウェル
シグナルなし
===============================
3997 トレードワークス
CDLBELTHOLD 大引坊主 売り
===============================
コメント
[…] FX、株価などの値動きを見る上で、テクニカル指標はすごく重要です。以前の投稿ではローソク足のチャートをプログラムを使ってシグナルをチェックしましたが、今回は移動平均線などのテクニカル指標をPythonのプログラムで描いて、シグナルをチェックしていきたいと思います。ローソク足の投稿はこちらを御覧ください10倍株銘柄のローソク足シグナルをプログラミングで自動察知する […]