![OrderModify](https://celebpanda.com/wp/wp-content/uploads/2021/05/OrderModify.jpg)
OrderModify
bool OrderModify(
int ticket, // チケット番号
double price, // 注文価格
double stoploss, // ストップロス価格
double takeprofit, // テイクプロフィット価格
datetime expiration, // 有効期限
color arrow_color // 色
);
- 引数
引数名 | 初期値 | I/O | 詳細 |
ticket | - | IN | 変更する注文のチケット番号。 |
price | - | IN | 新しい注文価格。(保留中の注文のみ) |
stoploss | - | IN | 新しいテイクプロフィット価格 |
expiration | - | IN | 新しい有効期限(保留中の注文のみ) 0で無期限を表す。 |
arrow_color | - | IN | stoploss、takeprofit変更の矢印の色。 パラメータを設定しない又はCLR_NONEを設定した場合は描画しません。 |
- 戻り値
成功した場合はtrueを返します。
失敗した場合はfalseを返します。
- その他
既に実行した未決済の注文に対してのみ変更可能です。
引数に渡された値が不変(現在の注文と同じ値)の場合は、エラーコードが1(ERR_NO_RESULT)が生成されます。
- サンプルソース
void setLT( int aticketNo ) {
double limitRate,stopRate;
int retryCnt; // 変更試行回数
bool rtn; // 変更判定
int errorcode;
bool isSelectOrder;
isSelectOrder = OrderSelect(aticketNo, SELECT_BY_TICKET); // オーダー中のチケット選択(チケットNo指定)
limitRate = OrderOpenPrice() + ( 50 * Point() ); // テイクプロフィット価格 = 約定価格 + 50.0pips
stopRate = OrderOpenPrice() - ( 10 * Point() ); // ストップロス価格 = 約定価格 - 10.0pips
limitRate = NormalizeDouble(limitRate , Digits() ); // テイクプロフィット価格 を正規化
stopRate = NormalizeDouble(stopRate , Digits() ); // ストップロス価格を正規化
for( retryCnt = 0; retryCnt < 20; retryCnt++ ) { // 試行回数上限:20
rtn = OrderModify(
OrderTicket(), // チケットNo
OrderOpenPrice(), // 注文価格
stopRate, // ストップロス価格
limitRate, // テイクプロフィット価格
OrderExpiration(), // 有効期限
clrYellow // 色
);
if ( rtn == false ) { // 注文変更拒否
Sleep(300); // 300msec待ち
errorcode = GetLastError(); // エラーコード取得
printf( "%d回目:注文変更拒否。エラーコード:%d , 詳細:%s ",
retryCnt+1, errorcode , ErrorDescription(errorcode));
} else { // 決済注文約定
Print("注文変更完了。 チケットNo=",aticketNo);
break;
}
}
}