概要
テクニカル分析を行うためには、サポート(レジスタンス)ラインは必須
でも意外と誰も作ってない....?
ように見えたので、オリジナルで生成する処理を書いてみました。
前提データ
こんなデータが既にあるとして話を進めます。
(200行以上)
python
> csv_path = 'hoge.csv'
> pd.read_csv(csv_path, index_col=0)
close high low open
time
2019-08-29 01:30:00 129.310 129.420 129.302 129.420
2019-08-29 01:40:00 129.258 129.324 129.254 129.312
2019-08-29 01:50:00 129.229 129.264 129.221 129.256
2019-08-29 02:00:00 129.260 129.262 129.184 129.232
2019-08-29 02:10:00 129.264 129.295 129.241 129.258
...
ソースコード
python
import matplotlib
import matplotlib.pyplot as plt
import mplfinance.original_flavor as mpf
import numpy as np
import pandas as pd
csv_path = 'hoge.csv'
candles = pd.read_csv(csv_path, index_col=0)[-200:].copy()
# INFO: ちょうどいい感じにサポートラインの支点を作る(※詳細は後述)
support_points = (pd.Series.rolling(candles.low, window=7).min() == candles.low) \
& (candles.low.shift(1) > candles.low) \
& (candles.low < candles.low.shift(-1))
# サポートラインの支点から、次の支点までの間は同じ価格をsupportラインとする
candles.loc[support_points, 'support'] = candles[support_points].low
candles['support'] = candles.support.fillna(method='ffill')
# - - - - - - - - - - - - - - - - - - - - - - - -
# 以降は単なる描画処理
# - - - - - - - - - - - - - - - - - - - - - - - -
figure, (axis1) = plt.subplots(nrows=1, ncols=1, figsize=(20, 8), dpi=200)
mpf.candlestick2_ohlc(
axis1,
opens = candles.open.values,
highs = candles.high.values,
lows = candles.low.values,
closes = candles.close.values,
width=0.6, colorup='#77d879', colordown='#db3f3f'
)
axis1.scatter(x=candles.index.values, y=candles.support.values, label='support', c='orangered', marker= '_', s=3)
# グラフの見た目を整形
### X軸の見た目を整える
xticks_number = 12 # 12本(60分)刻みに目盛りを書く
xticks_index = range(0, len(candles), xticks_number)
xticks_display = [candles.index.values[i][:16] for i in xticks_index] # 時間を切り出すため、先頭12文字目から取る
# axis1を装飾
plt.sca(axis1)
plt.xticks(xticks_index, xticks_display, rotation=30)
plt.show()
解説
計算方法としては、
- 候補抽出1
連続する3本分の足をセットとして考え、真ん中の足の安値が両脇の足の安値より低くなっている点を絞り込む - 候補抽出2
1で絞り込んだ結果からさらに、過去直近7本分の安値の中で最安値となっている点だけを残す
(この結果を「最安値配列」とする) - サポートライン生成
最安値配列の隙間は.fillna(method='ffill')
で埋める
結果
うーん...まぁそこそこか
注意点
- 見ての通り、下降トレンドのときは使い物にならない
使うなら上昇トレンドか、レンジ相場か...? - 単独では特に役に立たない
関連記事
-
scipyでピーク値の抽出
ピーク値を上手く使えばサポート/レジスタンスラインを引けそう -
Pythonでサポートラインとレジスタンスラインを引いてみる
見た感じ適切なラインが引けているように見えないので、使う予定はなさそう
ただ、この記事に掲載されているsavgol_filter関数を使い終値を平準化して、ローカルのミニマとマキシマを求める方法
というのはなかなか興味深いので、試してみたい気持ちはある...