FXブレイクアウトのEA(自動売買)を作成しよう!無料のサンプルコードや書き方あり!

ザフナーラボブログ

ブレイクアウトで売買する

ブレイクアウト戦略・手法を用いたEA(Break Out EA.mq4)を具体例として、MetaTrader4(MT4)におけるEAの具体的な作成方法について解説します。

「Break Out EA.mq4」の具体的な売買ロジックは、以下のとおりです。

  • 一定の期間内の最高値(安値)を上(下)抜いたら買い(売り)エントリーする。
  • 買い(売り)ポジションは、一定の期間内の最安値(高値)を下(上)抜いた場合、又はトレーリングストップによって決済する。
  • エントリー及び決済は成行注文で行う。
  • 保有ポジション数は1つ。

1.全体像

MT4でEAを作成するには、以下の手順に従ってプログラムを記述していくことになります。

  1. #property命令を記述する。
  2. 変数の宣言を行う。
  3. 関数の定義を行う。
  4. init()関数内にEAの初期設定を記述する。
  5. start()関数内に具体的な売買ロジックを記述する。

以下のリンクをクリックするとサンプルコードがダウンロード出来ますので、参考にしながらEAを作成してみて下さい!

Break-Out-EA

2.#property命令の記述

「Break Out EA.mq4」においては、Break-Out-EAの#property命令を記述の箇所をご覧ください。著作権と関連HPのURLを指定しています。

#property命令の詳細については「こちら」を参照してください。

3.変数の宣言

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

「Break Out EA.mq4」においては、以下のように変数を宣言しています。

サンプルコード


//変数の宣言
extern int Magic            = 1515;
extern int Break_Period = 24;
extern double Lots         = 0.1;
extern int Slippage         = 10;
extern string Comments = "Break Out";
extern int Trailing_Stop  = 50;

int Buy_Ticket            = 0;
int Sell_Ticket            = 0;
double Pips                = 0;
int Adjusted_Slippage = 0;

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

  • Magic
    マジックナンバー(=EAを識別する整数値)を格納します。
  • Break_Priod
    最高値と最安値の算出期間を格納します。
  • Lots
    取引するロットサイズを指定します。
    MT4では、通常、1ロットは10万通貨を意味します。
  • Slippage
    許容スリッページ数を格納します。
  • Comments
    エントリー注文に付加するコメントを格納します。
    コメントは、「ターミナルウィンドウ」の「取引」タブで確認することができます。
  • Trailing_Stop
    トレーリングストップ幅を格納します。
  • Buy_Ticket
    買いのエントリー注文が約定した際に、買いポジションに付される整数値(=チケット番号)を格納します。
  • Sell_Ticket
    売りのエントリー注文が約定した際に、売りポジションに付される整数値(=チケット番号)を格納します。
  • Pips
    AdjustPoint()関数によって調整された値を格納します。
  • Adjusted_Slippage
    AdjustSlippage()関数によって調整された許容スリッページ数を格納します。

4.関数の定義

Definition-of-Function-in-Break-Out

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

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

 

5.初期設定の記述

「Break Out EA.mq4」においては、AdjustPoint()関数AdjustSlippage()関数を使用しますが、両者はいずれも、EAをチャートに適用した際に、最初に一度だけ実行されれば足りるものなので、init()関数内に以下のように記述します。

サンプルコード


int init()
{
  Pips                      = AdjustPoint(Symbol());
  Adjusted_Slippage = AdjustSlippage(Symbol(),Slippage);

  return(0);
}

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

6.具体的な売買ロジックの記述

Trade-Logic-in-Break-Out

Break-Out-EAの「具体的な売買ロジックの記述」をご覧ください。

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

⑴ チケット番号の初期化

「Break Out EA.mq4」においては、ポジションを保有している場合、すなわち、変数「Buy_Ticket」又は変数「Sell_Ticket」に格納されている値が正の場合に、トレーリングストップを発動させます。

そこで、以下のように記述して、ポジションを保有していない場合は、変数「Buy_Ticket」又は変数「Sell_Ticket」に「0」を代入して、これらの変数を初期化しておきます。

サンプルコード


//チケット番号の初期化
if(OrdersTotal() == 0)
  {
    Buy_Ticket = 0;
    Sell_Ticket = 0:
  }

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

⑵ クローズ処理

Position-Close-in-Break-Out

「Break Out EA.mq4」においては、保有ポジションに損失が生じる方向にブレイクした場合には、保有ポジションをクローズ(=決済)する処理を実行するようにしています。

