3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Python3] FXチャートにサポートライン生成を試みる

Last updated at Posted at 2019-12-28

概要

テクニカル分析を行うためには、サポート(レジスタンス)ラインは必須
でも意外と誰も作ってない....?
ように見えたので、オリジナルで生成する処理を書いてみました。

前提データ

こんなデータが既にあるとして話を進めます。
(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')で埋める

結果

image.png

うーん...まぁそこそこか

注意点

  • 見ての通り、下降トレンドのときは使い物にならない
    使うなら上昇トレンドか、レンジ相場か...?
  • 単独では特に役に立たない

関連記事

  • scipyでピーク値の抽出
    ピーク値を上手く使えばサポート/レジスタンスラインを引けそう

  • Pythonでサポートラインとレジスタンスラインを引いてみる
    見た感じ適切なラインが引けているように見えないので、使う予定はなさそう
    ただ、この記事に掲載されている

    savgol_filter関数を使い終値を平準化して、ローカルのミニマとマキシマを求める方法

    というのはなかなか興味深いので、試してみたい気持ちはある...

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?