【MQL4勉強プログラミング】約定した注文・保有ポジション・待機注文に修正・変更する方法!

OrderModify()関数は、既に約定した注文(=保有ポジション)や、待機注文に修正・変更を加えるために使用します。

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

bool OrderModify(
int ticket,
double price,
double stoploss,
double takeprofit,
datetime expiration,
color arrow_color
);

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

  • int ticket
    修正・変更を加える注文のチケット番号を指定します。
  • double price
    待機注文の新しい注文価格を指定します。
  • double stoploss
    新しい損切り価格を指定します。
  • double takeprofit
    新しい利益確定価格を指定します。
  • datetime expiration
    待機注文の新しい有効期限を指定します。
  • color arrow_color
    MetaTrader4(MT4)では、OrderModify()関数によって損切り価格や利益確定価格を変更すると、チャート上の注文の修正・変更を行った位置にオブジェクトが表示されます。
    この引数では、当該オブジェクトの表示色を指定します。
    オブジェクトを表示させたくない場合は、「clr_NONE」と記述します。

戻り値

注文の修正・変更が正常になされた場合は「true」が返され、正常に注文の修正・変更がなされなかった場合は「false」が返されます。

エラーのより詳しい情報を得るためには、GetLastError()関数を使用します。

注意点

注文価格と有効期限は、待機注文に対してのみ修正・変更を加えることができます。

OrderModify()関数の引数として変更されていない値が渡された場合は、エラー1(ERR_NO_RESULT:計算結果の不存在)が生成されます。

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

具体例

買いポジションを取得した後に、当該ポジションに対して損切り価格をしてたい場合は、以下のように記述します。


if(買いエントリー条件)
  {
    int Ticket = OrderSend(……);
    
    if(OrderSelect(Ticket,SELECT_BY_TICKET) == true);
      {
        bool Modified =
        OrderModify(OrderTicket(),OrderOpenPrice(),
                    OrderOpenPrice() - 50 * Point,
                    OrderTakeProfit(),0,clr_NONE);
      }
……