<?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>OrderStopLoss アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/orderstoploss/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/orderstoploss/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 02:36:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://mql-programing.com/main29/wp-content/uploads/2021/02/cropped-ブログアイコン-32x32.jpg</url>
	<title>OrderStopLoss アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/orderstoploss/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4】注文情報を取得する関数を徹底解説！OrderOpenPrice・OrderStopLoss・OrderTakeProfit・OrderCloseTime・OrderProfit の使い方</title>
		<link>https://mql-programing.com/archives/13011/%e3%80%90mql4%e3%80%91%e6%b3%a8%e6%96%87%e6%83%85%e5%a0%b1%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e9%96%a2%e6%95%b0%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81orderopenprice%e3%83%bbor/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Tue, 07 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[関数]]></category>
		<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[OrderOpenPrice]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[注文情報取得]]></category>
		<category><![CDATA[OrderStopLoss]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13011</guid>

					<description><![CDATA[<p>EA（自動売買）を開発していると、「今持っているポジションのエントリー価格はいくらだろう？」「ストップロスはちゃんと設定されているかな？」といった場面に必ず出くわします。MQL4には、選択中の注文からさまざまな情報を取り [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13011/%e3%80%90mql4%e3%80%91%e6%b3%a8%e6%96%87%e6%83%85%e5%a0%b1%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e9%96%a2%e6%95%b0%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81orderopenprice%e3%83%bbor/">【MQL4】注文情報を取得する関数を徹底解説！OrderOpenPrice・OrderStopLoss・OrderTakeProfit・OrderCloseTime・OrderProfit の使い方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>EA（自動売買）を開発していると、「今持っているポジションのエントリー価格はいくらだろう？」「ストップロスはちゃんと設定されているかな？」といった場面に必ず出くわします。MQL4には、選択中の注文からさまざまな情報を取り出すための専用関数が用意されています。</p>
<p>この記事では、EA開発で頻繁に使う<strong>5つの注文情報取得関数</strong>――<code>OrderOpenPrice()</code>・<code>OrderStopLoss()</code>・<code>OrderTakeProfit()</code>・<code>OrderCloseTime()</code>・<code>OrderProfit()</code>を、サンプルコード付きで徹底解説します。</p>
<h2><span id="toc1">前提知識：OrderSelect() で注文を選択してから使う</span></h2>
<p>MQL4の注文情報取得関数には、共通のルールがあります。それは<strong>「必ず事前に <code>OrderSelect()</code> で注文を選択しておくこと」</strong>です。</p>
<p><code>OrderSelect()</code> を呼ばずにこれらの関数を使うと、意図しない値が返ってきたり、前回選択した注文の情報が返ってしまったりします。これはMQL4初心者が最もハマりやすいポイントの一つです。</p>
<pre><code class="language-mql4">// 基本パターン：注文を選択してから情報を取得する
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
    double openPrice = OrderOpenPrice();   // エントリー価格
    double sl        = OrderStopLoss();    // 損切り価格
    double tp        = OrderTakeProfit();  // 利確価格
    double profit    = OrderProfit();      // 損益額
}
</code></pre>
<p>この前提を押さえた上で、各関数を詳しく見ていきましょう。</p>
<h2><span id="toc2">OrderOpenPrice() — エントリー価格を取得する</span></h2>
<h3><span id="toc3">基本仕様</span></h3>
<p><code>OrderOpenPrice()</code> は、選択中の注文の<strong>約定価格（エントリー価格）</strong>を <code>double</code> 型で返します。</p>
<pre><code class="language-mql4">double OrderOpenPrice();
</code></pre>
<p>成行注文の場合は実際に約定した価格、指値・逆指値注文（未約定の待機注文）の場合は設定した注文価格が返ります。</p>
<h3><span id="toc4">使用例</span></h3>
<pre><code class="language-mql4">if(OrderSelect(0, SELECT_BY_POS, MODE_TRADES))
{
    double entryPrice = OrderOpenPrice();
    Print("エントリー価格: ", entryPrice);
}
</code></pre>
<p>エントリー価格は、損益の計算やトレーリングストップのロジックなど、あらゆる場面で使う最も基本的な注文情報です。</p>
<h2><span id="toc5">OrderStopLoss() — 損切り価格を取得する</span></h2>
<h3><span id="toc6">基本仕様</span></h3>
<p><code>OrderStopLoss()</code> は、選択中の注文に設定されている<strong>ストップロス（損切り）価格</strong>を <code>double</code> 型で返します。</p>
<pre><code class="language-mql4">double OrderStopLoss();
</code></pre>
<p>ストップロスが設定されていない場合は <strong><code>0</code></strong> が返ります。この性質を利用して、「SLが未設定のポジションを検出する」といった処理が可能です（応用例で後述します）。</p>
<h2><span id="toc7">OrderTakeProfit() — 利確価格を取得する</span></h2>
<h3><span id="toc8">基本仕様</span></h3>
<p><code>OrderTakeProfit()</code> は、選択中の注文に設定されている<strong>テイクプロフィット（利益確定）価格</strong>を <code>double</code> 型で返します。</p>
<pre><code class="language-mql4">double OrderTakeProfit();
</code></pre>
<p><code>OrderStopLoss()</code> と同様に、テイクプロフィットが未設定の場合は <strong><code>0</code></strong> が返ります。</p>
<h2><span id="toc9">OrderCloseTime() — 決済時刻を取得する</span></h2>
<h3><span id="toc10">基本仕様</span></h3>
<p><code>OrderCloseTime()</code> は、選択中の注文の<strong>決済時刻</strong>を <code>datetime</code> 型で返します。</p>
<pre><code class="language-mql4">datetime OrderCloseTime();
</code></pre>
<p>ここで重要なのが、<strong>まだ決済されていないポジション（保有中のポジション）の場合は <code>0</code> が返る</strong>という点です。この性質を使えば、「この注文はまだ保有中か、それとも決済済みか」を判定できます。</p>
<h3><span id="toc11">使用例</span></h3>
<pre><code class="language-mql4">if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
    datetime closeTime = OrderCloseTime();
    if(closeTime > 0)
    {
        Print("決済時刻: ", TimeToString(closeTime, TIME_DATE | TIME_MINUTES));
    }
    else
    {
        Print("この注文はまだ未決済です");
    }
}
</code></pre>
<p>履歴からトレード結果を分析するEAや、日報を自動生成するスクリプトを作る際に活躍します。</p>
<h2><span id="toc12">OrderProfit() — 損益額を取得する</span></h2>
<h3><span id="toc13">基本仕様</span></h3>
<p><code>OrderProfit()</code> は、選択中の注文の<strong>損益額（口座通貨建て）</strong>を <code>double</code> 型で返します。</p>
<pre><code class="language-mql4">double OrderProfit();
</code></pre>
<p>保有中のポジションなら含み損益、決済済みの注文なら確定損益が返ります。</p>
<p><strong>重要な注意点：</strong><code>OrderProfit()</code> が返す値には<strong>スワップポイントと取引手数料は含まれません</strong>。スワップを含めた正確な損益を計算するには、<code>OrderSwap()</code> と <code>OrderCommission()</code> を加算する必要があります。</p>
<pre><code class="language-mql4">// スワップと手数料を含めた正確な損益
double totalProfit = OrderProfit() + OrderSwap() + OrderCommission();
</code></pre>
<h2><span id="toc14">実践サンプル：全ポジションの注文情報を一覧表示する</span></h2>
<p>ここまで学んだ5つの関数を組み合わせて、保有中の全ポジション情報をエキスパートログに出力する実践的な関数を作ってみましょう。</p>
<pre><code class="language-mql4">void ShowAllOrderInfo()
{
    int totalOrders = OrdersTotal();
    Print("===== 保有ポジション一覧（全 ", totalOrders, " 件）=====");

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

        // 自分のEAの注文だけを対象にする
        if(OrderMagicNumber() != 12345)
            continue;

        // 待機注文を除外し、成行注文（ポジション）のみ対象にする
        if(OrderType() > OP_SELL)
            continue;

        string type = (OrderType() == OP_BUY) ? "BUY" : "SELL";
        double totalPL = OrderProfit() + OrderSwap() + OrderCommission();

        Print("チケット: ", OrderTicket(),
              " | 通貨: ", OrderSymbol(),
              " | ", type,
              " | ロット: ", OrderLots(),
              " | エントリー: ", DoubleToString(OrderOpenPrice(), Digits),
              " | SL: ", DoubleToString(OrderStopLoss(), Digits),
              " | TP: ", DoubleToString(OrderTakeProfit(), Digits),
              " | 損益: ", DoubleToString(totalPL, 2));
    }

    Print("==========================================");
}
</code></pre>
<p>ループを <strong><code>totalOrders - 1</code> から <code>0</code> に向かって逆順</strong>で回しているのがポイントです。これについては後述の注意点で詳しく説明します。</p>
<h2><span id="toc15">応用例：SL未設定ポジションに自動でSLを追加する</span></h2>
<p><code>OrderStopLoss()</code> が <code>0</code> を返す（＝SL未設定）ポジションを検出し、自動的にストップロスを設定する実用的なサンプルです。</p>
<pre><code class="language-mql4">void SetSLForUnprotectedPositions(int magicNumber, int slPips)
{
    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            continue;

        if(OrderMagicNumber() != magicNumber)
            continue;

        // SLが既に設定されている場合はスキップ
        if(OrderStopLoss() != 0)
            continue;

        double newSL = 0;
        double point = MarketInfo(OrderSymbol(), MODE_POINT);
        int    digits = (int)MarketInfo(OrderSymbol(), MODE_DIGITS);

        // 3桁/5桁業者対応
        if(digits == 3 || digits == 5)
            point *= 10;

        if(OrderType() == OP_BUY)
        {
            newSL = OrderOpenPrice() - slPips * point;
        }
        else if(OrderType() == OP_SELL)
        {
            newSL = OrderOpenPrice() + slPips * point;
        }
        else
        {
            continue; // 待機注文はスキップ
        }

        newSL = NormalizeDouble(newSL, digits);

        bool result = OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0, clrYellow);

        if(result)
        {
            Print("SL設定成功 チケット:", OrderTicket(), " SL:", DoubleToString(newSL, digits));
        }
        else
        {
            Print("SL設定失敗 チケット:", OrderTicket(), " エラー:", GetLastError());
        }
    }
}
</code></pre>
<p><code>OrderStopLoss() != 0</code> で「SLが設定済みかどうか」を判定し、未設定のポジションにのみ <code>OrderModify()</code> でSLを追加しています。リスク管理を自動化する際にとても便利なパターンです。</p>
<h2><span id="toc16">3つの重要な注意点</span></h2>
<h3><span id="toc17">1. OrderSelect() の呼び忘れに注意</span></h3>
<p>繰り返しになりますが、すべての注文情報取得関数は <code>OrderSelect()</code> で注文を選択した後に呼ぶ必要があります。選択せずに使うと、前回選択した注文の情報が返ったり、不正な値が返ったりして、バグの原因になります。</p>
<h3><span id="toc18">2. ループは逆順（降順）で回す</span></h3>
<p>注文一覧をループする際は、<code>for(int i = OrdersTotal() - 1; i >= 0; i--)</code> のように<strong>逆順で回す</strong>のがMQL4の定石です。</p>
<p>なぜなら、ループ中に注文が決済されるとインデックスがズレてしまうからです。昇順（0から）でループすると、途中の注文が消えた際にインデックスが詰まり、一部の注文がスキップされてしまいます。逆順で回せばこの問題を回避できます。</p>
<h3><span id="toc19">3. OrderProfit() にはスワップ・手数料が含まれない</span></h3>
<p><code>OrderProfit()</code> は純粋な為替差益のみを返します。スワップポイントや取引手数料は含まれません。正確なトータル損益を出すには、必ず以下のように計算してください。</p>
<pre><code class="language-mql4">double totalPL = OrderProfit() + OrderSwap() + OrderCommission();
</code></pre>
<p>特にスワップが大きい通貨ペアや、ECN口座のように手数料が発生する環境では、この差が無視できない金額になることがあります。</p>
<h2><span id="toc20">まとめ</span></h2>
<p>今回解説した5つの関数を一覧表で整理します。</p>
<table>
<thead>
<tr>
<th>関数名</th>
<th>戻り値の型</th>
<th>取得できる情報</th>
<th>備考</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>OrderOpenPrice()</code></td>
<td>double</td>
<td>エントリー価格（約定価格）</td>
<td>待機注文の場合は設定した注文価格</td>
</tr>
<tr>
<td><code>OrderStopLoss()</code></td>
<td>double</td>
<td>ストップロス価格</td>
<td>未設定なら0が返る</td>
</tr>
<tr>
<td><code>OrderTakeProfit()</code></td>
<td>double</td>
<td>テイクプロフィット価格</td>
<td>未設定なら0が返る</td>
</tr>
<tr>
<td><code>OrderCloseTime()</code></td>
<td>datetime</td>
<td>決済時刻</td>
<td>未決済なら0が返る</td>
</tr>
<tr>
<td><code>OrderProfit()</code></td>
<td>double</td>
<td>損益額（口座通貨建て）</td>
<td>スワップ・手数料は含まない</td>
</tr>
</tbody>
</table>
<p>いずれの関数も、<strong>事前に <code>OrderSelect()</code> で注文を選択すること</strong>が必須です。また、ループは逆順で回す、<code>OrderProfit()</code> にはスワップが含まれない、といったポイントを押さえておけば、安全で正確なEAを開発できます。</p>
<p>これらの関数をマスターすれば、ポジション管理・リスク管理・トレード分析など、EA開発の幅が大きく広がります。ぜひ実際のコードに組み込んで試してみてください！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13011/%e3%80%90mql4%e3%80%91%e6%b3%a8%e6%96%87%e6%83%85%e5%a0%b1%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e9%96%a2%e6%95%b0%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81orderopenprice%e3%83%bbor/">【MQL4】注文情報を取得する関数を徹底解説！OrderOpenPrice・OrderStopLoss・OrderTakeProfit・OrderCloseTime・OrderProfit の使い方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
