ブレイクアウトで売買する
ブレイクアウト戦略・手法を用いたEA(Break Out EA.mq4)を具体例として、MetaTrader4(MT4)におけるEAの具体的な作成方法について解説します。
「Break Out EA.mq4」の具体的な売買ロジックは、以下のとおりです。
- 一定の期間内の最高値(安値)を上(下)抜いたら買い(売り)エントリーする。
- 買い(売り)ポジションは、一定の期間内の最安値(高値)を下(上)抜いた場合、又はトレーリングストップによって決済する。
- エントリー及び決済は成行注文で行う。
- 保有ポジション数は1つ。
1.全体像
MT4でEAを作成するには、以下の手順に従ってプログラムを記述していくことになります。
- #property命令を記述する。
- 変数の宣言を行う。
- 関数の定義を行う。
- init()関数内にEAの初期設定を記述する。
- start()関数内に具体的な売買ロジックを記述する。
以下のリンクをクリックするとサンプルコードがダウンロード出来ますので、参考にしながら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
関数の詳細については「こちら」を参照してください。
5.初期設定の記述
「Break Out EA.mq4」においては、AdjustPoint()関数とAdjustSlippage()関数を使用しますが、両者はいずれも、EAをチャートに適用した際に、最初に一度だけ実行されれば足りるものなので、init()関数内に以下のように記述します。
int init()
{
Pips = AdjustPoint(Symbol());
Adjusted_Slippage = AdjustSlippage(Symbol(),Slippage);
return(0);
}
init()関数の詳細については「こちら」を参照してください。
6.具体的な売買ロジックの記述
Break-Out-EAの「具体的な売買ロジックの記述」をご覧ください。
⑴ チケット番号の初期化
「Break Out EA.mq4」においては、ポジションを保有している場合、すなわち、変数「Buy_Ticket」又は変数「Sell_Ticket」に格納されている値が正の場合に、トレーリングストップを発動させます。
そこで、以下のように記述して、ポジションを保有していない場合は、変数「Buy_Ticket」又は変数「Sell_Ticket」に「0」を代入して、これらの変数を初期化しておきます。
//チケット番号の初期化
if(OrdersTotal() == 0)
{
Buy_Ticket = 0;
Sell_Ticket = 0:
}
OrdersTotal()関数の詳細については「こちら」を参照してください。
⑵ クローズ処理
「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」を代入して、当該変数を初期化します。
エントリー処理
「Break Out EA.mq4」におけるエントリー処理を実行するコードについて解説します。
買いエントリー条件を確認する
現在値が、一定期間の最高値よりも高く、かつポジションを保有していないかどうかを確認します。
- Close[]の詳細については「こちら」を参照してください。
- High[]の詳細については「こちら」を参照してください。
- iHighest()関数の詳細については「こちら」を参照してください。
- OrdersTotal()関数の詳細については「こちら」を参照してください。
イ 買い注文を出す
OrderSend()関数を使用して買い注文を出し、チケット番号を変数「Buy_Ticket」に格納します。
ウ 売りエントリー条件を確認する
現在値が、一定期間の最安値よりも低く、かつポジションを保有していないかどうかを確認します。
- Close[]の詳細については「こちら」を参照してください。
- Low[]の詳細については「こちら」を参照してください。
- iLowest()関数の詳細については「こちら」を参照してください。
- OrdersTotal()関数の詳細については「こちら」を参照してください。
エ 売り注文を出す
OrderSend()関数を使用して売り注文を出し、チケット番号を変数「Sell_Ticket」に格納します。
⑷ トレーリングストップ
「Break Out EA.mq4」においては、ポジションを保有している場合、すなわち、変数「Buy_Ticket」又は変数「Sell_Ticket」に格納されている値が正の場合に、トレーリングストップを発動させます。
トレーリングストップを実行するコードの詳細については「こちら」を参照してください。