【MQL5】 MT5のEA作成の勉強 その12 ナンピンを実装する ( 2 / 2 )

【MQL5】 MT5のEA作成の勉強 その12 ナンピンを実装する ( 2 / 2 )

まえがき

 前回の投稿で「価格がある程度下落したらポジションを買足す」という、ナンピンのポジションオープン処理の部分を実装しました。今回は「ポジションの総利益率が○○%になったら、ポジションを全てクローズする」という、処理を実装し、ナンピンを完成させたいと思います。

ポジションの総利益を取得する。

 ポジションの総利益を取得するために、一つ一つのポジションの利益を合計します。(もっとスマートなやり方がありそうな気もしますが・・・。別のやり方を知ってるよという方はコメント頂けると嬉しいです。)ポジションの利益を調べるには、CPositionInfoクラスのProfitメソッドを使用します。ポジションの選択には 前回の投稿で最新のポジションを選択するのに使用した、CPositionInfoクラスのSelectByIndexメソッドを利用します。

   uint total=PositionsTotal();
   double sumProf = 0;
   for(uint i=0; i<total; i++)
     {
       if(m_position.SelectByIndex(i))
         {  
            sumProf += m_position.Profit();
         }
      }

 上記の様にFor文で一つづつポジションを取得し、longポジションの利益率をsumProfに加算してゆきます。

 その直下に、 sumProf が100(ドル)以上ならば、全てのポジションを決済する処理を入れます。ポジションの選択方法は先ほどと全く同じです。ちなみに、 Profitメソッドは公式リファレンスには「口座の預金通貨でのポジションの現在利益」とあります。ここでは、ポジションの利益が100ドルになった時決済されるようになっています。

※USD/JPYはクロス円通貨なので、証拠金の単位は円かと思っていたのですが、ドルでした・・・。今まで初期資金100万円のつもりでバックテストしてきましたが、実際には1億円・・・。そんなんあるか。

 そうこうして作ったバックテストの成績は以下です。予想以上の好成績でびっくりしました。証拠金負荷が一番大きい、2019年の5月~6月でギリギリ1%を超えるくらいなので、証拠金200万円くらいでも最大証拠金負荷50%強で同じ利益が出せる計算です。

あれ?意外に悪くないのでは?と思い、さらに長期のバックテストを行った結果が以下です。

これは酷い・・・。2011年から2021年まで流そうとしたのですが、2014年の6月ごろに100ドル全損してます。)やっぱりそう簡単に良いEAはできませんね(-_-;)。

まとめ

 以外にあっさりと悪くない利益カーブを持つEAができたと思いきや、世の中そんなに甘くないよというお話でした。ところで、このEAですが、元々単一ポジションを扱うEAを参考に始めたせいで、一部の処理に不具合が出ています。一番問題なのは、ストップロスがほぼ効かないことです。原因は分かっていますので、ぼちぼちそこを修正しつつ、長期運用EAに欠かせない、ロスカット処理(強制終了)の実装方法を学んでゆきたいと思います。・・・が、その前に、次回は上記のグラフを書くために使ったストラテジーテスターの使い方について学んでいきたいと思います。というのも、最初、資金の設定を少し変えると、上記と全く異なるグラフ形状になっていた、ということがあったからです。(スプレッドが変わればグラフ形状が変わるのは分かりますが、それ以外という意味です。)テストのやり方が間違っている、なんて恐ろしいので、まずはこちらが優先です。