<?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>iSAR アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/isar/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/isar/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Fri, 17 Apr 2026 14:39:30 +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>iSAR アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/isar/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4】iSAR関数の使い方を徹底解説！パラボリックSARで売買シグナルを作ろう</title>
		<link>https://mql-programing.com/archives/13031/%e3%80%90mql4%e3%80%91isar%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81%e3%83%91%e3%83%a9%e3%83%9c%e3%83%aa%e3%83%83%e3%82%afsar%e3%81%a7/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sun, 12 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[インジケーター関数]]></category>
		<category><![CDATA[iSAR]]></category>
		<category><![CDATA[パラボリックSAR]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13031</guid>

					<description><![CDATA[<p>MetaTraderのチャートで、価格の上下にドットが表示される「パラボリックSAR」を見たことはありませんか？このインジケーターは、トレンドの方向転換を視覚的に捉えるのに非常に優れたツールです。 MQL4ではiSAR( [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13031/%e3%80%90mql4%e3%80%91isar%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81%e3%83%91%e3%83%a9%e3%83%9c%e3%83%aa%e3%83%83%e3%82%afsar%e3%81%a7/">【MQL4】iSAR関数の使い方を徹底解説！パラボリックSARで売買シグナルを作ろう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>MetaTraderのチャートで、価格の上下にドットが表示される「パラボリックSAR」を見たことはありませんか？このインジケーターは、トレンドの方向転換を視覚的に捉えるのに非常に優れたツールです。</p>
<p>MQL4では<strong>iSAR()関数</strong>を使うことで、パラボリックSARの値をプログラムから簡単に取得できます。この記事では、iSAR()関数の基本的な使い方から、実際に売買シグナルを出すEAの作成まで、ステップバイステップで解説していきます。</p>
<h2><span id="toc1">パラボリックSARとは？基本的な仕組みを理解しよう</span></h2>
<p>パラボリックSAR（Stop And Reverse）は、J・ウェルズ・ワイルダーが考案したトレンドフォロー型のテクニカル指標です。「SAR」は「Stop And Reverse（ストップ・アンド・リバース）」の略で、<strong>ポジションを決済して反転させるポイント</strong>を示すという意味があります。</p>
<h3><span id="toc2">チャート上での見え方</span></h3>
<p>パラボリックSARはチャート上に小さなドットとして表示されます。</p>
<ul>
<li><strong>ドットが価格の下にある場合</strong> → 上昇トレンド（買いシグナル）</li>
<li><strong>ドットが価格の上にある場合</strong> → 下降トレンド（売りシグナル）</li>
</ul>
<p>ドットが価格の上から下に（または下から上に）切り替わった瞬間が、トレンド転換のシグナルとなります。</p>
<h3><span id="toc3">計算式の概要</span></h3>
<p>パラボリックSARの計算式は次のとおりです。</p>
<p><strong>SAR = 前の期間のSAR + AF ×（EP − 前の期間のSAR）</strong></p>
<p>ここで使われる2つの重要なパラメーターを押さえておきましょう。</p>
<ul>
<li><strong>AF（Acceleration Factor / 加速因数）</strong>：初期値は通常0.02で、トレンドが続くたびに0.02ずつ増加し、最大値（通常0.2）まで上がります。AFが大きくなるほど、SARは価格に素早く近づきます。</li>
<li><strong>EP（Extreme Point / 極値）</strong>：現在のトレンド中の最高値（上昇トレンド時）または最安値（下降トレンド時）です。</li>
</ul>
<p>ただし、MQL4ではiSAR()関数が自動的に計算してくれるので、計算式を自分でコーディングする必要はありません。パラメーターの意味を理解しておくだけで十分です。</p>
<h2><span id="toc4">iSAR()関数のシンタックスとパラメーター</span></h2>
<p>iSAR()関数の定義は以下のとおりです。</p>
<pre><code class="language-mql4">double iSAR(
    string symbol,      // 通貨ペア名
    int    timeframe,   // 時間足
    double step,        // 加速因数のステップ
    double maximum,     // 加速因数の最大値
    int    shift        // バーのシフト
);</code></pre>
<p>各パラメーターの詳細を表で確認しましょう。</p>
<table>
<thead>
<tr>
<th>パラメーター</th>
<th>型</th>
<th>説明</th>
<th>よく使う値</th>
</tr>
</thead>
<tbody>
<tr>
<td>symbol</td>
<td>string</td>
<td>通貨ペア名。NULL で現在のチャートの通貨ペア</td>
<td>NULL, &#8220;USDJPY&#8221; など</td>
</tr>
<tr>
<td>timeframe</td>
<td>int</td>
<td>時間足。0 で現在のチャートの時間足</td>
<td>0, PERIOD_H1, PERIOD_D1 など</td>
</tr>
<tr>
<td>step</td>
<td>double</td>
<td>AFの増加ステップ（初期値にもなる）</td>
<td>0.02</td>
</tr>
<tr>
<td>maximum</td>
<td>double</td>
<td>AFの最大値</td>
<td>0.2</td>
</tr>
<tr>
<td>shift</td>
<td>int</td>
<td>取得するバーの位置（0＝現在のバー）</td>
<td>0, 1, 2</td>
</tr>
</tbody>
</table>
<p><strong>戻り値</strong>はdouble型で、指定したバーにおけるパラボリックSARの値（価格レベル）が返されます。</p>
<h2><span id="toc5">基本的な使い方：SARの値を取得してみよう</span></h2>
<h3><span id="toc6">シンプルな値の取得</span></h3>
<p>まずは、現在のバーのパラボリックSAR値を取得して、エキスパートログに出力するシンプルな例です。</p>
<pre><code class="language-mql4">void OnTick()
{
    // 現在のバー（shift=0）のパラボリックSAR値を取得
    double sarValue = iSAR(NULL, 0, 0.02, 0.2, 0);

    // ログに出力して確認
    Print("現在のSAR値: ", DoubleToString(sarValue, Digits));
}</code></pre>
<p>引数に<code>NULL</code>と<code>0</code>を指定すると、EAが稼働しているチャートの通貨ペアと時間足が自動的に使われます。stepに0.02、maximumに0.2というのがデフォルト設定です。</p>
<h3><span id="toc7">トレンド方向の判定</span></h3>
<p>パラボリックSARで最もよく使うのが、<strong>トレンド方向の判定</strong>です。SARの値と現在の価格を比較するだけで簡単に判定できます。</p>
<pre><code class="language-mql4">void OnTick()
{
    // 1本前の確定バーのSAR値を取得（shift=1）
    double sarValue = iSAR(NULL, 0, 0.02, 0.2, 1);

    // 1本前のバーの終値を取得
    double closePrice = Close[1];

    // トレンド方向を判定
    if(closePrice > sarValue)
    {
        // SARが価格の下にある → 上昇トレンド
        Print("上昇トレンド中 | Close: ", DoubleToString(closePrice, Digits),
              " > SAR: ", DoubleToString(sarValue, Digits));
    }
    else
    {
        // SARが価格の上にある → 下降トレンド
        Print("下降トレンド中 | Close: ", DoubleToString(closePrice, Digits),
              " < SAR: ", DoubleToString(sarValue, Digits));
    }
}</code></pre>
<p>ここでは<strong>shift=1（1本前の確定バー）</strong>を使っている点に注目してください。shift=0の現在のバーはまだ確定していないため、シグナルがコロコロ変わってしまう可能性があります。確定したバーで判定するのが基本です。</p>
<h2><span id="toc8">実践：パラボリックSARで売買するEAを作ろう</span></h2>
<p>ここからが本番です。パラボリックSARのトレンド転換を検出して、実際に売買注文を出すEAを作ってみましょう。</p>
<h3><span id="toc9">売買ロジックの考え方</span></h3>
<p>SARのトレンド転換は、<strong>2本前のバーと1本前のバーのSAR値を比較</strong>して検出します。</p>
<ul>
<li><strong>買いシグナル</strong>：2本前はSARが価格の上（下降トレンド）→ 1本前はSARが価格の下（上昇トレンド）に変わった</li>
<li><strong>売りシグナル</strong>：2本前はSARが価格の下（上昇トレンド）→ 1本前はSARが価格の上（下降トレンド）に変わった</li>
</ul>
<h3><span id="toc10">フルサンプルEA</span></h3>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| パラボリックSAR転換EA                                              |
//+------------------------------------------------------------------+
#property copyright "MQL学習サイト"
#property version   "1.00"
#property strict

// --- 入力パラメーター ---
input double SarStep     = 0.02;   // SAR加速因数ステップ
input double SarMaximum  = 0.2;    // SAR加速因数最大値
input double LotSize     = 0.1;    // 取引ロット数
input int    SlippagePts = 3;      // スリッページ（ポイント）
input int    MagicNumber = 12345;  // マジックナンバー

// --- 新バー判定用のグローバル変数 ---
datetime lastBarTime = 0;

//+------------------------------------------------------------------+
//| 新しいバーが生成されたかを判定する関数                                |
//+------------------------------------------------------------------+
bool IsNewBar()
{
    datetime currentBarTime = Time[0];
    if(currentBarTime != lastBarTime)
    {
        lastBarTime = currentBarTime;
        return true;
    }
    return false;
}

//+------------------------------------------------------------------+
//| 自分のEAが持つポジション数を取得する関数                              |
//+------------------------------------------------------------------+
int CountMyPositions(int type)
{
    int count = 0;
    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
            {
                if(OrderType() == type)
                    count++;
            }
        }
    }
    return count;
}

//+------------------------------------------------------------------+
//| 指定タイプのポジションを全決済する関数                                |
//+------------------------------------------------------------------+
void ClosePositions(int type)
{
    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
            {
                if(OrderType() == type)
                {
                    double closePrice;
                    if(type == OP_BUY)
                        closePrice = Bid;
                    else
                        closePrice = Ask;

                    bool result = OrderClose(OrderTicket(), OrderLots(),
                                             closePrice, SlippagePts, clrNONE);
                    if(!result)
                        Print("決済エラー: ", GetLastError());
                }
            }
        }
    }
}

//+------------------------------------------------------------------+
//| OnTick - メイン処理                                                |
//+------------------------------------------------------------------+
void OnTick()
{
    // 新しいバーが確定した時だけ処理する
    if(!IsNewBar())
        return;

    // --- パラボリックSARの値を取得 ---
    double sar1 = iSAR(NULL, 0, SarStep, SarMaximum, 1);  // 1本前のバー
    double sar2 = iSAR(NULL, 0, SarStep, SarMaximum, 2);  // 2本前のバー

    // --- 各バーの終値を取得 ---
    double close1 = Close[1];  // 1本前のバーの終値
    double close2 = Close[2];  // 2本前のバーの終値

    // --- トレンド方向を判定 ---
    bool isUpTrend1 = (close1 > sar1);   // 1本前：上昇トレンド？
    bool isDownTrend1 = (close1 < sar1); // 1本前：下降トレンド？
    bool isUpTrend2 = (close2 > sar2);   // 2本前：上昇トレンド？
    bool isDownTrend2 = (close2 < sar2); // 2本前：下降トレンド？

    // --- 買いシグナル：下降→上昇に転換 ---
    if(isDownTrend2 &#038;&#038; isUpTrend1)
    {
        // 売りポジションがあれば決済
        if(CountMyPositions(OP_SELL) > 0)
            ClosePositions(OP_SELL);

        // 買いポジションがなければ新規エントリー
        if(CountMyPositions(OP_BUY) == 0)
        {
            int ticket = OrderSend(Symbol(), OP_BUY, LotSize,
                                   Ask, SlippagePts, 0, 0,
                                   "SAR Buy Signal", MagicNumber, 0, clrBlue);
            if(ticket < 0)
                Print("買い注文エラー: ", GetLastError());
            else
                Print("買い注文成功 チケット: ", ticket);
        }
    }

    // --- 売りシグナル：上昇→下降に転換 ---
    if(isUpTrend2 &#038;&#038; isDownTrend1)
    {
        // 買いポジションがあれば決済
        if(CountMyPositions(OP_BUY) > 0)
            ClosePositions(OP_BUY);

        // 売りポジションがなければ新規エントリー
        if(CountMyPositions(OP_SELL) == 0)
        {
            int ticket = OrderSend(Symbol(), OP_SELL, LotSize,
                                   Bid, SlippagePts, 0, 0,
                                   "SAR Sell Signal", MagicNumber, 0, clrRed);
            if(ticket < 0)
                Print("売り注文エラー: ", GetLastError());
            else
                Print("売り注文成功 チケット: ", ticket);
        }
    }
}</code></pre>
<p>このEAのポイントを整理しましょう。</p>
<ul>
<li><strong>IsNewBar()関数</strong>で新しいバーが確定したタイミングだけ処理を実行。ティックごとに何度も注文が飛ぶのを防ぎます。</li>
<li><strong>2本前と1本前のSAR値</strong>を比較して転換を検出。確定バーだけを使うので安定したシグナルになります。</li>
<li>転換時に<strong>逆方向のポジションを先に決済</strong>してから新規エントリーする、ドテン（途転）方式です。</li>
<li><strong>MagicNumber</strong>を使って、このEAのポジションだけを管理しています。他のEAのポジションには干渉しません。</li>
</ul>
<h2><span id="toc11">注意点とパフォーマンス向上のTips</span></h2>
<h3><span id="toc12">加速因数パラメーターの調整</span></h3>
<p>デフォルト値の step=0.02 / maximum=0.2 は万能ではありません。</p>
<ul>
<li><strong>stepを小さくする（例：0.01）</strong>→ SARの反応が遅くなり、ダマシが減る反面、エントリーが遅れる</li>
<li><strong>stepを大きくする（例：0.03）</strong>→ SARの反応が速くなり、転換を早く捉えるが、ダマシが増える</li>
<li><strong>maximumを変える</strong>→ AFの上限を制御。小さくするとSARが価格に追いつくスピードが制限される</li>
</ul>
<p>バックテストを繰り返して、対象通貨ペアと時間足に合った値を見つけましょう。</p>
<h3><span id="toc13">レンジ相場に弱い点を理解しよう</span></h3>
<p>パラボリックSARはトレンドフォロー型の指標なので、<strong>レンジ（横ばい）相場では頻繁に転換シグナルが発生</strong>し、連続した損失（いわゆる「ダマシ」）が起きやすくなります。</p>
<p>対策としては、以下の方法があります。</p>
<ul>
<li><strong>ADXなどのトレンド強度指標と組み合わせる</strong>（ADXが25以上のときだけ取引するなど）</li>
<li><strong>移動平均線と併用する</strong>（移動平均線の方向とSARの方向が一致した場合のみエントリー）</li>
<li><strong>より長い時間足でトレンド方向を確認する</strong>（マルチタイムフレーム分析）</li>
</ul>
<h3><span id="toc14">マルチタイムフレームでSARを活用する</span></h3>
<p>異なる時間足のSAR値も、iSAR()関数のtimeframeパラメーターを変えるだけで簡単に取得できます。</p>
<pre><code class="language-mql4">void OnTick()
{
    // 日足のSAR値を取得（大きなトレンド方向の確認用）
    double sarDaily = iSAR(NULL, PERIOD_D1, 0.02, 0.2, 1);
    double closeDaily = iClose(NULL, PERIOD_D1, 1);

    // 1時間足のSAR値を取得（エントリータイミング用）
    double sarH1 = iSAR(NULL, PERIOD_H1, 0.02, 0.2, 1);
    double closeH1 = iClose(NULL, PERIOD_H1, 1);

    // 日足が上昇トレンド かつ 1時間足も上昇トレンドなら買いを検討
    if(closeDaily > sarDaily && closeH1 > sarH1)
    {
        Print("日足・1時間足ともに上昇トレンド → 買い検討");
    }

    // 日足が下降トレンド かつ 1時間足も下降トレンドなら売りを検討
    if(closeDaily < sarDaily &#038;&#038; closeH1 < sarH1)
    {
        Print("日足・1時間足ともに下降トレンド → 売り検討");
    }
}</code></pre>
<p>上位足のトレンド方向に順張りすることで、ダマシを大幅に減らすことができます。</p>
<h2><span id="toc15">まとめ</span></h2>
<p>この記事で学んだポイントを整理しましょう。</p>
<ul>
<li><strong>パラボリックSAR</strong>は、ドットの位置でトレンド方向と転換点を示すインジケーター</li>
<li><strong>iSAR()関数</strong>は、symbol・timeframe・step・maximum・shiftの5つのパラメーターで値を取得できる</li>
<li><strong>トレンド判定</strong>は、SARの値と価格を比較するだけでシンプルに行える</li>
<li><strong>転換シグナル</strong>は、2本前と1本前のバーでトレンド方向が変わったかどうかで検出する</li>
<li><strong>レンジ相場対策</strong>として、ADXや移動平均線、マルチタイムフレーム分析との併用が効果的</li>
</ul>
<p>パラボリックSARは計算ロジックがシンプルなぶん、EA化しやすいインジケーターです。まずは今回のサンプルEAをストラテジーテスターで動かしてみて、パラメーターを調整したり、フィルター条件を追加したりして、自分だけの売買ロジックに育てていきましょう！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13031/%e3%80%90mql4%e3%80%91isar%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81%e3%83%91%e3%83%a9%e3%83%9c%e3%83%aa%e3%83%83%e3%82%afsar%e3%81%a7/">【MQL4】iSAR関数の使い方を徹底解説！パラボリックSARで売買シグナルを作ろう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
