前回紹介した「マーチンゲールEA」に用いた連敗数に応じてロットを変更するコードを紹介します。
実際に以下のコードを使う際には、M_Limits、Lots、Rを自分で設定する必要があります。M_Limitsは最大連敗数、Lotsは初期ロット、Rは倍率です。
<スポンサーリンク>
#define MAGICMA 123456 input double M_Limit=5; input double Lots = 0.1; input double R = 2.2; double M_Lots; //---Martin START---// double Martin_lots() { int renpai=0; for(int i= OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) { if(OrderMagicNumber()==MAGICMA && OrderSymbol()==Symbol()) { if(OrderProfit()<0)renpai++; else if(OrderProfit()>=0)break; } } } if(renpai>=M_Limit)renpai=0; M_Lots= Lots*MathPow(R,renpai); return(M_Lots); } //---Martin END---//
基本構造としてはfor関数を利用して連敗数を計算し、ロットを「初期ロット」×「倍率の連敗数乗」で計算します。
連敗数がM_Limitを超えた場合には連敗数を0にしてロットを初期化します。
R(倍率)はマーチンゲールの理論では2ですが、実際にはスプレッドを考えて2.2以上にしないと利益が上がりません。
マーチンゲール法でいちばん重要なのはいかに連敗数をへらすかです。平均の連敗数はもちろんですが、バックテストでの最大連敗数が8や9以上になると、ロットが上がりすぎて証拠金が足りなくなります。
また、連敗数がM_Limit以上になるとロットがリセットされるため、かなりの損失が発生します。
EAでマーチンゲール法を使うときは十分にバックテストをして慎重に使うようにしましょう。