<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OrderModify アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/ordermodify/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/ordermodify/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Tue, 31 Mar 2026 12:31:17 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mql-programing.com/main29/wp-content/uploads/2021/02/cropped-ブログアイコン-32x32.jpg</url>
	<title>OrderModify アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/ordermodify/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4関数】OrderModify 関数の使い方！ポジションの変更注文の出し方</title>
		<link>https://mql-programing.com/archives/839/ordermofidy/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Thu, 06 May 2021 05:03:56 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<category><![CDATA[注文]]></category>
		<category><![CDATA[OrderModify]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=839</guid>

					<description><![CDATA[<p>OrderModify関数とは ポジションの損切や利確の価格を変更したいときはありませんか？ 損切りや利確はエントリーするとき（OrderSend関数）に設定するのが一般的ですが、エントリー後でも変更することができます。 [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/839/ordermofidy/">【MQL4関数】OrderModify 関数の使い方！ポジションの変更注文の出し方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/2021/10/アイコン.png" alt="朝日奈りさ" class="speech-icon-image"/></figure><div class="speech-name">朝日奈りさ</div></div><div class="speech-balloon">
<p class="wp-block-paragraph">自動でポジションの損切りや利確ラインを変更するにはどうしたらいいんだろう？</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc1">OrderModify関数とは</span></h2>



<p class="wp-block-paragraph">ポジションの損切や利確の価格を変更したいときはありませんか？</p>



<p class="wp-block-paragraph">損切りや利確はエントリーするとき（<a href="https://mql-programing.com/ordersend/" title="【MQL4関数】OrderSend関数の使い方とトレード注文サンプル">OrderSend関数</a>）に設定するのが一般的ですが、エントリー後でも変更することができます。</p>



<p class="wp-block-paragraph">自動売買でポジションの変更注文を出すには、<strong>OrderModify関数</strong>を使います。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">OrderModify関数は、ポジションの変更注文を出す関数です。</span></strong></p>



<p class="wp-block-paragraph">変更できるポジションの種類は以下の通りです。</p>



<ul class="wp-block-list"><li><strong>エントリー後のポジション</strong></li><li><strong>予約ポジション</strong>（指値・逆指値）</li></ul>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">つまりどちらかのポジションであれば、変更注文を出すことができます。</p>



<p class="wp-block-paragraph">しかし変更できる内容には制限があります。</p>



<p class="wp-block-paragraph">もちろんロット数や取得価格を変更することはできません。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">変更できる内容は以下の４つです。</p>



<ul class="wp-block-list"><li><strong>予約ポジションの注文価格</strong></li><li><strong>損切り価格</strong></li><li><strong>利確価格</strong></li><li><strong>予約ポジションの有効期限</strong></li></ul>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">特に、<strong><span class="marker-under-red">損切り価格や利確価格を変更するとき</span></strong>に、OrderModify関数がよく使われます。</p>



<p class="wp-block-paragraph">少し上級者向けの関数ですが、OrderModify関数の使い所は多いので、覚えてしまいましょう。</p>



<p class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc2">OrderModify関数の書き方</span></h2>



<p class="wp-block-paragraph">OrderModify関数の使い方は、基本的な関数と同じです。</p>



<p class="wp-block-paragraph">関数をマスターしていない方はこちらの記事が参考になります。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-自動売買を作ろう！ wp-block-embed-自動売買を作ろう！"><div class="wp-block-embed__wrapper">

<a href="https://mql-programing.com/function/" title="【MQLプログラミング基礎】関数は難しい？関数の使い方を理解しよう！プログラム例あり" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/cocoon-resources/blog-card-cache/624de21c236a113367001dd95952af29.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQLプログラミング基礎】関数は難しい？関数の使い方を理解しよう！プログラム例あり</div><div class="blogcard-snippet external-blogcard-snippet">関数とは？ 「プログラムは、何度も同じことを書かないといけない」 と思っている方、ぜひ関数を使ってみてください。 関数とは、何度も繰り返すプログラムを、まとめた状態のものです。 事前に、まとまりを作っておくことで、同じプ</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://mql-programing.com/archives/183/function/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc3">基本的な書き方</span></h3>



<p class="wp-block-paragraph">OrderModify関数の基本的な書き方は以下の通りです。</p>



<p class="wp-block-paragraph">簡単のために引数を省略しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify( ①, ②, ③, ④, ⑤, ⑥);</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">OrderModify関数の<strong><span class="marker-under-red">返り値は bool型で、引数は６つあります。</span></strong></p>



<p class="wp-block-paragraph">まずは返り値から見ていきましょう。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc4">返り値（戻り値）</span></h3>



<p class="wp-block-paragraph">OrderModify関数の返り値は bool型です。</p>



<p class="wp-block-paragraph">「<span class="bold-red">true</span>」や「<span class="bold-blue">false</span>」という値が返ってきます。</p>



<p class="wp-block-paragraph">数値にすると「１」や「０」です。</p>



<p class="wp-block-paragraph">true や false が返ってくる条件は以下の通りです。</p>



<ul class="wp-block-list"><li><strong><span class="bold-red">true</span>：変更注文が正常に完了したとき</strong></li><li><strong><span class="bold-blue">false</span>：変更注文が失敗したとき</strong></li></ul>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">もし、false が返ってきた場合、変更注文が失敗しているため、再度 OrderModify関数を実行する必要があります。</p>



<p class="wp-block-paragraph">ですが、<strong><span class="marker-under-red">注文の９９％は正常に完了する</span></strong>ため、そこまで気にしなくても大丈夫です。</p>



<p class="wp-block-paragraph">もし変更注文が失敗していた場合は、手動で変更しましょう。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc5">引数</span></h3>



<p class="wp-block-paragraph">OrderModify関数の引数は６つあります。</p>



<p class="wp-block-paragraph">引数が多いので、一つ一つゆっくり見ていきましょう。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">まずは一覧で確認します。</p>



<figure class="wp-block-table alignwide"><table><tbody><tr><td><strong>番号</strong></td><td><strong>データ型</strong></td><td><strong>引数名</strong></td><td><strong>内容</strong></td></tr><tr><td>①</td><td>int</td><td>ticket</td><td>変更したいポジションのチケット番号</td></tr><tr><td>②</td><td>double</td><td>price</td><td>変更後の価格</td></tr><tr><td>③</td><td>double</td><td>stoploss</td><td>変更後の損切り価格</td></tr><tr><td>④</td><td>double</td><td>takeprofit</td><td>変更後の利確価格</td></tr><tr><td>⑤</td><td>datetime</td><td>expiration</td><td>変更後の有効期限</td></tr><tr><td>⑥</td><td>color</td><td>arrow_color</td><td>チャート上の矢印の色</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">それぞれ詳しく解説しますので、一緒に OrderModify関数を作っていきましょう。</p>



<p class="wp-block-paragraph">　</p>



<h4 class="wp-block-heading"><span id="toc6">① ticket</span></h4>



<p class="wp-block-paragraph"><strong>ticket には変更したいポジションのチケット番号を入力します。</strong></p>



<p class="wp-block-paragraph">ポジションのチケット番号を直接入力しても良いですが、<a href="https://mql-programing.com/orderticket/" title="【MQL4関数】チケット番号の取得方法（OrderTicket関数）">OrderTicket関数</a>という便利な関数があるので、それを使うと良いでしょう。</p>



<p class="wp-block-paragraph">OrderTicket関数を実行する前に、<a href="https://mql-programing.com/orderselect/" title="【MQL4関数】保有ポジションの選択（OrderSelect関数）のやり方">OrderSelect関数</a>でポジションを選択しておく必要がありますので、注意してください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), ②, ③, ④, ⑤, ⑥)</code></pre></div>



<p class="wp-block-paragraph">　</p>



<h4 class="wp-block-heading"><span id="toc7">② price</span></h4>



<p class="wp-block-paragraph"><strong>price には変更後の取得価格を入力します。</strong></p>



<p class="wp-block-paragraph">こちらは予約ポジション（指値注文、逆指値注文）の場合のみ変更可能です。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">エントリー後のポジションの場合は、取得価格を変更できないので注意しましょう。</span></strong></p>



<p class="wp-block-paragraph">エントリー後のポジションを指定する場合は、エントリーしている価格を入力します。</p>



<p class="wp-block-paragraph">ここでも便利な関数として、OrderOpenPrice関数というものがありますので、利用してみてください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), ③, ④, ⑤, ⑥)</code></pre></div>



