株式会社シスアナコム

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

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

VBAで騰落レシオ(に近い数字)を計算する

      2015/04/19

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

VBAで騰落レシオ(に近い数字)を計算する

作ろうと思ったのは騰落レシオを計算するプログラムですが、結果としては騰落レシオに近い数字を計算するプログラムになってしまいました。

騰落レシオとは

騰落レシオとは、ある期間に上昇した銘柄数の合計と下落した銘柄数の割合を表す数字です。

一般的には東証1部の25日間の騰落レシオが120%を超えると買われすぎで高値圏、80%を下回ると売られすぎで底値圏と言われています。

計算するのが簡単なので、意外に多くの人が参考指標として使っているようです。

ただし、値幅などを何も考慮しないで、上がったか下がったかという大まかな割合を示す指標なので、他の指標と合わせて市況を判断した方が良いとされています。

近い数字という理由

このプログラムで計算される数値は、正確な騰落レシオではありません。

最新の基本情報を使って、過去の騰落数を計算しているからです。

現時点で東証1部でも、過去のある時点では東証2部だったり、非上場だったりする場合もあります。

なので、東証が日々計算して公表している騰落数を使うのが正しい計算方法です。

ただ、騰落レシオはおよその数字を把握できれば十分なので、このプログラムの数値でも使えないことはありません。

騰落レシオを計算するプログラム

計算方法自体が簡単なので、プログラムも難しくありません。

Function GetUDRatio(MRKT As String, YMD As Date, TERM As Integer) As Currency
'騰落レシオ(に近い数字)を計算する
'MRKT:市場名(東証1部、東証JQS、マザーズなど)
'YMD :指定年月日
'TERM:対象期間(指定年月日から過去何営業日間かを指定,<=0,>=-24)

    Dim DB As DAO.Database
    Dim RS As DAO.Recordset

    Dim Up As Currency
    Dim Dw As Currency
    Dim Eq As Currency
    Dim C As Currency
    Dim I As Integer
    
    If TERM > 0 Or TERM < -254 Or Not IsMarket(YMD) Then
        GetUDRatio = 0
        Exit Function
    End If
    
    Set DB = CurrentDb
    Set RS = DB.OpenRecordset("T_株式_基本情報", dbOpenTable)
    
    C = 0: Up = 0: Dw = 0: Eq = 0
    
    Do Until RS.EOF
    
        If MRKT = RS![市場] Or MRKT = "" Then
    
            Call SetKabukaInfo(RS![銘柄コード], YMD, TERM - 25)
            '値が付かない日があるので、少し余裕を持って株価データをセット
    
            For I = 0 To TERM Step -1
                If KabukaInfo(I, COwarine) = 0 Or KabukaInfo(I - 1, COwarine) = 0 Then
                    '計算期間に終値が判断できなければ何もしない
                ElseIf KabukaInfo(I, COwarine) > KabukaInfo(I - 1, COwarine) Then
                    Up = Up + 1
                ElseIf KabukaInfo(I, COwarine) < KabukaInfo(I - 1, COwarine) Then
                    Dw = Dw + 1
                Else
                    Eq = Eq + 1
                End If
            Next I
            
        End If
        
        RS.MoveNext
        DoEvents
    Loop
    
    GetUDRatio = Up / Dw * 100

End Function

基本情報に登録されている銘柄で、対象とする市場名と同じ場合、配列へ株価データをセットして、 株価が上昇したか、下落したか、変化なしかの3パターンをカウントしています。

騰落レシオは東証1部の25日を使うことが多いのですが、それ以外も計算できるようにしました。

実行結果を確認

直近の上下ピーク時の東証1部25日騰落レシオを計算しています。

いつも通り、イミディエイトウィンドウから実行しました。

?GetUDRatio("東証1部",#2014/6/24#,-24)
 164.174
?GetUDRatio("東証1部",#2014/8/8#,-24)
 78.3153
?GetUDRatio("東証1部",#2014/9/12#,-24)
 131.382
?GetUDRatio("東証1部",#2014/10/10#,-24)
 77.8275

だいたい合ってます。

どこかから過去の騰落銘柄数を持ってくることができれば、こんなプログラムを使う必要はありません。

今回はここまで。

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

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


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

Message

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