レジサポのバッファの目安

レジスタンスの「少し」上、サポートの「少し」下の「少し」ってどのくらい?

レジスタンスライン、サポートラインのバッファはどのくらいがよいのかということを考えてみる。

相場の格言に「鬼より怖い一文新値」というのがある。一文は最小単位の貨幣。FXなら1銭とか1pipsといったところだろうか。

ブレイクアウトを狙ってエントリーするときやストップを置くとき、ダマシに遭わないためにもレジスタンスライン、サポートラインを「少し」超えたところをエントリーポイント、ストップポイントとするのがよい、とよく言われる。

だが、その「少し」というのが具体的にどのくらいなのか、説明してくれる人はあまりいない。例え説明してくれる人がいても、大抵はその人の個人的な経験に基づくものであって、取引する銘柄や見ている足の種類によっても違ってくるのであるから、あまり信用はできない。

ヒゲの長さをバッファの目安とする

ぶっちゃけると「正解はない、終了」ということになるのだが、それでは身も蓋もないので、簡単に目安を見つける方法を考えてみた。

バッファは値幅だが、「終値で超えたら」という考え方もある。高値、安値でレジスタンスライン、サポートラインを一時的に超えても終値では超えなかった、ダマシだった、ということがよくある。それで「終値で超えたら」というのをダマシを避ける方法の一つとするわけだ。

すると、高値、安値と終値の差、つまり上ヒゲ、下ヒゲがどのくらいの値幅であるか分かれば、その値幅をも超えるなら終値でも超えるだろうという見当はつく。

ただ、上ヒゲ、下ヒゲの値幅というのはやはり取引する銘柄や見ている足の種類によって違ってくるので、もっと一般的な方法を考えたい。そこで思いついたのがランダムウォークで動くデータを大量に作って上ヒゲ、下ヒゲが高値マイナス安値のレンジのどのくらいの割合になるか調べてみようということだ。

レンジは例えばテクニカル指標のATRを使えばいい。割合さえ分かっていればすぐ計算できる。

前置きが長くなったが、Pythonを使って、その割合を調べてみる。一応、コードも参考に書くが、大事なのは結果だけなのでコードを理解する必要はない。

サンプルコード

①1分足のランダムウォークのデータを1年分作る。

import numpy as np
import pandas as pd
# 再現性を得るため、ここでは乱数のシードを固定する。
np.random.seed(seed=0)
# 平均0.0、標準偏差1.0のランダムデータを1秒に1個として1年分作成する。
rnd = np.random.normal(0.0, 1.0, 60*60*24*365)
# データの累積和を求めてランダムウォークデータとする。
data = np.cumsum(rnd)
# ランダムウォークデータを2021年1月1日から1秒単位の時系列データに変換する。
index = pd.date_range('1/1/2021', periods=60*60*24*365, freq='S')
s1 = pd.Series(data, index=index)
# 1分足のランダムウォークデータを作成する。
m1 = s1.resample('1min').ohlc()

四本値始値終値の大きい方、小さい方を求める。

o = np.array(m1.open)  # 始値
h = np.array(m1.high)  # 高値
l = np.array(m1.low)  # 安値
c = np.array(m1.close)  # 終値
max_oc = np.fmax(o, c)  # 始値、終値の大きい方
min_oc = np.fmin(o, c)  # 始値、終値の小さい方

③レンジ、実体、上ヒゲ、下ヒゲの値幅を求める。

high_low_range = h - l  # レンジ
real_body = max_oc - min_oc  # 実体
upper_shadow = h - max_oc  # 上ヒゲ
lower_shodow = min_oc - l  # 下ヒゲ

④レンジ、実体、上ヒゲ、下ヒゲの値幅の平均を出力する。

print("レンジの平均 =", high_low_range.mean())
print("実体の平均 =", real_body.mean())
print("上ヒゲの平均 =", upper_shadow.mean())
print("下ヒゲの平均 =", lower_shodow.mean())
レンジの平均 = 11.146347709890597
実体の平均 = 6.1274280719479375
上ヒゲの平均 = 2.507315791275367
下ヒゲの平均 = 2.5116038466672874

⑤実体、上ヒゲ、下ヒゲのレンジに対する割合を出力する

print("実体の割合 =", real_body.mean()/high_low_range.mean())
print("上ヒゲの割合 =", upper_shadow.mean()/high_low_range.mean())
print("下ヒゲの割合 =", lower_shodow.mean()/high_low_range.mean())
実体の割合 = 0.5497251863505772
上ヒゲの割合 = 0.22494505433833958
下ヒゲの割合 = 0.22532975931108282

バッファの目安は「ATR × 0.225」

乱数で生成したデータなので多少の誤差はあるが、ヒゲの割合はレンジの0.225くらいと見ていいだろう。先程も書いたが、レンジはテクニカル指標のATRを使えばいい。そのATRに0.225を掛ければ、それがバッファの目安である。

例えば下のサイトでドル円日足のATR(14)を見ると(2022/03/11終値時点)

0.7182

となっている。

https://jp.investing.com/currencies/usd-jpy-technical

これに0.225を掛けると

0.7182 × 0.225 = 0.161595

となる。15銭(15pips)くらいで、大体そんな感じかなあといったところ。