【MQL4】EAで注文を出す時に使うプログラムOrderSend関数とは?使い方を詳しく解説!

EAをプログラミングしていて、ロジックは理解できても具体的な注文の出し方がわからない場合がありませんか?

そのような場合、OrderSend関数が役立ちます。

今回は、OrderSend関数について説明し、その使用方法と返り値についてまとめました。

これはMQL4で注文を出す方法について知りたい方にとって参考になるでしょう。

こんな方におすすめ

  • OrderSend関数について知りたい方
  • 自作EAで注文を出す方法を知りたい方
  • MQL4の知識を深めたい方

OrderSend関数とは

OrderSend関数は、EAで注文を出すために使用される関数です。

つまり、予め決められた計算や処理方法です。

OrderSend関数を使用することで、EAはFX会社に注文を出すことができます。

ただし、すべての注文を出すことはできず、次の3つの注文にのみ対応しています。

  • 成行注文:値段を指定せずに注文を出す方法
  • 指値注文:希望する売買価格(買いの場合は上限価格、売りの場合は下限価格)を指定して注文を出す方法
  • 逆指値注文:指定した価格以上になった場合は買い注文を出し、指定した価格以下になった場合は売り注文を出す方法

これら3つに限定されますが、基本的なエントリー注文はほとんど網羅しているため、大きな制約はありません。

また、指値注文の価格変更や決済に関する関数は別途用意されています。

OrderSend関数の書き方

OrderSend関数の基本的な書き方をみていきましょう。

例)

int ticketNum = OrderSend( ①, ②, ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨, ⑩, ⑪);

ご覧の通り、パラメータが11個も用意されており、詳細な設定が可能になっています。

なお、①から⑪までのパラメーターは基本的な書き方の例で詳しく解説しています。

OrderSend関数の戻り値

OrderSend関数の戻り値とは、プログラムや関数から出てくる値のことです。

この関数では、シンプルな形式のプリミティブ型を使用しており、int型の戻り値が返されます。

要するに、戻り値はシンプルで、OrderSend関数では一つの値が返されます。

ただし、OrderSend関数では返された値をほとんど使用することはありません。

この点が、MQL4の言語に搭載された関数の中でも特殊な部類に入る理由です。

シンプルであり、戻り値をあまり利用しないOrderSend関数では、以下のような値が戻り値として返されます。

  • 注文が失敗した場合:-1が返されます
  • 注文が成功した場合:注文番号が返されます

注文番号は特殊な記述をしない限り使用されませんので、実質的には注文が通ればそのまま処理され、失敗した場合には-1が返される仕組みです。

OrderSend関数は注文を出すだけのシンプルな関数なので、戻り値について意識する必要はあまりありません。

OrderSend関数の引数

先ほど紹介したパラメーターは引数と言われ、いわばOrderSend関数の入力する値です。

ただ、その値の数は先ほど紹介したように次の11種類で構成されているのが特徴です。

なお、先ほどの例に書かれている数字と以下の引数は一致させています。

int ticketNum = OrderSend( ①, ②, ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨, ⑩, ⑪);

※表記は(データ型:引数名)

OrderSend(
string:symbol
int:cmd
double:volume
double:price
int:slippage
double:stoploss
double:takeprofit
string:comment
int:magic
datetime:expiration
color:arrow_color
);

以上についてそれぞれ解説していきましょう。

string:symbol 通貨ペアを設定する引数

symbolは、注文を実行する通貨ペアを設定するための引数です。

米ドル円を指定したい場合、この引数では「USDJPY」という値です。

ただ、EAに特化したMQL4では、「Symbol」または「NULL(なにもないという意味)」の記述だけで自動的に通貨ペアが設定されます。

記述例)

int ticketNum = OrderSend( NULL, ②, ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨, ⑩, ⑪);

int:cmd 注文の種類を設定する引数

cmdは注文の種類を設定する引数です。

注文の種類として次のような6種類が指定できます。

OP_BUY 買いの成行注文
OP_BUYLIMIT 買いの指値注文
OP_BUYSTOP 買いの逆指値注文

OP_SELL 売りの成行注文
OP_SELLLIMIT 売りの指値注文
OP_SELLSTOP 売りの逆指値注文

先ほど紹介した、成行、指値、逆指値の3種類を買いポジション、売りポジションそれぞれで注文できるようになっています。

記述例)売りの成り行き注文を記述

int ticketNum = OrderSend( ①, OP_SELL, ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨, ⑩, ⑪);

double:volume 注文したいロット数を指定する引数

volumeはロット単位で注文する数値を指定する引数です。

0.1を入力すれば、0.1lotでの注文が可能になります。

記述については自動計算した数値を埋め込むこともできます。

もし、安定動作したEAにしたい場合は自動計算よりも数値を固定値にしておく方が安定するので、慣れないうちは固定値を入力しておきましょう。

記述例)0.1lotで指定

int ticketNum = OrderSend( ①, ②, 0.1, ④, ⑤, ⑥, ⑦, ⑧, ⑨, ⑩, ⑪);

double:price 注文価格を設定する引数

priceは注文する価格を入力しましょう。

ただ、基本的には次の2項目のいずれかを入力します。

  • Ask(現在の買い値):買い注文を出したい場合
  • Bid(現在の売り値):売り注文を出したい場合