<p class="wp-block-paragraph">　</p>



<h4 class="wp-block-heading"><span id="toc8">③ stoploss</span></h4>



<p class="wp-block-paragraph"><strong>stoploss には、変更後の損切り価格を入力します。</strong></p>



<p class="wp-block-paragraph">ここで注意していただきたいのは、stoplossの価格は、現在の価格より下に設定する事です。</p>



<p class="wp-block-paragraph">もし現在の価格より、有利な価格を入力すると、注文が通りません。</p>



<p class="wp-block-paragraph">エラーにはなりませんが、「変更注文を出したのに、処理されてない！」ということになる可能性もあるので、stoplossの価格設定には注意しましょう。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">stoplossで設定できるのは以下の３通りです。</p>



<ul class="wp-block-list"><li>0</li><li>損切り価格</li><li>OrderStopLoss関数</li></ul>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">0の場合は、損切りなしに設定します。</p>



<p class="wp-block-paragraph">損切り価格を入力した場合は、その価格に損切りが入ります。</p>



<p class="wp-block-paragraph">OrderStopLoss関数を利用した場合は、変更前の損切り価格が設定されます。</p>



<p class="wp-block-paragraph">もし損切り価格を変更せずに、他の項目を変更したい場合は、OrderStopLoss関数を使うと良いでしょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), ④, ⑤, ⑥)</code></pre></div>



<p class="wp-block-paragraph">　</p>



<h4 class="wp-block-heading"><span id="toc9">④ takeprofit</span></h4>



<p class="wp-block-paragraph"><strong>takeprofitには変更後の利確価格を入力します。</strong></p>



<p class="wp-block-paragraph">stoplossの入力と同じように、現在の価格より上でなければ注文が通りません。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">takeprofitで設定できるのは以下の３通りです。</p>



<ul class="wp-block-list"><li>0</li><li>利確価格</li><li>OrderTakeProfit関数</li></ul>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">0の場合は、利確なしに設定します。</p>



<p class="wp-block-paragraph">利確価格を入力した場合は、その価格に利確が入ります。</p>



<p class="wp-block-paragraph">OrderTakeProfit関数を利用した場合は、変更前の利確価格が設定されます。</p>



<p class="wp-block-paragraph">他の項目を変更する場合は、OrderTakeProfit関数を利用すると良いでしょう。</p>



<p class="wp-block-paragraph">ここでは、利確価格を変更するため、以下のように入力します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), 110.000, ⑤, ⑥)</code></pre></div>



<p class="wp-block-paragraph">　</p>



<h4 class="wp-block-heading"><span id="toc10">⑤ expiration</span></h4>



<p class="wp-block-paragraph"><strong>expirationには、ポジションの有効期限を入力します。</strong></p>



<p class="wp-block-paragraph">この引数はほとんど使わないので、読み飛ばしていただいても大丈夫です。</p>



<p class="wp-block-paragraph">expirationは予約ポジションのみ設定が可能です。</p>



<p class="wp-block-paragraph">エントリー後のポジションには使えませんので、ご注意ください。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">expirationはdatetime型の変数なので、datetime型の形式に合わせないとエラーが出ます。</p>



<p class="wp-block-paragraph">例えば、以下のような形式です。2021年9月22日00時00分00秒まで有効という設定です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>datetime expiration = D'2021.09.22 00:00:00';</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">このように少し厄介な引数なので、基本的に OrderExpiration関数を使用すればOKです。</p>



<p class="wp-block-paragraph">OrderExpiration関数は、変更前の有効期限を返す関数です。</p>



<p class="wp-block-paragraph">そのため、有効期限を変更しない場合は、この関数を使用すれば問題ありません。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), 110.000, OrderExpiration(), ⑥)</code></pre></div>



<p class="wp-block-paragraph">　</p>



<h4 class="wp-block-heading"><span id="toc11">⑥ arrow_color</span></h4>



<p class="wp-block-paragraph">最後にarrow_colorの設定です。</p>



<p class="wp-block-paragraph">こちらは、変更注文を出した位置に印がつくのですが、その色を設定します。</p>



<p class="wp-block-paragraph">色をつけなくても良い場合は、「０」または、clrNONEと入力してください。</p>



<p class="wp-block-paragraph">透明になりますので、チャート分析の邪魔にならないかと思います。</p>



<p class="wp-block-paragraph">もし色をつけたい場合は、「clr○○」という特殊な変数がありますので、そちらを利用すると良いでしょう。</p>



<p class="wp-block-paragraph">私は、clrRedが好きなので、clrRedを設定しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), 110.000, OrderExpiration(), clrRed)</code></pre></div>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc12">OrderModify関数の引数のまとめ</span></h3>



