ストキャスティクスについてです。計算式、チャート、エクセルVBAコード
オーソドックスなテクニカル指標の一つで、オシレータ系の指標の代表格といえます。
過去一定期間の高値と安値の値幅に対して、現在のレートの相対的な位置を計測し、そのパーセンテージを表示する指標です。
ラインは、%K、%D、S%Dの3本。%Kと%Dの二つのラインを用いて、ストキャスティクス・ファスト、%DとS%Dの2本を用いてストキャスティクス・スローとも表現します。
計算式、計算方法、エクセルVBAコード、チャートを掲載しています。
ストキャスティクスの計算式
計算方法は過去一定期間の最高値・最安値、現在の終値の3つの値を使用して計算を行います。
計算方法は下記の通り。(ストキャスティクス[x,y,z]の計算)
<%K>
%K = (終値-min_a) ÷ (max_a-min_a) × 100
max_a = 過去x本の最高値
min_a = 過去x本の最安値
<%D>
%D = (max_b ÷ min_b) × 100
max_b =(終値 – min_a ) のy本合計
min_b =(max_a – min_a )のy本合計
<S%D>
S%D = %Dラインのz本移動平均
ストキャスティクスのチャート
(黄色線=%K、赤線=%D、水色線=S%D)
通常、80%超で買われすぎと判断し、売りサイン、20%未満で売られすぎと判断し買いサインとなりますが、大きなトレンドを発するような場合には、ストキャスティクスのラインが上や下に張り付いてしまい、意味を成しません。
では、最後にVBAのコードです。
ストキャスティクスのエクセルVBAコード
‘※ エクセルの1列目(A列)に行番号、2列目(B列)に日時、
‘※ 3列目(C列)~6列目(F列)に始値・高値・安値・終値
‘********************************
‘ k :%K採用本数
‘ d :%D採用本数
‘ s :S%D採用本数
‘ num:現在の行
‘ cell_k:%K書込み列番号
‘ cell_d:%K書込み列番号
‘ cell_sd:%K書込み列番号
‘ cell_nm:(終値-過去%K採用本数分の最安値)書込み列番号
‘ cell_mm:(過去%K採用本数分の最高値-過去%K採用本数分の最安値)書込み列番号
‘********************************
‘****パラメータ
k = 9
d = 3
sd = 3
‘****************
‘****書込み列
cell_k = 9
cell_d = 10
cell_sd = 11
cell_nm = 7
cell_mm = 8
‘****************
‘———%K
If num – (k – 1) >= 2 Then
r_max = Application.WorksheetFunction.Max _
(Range(Cells(num – (k – 1), 4), Cells(num, 3)))
r_min = Application.WorksheetFunction.Min _
(Range(Cells(num – (k – 1), 5), Cells(num, 4)))
n_min = r_now – r_min
m_min = r_max – r_min
Cells(num, cell_nm) = n_min
Cells(num, cell_mm) = m_min
If n_min = 0 Or m_min = 0 Then’****0値で除算することによるエラー回避
Cells(num_1, cell_k) = 0
Else
Cells(num_1, cell_k)) = n_min / m_min * 100
End If
End If
‘———%D
If num – (k + d – 1) >= 2 Then
n_mins = Application.WorksheetFunction.Sum _
(Range(Cells(num – (d – 1), cell_nm), Cells(num, cell_nm)))
m_mins = Application.WorksheetFunction.Sum _
(Range(Cells(num – (d – 1), cell_mm), Cells(num, cell_mm)))
If n_min = 0 Or m_min = 0 Then’****0値で除算することによるエラー回避
Cells(num, cell_d) = 0
Else
Cells(num, cell_s) = n_mins / m_mins * 100
End If
End If
‘——–S%D
If num – (k + d + sd – 1) >= 2 Then
Cells(num, cell_sd) = Application.WorksheetFunction.Average _
(Range(Cells(num – (sd – 1), cell_d), Cells(num, cell_d)))
End If
(外部リンク)テクニカル指標(Wikipedia)
ピンバック: 色んな指標をストキャス化してみる | IBI-Square