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

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

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

  • 一定の期間内の最高値安値を上抜いたら買い売りエントリーする。
  • 買い(売り)ポジションは、一定の期間内の最安値高値を下抜いた場合、又はトレーリングストップによって決済する。
  • エントリー及び決済は成行注文で行う。
  • 保有ポジション数は1つ。
  1. 全体像
  2. #property命令の記述
  3. 変数の宣言
  4. 関数の定義
  5. 初期設定の記述
  6. 具体的な売買ロジックの記述
  7. 関連インジケーター
  8. 関連EA

1.全体像

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

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

 具体的には、以下のようになります。

Download (PDF, 1.51MB)

>>目次に戻る

2.#property命令の記述

 「Break Out EA.mq4」においては、以下のように記述して、著作権と関連HPのURLを指定しています。

copyroght and HP
著作権と関連HPのURLを指定

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

>>目次に戻る

3.変数の宣言

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

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

Declaration of Variable
変数の宣言

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

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

>>目次に戻る

4.関数の定義

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

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

Download (PDF, 157KB)

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

>>目次に戻る

5.初期設定の記述

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

Initialization Function in Break Out
初期設定の記述

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

>>目次に戻る

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

Download (PDF, 1.09MB)

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

⑴ チケット番号の初期化

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

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

Initialization of Ticket Number
チケット番号の初期化

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

⑵ クローズ処理

Download (PDF, 337KB)

 「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を代入して、当該変数を初期化します。

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

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

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

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

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

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

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

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

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

⑶ エントリー処理

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

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

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

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

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

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

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

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

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

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

⑷ トレーリングストップ

Download (PDF, 516KB)

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

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

>>目次に戻る

7.関連インジケーター

WWW-ZONE・脅威の反転率95%・矢印リペイントなしでございます!!!
WWW-ZONE・脅威の反転率95%・ダブルゾーン・矢印でエントリー!!!
WWW-ZONE・脅威の反転率95%・ダブルゾーン・矢印でエントリー!!! | fx-on.com

WWW-ZONE・脅威の反転率95%・ダブルゾーン・矢印でエントリー!!!
WWW-ZONE・脅威の反転率95%・ダブルゾーン・矢印でエントリー!!! | fx-on.com

 上記インジケーター(WWW-ZONE・脅威の反転率95%・ダブルゾーン・矢印でエントリー!!!WWW-ZONE・脅威の反転率95%・ダブルゾーン・矢印でエントリー!!! | fx-on.com)の詳細については「こちらWWW-ZONE・脅威の反転率95%・ダブルゾーン・矢印でエントリー!!! | fx-on.com」を参照してください。

>>目次に戻る

8.関連EA

ブレイクアウトの瞬間を掠め取る!!ヒットアンドアウェイのスキャルシステムです。
ブレイクスキャルシステム
ブレイクスキャルシステム | fx-on.com

ブレイクスキャルシステム
ブレイクスキャルシステム | fx-on.com

 上記EA(ブレイクスキャルシステムブレイクスキャルシステム | fx-on.com)の詳細については「こちらブレイクスキャルシステム | fx-on.com」を参照してください。

>>目次に戻る


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