そこで、当該処理を実行するコードについて解説します。

ア ポジション保有を確認する

OrderSelect()関数を使用して、ポジションを保有しているかどうかを確認します。

イ 買いポジションの保有を確認する

OrderType()関数を使用して、買いポジションを保有しているかどうかを確認します。

ウ 買いポジションの決済条件を確認する

現在値が、一定期間の最安値よりも低く、かつ未決済かどうかを確認します。

  • Close[]の詳細については「こちら」を参照してください。
  • Low[]の詳細については「こちら」を参照してください。
  • iLowest()関数の詳細については「こちら」を参照してください。
  • Symbol()関数の詳細については「こちら」を参照してください。
  • OrderCloseTime()関数の詳細については「こちら」を参照してください。
エ 買いポジションを決済する

OrderClose()関数を使用して、買いポジションを決済する処理を実行し、その結果を変数「Closed」に格納します。

  • OrderTicket()関数の詳細については「こちら」を参照してください。
  • OrderLots()関数の詳細については「こちら」を参照してください。
  • OrderClosePrice()関数の詳細については「こちら」を参照してください。
オ チケット番号を格納している変数を初期化する

「Break Out EA.mq4」においては、チケット番号を格納する変数「Buy_Ticket」又は「Sell_Ticket」の値が正の場合(=ポジションを保有している場合)にトレーリングストップを発動させます。

そこで、買いの保有ポジションが決済された場合には、変数「Buy_Ticket」に「0」を代入して、当該変数を初期化します。

カ 売りポジションの保有を確認する

OrderType()関数を使用して、売りポジションを保有しているかどうかを確認します。

キ 売りポジションの決済条件を確認する

現在値が、一定期間の最高値よりも高く、かつ未決済かどうかを確認します。

  • Close[]の詳細については「こちら」を参照してください。
  • High[]の詳細については「こちら」を参照してください。
  • iHighest()関数の詳細については「こちら」を参照してください。
  • Symbol()関数の詳細については「こちら」を参照してください。
  • OrderCloseTime()関数の詳細については「こちら」を参照してください。
ク 売りポジションを決済する

OrderClose()関数を使用して、売りポジションを決済する処理を実行し、その結果を変数「Closed」に格納します。

  • OrderTicket()関数の詳細については「こちら」を参照してください。
  • OrderLots()関数の詳細については「こちら」を参照してください。
  • OrderClosePrice()関数の詳細については「こちら」を参照してください。
ケ チケット番号を格納している変数を初期化する

「Break Out EA.mq4」においては、チケット番号を格納する変数「Buy_Ticket」又は「Sell_Ticket」の値が正の場合(=ポジションを保有している場合)にトレーリングストップを発動させます。

そこで、売りの保有ポジションが決済された場合には、変数「Sell_Ticket」に「0」を代入して、当該変数を初期化します。

エントリー処理
 Entry-Logic-in-Break-Out

「Break Out EA.mq4」におけるエントリー処理を実行するコードについて解説します。

買いエントリー条件を確認する

現在値が、一定期間の最高値よりも高く、かつポジションを保有していないかどうかを確認します。

  • Close[]の詳細については「こちら」を参照してください。
  • High[]の詳細については「こちら」を参照してください。
  • iHighest()関数の詳細については「こちら」を参照してください。
  • OrdersTotal()関数の詳細については「こちら」を参照してください。
イ 買い注文を出す

OrderSend()関数を使用して買い注文を出し、チケット番号を変数「Buy_Ticket」に格納します。

ウ 売りエントリー条件を確認する

現在値が、一定期間の最安値よりも低く、かつポジションを保有していないかどうかを確認します。

  • Close[]の詳細については「こちら」を参照してください。
  • Low[]の詳細については「こちら」を参照してください。
  • iLowest()関数の詳細については「こちら」を参照してください。
  • OrdersTotal()関数の詳細については「こちら」を参照してください。
エ 売り注文を出す

OrderSend()関数を使用して売り注文を出し、チケット番号を変数「Sell_Ticket」に格納します。

⑷ トレーリングストップ

Trailing-Stop-in-Break-Out

「Break Out EA.mq4」においては、ポジションを保有している場合、すなわち、変数「Buy_Ticket」又は変数「Sell_Ticket」に格納されている値が正の場合に、トレーリングストップを発動させます。

トレーリングストップを実行するコードの詳細については「こちら」を参照してください。