シストレ
前回、FXの自動トレードを作ったときは、トレンドが発生した時も逆張りをしたので無駄なエントリー回数が多くなってしまいました。今回はトレンドが発生した時にエントリーをしないように改良したいと思います。
理論編
レンジ相場を見極める
テクニカル分析をする際に、必ず考慮しなければならないのはトレンドです。トレンドとは価格チャートが上昇に向かっているのか、下落に向かっているのか、並行移動しているのかについての大きな流れのことを言います。基本的に逆ばりの戦略は上昇トレンドでも下降トレンドでもなく、横一線のレンジ相場で効果が発揮されると考えられています。もし、トレンドに逆らって逆ばりをした場合、押し目で局所的にリターンを得るだけで全体としては焼かれてしまいます。したがって、逆張りをするする時には、トレンドが発生していないレンジ相場を見極めてエントリーすることが重要になってくるのです。
では具体的にレンジ相場を見極めるためにはどうすればいいのでしょうか?
移動平均線を見る
レンジ相場であるか判断する一番簡単な方法は移動平均線に注目する方法です。レンジ相場では移動平均線の傾きが緩やかに並行に近付いていきます。長期の移動平均線と短期の移動平均線の傾きが並行に重なり合ってきた時、これがレンジ相場の簡単な見極め方となります。
開発編
続いてアルゴリズムにこれを取り入れたいと思います。
現状のシステムでは上のようにボリンジャーバンド の判定のみを考慮したプログラムになっています。今回はこの判定の1つ上に今がレンジ相場であるかどうか?という判定を入れたいので、ソースコードはこんな感じになります。
check_range_marketをどのようにするかが問題ですが、単純にチャートのデータの回帰直線的なものを求めてその傾きを適当に判定していくのがいいかなと思います。
PythonでFXのトレンドラインを引いてみる
import numpy as np from scipy.stats import linregress // 時間 x = np.array([1, 2, 3, 4, 5, 6]) // レート y = np.array([5, 15, 6, 12, 32, 22]) // 単回帰を計算 sample_lin = linregress(x = x, y = y)
こんな感じで回帰直線を出してあげれば、傾きを求めることができ、一定の傾きを超えたときにFasleを返してあげれば、check_range_marketを作ることができます。