繰り返し注文を出す

 相場が一定の方向に継続して動くことが予想される場合に、一定の値幅ごとに発注と利益確定(損切り)を繰り返して出したい場合があります。

 しかし、MetaTrader4(MT4)では、アイネット証券の「シストレi-NET」などの一部の業者が提供しているような、繰り返し注文を行う機能は、標準では装備されていません。

 したがって、MT4で繰り返し注文を出したい場合は、繰り返し注文を出すEAをプログラミングする必要があります

 そこで、以下のようなルールで買い注文を繰り返して発注するEA(Repeat Order.mq4)を例として、繰り返し注文を行うEAの作成方法について解説します。

  1. 利益確定・損切り値を設定した成行き買い注文を出す。
  2. 買い注文発注後、想定どおりレートが上昇した場合
    利益確定値で決済すると同時に、1.と同様の買い注文を発注する。
  3. 買い注文発注後、レートが下落した場合
    指定したpips分下落した時点で、1.と同様の買い注文を発注する。
  4. 利益確定後に1.と同様の買い注文を発注するのは、利益確定時に保有ポジションがない場合に限定する。
Repeat Order
「Repeat Order.mq4」の動き
  1. 全体像
  2. #property命令の記述
  3. 変数の宣言
  4. 関数の定義
  5. 初期設定の記述
  6. 具体的な売買ロジックの記述
  7. 関連ツール
  8. 繰り返し注文を出すことのできる証券会社

1.全体像

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

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

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

Download (PDF, 26KB)

>>目次に戻る

2.#property命令の記述

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

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

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

>>目次に戻る

3.変数の宣言

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

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


//変数の宣言
extern bool Start_Program = false;

extern int Magic = 9696;

extern double Lots = 0.1;

extern int TP = 100;
extern int SL = 100;

extern int Interval = 50;

extern int Slippage = 10;

extern string Comments = "Repeat Order";

int Ticket = 0;

double Pips           = 0;
int Adjusted_Slippage = 0;

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

  • Start_Program
    EAをチャートに適用してから、EAによる売買を実際に行うかどうかを決定するためのものです。
    当該パラメーターを「true」にした時点で、買い注文を発注します。
  • Magic
    マジックナンバー(=EAを識別する整数値)を格納します。
  • Lots
    取引するロットサイズを指定します。
    MT4では、通常、1ロットは10万通貨を意味します。
  • TP
    利益確定までのpips数を格納します。
  • SL
    損切りまでのpips数を格納します。
  • Interval
    レートが下落した場合に、新規買い注文を発注するまでのpips数(冒頭の図における「買い③」と「買い④」の間の幅)を格納します。
  • Slippage
    許容スリッページ数を格納します。
  • Comments
    エントリー注文に付加するコメントを格納します。
    コメントは、「ターミナルウィンドウ」の「取引」タブで確認することができます。
  • Ticket
    買い注文が約定した際に、買いポジションに付される整数値(=チケット番号)を格納します。
  • Pips
    AdjustPoint()関数によって調整された値を格納します。
  • Adjusted_Slippage
    AdjustSlippage()関数によって調整された許容スリッページ数を格納します。

>>目次に戻る

4.関数の定義

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

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


//関数の定義
double AdjustPoint(string Currency)
{
 int Calculated_Digits =
 MarketInfo(Symbol(),MODE_DIGITS);
 
 if(Calculated_Digits == 2 || Calculated_Digits == 3)
   {
    double Calculated_Point = 0.01;
   }
 else if(Calculated_Digits == 4 ||
         Calculated_Digits == 5)
        {
         Calculated_Point = 0.0001;
        }
        
 return(Calculated_Point);
}

int AdjustSlippage(string Currency,int Slippage_Pips)
{
 int Calculated_Digits =
 MarketInfo(Symbol(),MODE_DIGITS);
 
 if(Calculated_Digits == 2 || Calculated_Digits == 4)
   {
    int Calculated_Slippage = Slippage_Pips;
   }
 else if(Calculated_Digits == 3 ||
         Calculated_Digits == 5)
        {
         Calculated_Slippage = Slippage_Pips * 10;
        }
        
 return(Calculated_Slippage);
}
  • AdjustPoint()関数の詳細については「こちら」を参照してください。
  • AdjustSlippage()関数の詳細については「こちら」を参照してください。

>>目次に戻る

5.初期設定の記述

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


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

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

>>目次に戻る

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

 「Repeat Order.mq4」における具体的な売買ロジックの記述は、以下のようになります。

Download (PDF, 17KB)

⑴ EAを稼働させるかどうかのチェック

 「Repeat Order.mq4」は、一定のインジケーターの値が指定した条件に合致した場合に売買をするものではなく、EAを稼働させると、即座に成行き買い注文を発注するようになっています。

 そこで、EAをチャートに適用した後に、自分のタイミングで売買を行うことができるように、上述のように、bool型の変数「Start_Program」をあらかじめ宣言しておき、当該変数の値がtrueの場合にのみ、EAによる売買を実行するようにしています。

⑵ 保有ポジションがない場合

 すでに保有しているポジションがない場合(=順調にレートが上昇している場合)は、以下のように動作します。

