ボラティリティをはかる

シンプルにボラティリティをはかるというインジケータが標準装備されていないのは何故だろう。

ボラティリティー(Volatility)とは、一般的に価格変動の度合いを示す言葉で、「ボラティリティーが大きい」という場合は、その商品の価格変動が大きいことを意味し、「ボラティリティーが小さい」という場合は、その商品の価格変動が小さいことを意味します。

ボラティリティー│初めてでもわかりやすい用語集│SMBC日興証券

ボラティリティをごくシンプルに表現するなら、それはある時点から見た時のレートの変動率のことだろう。
変動幅で見ることもあるかもしれないが、一般的には前者のように思う。

MT5であれば、その日の変動率を気配値表示ウィンドウに表示することができる。

上の図の「毎日の変化」にチェックを入れれば、銘柄の行にその日の始値~現在値までの変化率が表示される。
(なお、「ボラティリティ」にチェックを入れても意味が無いが、これは何だろう…)

また、チャート上の任意の距離を測る際にも、始点と終点までの変化率が表示される。

標準装備のインジケータの中にこれらの値を示してくれるものが無い。
例えば、バー1本1本について、始値から終値までの変化率を表示するインジケータなら、以下のようになる。

#property copyright "nisai"
#property link      "https://nisaifx.com"
#property version   "1.00"
#property strict
#property description "Volatility of Bars"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_label1  "Volatility of Bars"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed

double volatility_buffer[];

int OnInit(){
   SetIndexBuffer(0,volatility_buffer);
   PlotIndexSetString(0,PLOT_LABEL,"Volatility of Bars");
   PlotIndexGetInteger(0,PLOT_DRAW_BEGIN,0);
   return INIT_SUCCEEDED;
}
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[]){
   int position=
      prev_calculated>1
         ? prev_calculated-1
         : 0;
   for(int i=position;i<rates_total&&!IsStopped();i++){
      volatility_buffer[i]=MathAbs(NormalizeDouble(close[i]/open[i]*100-100,3));
   }
   return rates_total;
}
#property copyright "nisai"
#property link      "https://nisaifx.com"
#property version   "1.00"
#property strict
#property description "Volatility of Bars"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_label1  "Volatility of Bars"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed

double volatility_buffer[];

int OnInit(){
   SetIndexBuffer(0,volatility_buffer);
   PlotIndexSetString(0,PLOT_LABEL,"Volatility of Bars");
   PlotIndexGetInteger(0,PLOT_DRAW_BEGIN,0);
   return INIT_SUCCEEDED;
}
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[]){
   int position=
      prev_calculated>1
         ? prev_calculated-1
         : 0;
   for(int i=position;i<rates_total&&!IsStopped();i++){
      volatility_buffer[i]=MathAbs(NormalizeDouble(close[i]/open[i]*100-100,3));
   }
   return rates_total;
}

これを表示したものが下の図。

殆ど計算という計算をしていないインジケータだが、必要であれば下のリンクからどうぞ。

VoBをダウンロード

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントする