10倍株銘柄のローソク足シグナルをプログラミングで自動察知する

FX投資
この記事は約25分で読めます。

以前の投稿でローソク足のシグナルをまとめましたが、自分の注目している銘柄にシグナルが発生したかどうかを日々チェックしたいということで、プログラミングを使って自動でシグナル発生を察知できるようにしたいと思います。

以前のローソク足のシグナルをまとめた投稿はこちらを参照ください。
ローソク足のパターンまとめ

スポンサーリンク

ローソク足の売買シグナルをプログラミングで自動察知する

必要なモジュールのインポート

例のごとく必要なモジュールをインポートします。
今回使用するモジュールで重要なのは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関数ローソク足タイプ(英語)ローソク足タイプ(日本語)サイン
CDLGAPSIDESIDEWHITEBullish Side By Side White Lines下放れ並び赤買い
CDLGAPSIDESIDEWHITEBearish Side By Side White Lines上放れ並び赤売り
CDLTRISTARBullish Three Stars強気の三ツ星買い
CDLTRISTARBearish Three Stars弱気の三ツ星売り
CDLONNECKBearish On Neck Lineあて首線売り
CDL3WHITESOLDIERSThree White Soldiers赤三兵買い
CDLDARKCLOUDCOVERDark Cloud Cover被せ線売り
CDLHANGINGMANHanging Man首吊り線売り
CDLEVENINGDOJISTAREvening Doji Star三川宵の十字星売り
CDLTASUKIGAPUpside Tasuki Gap上放れたすき線買い
CDLTASUKIGAPDownside Tasuki Gap下放れたすき線売り
CDL3BLACKCROWSThree Black Crows黒三兵(三羽鳥)売り
CDL3STARSINSOUTHThree Star in the South南の三ツ星買い
CDLCONCEALBABYSWALLConcealing Baby Swallow (bull)小燕包み買い
CDLINVERTEDHAMMERInverted hammer金槌(カナヅチ/トンカチ)買い
CDLBREAKAWAYBullish Breakaway強気の放れ三手買い
CDLBREAKAWAYBearish Breakaway弱気の放れ三手売り
CDLUPSIDEGAP2CROWSBearish Upside Gap Two Crows三川上放れ二羽烏売り
CDLTHRUSTINGThrusting Line差込み線売り
CDLSHOOTINGSTARShooting Star流れ星売り
CDLPIERCINGPiercing Pattern切り込み線(切り返し線)買い
CDLIDENTICAL3CROWSIdentical Three Crows雪崩三羽烏(同時三羽)売り
CDLXSIDEGAP3METHODSBullish Upside Gap Three Methods上放れ三法買い
CDLXSIDEGAP3METHODSBearish Downside Gap Three Methods下放れ三法売り
CDLHARAMIBullish Harami強気のはらみ線買い
CDLHARAMIBearish Harami弱気のはらみ線売り
CDLTAKURIDragonfly Doji with very long lower shadowたくり線買い
CDLMORNINGSTARMorning Star三川明けの明星買い
CDLBELTHOLDBullish Belt Hold寄付坊主買い
CDLBELTHOLDBearish Belt Hold大引坊主売り
CDLDOJISTARBullish Doji Star強気の寄り引き同事線買い
CDLDOJISTARBearish Doji Star弱気の寄り引き同事線売り
CDLKICKINGBullish Kicking強気の行き違い線買い
CDLKICKINGBearish Kicking弱気の行き違い線売り
CDLSEPARATINGLINESBullish Separating Line強気の振分け線買い
CDLSEPARATINGLINESBearing Separating Line弱気の振分け線売り
CDLSTALLEDPATTERNBearish Deliberation\n(Stalled Pattern)赤三兵思案星売り
CDLRISEFALL3METHODSRising Three Methods上げ三法買い
CDLRISEFALL3METHODSFalling Three Methods下げ三法売り
CDL3LINESTRIKEBullish Three-Line Strike強気の三手打ち買い
CDL3LINESTRIKEBearish Three-Line Strike弱気の三手打ち売り
CDLHIKKAKEMODModified Hikkake Pattern改善版引っ掛け買い
CDLHAMMERHammerカラカサ線 (たくり線)買い
CDLCOUNTERATTACKBullish Counter Attack強気の出会い線買い
CDLCOUNTERATTACKBearing Counter Attack弱気の出会い線売り
CDLHARAMICROSSBullish Harami Cross強気のはらみ寄せ線買い
CDLHARAMICROSSBearish Harami Cross弱気のはらみ寄せ線売り
CDLUNIQUE3RIVERUnique Three River Bottom変形三川底買い
CDLADVANCEBLOCKAdvance Block赤三兵先詰まり売り
CDL3INSIDEThree Inside Upはらみ上げ買い
CDL3INSIDEThree Inside Downはらみ下げ売り
CDLHIKKAKEBullish Hikkake Pattern強気の引掛けパターン買い
CDLHIKKAKEBearish Hikkake Pattern弱気の引掛けパターン売り
CDLABANDONEDBABYBullish Abandoned Baby強気の捨て子線買い
CDLABANDONEDBABYBearish Abandoned Baby弱気の捨て子線売り
CDLLADDERBOTTOMBullish Ladder Bottomはしご底買い
CDLSTICKSANDWICHStick Sandwich逆差し二点底買い/売り
CDLHOMINGPIGEONBullish Homing Pigeon小鳩返し買い
CDLINNECKBearish In Neck Line入り首線売り
CDLMATCHINGLOWMatching Low二点底買い
CDLMORNINGDOJISTARMorning Doji Star三川明けの十字星買い
CDL2CROWSTwo Crows二羽烏売り
CDL3OUTSIDEThree Outside Up包み上げ買い
CDL3OUTSIDEThree Outside Down包み下げ売り
CDLEVENINGSTAREvening Star三川宵の明星売り
CDLENGULFINGBullish Engulfing強気の抱き線(包み線)買い
CDLENGULFINGBearish Engulfing弱気の抱き線(包み線)売り
CDLMATHOLDBullish Mat Hold強気の押え込み線買い
CDLMATHOLDBearish 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 大引坊主 売り
===============================

コメント

  1. […] FX、株価などの値動きを見る上で、テクニカル指標はすごく重要です。以前の投稿ではローソク足のチャートをプログラムを使ってシグナルをチェックしましたが、今回は移動平均線などのテクニカル指標をPythonのプログラムで描いて、シグナルをチェックしていきたいと思います。ローソク足の投稿はこちらを御覧ください10倍株銘柄のローソク足シグナルをプログラミングで自動察知する […]

タイトルとURLをコピーしました