ブレークイーブンでの仕切り

 ブレークイーブン(Break-even)での仕切りとは、一定の利益を確保した後に、損切り価格を保有ポジションの約定値に移動させることをいいます。

 ブレークイーブンでの仕切りを設定することによって、無駄に資金を減らすことを回避することができるようになります。

 例えば、

  1. EAで買いサインが出たので買いポジションを保有した。
  2. 想定どおりにレートが上昇した。
  3. 一定のpips数レートが上昇したので損切り価格を約定値に移動させた。
  4. その後もレートは上昇したが、EAのロジックによる利益確定ポイントに至る前に反転下落した。
  5. 損切り価格を約定値に移動させているので、最悪でも同値撤退となり、資金が減ることはない。

ということになります。

 無駄に資金を減らさないことは、長期に渡ってトレードを継続し、資金を増加させていくうえでは、極めて重要なことです。

 そこで、MetaTrader4(MT4)のEAにおいて、ブレークイーブンでの仕切りを設定するプログラミング方法について解説します。

 プログラムの全体像を示すと、以下のようになります。

Download (PDF, 408KB)

  1. 変数の宣言
  2. 関数の定義
  3. init()関数の記述
  4. ブレークイーブンでの仕切りの記述
  5. 関連ツール

1.変数の宣言

 変数の詳細については「こちら」を参照してください。

 ブレークイーブンでの仕切りを設定するためには、以下のような変数を宣言します。


extern int Magic         = 8569;
extern double Break_Even = 20;
double Use_Point         = 0;

 各変数の意味は、以下のとおりです。

  • Magic
    マジックナンバー(=EAを識別する整数値)を格納します。
    この変数は、EAをチャートに適用した際に、任意の値に設定することができるようにするため、「extern」(詳細は「こちら」を参照してください。)を付けて宣言します。
  • Break_Even
    ブレークイーブンの仕切りを設定する利益幅(単位はpips)を格納します。
    この変数は、EAをチャートに適用した際に、任意の値に設定することができるようにするため、「extern」(詳細は「こちら」を参照してください。)を付けて宣言します。
  • Use_Point
    AdjustPoint()関数(詳細は「こちら」を参照してください。)の戻り値を格納します。

>>目次に戻る

2.関数の定義

 ブレークイーブンでの仕切りを設定するためには、AdjustPoint()関数を使用します。

 AdjustPoint()関数の詳細については「こちら」を参照してください。

>>目次に戻る

3.init()関数の記述

 init()関数の詳細については「こちら」を参照してください。

 AdjustPoint()関数は、EAをチャートに適用した際に一度だけ実行されれば足りるので、init()関数内に、以下のようなコードを記述します。


int init()
{
 Use_Point = AdjustPoint(Symbol());
 
 return(0);
}

 上記コードによって、変数Use_PointにAdjustPoint()関数によってpips単位に変換されたPoint」(詳細は「こちら」を参照してください。)が格納されることになります。

>>目次に戻る

4.ブレークイーブンでの仕切りの記述

 ブレークイーブンでの仕切りを設定を記述しているコードについて解説します。

⑴ 保有ポジションを選択する

 まず、ブレークイーブンでの仕切りを設定するポジションを保有していることを確認します。

  • for()文の詳細については「こちら」を参照してください。
  • if()文の詳細については「こちら」を参照してください。
  • OrderSelect()関数の詳細については「こちら」を参照してください。

⑵ EAによるポジションであることを確認する

 選択された保有ポジションがブレークイーブンの仕切りを設定したいEAによって取得されたものであることを、マジックナンバーと通貨ペアを調べることによって確認しています。

  • OrderMagicNumber()関数の詳細については「こちら」を参照してください。
  • OrderSymbol()関数の詳細については「こちら」を参照してください。

⑶ 保有ポジションの種別を確認する

 ブレークイーブンでの仕切りの設定は、保有ポジションが買いポジションか売りポジションかで異なってくるため、選択された保有ポジションの種別(=「買い」か「売り」か)を確認しています。

  • OrderType()関数の詳細については「こちら」を参照してください。

⑷ 条件判定に使用する値を取得する

 ブレークイーブンでの仕切りを設定するためには、「現在の含み益」と損切り価格を保有ポジションの約定値に移動させる「最低利益」とを比較する必要があります。

 そこで、以下のような処理を行っています。

ア 現在の含み益額を取得する

 現在の「Bid値」から「保有ポジションの約定値」を控除することで、現在の利益ポイント数を算出し、これを変数「Pips_Profit」に格納しています。

  • 「Bid」の詳細については「こちら」を参照してください。
  • OrderOpenPrice()関数の詳細については「こちら」を参照してください。
イ 最低利益額を取得する

 変数「Break_Even」に格納されている値に、変数「Use_Point」に格納されている値を乗ずることで、ブレークイーブンでの仕切りを設定する最低利益pips数を算出し、これを変数「Minimum_Profit」に格納しています。

⑸ 損切り価格を変更する

ア ブレークイーブンでの仕切りを設定する条件式

 if()文内に、以下のような条件式を記述しています。

現在の利益ポイント数が最低利益pips数以上で、
かつ、
現在の損切り価格が保有ポジションの約定値とひとしくなかったら

  • OrderStopLoss()関数の詳細については「こちら」を参照してください。
イ 損切り価格の修正

 OrderModify()関数(詳細は「こちら」を参照してください。)を使用して、損切り価格を保有ポジションの約定値に修正しています。

⑹ 保有ポジションの種別を確認する

 上記⑶と同様です。

⑺ 条件判定に使用する値を取得する

ア 現在の含み益額を取得する

保有ポジションの約定値」から現在の「Ask値」を控除することで、現在の利益ポイント数を算出し、これを変数「Pips_Profit」に格納しています。

  • 「Ask」の詳細については「こちら」を参照してください。
イ 最低利益額を取得する

上記⑷イと同様です。

⑻ 損切り価格を変更する

ア ブレークイーブンでの仕切りを設定する条件式

 上記⑸アと同様です。

イ 損切り価格の修正

 上記⑸イと同様です。

>>目次に戻る

関連ツール

MQL言語の学習ができ、裁量トレーダーもEA開発が可能になる!
『EAつくーる』
『EAつくーる』 | fx-on.com

『EAつくーる』
『EAつくーる』 | fx-on.com

 上記ツール(EAつくーる『EAつくーる』 | fx-on.com)の詳細については「こちら『EAつくーる』 | fx-on.com」を参照してください。

>>目次に戻る


MT4の使い方からプログラミングまで、わかりやすく解説