ダーシャのブログ

ゆるゆる生きてていいじゃない

pythonで仮想通貨チャートから赤三兵を見つける(実装シリーズ)

jupyter notebookで仮想通貨チャートを表示して、酒田五法の赤三兵シグナルを見つけるプログラムを書いた。qiitaや個人サイトを参考にしたが、最新の環境で動くプログラムが出来た。今回はあくまで過去のチャートから検出するだけである。

実行環境

  • jupyter notebook
  • numpy
  • pandas
  • matplotlib
  • mplfinance

anacondaを入れれば簡単に構築できる。mplfinanceはpip3 install mplfinanceでインストールする。

ada/jpyのチャートを使用した

カルダノは未来を変えると俺は信じてる。

コインテレグラフよりcsvファイルをダウンロードしてきた。

チャートを表示させる

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import mplfinance as mpf
%matplotlib inline

df = pd.read_csv('ada_jpy_charts.csv', index_col=0, parse_dates=True)
#print(df)
df = df.reindex(columns=['open', 'high', 'low', 'close', 'volume','weighted'])
df.columns = ['Open', 'High', 'Low', 'Close', 'Volume','Weighted']
#df.head(3)

#mpf.plot(df, type='candle', figratio=(18,9),volume=True, mav=(5, 25), style='yahoo')

ada/jpy chart

赤三兵を検出する

3日前までの始値終値を入れる

df['Close1'] = df['Close'].shift(1)
df['Close2'] = df['Close'].shift(2)
df['Close3'] = df['Close'].shift(3)
df['Open1'] = df['Open'].shift(1)
df['Open2'] = df['Open'].shift(2)
df['Open3'] = df['Open'].shift(3)

ポリンジャーバンドを作成する

from pyti.bollinger_bands import upper_bollinger_band as bb_up
from pyti.bollinger_bands import middle_bollinger_band as bb_mid
from pyti.bollinger_bands import lower_bollinger_band as bb_low

data = df['Close'].values.tolist()
period = 20
bb_up = bb_up(data,period)
bb_mid = bb_mid(data,period)
bb_low = bb_low(data,period)
df['bb_up'] = bb_up
df['bb_mid'] = bb_mid
df['bb_low'] = bb_low

apd = mpf.make_addplot(df[['bb_up', 'bb_mid', 'bb_low']])
mpf.plot(df, type='candle', addplot=apd, volume=True,style='yahoo',savefig='band_chart')

ポリンジャーバンド

赤三兵検出する

# Close3 < avg(bb_low+bb_mid)
df['rule_1'] = 0
rule_1_mask = df['Close3'] < ((df['bb_low']+df['bb_mid'])/2)
df['rule_1'][rule_1_mask] = 1

# 陽線3本連続
df['rule_2'] = 0
rule_2_mask = (df['Open'] - df['Close'] < 0) & (df['Open1'] - df['Close1'] < 0) & (df['Open2'] - df['Close2'] < 0)
df['rule_2'][rule_2_mask] = 1

# 該当するレコード
df[(df['rule_1'] == 1.0) & (df['rule_2'] == 1.0)]

start_date ='2020-09-28 09:09:00'
end_date = '2020-11-22 09:11:00'
candle_temp = df.loc[start_date:end_date]
apd = mpf.make_addplot(candle_temp[['bb_up', 'bb_mid', 'bb_low']])
mpf.plot(candle_temp, type='candle', addplot=apd, volume=True,style='yahoo')

赤三兵

終わりに

ネットのコピペだが、なんとか表示が出来た。酒田五法にはもっと色んなシグナルがあるのでそれを検出するのも面白い。

次に機械学習で酒田五法を元にした株価予測をしたい。