OrderSend()

 OrderSend()関数は、注文を出すために使用します。

 OrderSend()関数は、以下のように定義されています。

int 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
    注文を出す通貨ペアを指定します。
    通貨ペア名は、「気配値表示ウィンドウ」に表示されているとおりに記述します。
    特定の通貨ペア名を指定せず、EA等を適用しているチャートの通貨ペアに対して発注したい場合は「Symbol()」(詳細は「こちら」を参照してください。)と記述します。
  • int cmd
    以下の表に従って、注文方法を指定します。

    注文方法の種類・内容

    種 類
    定数
    内 容
    OP_BUY
    成行買い
    OP_SELL
    成行売り
    OP_BUYLIMIT
    指値買い
    OP_SELLLIMIT
    指値売り
    OP_BUYSTOP
    逆指値買い
    OP_SELLSTOP
    逆指値売り
  • double volume
    ロットサイズを指定します。
  • double price
    注文価格を指定します。
  • int slippage
    許容スリッページ数を指定します。
  • double stoploss
    損切り価格を指定します。損切価格を指定しない場合は、「」と記述します。
  • double takeprofit
    利益確定価格を指定します。利益確定価格を指定しない場合は、「」と記述します。
  • string comment
    注文に対するコメントを指定します。コメントを指定しない場合は、「NULL」と記述します。
  • int magic
    マジックナンバー(=個々のEAを識別する整数値)を指定します。
  • datetime expiration
    注文の有効期限を指定します。
    有効期限の指定は、待機注文に対してのみ有効です。
    有効期限を指定しない場合は、「」と記述します。
  • color arrow_color
    MetaTrader4(MT4)では、注文が執行されてポジションを保有すると、チャート上の約定した位置にオブジェクトが表示されます。
    この引数では、当該オブジェクトの表示色を指定します。
    オブジェクトを表示させたくない場合は、「clr_NONE」と記述します。

戻り値

 正常に約定した場合はチケット番号が返され、正常に約定しなかった場合は「-1」が返されます。

 「-1」が返された場合に、エラーのより詳しい情報を得るためには、GetLastError()関数を使用します。

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

注文価格の指定についての注意点

 注文価格は、成行買いの場合は「Ask」(詳細は「こちら」を参照してください。)、成行売りの場合は「Bid」(詳細は「こちら」を参照してください。)しか指定することができません。

 EA等を適用しているチャートの通貨ペアとは異なる通貨ペアに対して発注する場合は、第二引数にMODE_BID又はMODE_ASKを指定した、MarketInfo()関数(詳細は「こちら」を参照してください。)を使用して注文価格を指定しなければなりません。

 計算されていたり、提示レートの小数点以下の桁数で正規化(四捨五入等する)されていない値を注文価格に指定することはできません

 指定した注文価格が提示レートになかったり、提示レートの小数点以下の桁数で正規化されていない場合は、エラー129(ERR_INVALID_PRICE:無効な価格)が生成されます。

期限切れについての注意点

 指定した注文価格が完全に期限切れの場合は、許容スリッページ数の指定とは独立して、エラー138(ERR_REQUOTE:価格の再提示)が生成されます。

 指定した注文価格が期限切れでも、その価格が提示レートに存在していれば、現在価格で注文は執行されます。ただし、現在価格が指定した注文価格に許容スリッページ数を加減した値の範囲内にある場合を除きます。

ストップレベルについての注意点

 市場価格に近すぎる損切り価格と利益確定価格を指定することはできません

 損切り価格と利益確定価格が市場価格から最低限どれだけ離れていなければならないか(=ストップレベル)は、第二引数にMODE_STOPLEVELを指定したMarketInfo()関数を使用することによって確認することができます。なお、ストップレベルの値の単位は「ポイント」です。

 間違った、又は提示レートの小数点以下の桁数で正規化されていないストップレベルの場合は、エラー130(ERR_INVALID_STOPS:無効なストップレベル)が生成されます。

 待機注文の価格は、市場価格に近すぎてはいけません

 待機注文の価格に対するストップレベルは、第二引数にMODE_STOPLEVELを指定したMarketInfo()関数を使用することによって確認することができます。

 待機注文の価格が正しくない場合は、エラー130(ERR_INVALID_STOPS)が生成されます。

有効期限についての注意点

 待機注文の有効期限を指定することのできないトレードサーバーを使用している場合に、「0」以外の値を有効期限として指定すると、エラー147(ERR_EXPIRATION_DENIED:有効期限の指定の拒否)が生成されます。

取引量についての注意点

 トレードサーバーで許容されている総注文数(=保有ポジション数+待機注文数)を超えている場合は、新しい注文を出すことはできず、トレードサーバーはエラー148(ERR_TRADE_TOO_MANY_ORDERS:注文の過多)を返します。

具体例

 一定の条件を満たした場合に成行きで買い注文を出したい場合は、以下のように記述します。


if(買いエントリー条件)
  {
   int Ticket =
   OrderSend(Symbol(),OP_BUY,0.1,Ask,10,0,0,
             NULL,1212,0,Magenta);
  }
  • Symbol()関数の詳細については「こちら」を参照してください。
  • Askの詳細については「こちら」を参照してください。
  • 決済注文を出す場合については「こちら」を参照してください。

関連ツール

MQL言語の学習ができ、裁量トレーダーもEA開発が可能になる!
『EAつくーる』
『EAつくーる』 | fx-on.com

『EAつくーる』
『EAつくーる』 | fx-on.com

 上記ツール(EAつくーる『EAつくーる』 | fx-on.com)の詳細については「こちら『EAつくーる』 | fx-on.com」を参照してください。


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