<p class="wp-block-paragraph">ここまでOrderModify関数の引数を、ざっと見てきました。</p>



<p class="wp-block-paragraph">stoplossやtakeprofitの価格設定には気をつけるようにしてください。</p>



<p class="wp-block-paragraph">また、両方同時に変更することもできるので、両方変更したい場合は、価格を入力すると変更できます。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">変更する前の情報を取得するには、以下の関数が便利です。</p>



<ul class="wp-block-list"><li>OrderStopLoss関数</li><li>OrderTakeProfit関数</li><li>OrderExpiration関数</li></ul>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">以下のプログラムはOrderModify関数の完成例です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), 110.000, OrderExpiration(), clrRed)</code></pre></div>



<p class="wp-block-paragraph">これで基本的な書き方はマスターできたと思いますので、具体的な使い方も見ていきましょう。</p>



<p class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc13">OrderModify関数の実用的なプログラム例</span></h2>



<p class="wp-block-paragraph">ここからは、実際のEAで使える実用的なプログラム例を紹介していきます。</p>



<p class="wp-block-paragraph">OrderModify関数の基本的な書き方がわかったら、ぜひこれらの応用例も参考にしてみてください。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc14">例１：トレーリングストップEA</span></h3>



<p class="wp-block-paragraph">最も実用的な使い方が<strong>トレーリングストップ</strong>です。価格が有利な方向に動いたら、損切りラインを自動で引き上げ（引き下げ）て利益を確保する手法です。</p>



<p class="wp-block-paragraph">以下のEAは、保有中の全ポジションに対してトレーリングストップを適用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| トレーリングストップEA                                              |
//| 価格が有利に動いたら損切りラインを自動で追従させる                      |
//+------------------------------------------------------------------+
input int TrailingStopPips = 30;  // トレーリングストップ幅（pips）
input int TrailingStartPips = 20; // トレーリング開始条件（pips利益が出てから）

void OnTick()
{
   // ポイント値を取得（5桁ブローカー対応）
   double pip = Point;
   if(Digits == 3 || Digits == 5)
      pip = Point * 10;

   // 保有中の全ポジションをループ
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // ポジションを選択
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // 自分のEAの通貨ペアが一致するか確認
      if(OrderSymbol() != Symbol())
         continue;

      // 買いポジションのトレーリングストップ
      if(OrderType() == OP_BUY)
      {
         // 現在の利益がトレーリング開始条件を超えているか
         double buyProfit = Bid - OrderOpenPrice();
         if(buyProfit >= TrailingStartPips * pip)
         {
            // 新しい損切り価格を計算
            double newSL = Bid - TrailingStopPips * pip;
            // 現在のSLより有利（高い）場合のみ変更
            if(newSL > OrderStopLoss() || OrderStopLoss() == 0)
            {
               bool result = OrderModify(
                  OrderTicket(),       // チケット番号
                  OrderOpenPrice(),    // 取得価格はそのまま
                  NormalizeDouble(newSL, Digits), // 新しい損切り価格
                  OrderTakeProfit(),   // 利確はそのまま
                  OrderExpiration(),   // 有効期限はそのまま
                  clrBlue             // 矢印の色（青）
               );
               if(result)
                  Print("買いトレーリングストップ更新: SL=", newSL);
               else
                  Print("トレーリングストップ更新失敗: エラー=", GetLastError());
            }
         }
      }

      // 売りポジションのトレーリングストップ
      if(OrderType() == OP_SELL)
      {
         // 現在の利益がトレーリング開始条件を超えているか
         double sellProfit = OrderOpenPrice() - Ask;
         if(sellProfit >= TrailingStartPips * pip)
         {
            // 新しい損切り価格を計算
            double newSL = Ask + TrailingStopPips * pip;
            // 現在のSLより有利（低い）場合のみ変更
            if(newSL < OrderStopLoss() || OrderStopLoss() == 0)
            {
               bool result = OrderModify(
                  OrderTicket(),       // チケット番号
                  OrderOpenPrice(),    // 取得価格はそのまま
                  NormalizeDouble(newSL, Digits), // 新しい損切り価格
                  OrderTakeProfit(),   // 利確はそのまま
                  OrderExpiration(),   // 有効期限はそのまま
                  clrRed              // 矢印の色（赤）
               );
               if(result)
                  Print("売りトレーリングストップ更新: SL=", newSL);
               else
                  Print("トレーリングストップ更新失敗: エラー=", GetLastError());
            }
         }
      }
   }
}</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">このEAのポイントは以下の通りです。</p>