記述例)売り注文を出したい場合

int ticketNum = OrderSend( ①, ②, ③, Bid, ⑤, ⑥, ⑦, ⑧, ⑨, ⑩, ⑪);

int:slippage 許容するスリッページを設定する引数

slippageはスリッページの値を入力します。

注文をした場合、どの程度価格がズレたら(スリッページしたら)注文をキャンセルするかといった誤差の許容値に関する引数です。

単位は0.1となっており、例えば1.0pipsを許容値とした場合は10と入力する形です。

記述例)1.0pipsを許容値とした場合

int ticketNum = OrderSend( ①, ②, ③, ④, 10, ⑥, ⑦, ⑧, ⑨, ⑩, ⑪);

double:stoploss 損切りを設定する引数

EAには、損失を拡大しないための損切機能が必要です。

stoplossは、損切りする価格を設定するための引数として重要な役割を果たしています。

たとえば、米ドル円が135円に損切したい場合は、135.000と入力する方法で設定可能です。

ただし、損切りを設定しないこともでき、その場合は「0」を入力します。

記述例)損切を135円に設定する。

int ticketNum = OrderSend( ①, ②, ③, ④, ⑤, 135.000, ⑦, ⑧, ⑨, ⑩, ⑪);

記述例2)損切なしにする。

int ticketNum = OrderSend( ①, ②, ③, ④, ⑤, 0, ⑦, ⑧, ⑨, ⑩, ⑪);

double:takeprofit 利確を設定する引数

利確する価格を設定できる引数がtakeprofitです。

和訳するとそのまま「利益確定」を意味する言葉なので、分かりやすいといえるでしょう。

設定方法は、先ほどのstoplossと同じく、米ドル円140円50銭で利確したい場合は、140.500と入力します。

なお、関連して利確を設定しない場合は、「0」と入力しましょう。

記述例)140円50銭で利確するように設定する。

int ticketNum = OrderSend( ①, ②, ③, ④, ⑤, ⑥, 140.500, ⑧, ⑨, ⑩, ⑪);

string:comment ポジションのコメントを設定する引数

注文にコメントを入れたい場合に使うのがcommentです。

ただ、この引数については、数字を扱うint型(プリミティブ型)ではなく、String型といって文字列を扱うタイプです。

そのため、“EAの注文” のようにダブルクオテーションで囲んで使用します。

コメントを入れない場合は、そのまま”” で処理しましょう。

記入例)EAの注文とコメントする場合

int ticketNum = OrderSend( ①, ②, ③, ④, ⑤, ⑥, ⑦, ”EAの注文”, ⑨, ⑩, ⑪);

int:magic マジックナンバーを設定

magicは、マジックナンバーを設定する引数です。

このナンバーは、自動売買が注文したポジションに付ける整理番号のことで、好きな番号で管理できます。

たとえば、自動売買Aのポジションが10、自動売買Bのポジションが20といった番号で管理するといった方法です。

整数値であれば、どの数値でも問題ないため、好きなマジックナンバーを設定しましょう。

記入例)マジックナンバーを10に設定する。

int ticketNum = OrderSend( ①, ②, ③, ④, ⑤, ⑥, ⑦, ⑧, 10, ⑩, ⑪);

datetime:expiration ポジションの有効期限を設定する引数

expiration には、ポジションの有効期限が設定できる数値です。

設定できる引数ではあるものの、値段指定をせずに注文を入れる成り行き注文の場合は、すぐにポジションを取ってしまうので設定できません。

よって、指値や逆指値の注文時のみ有効になる引数です(成行の場合は0と入力)。

また、expirationは、日付と時間の両方の部分を含む値に使用されるdatetime型を使用するので、秒単位で指定します。

そのため、1分後であれば60、1時間後であれば3600と入力する仕組みです。

記入例)成り行き注文で行う。

int ticketNum = OrderSend( ①, ②, ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨, 0, ⑪);

color arrow_color チャート上のポジションの色を設定

arrow_color には、チャート上に表示されるポジションの色が設定できます。

空欄にしてもEAはきちんと動きますが、もし色を指定したい場合は、「clr好きな色」を設定します。

たとえば黒にしたい場合は、「clrBlack」です。

記入例)赤色にしたい場合

int ticketNum = OrderSend( ①, ②, ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨, ⑩, clrRed);

OrderSend関数の使い方

最後にOrderSend関数を使ったプログラムを見ていきます。

記入例)米ドル円が135円0銭になったら成行売り注文を出す

void OnTick()
{
if(Bid == 135.000)
{
int ticketNum = OrderSend(NULL, OP_SELL, 0.1, Ask, 20, 135.000, 130.000, "EAの注文", 10, 0, clrBlack);
}
}

冒頭に記述したOnTick関数は、ロウソク足が動いたときに実行されるイベント関数です。

これを実行することで、135.000円になったら成り行き売り注文を出してくれます。

ただ、135円の付近でレンジ相場が発生してしまうと、誤って連続トレードしてしまうリスクがあるため、追加の記述が必要です。

弊さいとが独自に開発した「FXオリジナルインジケーター」を無料でプレゼント!

インターネット上に存在しないインジケーター、他では高額な金額で販売されているようなインジケーターも無料で配布する期間限定のプレゼント企画!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です