ゼロからの週末プログラマー

週末にプログラミングを楽しみながら稼げるのか試してみます!

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

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

      2015/01/12

今週はあまり時間がありませんでしたが、少しだけ株価分析プログラムを作る時間がありました。

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

騰落レシオとは

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

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

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

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

近い数字という理由

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

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

現時点で東証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 Integer
    Dim Dw As Integer
    Dim Eq As Integer
    Dim C As Currency
    Dim I As Integer

    If TERM > 0 Or TERM < -254 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![市場] 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

だいたい合ってます。

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

2015年1月12日追記

プログラムを少し修正しました。
こちらを参照して下さい。

 - ACCESSデータベース

↓ブログランキングに参加中!ご協力をお願いします!

にほんブログ村 IT技術ブログ プログラム・プログラマーへ
にほんブログ村

プログラマー ブログランキングへ

Message

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