<ul class="wp-block-list"><li><strong>TrailingStartPips</strong>で指定したpips分の利益が出てからトレーリングを開始します</li><li><strong>TrailingStopPips</strong>で指定したpips幅で損切りラインを追従させます</li><li>現在の損切りラインより有利な場合のみ変更するので、損切りが不利な方向に動くことはありません</li><li><strong>NormalizeDouble関数</strong>で価格を正規化しているため、小数点エラーを防げます</li></ul>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc15">例２：建値ストップ（ブレイクイーブン）</span></h3>



<p class="wp-block-paragraph">一定の利益が出たら、損切りラインをエントリー価格に移動させる<strong>建値ストップ</strong>も非常に人気があります。</p>



<p class="wp-block-paragraph">これにより、最低でも損失ゼロ（スプレッド分を除く）を保証できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| 建値ストップ（ブレイクイーブン）の例                                  |
//| 一定利益が出たらSLをエントリー価格に移動                              |
//+------------------------------------------------------------------+
input int BreakevenPips = 20; // 建値ストップ発動条件（pips）

void SetBreakeven()
{
   double pip = Point;
   if(Digits == 3 || Digits == 5)
      pip = Point * 10;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      if(OrderSymbol() != Symbol())
         continue;

      // 買いポジション
      if(OrderType() == OP_BUY)
      {
         // 条件を満たし、かつSLがまだエントリー価格以下の場合
         if(Bid - OrderOpenPrice() >= BreakevenPips * pip)
         {
            if(OrderStopLoss() < OrderOpenPrice() || OrderStopLoss() == 0)
            {
               bool result = OrderModify(
                  OrderTicket(),
                  OrderOpenPrice(),
                  OrderOpenPrice(),    // SLをエントリー価格に設定
                  OrderTakeProfit(),
                  OrderExpiration(),
                  clrGreen
               );
               if(result)
                  Print("建値ストップ設定完了: チケット=", OrderTicket());
            }
         }
      }

      // 売りポジション
      if(OrderType() == OP_SELL)
      {
         if(OrderOpenPrice() - Ask >= BreakevenPips * pip)
         {
            if(OrderStopLoss() > OrderOpenPrice() || OrderStopLoss() == 0)
            {
               bool result = OrderModify(
                  OrderTicket(),
                  OrderOpenPrice(),
                  OrderOpenPrice(),    // SLをエントリー価格に設定
                  OrderTakeProfit(),
                  OrderExpiration(),
                  clrGreen
               );
               if(result)
                  Print("建値ストップ設定完了: チケット=", OrderTicket());
            }
         }
      }
   }
}</code></pre></div>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc16">例３：利確価格を段階的に変更する</span></h3>



<p class="wp-block-paragraph">利確価格を状況に応じて変更したい場合の例です。</p>



<p class="wp-block-paragraph">例えば、エントリー後に相場の勢いが強い場合、利確ラインをさらに遠くに設定し直すことで、利益の最大化を狙えます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| 利確価格を段階的に変更する例                                        |
//+------------------------------------------------------------------+
input int InitialTPPips = 50;   // 初期利確幅（pips）
input int ExtendedTPPips = 100; // 拡張利確幅（pips）
input int ExtendTriggerPips = 30; // 拡張トリガー（pips利益）

void AdjustTakeProfit()
{
   double pip = Point;
   if(Digits == 3 || Digits == 5)
      pip = Point * 10;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      if(OrderSymbol() != Symbol())
         continue;

      // 買いポジションの利確拡張
      if(OrderType() == OP_BUY)
      {
         double currentProfit = Bid - OrderOpenPrice();
         double initialTP = OrderOpenPrice() + InitialTPPips * pip;
         double extendedTP = OrderOpenPrice() + ExtendedTPPips * pip;

         // トリガー条件を満たし、TPがまだ初期値の場合
         if(currentProfit >= ExtendTriggerPips * pip)
         {
            if(NormalizeDouble(OrderTakeProfit(), Digits) == NormalizeDouble(initialTP, Digits))
            {
               bool result = OrderModify(
                  OrderTicket(),
                  OrderOpenPrice(),
                  OrderStopLoss(),
                  NormalizeDouble(extendedTP, Digits), // 利確を拡張
                  OrderExpiration(),
                  clrYellow
               );
               if(result)
                  Print("利確拡張完了: 新TP=", extendedTP);
            }
         }
      }

      // 売りポジションの利確拡張
      if(OrderType() == OP_SELL)
      {
         double currentProfit = OrderOpenPrice() - Ask;
         double initialTP = OrderOpenPrice() - InitialTPPips * pip;
         double extendedTP = OrderOpenPrice() - ExtendedTPPips * pip;

         if(currentProfit >= ExtendTriggerPips * pip)
         {
            if(NormalizeDouble(OrderTakeProfit(), Digits) == NormalizeDouble(initialTP, Digits))
            {
               bool result = OrderModify(
                  OrderTicket(),
                  OrderOpenPrice(),
                  OrderStopLoss(),
                  NormalizeDouble(extendedTP, Digits), // 利確を拡張
                  OrderExpiration(),
                  clrYellow
               );
               if(result)
                  Print("利確拡張完了: 新TP=", extendedTP);
            }
         }
      }
   }
}</code></pre></div>