ア 保有ポジションの数をチェックして発注する

 OrdersTotal()関数(詳細については「こちら」を参照してください。)を使用してポジションの数をチェック

 OrdersTotal()関数の戻り値が「0」、すなわち、保有ポジションがない場合

 OrderSend()関数(詳細については「こちら」を参照してください。)で成行き買い注文を発注

  • Symbol()関数の詳細については「こちら」を参照してください。
イ 利益確定・損切り値を設定

 OrderSend()関数の戻り値を格納している変数「Ticket」の値が正、すなわち、成行き買い注文が約定していた場合

 OrderSelect()関数(詳細については「こちら」を参照してください。)を使用して、上述のOrderSend()関数の実行によって保有することとなったポジションを選択

 OrderModify()関数(詳細については「こちら」を参照してください。)を使用して利益確定・損切り値を設定する

 OrderModify()関数の戻り値を格納している変数「Modified」の値が「true」、すなわち、正常に利益確定・損切り値が設定された場合は、変数「Ticket」の値を「0」にして、初期化しておく

⑶ 保有ポジションがある場合

 すでに保有しているポジションがある場合(=レートが下落している場合)は、以下のように動作します。

ア 保有ポジションの数をチェックして発注する

 OrdersTotal()関数を使用してポジションの数をチェック

 OrdersTotal()関数の戻り値が「1」以上、すなわち、すでに保有しているポジションがある場合

 OrderSelect()関数を使用して直近の保有ポジションを選択

 (なお、保有ポジションには、ポジションを保有した順に、「0」、「1」、「2」、……とインデックスが振られているので、直近の保有ポジションのインデックスは、総保有ポジション数-1」となります。)

 現在のBid値が、「直近の保有ポジションの約定値-変数『Interval』で設定したpips数」以下の場合

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

 OrderSend()関数を使用して成行き買い注文を発注

イ 利益確定・損切り値を設定

 上述の⑵イと同様の処理を行います。

>>目次に戻る

7.関連ツール

複数の指値注文を一括で大量注文!TP・ST機能付でトラリピも一瞬!
MT4指値一括大量注文ツール TP・ST機能付 トラリピ簡単
MT4指値一括大量注文ツール TP・ST機能付 トラリピ簡単 | fx-on.com

MT4指値一括大量注文ツール TP・ST機能付 トラリピ簡単
MT4指値一括大量注文ツール TP・ST機能付 トラリピ簡単 | fx-on.com

 上記ツール(MT4指値一括大量注文ツール TP・ST機能付 トラリピ簡単MT4指値一括大量注文ツール TP・ST機能付 トラリピ簡単 | fx-on.com)の詳細については「こちらMT4指値一括大量注文ツール TP・ST機能付 トラリピ簡単 | fx-on.com」を参照してください。

>>目次に戻る

8.繰り返し注文を出すことのできる証券会社

 繰り返し注文を出すことのできる証券会社としては、アイネット証券の「シストレi-NET」があります。

アイネット証券[アイネットFX]

 アイネット証券の「シストレi-NET」では、「ループ・イフダン注文」という繰り返し注文を利用することができます。

 「ループ・イフダン注文」は、一定の値幅で売買を繰り返して行い、コツコツと利益を積み重ねていく注文方法です。

 「ループ・イフダン注文」には、「Bタイプ」と「Sタイプ」があり、それぞれの内容は、以下のとおりです。

  • Bタイプ
    一定の値幅ごとに、「新規買いエントリー注文」と「決済売り注文」を繰り返していくタイプのもので、今後上昇相場が形成されると予想した場合に選択します。

    B-Type
    Bタイプ
  • Sタイプ
    一定の値幅ごとに、「新規売りエントリー注文」と「決済買い注文」を繰り返していくタイプのもので、今後下降相場が形成されると予想した場合に選択します。

    S-Type
    Sタイプ

⑴ ループ・イフダン注文の概要

 「ループ・イフダン注文」が、具体的にどのように繰り返して注文を執行していくのかについて、Bタイプを例として解説します。

  • 新規買いエントリーと売り決済を、一定の値幅ごとに繰り返す

    Loop_If-Done_1
    基本1
  • 新規買いエントリー後にレートが下落した場合

    Loop_If-Done_2
    基本2
  • 新規買いエントリー後にレートが上昇し続けた場合

    Loop_If-Done_3
    基本3
  • まとめ
    以上をまとめると、以下のようになります。

    Summary
    まとめ

⑵ レンジ相場での有効性

 相場には、大きく分けて、レンジ相場とトレンド相場とがありますが、全体の7~8割は、レンジ相場であるといわれています。

 「ループ・イフダン注文」は、上述のように、一定の値幅で新規エントリー注文と決済注文を繰り返して行うものなので、Bタイプ・Sタイプともに、レンジ相場を得意とし、レンジ相場における小さな値動きでも、コツコツと利益を積み重ねていくことができます

Range
レンジ相場でも利益を積み重ねていく

⑶ 取扱い通貨ペアと設定値幅

 「アイネット証券」の「シストレi-NET」で提供している「ループ・イフダン注文」に対応している通貨ペアは、以下のとおりです。

Forex
取扱い通貨ペア

 設定値幅は、以下のとおりです(通貨ペアごとに異なります。)。

Setting
設定値幅

>>目次に戻る

アイネット証券[アイネットFX]


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