注文内容を変更 OrderModify 関数

関数

取引関数

OrderModify 関数

 注文番号で選択した注文(ポジション または オーダー)の内容を変更します。変更出来る内容は引数②~⑥の 5項目になります。

 相場の状況によっては変更が出来ない場合もあります。例えば、オーダーで買い指値価格 100円設定の時、相場が 110円の時は、買い指値価格を 120円に変更しようとしても出来ません。この場合、110円より低い買い指値価格に設定する必要があります。

データ型と構成・戻り値

bool OrderModify(①,②,③,④,⑤,⑥);

 戻り値は、選択したオーダー内容の変更が出来た時は true または 1、出来なかった時は false または -1 が取得されます。又、変更前と変更後で同じだった場合は false または -1になります。

 発生するエラーについては、GetLastError関数で取得することが出来ます。

引数 [6]

 OrderModify関数は 6個の引数で構成されます。


引数名データ型単位初期値説明
ticketint変更対象になる注文の注文番号
pricedouble選択した注文の通貨単位変更する新しい注文価格。
(オーダーのみ)
stoplossdouble選択した注文の通貨単位変更する新しい損切り価格。
takeprofitdouble選択した注文の通貨単位変更する新しい決済価格。
expirationdatetime変更する新しい注文(指値注文)の有効期限。
(オーダーのみ)
有効期限を設定しない場合は「0」を入力。有効期限を設定する場合は TimeCurrent関数に経過秒数を足す。※2
arrow_colorcolorclrNONE変更した注文位置の矢印の色。設定しない場合は「clrNONE」を入力すると矢印が表示されません。
Webカラーの種類はこちら。
※初期値があるものは省略可能です。省略した場合、初期値が設定されます。
※2 例)1時間後を有効期限として約定しなかったら注文取り下げする時「TimeCurrent() + 3600」と入力。業者にもよりますが、600~660秒以上(10~11分以上)に設定しないと注文が成立しません。

使用例

OrderModify関数による注文の変更

 最初にOrderSend関数を使って 1つ目は成行買い注文、2つ目は指値買い注文をします。
 1つ目の成行買い注文は約定後、損切価格と決済価格の 2つを変更します。
 2つ目の指値買い注文はオーダー後、指値価格、損切価格、決済価格、注文の有効期限の 4つを変更します。

※業者によっては、EAで連続する注文が出来ないところもあります。(スキャルピングを禁止しているFX会社は出来ないことがあります)

コード

// OrderModify 関数による注文の変更
#property strict
void OnInit() {

   int ticket1;  // 注文番号1
   int ticket2;  // 注文番号2
   bool tf, tf1; // true or false の判定
   
   ticket1 = OrderSend(Symbol(), OP_BUY,      0.01, Ask, 30,  0,  0, "①買い成行注文", 1001, 0, clrNONE); // ①買い成行注文
   ticket2 = OrderSend(Symbol(), OP_BUYLIMIT, 0.01, 50,  30, 30, 80, "②買い指値注文", 2001, 0, clrNONE); // ②買い指値注文

   tf1 = OrderSelect(ticket1, SELECT_BY_TICKET);
   double   t1_a1 = OrderOpenPrice();
   double   t1_b1 = OrderStopLoss();
   double   t1_c1 = OrderTakeProfit();
   datetime t1_d1 = OrderExpiration();
   
   tf = OrderModify(ticket1, OrderOpenPrice(), 90, 360, OrderExpiration()); // ①のポジションの内容を変更
   
   tf1 = OrderSelect(ticket1, SELECT_BY_TICKET);
   double   t1_a2 = OrderOpenPrice();
   double   t1_b2 = OrderStopLoss();
   double   t1_c2 = OrderTakeProfit();
   datetime t1_d2 = OrderExpiration();
   
   if (tf == true) {
      Print("①注文番号",ticket1,"-取引価格:", t1_a1, " → ", t1_a2,"、損切価格:", t1_b1, " → ", t1_b2,"、決済価格:", t1_c1, " → ", t1_c2,"、取引期間:", t1_d1, " → ", t1_d2, " 変更完了");
   } else {
      Print("①注文番号",ticket1,"注文ポジションの変更が出来ません");
   }
   
   tf1 = OrderSelect(ticket2, SELECT_BY_TICKET);
   double   t2_a1 = OrderOpenPrice();
   double   t2_b1 = OrderStopLoss();
   double   t2_c1 = OrderTakeProfit();
   datetime t2_d1 = OrderExpiration();
   
   tf = OrderModify(ticket2, 80, 60, 100, TimeCurrent()+3600); // ②のオーダーの内容を変更
   
   tf1 = OrderSelect(ticket2, SELECT_BY_TICKET);
   double   t2_a2 = OrderOpenPrice();
   double   t2_b2 = OrderStopLoss();
   double   t2_c2 = OrderTakeProfit();
   datetime t2_d2 = OrderExpiration();

   if (tf == true) {
      Print("②注文番号",ticket2,"-取引価格:", t2_a1, " → ", t2_a2,"、損切価格:", t2_b1, " → ", t2_b2,"、決済価格:", t2_c1, " → ", t2_c2,"、取引期間:", t2_d1, " → ", t2_d2, " 変更完了");
   } else {
      Print("②注文番号",ticket2,"オーダーの変更が出来ません");
   }
}

このコードをコンパイルして実行するのに、自動売買を許可しておく必要があります。
自動売買を許可する方法はこちら、コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

ターミナルの取引タブ 注文して変更後の内容
ターミナルのエキスパートタブ
タイトルとURLをコピーしました