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()」と記述します。
    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)では、EAによる注文が執行されてポジションを保有したり、EAによる保有ポジションを決済すると、チャート上の当該位置にオブジェクトが表示されます。
    この引数では、当該オブジェクトの表示色を指定します。
    オブジェクトを表示させたくない場合は、省略するか、「clr_NONE」と記述します。

戻り値

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

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

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

 注文価格は、成行買いの場合は「Ask」、成行売りの場合は「Bid」しか指定することができません。

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

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

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

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

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

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

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

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

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

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

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

 第二引数に「MODE_STOPLEVEL」を指定したMarketInfo()関数によって取得された値が「0」である場合は、①ストップレベルによる制限が存在しないか、②トレードサーバーが動的にストップレベルをコントロールする何らかの外部の仕組みを利用していることを意味します。

 ②の場合は、GetLastError()関数は、エラー130ERR_INVALID_STOPS:無効なストップレベル)を返します。

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

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

 待機注文の価格が正しくない場合は、エラー130ERR_INVALID_STOPS:無効なストップレベル)が生成されます。

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

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

取引量についての注意点

 トレードサーバーで許容されている総注文数(=保有ポジション数+待機注文数)を超えている場合は、新しい注文を出すことはできません。

 その場合は、トレードサーバーはエラー148ERR_TRADE_TOO_MANY_ORDERS:注文の過多)を返します。

具体例

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


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

関連ツール

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

 MT4で作動するEAをプログラミング不要で作成するためのツールです。

特 徴

  • インジケーターを組み合わせることで、EAを簡単に作ることができます。
    インジケーターは、MT4に標準で装備されているもののほか、市販のものも使用することができます
  • EAはmq4ファイルで作成されるので、mqlの学習にも役立ちます。
  • 作成したEAの著作権は本ツールを使用してEAを作成した本人に属し、販売なども自由です
  • シンプルなロジックのEAから高度なオプション付きのEAまで、簡単に作成することができます。