パラボリックSARの値を取得する『iSAR関数』の使い方を、関数の意味だけでなく、実際にチャートへ表示できるサンプルコードまで含めて解説します。

iSAR関数

パラボリックSARはJ・W・ワイルダー氏によって考案された売買ポイントを見極めるテクニカル指標です。

パラボリックは英語で放物線という意味でSARとはStop And Reverseの略で、

このグラフを描く点(ドット)のことを指しています。

iSAR関数はパラボリックSARの値を取得するために使用するための関数です。

パラボリックSARの計算式

SAR(Stop And Reverse Point)=前日のSAR+AF×(EP-前日のSAR)
AF(Acceleration Factor):加速因子0.02≦AF≦0.2(日・週・月共)
EP(Extreme Point):極大値/SARが買いサイン中はその期間の最高値・SARが売りサイン中はその期間の最安値

iSAR関数の書式

double iSAR(
string symbol, // 通貨ペア
int timeframe, // 時間軸
double step, // ステップ
double maximum, // 最大値
int shift // シフト
);

iSAR関数の引数の説明

iSAR関数の引数の説明します。

string symbol

symbolはパラボリックSARの値を計算する通貨ペアの指定します。

現在のチャートの通貨ペアを指定したい場合はNULLと記述します。

int timeframe

timeframeはパラボリックSARの値を計算する時間軸の指定します。

種類 定数 説明
PERIOD_CURRENT 0 現在の時間足
PERIOD_M1 1 1分足
PERIOD_M5 5 5分足
PERIOD_M15 15 15分足
PERIOD_M30 30 30分足
PERIOD_H1 60 1時間足
PERIOD_H4 240 4時間足
PERIOD_D1 1440 日足
PERIOD_W1 10080 週足
PERIOD_MN1 43200 月足

double step

stepはパラボリックSARの値を算出するために使用する加速因子の増加単位の指定します。

一般的には0.02が使われます。

double maximum

maximumはパラボリックSARの値を算出するために使用する加速因子の最大値の指定します。

一般的には0.2が使われます。

int shift

パラボリックSARの値を取得したいバーの位置の指定します。

  • 現在のバーであれば:0
  • 1本前のバーであれば:1
  • 2本前のバーであれば:2

と言う形で記述します。

iSAR関数を使ったサンプルコード

関数の意味が分かっても、実際にどうコードへ組み込むのかが分からなければ使えません。iSAR関数を使って、現在のパラボリックSARの値をチャート左上にコメント表示する、最小限の完結したインジケーターを作ってみましょう。

MT4のメタエディタ(MetaEditor)を開き、「ファイル」→「新規作成」→「カスタムインジケーター」を選び、名前を「iSAR_Sample」など好きな名前で作成すると、OnInit()・OnDeinit()・OnCalculate()の3つの関数だけが書かれた空のひな形が開きます。このひな形の中身を、以下のコードに書き換えてください。

//+------------------------------------------------------------------+
//|                                                   iSAR_Sample.mq4 |
//|                     Copyright 2021, FX-EA System Project Creator |
//|                        https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, FX-EA System Project Creator"
#property link      "https://creator.fx-ea-system-project.com/"
#property version   "1.00"
#property strict
#property indicator_chart_window

/*パラメーター*/
input double Step    = 0.02;//加速因子の増加単位
input double Maximum = 0.2; //加速因子の最大値

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   double sar = iSAR(NULL, 0, Step, Maximum, 0);
   double price = close[rates_total - 1];

   string trend = (sar < price) ? "上昇トレンド(買いサイン)" : "下降トレンド(売りサイン)";

   Comment(
      "現在のパラボリックSAR: ", DoubleToString(sar, Digits),
      "\n現在の終値: ", DoubleToString(price, Digits),
      "\n判定: ", trend
   );

   return(rates_total);
  }
//+------------------------------------------------------------------+
Copy

コードの要点を説明します。

iSAR(NULL, 0, Step, Maximum, 0):現在の通貨ペア・現在の時間足・input変数で指定した加速因子で、現在のバー(shift=0)のSAR値を取得しています。

sar < price:SARの値が現在の終値より下にあれば「買いサイン」、上にあれば「売りサイン」と判定しています。これはパラボリックSARの基本的な読み方(ドットがローソク足の下にあれば上昇トレンド、上にあれば下降トレンド)をそのままコードにしたものです。

OnDeinit()内のComment(""):インジケーターを外した時にコメント表示を消すための処理です。これを入れておかないと、インジケーターを削除してもチャート上に文字が残ったままになります。

まとめ

iSAR関数はパラボリックSARを使う上で必須な関数になりますので、

ぜひしっかりと理解して使えるようにしておきましょう。

関連記事