ノンプログラミングで自動売買EAを作れるMQL5ウィザードですが、トレーリングストップが組み込めるようになっています。
以前の記事で取り上げたウィザードを使ってのプログラム作成では、プロフラムの簡略化のためにルンルンでスキップさせてもらいましたが、今の私はトレーリングストップのことが書きたくて書きたくて震えてます。
ということで、今回の記事ではトレーリングストップの実装について書きます。トレーリングストップが全人類が望んで止まない損小利大実現のための武器になる可能性、あると思います!
トレーリングストップとは
トレーリングストップとは、相場の価格の変動に合わせてストップロス(損切り)注文を動かしていく手法です。トレーリングは追従という意味です。
相場の動きに合わせて損切り注文を動かすことにより損失を抑えながら利益を伸ばしていくことで「損小利大」を実現しようとしています。うまく相場の流れに乗ることができれば、大きく利益を伸ばすことができます。
実装の仕方
ちょちょいのちょいで実装できるので、まずは実装の方法をお伝えします。
MQLウィザードの4番目の画面で「エキスパートアドバイザのトレーリングプロパティ」が出てきますので、お好みのトレーリングストップの方法を選択します。
これで実装完了です。
- Trailing Stop not used
トレーリングストップを使用しない - Trailing Stop based on fixed Stop Level
固定幅に基づくトレーリングストップ - Trailing Stop based on MA
移動平均に基づくトレーリングストップ - Trailing Stop based on Parabolic SAR
パラボリックSARに基づくトレーリングストップ
トレーリングストップを使った決済方法
MQLウィザードでは、トレーリングストップでの決済が選択できるようになっています。その機能を活用することで「トレーリングストップのみ」「トレーリングストップ+利食い」の2つのパターンを構築できます。
トレーリングストップのみ
1つ目は、トレーリングストップのみを仕掛ける方法です。
相場の流れに乗ることができれば、想像を超える利益が転がり込んでくる可能性があります。
その一方、ここまで行けば利食いをしたいという価格まで達したにも関わらずそこから下落(売りの場合は上昇)した価格で決済されることがあります。
トレーリングストップ+利食い
2つ目は、トレーリングストップにプラスして利食いも仕掛ける方法です。
この方法では、相場の流れに乗って利益を伸ばすという部分を取り入れながら、ここまで行けば利益を確定するというポイントを作ることができます。
そうすることで目標価格に達した場合は、すぐに利益を確定できます。
トレーリングストップの種類
次は、MQLウィザードを使って実装ができるトレーリングストップの種類を見ていきます。
もっとも単純な固定幅でストップロスの価格をずらしていく方法だけではなく、移動平均を使った方法、パラボリックSARを使った方法があります。
固定幅に基づくトレーリングストップ
これは至極単純な話で、買いポジションを持ったのちに足の終値が高値を更新(売りポジションの場合は安値を更新)すると指定した固定幅に合うようにストップロスを調整していく方法です。
勘違いしがちですが、高値の判断の対象となるのは足の終値です。その足の高値がいくら跳んでいようと足の終値に基づいてストップロスが調整されます。
パラメータ
- Stop Loss level (in points)
新規注文の際の損切り(ストップロス)を指定します。
0は損切りなしです。 - Take Profit level (in points)
新規注文の際の利食い(テイクプロフィット)を指定します。
0は利食いなしです。 - Stop Loss trailing level (in points)
トレーリングストップを指定します。
0はトレーリングストップなしです。 - Take Profit trailing level (in points)
トレーリング利食い(テイクプロフィット)を指定します。
0はトレーリングの利食いなしです。
発動条件
発動条件をTrailingFixedPips.mphのソースコードから確認します。
買いポジションの場合
現在値(Bid)-損切り値>トレーリングストップの設定値×調整値
売りポジションの場合
損切り値-現在値(Ask)>トレーリングストップの設定値×調整値
移動平均に基づくトレーリングストップ
相場の変動に合わせて追ってくる移動平均でストップロスを調整していく方法です。
固定幅での指定では、相場が上下どちらにもあまり動かない膠着状態になった場合は決済されませんが、移動平均を使うことで膠着状態が続けば利食い(損切り)するようにできます。
パラメータ
- Stop Loss level (in points)
新規注文の際の損切り(ストップロス)を指定します。
0は損切りなしです。 - Take Profit level (in points)
新規注文の際の利食い(テイクプロフィット)を指定します。
0は利食いなしです。 - Period of MA
移動平均指標の平均化の期間を指定します。 - Shift of MA
移動平均指標をずらす(シフトする)幅を指定します。 - Method of averaging
移動平均指標の平均化手法を4種類から指定します。 - Prices series
移動平均指標を算出する価格を7種類から指定します。
発動条件
発動条件をTrailingMA.mphのソースコードから確認します。
買いポジションの場合
以下の2つの条件が正になった場合にトレーリングストップが発動します。
・一本前の足の移動平均の値>損切り値
・一本前の足の移動平均の値<現在値(Bid)-発動バッファ
【発動バッファ】
発動バッファ(勝手に命名)は、トレーリングストップが買値のすぐ上で発動するのをさけるために入れられているバッファのようです。
売りポジションの場合
以下の2つの条件が正になった場合にトレーリングストップが発動します。
・一本前の足の移動平均の値+スプレッド<損切り値
・一本前の足の移動平均の値+スプレッド>現在値(Ask)+発動最低ライン
パラボリックSARに基づくトレーリングストップ
パラボリックSARの位置でストップロスを調整していく方法です。
パラボリックSAR…私は不勉強なので存じ上げていませんでした。どれぐらいの知名度なのか分かりませんが、パラボリックSARってなんぞやについても書いておきます。
パラボリックSARとは、SAR(ストップ&リバースポイント)と呼ばれる点を用いたトレンドフォロー型の指標です。SARをつけないで「パラボリック」と表記されていることも多いです。
【指標を見るうえでのポイント】
- SARは上昇トレンドのときは価格の下に表示され、下降トレンドのときは価格の上に表示される(SARの表示されている位置でトレンドの状況を把握できる)
- 突破すると反転の勢いが強まると予想される水準にSARが表示される
- 価格がSARに到達するとSARの位置が上下入れ替わりトレンドが転換する
【SARの計算方法】
計算方法については一番わかりやすかったOANDAの記事をご確認ください。
※惜しむべくは「加速因子の加算」の部分が誤っている点です。加速因子の加算は、前の足で高値(上昇トレンド)もしくは安値(下降トレンド)を更新した場合にのみ行われます。
パラボリックSARを使った場合も、相場が膠着状態になった際に利食い(損切り)が発動します。
パラメータ
- Stop Loss level (in points)
新規注文の際の損切り(ストップロス)を指定します。
0は損切りなしです。 - Take Profit level (in points)
新規注文の際の利食い(テイクプロフィット)を指定します。
0は利食いなしです。 - Speed increment
パラボリックSARの加速因子を指定します。 - Maximum rate
加速因子の最大値を指定します。
発動条件
発動条件をTrailingParabolicSAR.mphのソースコードから確認します。
買いポジションの場合
以下の2つの条件が正になった場合にトレーリングストップが発動します。
・一本前の足のSARの値>損切り値
・一本前の足のSARの値<現在値(Bid)-発動バッファ
売りポジションの場合
以下の2つの条件が正になった場合にトレーリングストップが発動します。
・一本前の足のSARの値+スプレッド<損切り値
・一本前の足のSARの値+スプレッド>現在値(Ask)+発動最低ライン
移動平均EAに固定幅TSを組み込んで最適化
せっかくなので第二回で最適化した移動平均EAに固定幅トレーリングストップを組み込んだ新移動平均EAで勝負を挑んでみます。
バックテストの対象は前回と同じく、2019年のドル円1時間足チャートです。
最適化するパラメータ
最適化するパラメータは前回採用したパラメータを基本にトレーリングストップ用のStop Loss trailing level (in points)とTake Profit trailing level (in points)を追加しました。
パラメータ | 開始値 | ステップ | 終了値 |
---|---|---|---|
Price level to execute a deal | -50 | 10 | 50 |
Stop Loss level (in points) | 0 | 10 | 100 |
Expiration of pending orders (in bars) | 0 | 1 | 5 |
Moving Average(12,0,…) Period of averaging | 5 | 5 | 25 |
Moving Average(12,0,…) Time shift | -3 | 1 | 3 |
Moving Average(12,0,…) Method of averaging | Simple | Linear weighted | |
Stop Loss trailing level (in points) | 0 | 10 | 100 |
Take Profit trailing level (in points) | 0 | 10 | 100 |
結果発表
新移動平均の最適化結果だ!ドンッッッッ!!!!!
パラメータが増えたんだから順当な結果だろうよ
主要な項目を表にしてトレーリングストップなしとありの比較をしてみます。
項目 | 移動平均EA | 新移動平均EA |
---|---|---|
総損益 | 83,661 | 138,405 |
総利益 | 146,275 | 177,172 |
総損失 | -62,614 | -38,767 |
取引数 | 93 | 33 |
最大 勝ちトレード | 6,130 | 18,530 |
平均 勝ちトレード | 1,950 | 8,437 |
最大 負けトレード | -8,260 | -4,361 |
平均 負けトレード | -3,479 | -3,231 |
ポジション最長保持時間 | 60:16:26 | 457:31:52 |
ポジション平均保持時間 | 13:15:08 | 92:33:08 |
最大 勝ちトレード、平均 勝ちトレード、最大 負けトレード、平均 負けトレードの数値を比べると損小利大を実現できたと小声で言える結果となっています。
また、取引数が約1/3となり、ポジションの保有時間が大きく伸びているのも大きな変化です。
あとがき
ちょっとくせが強かったですが、なんとかトレーリングストップも攻略できたような気になってます。トレーリングストップはティックで作動させたいと思うのは私だけなのでしょうか…。
トレーリングストップを実装して成績がかなり伸びましたが、そこには特に意味がありません。やりたいことをできるようになったというのが大切です。
MQLウィザードシリーズを3回記事化してちょっと詳しくなってきたような気がします。MT5の記事は超絶ニッチだということも発覚してますが、誰かの役にたつこともあるでしょう(と思い込むしかない)。
コメント