株式会社シスアナコム

情報システムに関することなら、どんなことでも適切に助言いたします!

この投稿は1年以上前に公開されました。
現在では状況や内容が変わっている可能性があります。
ご注意下さい。m(_ _)m

VBAでストキャスティクスを計算する

      2015/04/19

「ゼロからの週末プログラマー」に掲載していた記事を改訂して掲載しています。

VBAでストキャスティクスを計算する

先週末まで株価が急落していた影響だと思うのですが、ACCESSデータベースに関連するページへのアクセス数が増加傾向。

株価をプログラムで分析する方法を知りたい人が多いのかなと思ったので、時間を見つけて少しずつ作りました。

前回は相場全体の動きを見る騰落レシオ(もどき)でしたが、今回は個別銘柄の売られすぎや買われすぎを判断できるストキャスティクスという指標を計算するプログラムです。

ストキャスティクスとは

ストキャスティクスとは、ある期間の最高値から最安値の範囲の中で、直近の終値がどの位置かを判断するための指標です。

株価が上昇傾向の場合、終値は範囲の上限に近づく傾向があります。

逆に株価が下落傾向の場合、終値は範囲の下限に近づく傾向があります。

この株価の傾向を数値化したものがストキャスティクス。

一般的に、期間は9日間を使うことが多いのですが、なぜ9日間なのかは分かりません。

ストキャスティクスには、%Kと%Dとスロー%Dがあります。

%Kは期間中の最高値と最安値の範囲における直近終値の位置を割合で示すもの。

%Dは期間中の最高値と最安値の範囲における終値の位置を直近3日間で移動平均化して平滑にしたもの。

スロー%Dは%Dをさらに3日間で平均化したものです。

これも、なぜ3日間を使うのかはわかりません。

売買タイミングについて

一般的にストキャスティクスが70%以上で買われすぎ、30%以下で売られすぎと言われています。

ただし、これだと急騰時や急落時は更に上昇したり下落したりすることが多く、先週末のような急落時には役に立ちません。

なので、もう少し条件を厳しくして、「スロー%Dが20以下で反転上昇したときが買い」にすると、なかなか売買タイミングが来ませんが、失敗も減ると思います。

さらに、他の指標と併用すると良いでしょう。

ストキャスティクスを計算するプログラム

以前作った最高値と最安値を計算するプログラムが必要です。

%Kを計算するプログラム

Function GetStochasticsK(STRT As Integer, TERM1 As Integer) As Currency
'ストキャスティクス%Kを求める
'STRT:当日から見た開始日(当日なら0、前日なら-1)
'TERM1:%K対象期間(STRTから過去何営業日間かを指定,<=0,9日間なら-8を指定)

    Dim Owarine As Currency
    Dim TAKA As Currency
    Dim YASU As Currency

    If (STRT + TERM1) < -255 Or STRT > 255 Or TERM1 >= 0 Then
        GetStochasticsK = 0
        Exit Function
    End If

    Owarine = KabukaInfo(STRT, COwarine)
    TAKA = GetMaxTakane(STRT, -8)
    YASU = GetMinYasune(STRT, -8)

    GetStochasticsK = (Owarine - YASU) / (TAKA - YASU) * 100

End Function

%Dを計算するプログラム

Function GetStochasticsD(STRT As Integer, TERM1 As Integer, TERM2 As Integer) As Currency
'ストキャスティクス%Dを求める
'STRT:当日から見た開始日(当日なら0、前日なら-1)
'TERM1:%K対象期間(STRTから過去何営業日間かを指定,<=0,9日間なら-8を指定)
'TERM2:%D対象期間(STRTから過去何営業日間かを指定,<=0,3日間なら-2を指定)

    Dim I As Integer
    Dim C As Currency

    If (STRT + TERM1) < -255 Or (STRT + TERM2) < -255 Or STRT > 255 Or TERM1 >= 0 Or TERM2 >= 0 Then
        GetStochasticsD = 0
        Exit Function
    End If
    
    C = 0
    For I = STRT + TERM2 To STRT
        C = C + GetStochasticsK(I, TERM1)
    Next I
    
    If C = 0 Then
        GetStochasticsD = 0
    Else
        GetStochasticsD = C / Abs(TERM2 - 1)
    End If

End Function

スロー%Dを計算するプログラム

Function GetSlowStochasticsD(STRT As Integer, TERM1 As Integer, TERM2 As Integer) As Currency
'スローストキャスティクス%Dを求める
'STRT:当日から見た開始日(当日なら0、前日なら-1)
'TERM1:%K対象期間(STRTから過去何営業日間かを指定,<=0,9日間なら-8を指定)
'TERM2:%D対象期間(STRTから過去何営業日間かを指定,<=0,3日間なら-2を指定)

    Dim I As Integer
    Dim C As Currency
    
    If (STRT + TERM1) < -255 Or (STRT + TERM2) < -255 Or STRT > 255 Or TERM1 >= 0 Or TERM2 >= 0 Then
        GetSlowStochasticsD = 0
        Exit Function
    End If
    
    C = 0
    For I = STRT + TERM2 To STRT
        C = C + GetStochasticsD(I, TERM1, TERM2)
    Next I
    
    GetSlowStochasticsD = C / Abs(TERM2 - 1)

End Function

%Dを計算するプログラムを呼び出して平均値を計算するだけ。

実行結果を確認

いつも通り、トヨタ自動車のストキャスティクスを計算してみました。

イミディエイトウィンドウから実行した結果です。

CALL SetKabukaInfo("7203",#2014/10/24#,-255)
? GetStochasticsK(0,-8)
 92.8421 
? GetStochasticsD(0,-8,-2)
 69.1328 
? GetSlowStochasticsD(0,-8,-2)
 53.8141 
? GetStochasticsK(-5,-8)
 2.8188 
? GetStochasticsD(-5,-8,-2)
 6.7251 
? GetSlowStochasticsD(-5,-8,-2)
 6.9986 

今回はここまで。

 - ACCESSデータベース, 週末プログラマー

↓ブログランキングに参加しています!


ネット・PC(全般) ブログランキングへ
にほんブログ村 IT技術ブログ ITコンサルティングへ
にほんブログ村

Message

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