
MQL4 MQL4 の注文関数
OrderModify()
- できること
- 注文の損切り・利確・価格を変更する
- 対応
- MQL4
OrderModify() とは
MQL4 で、保有中のポジションの損切り(SL)・利確(TP)や、待機注文の価格・有効期限を変更する関数です。トレーリングストップや建値への損切り移動に使います。
OrderModify() の書式と引数
bool OrderModify(
int ticket,
double price,
double stoploss,
double takeprofit,
datetime expiration,
color arrow_color=clrNONE
)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
ticket | int | 必須 | 変更する注文のチケット番号。 |
price | double | 必須 | 待機注文の新しい価格。成行のポジションでは変更できないので OrderOpenPrice() を渡します。 |
stoploss | double | 必須 | 新しい損切り価格(0 なら損切りなし)。 |
takeprofit | double | 必須 | 新しい利確価格(0 なら利確なし)。 |
expiration | datetime | 必須 | 待機注文の有効期限。ポジションや期限なしなら 0。 |
arrow_color | color | clrNONE | チャートに表示する矢印の色。 |
戻り値
成功すると true、失敗すると false を返します。
OrderModify() の使い方(コード例)
// 買いポジションの損切りを、現在値から 20pips 下に追いかける(トレーリングストップ)
double pip = (_Digits == 3 || _Digits == 5) ? _Point * 10 : _Point;
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderSymbol() != _Symbol || OrderType() != OP_BUY) continue;
double newSl = NormalizeDouble(Bid - 20 * pip, _Digits);
// 今の損切りより有利になるときだけ変更する(エラー1を防ぐ)
if(newSl > OrderStopLoss() + _Point / 2)
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), newSl, OrderTakeProfit(), 0, clrGreen))
Print("OrderModify 失敗 error=", GetLastError());
}
}OnTick()・OnStart() などの関数の中に書いて使う例です。MetaEditor でコンパイルできることを確認済みです。
OrderModify() の注意点
- 今と同じ値で変更しようとするとエラー1(変更なし)になります。新しい値と今の値を比べ、変わるときだけ呼びます。
- 損切り・利確がストップレベルより現在値に近いとエラー130、フリーズレベル内だとエラー145 になります。
- 価格は NormalizeDouble(値, _Digits) で丸めてから渡します。
MQL4 と MQL5 の違い
MQL5 では、ポジションの損切り・利確は CTrade の PositionModify()、待機注文の変更は CTrade の OrderModify() を使います。