<p class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc17">OrderModify関数を使うときの注意点</span></h2>



<p class="wp-block-paragraph">最後に、OrderModify関数を使うときの注意点をまとめます。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc18">注意点１：OrderSelect関数を事前に実行する</span></h3>



<p class="wp-block-paragraph">OrderModify関数を使う前に、必ず<strong>OrderSelect関数</strong>でポジションを選択しておきましょう。</p>



<p class="wp-block-paragraph">OrderTicket関数やOrderOpenPrice関数などは、OrderSelect関数で選択されたポジションの情報を返すため、選択を忘れるとエラーの原因になります。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc19">注意点２：NormalizeDouble関数で価格を正規化する</span></h3>



<p class="wp-block-paragraph">価格を計算で求める場合は、<strong>NormalizeDouble関数</strong>で小数点以下の桁数を揃えましょう。</p>



<p class="wp-block-paragraph">桁数が合わないと注文が通らないことがあります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>// 正しい例
double newSL = NormalizeDouble(Bid - 30 * Point, Digits);

// 間違いやすい例（正規化なし）
double newSL = Bid - 30 * Point; // 桁数がずれる可能性あり</code></pre></div>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc20">注意点３：変更内容がない場合はエラーになる</span></h3>



<p class="wp-block-paragraph">OrderModify関数は、<strong><span class="marker-under-red">何も変更がない状態で実行するとエラー（エラーコード1）が発生します。</span></strong></p>



<p class="wp-block-paragraph">損切り価格が同じなのに変更注文を出すと失敗するため、変更前と変更後の値が異なることを確認してから実行しましょう。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc21">注意点４：ストップレベルに注意する</span></h3>



<p class="wp-block-paragraph">ブローカーによっては、現在価格から一定距離以内にSL/TPを設定できない<strong>ストップレベル</strong>が設けられています。</p>



<p class="wp-block-paragraph">ストップレベルは<strong>MarketInfo関数</strong>で取得できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>// ストップレベルの取得
double stopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL) * Point;
Print("ストップレベル: ", stopLevel);</code></pre></div>



<p class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc22">まとめ</span></h2>



<p class="wp-block-paragraph">今回は、OrderModify関数の使い方を解説しました。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">OrderModify関数を使えば、エントリー後のポジションの損切りや利確を自動で変更できます。</p>



<p class="wp-block-paragraph">特に<strong>トレーリングストップ</strong>や<strong>建値ストップ</strong>は実際のEAでも非常によく使われるテクニックです。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">大切なポイントをおさらいしましょう。</p>



<ul class="wp-block-list"><li>OrderModify関数の<strong>返り値はbool型</strong>（true：成功、false：失敗）</li><li><strong>引数は６つ</strong>（チケット番号、価格、損切り、利確、有効期限、矢印の色）</li><li>変更しない項目には、<strong>OrderStopLoss関数やOrderTakeProfit関数</strong>で現在の値を設定する</li><li>事前に<strong>OrderSelect関数</strong>でポジションを選択しておくことを忘れずに</li><li>価格は<strong>NormalizeDouble関数</strong>で正規化する</li></ul>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">OrderModify関数をマスターすれば、より柔軟で高度な自動売買プログラムを作成できるようになります。</p>



<p class="wp-block-paragraph">ぜひ今回の記事を参考に、OrderModify関数を使ったEA開発に挑戦してみてください。</p>
<p>投稿 <a href="https://mql-programing.com/archives/839/ordermofidy/">【MQL4関数】OrderModify 関数の使い方！ポジションの変更注文の出し方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
