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

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

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

ACCESSのVBAで優待銘柄の権利年月日を取得する

   

2週連続でお休みを頂きました。

過去の株価データの検証について、色々と考えていました。

何を検証しようか考えた結果、株主優待銘柄について検証する事に決めました。

株主優待投資について

イベント投資で有名な夕凪さんや株主優待投資で有名な桐谷さんが行っている手法です。

もちろん、私自身もお二人を参考にして、同様の投資方法を行っています。

お二人とも3か月前~1か月前ぐらいに優待銘柄を購入して、権利確定日に向かって株価が上昇していくのを待って利益を確定したり、株主優待を権利取りするという投資方法を提唱しています。

感覚的には有効な手法だと思っているのですが、どれぐらいの時期に購入するのがベストなのかを過去データを使って検証してみようと思います。

権利確定日を取得する

以前の記事で書きましたが、インターネット上から取得できる個別銘柄の基本情報の中に、株主優待の権利確定日があります。
(どうやったら取得できるかは各自で考えて下さい)

優待権利確定月というフィールドに株主優待を行っている銘柄の場合、権利確定月の文字列が格納されているとします。

例えば、年1回の銘柄なら「3月」、年2回の銘柄ならカンマ区切りで「3月,9月」特殊な権利確定月日の銘柄なら「1月20日,7月20日」という文字列が入っています。

このフィールドから権利確定年月日を取得する関数を作りました。

Function GetYuutaiYMD(S As String, NUM As Integer, YYYY As Integer) As Date
'優待権利確定月文字列から年月日を判断して返す
'S:優待権利確定月文字列(11月/12月,6月/9月20日,3月20日)
'NUM:何番目の日付を抽出するか、>0
'YYYY:付与する年

    Dim POSS As Integer
    Dim POSE As Integer
    Dim I As Integer
    Dim S2 As String
    Dim RET As Date
    
    If NUM <= 0 Then
        GetYuutaiYMD = 0
        Exit Function
    End If
    'パラメータのエラーチェック
    
    POSS = 1: I = 1
    Do Until I = NUM
        POSS = InStr(POSS, S, ",", vbBinaryCompare)
        If POSS = 0 Then
            Exit Do
        Else
            POSS = POSS + 1
        End If
        I = I + 1
    Loop
    '先頭の文字位置を計算
    '該当しない場合は0
    
    If POSS > 0 Then
        POSE = InStr(POSS, S, ",", vbBinaryCompare)
        If POSE = 0 Then POSE = Len(S) + 1
        S2 = Trim(Mid(S, POSS, POSE - POSS))
    End If
    '終了の文字位置を計算して、指定した文字列を抽出
    
    If S2 = "" Then
        GetYuutaiYMD = 0
        Exit Function
    End If
    '文字列を抽出できなければ処理を中止
    
    If InStr(S2, "日") <> 0 Then
        RET = DateValue(CStr(YYYY) & "年" & S2)
    Else
        RET = DateValue(CStr(YYYY) & "年" & S2 & "1日")
        RET = DateSerial(Year(RET), Month(RET) + 1, 0)
    End If
    '文字列に"日"が入っていればその日付を作成
    '文字列に"日"が入っていないなら月末日を作成
    
    GetYuutaiYMD = RET

End Function

通常は月末日が取得できます。

この年月日から実際の権利付き最終日や権利落ち日に変換する必要があります。

そのための関数も作成しました。

Function GetMarketDate(YMD As Date, TERM As Integer) As Date
'株式市場が開いている日を取得する
'YMD:指定した日付
'TERM:期間(営業日、<=0、3営業日前なら-3を指定)

    Dim DCTR As Integer
    Dim RET As Date
    Dim DD As Integer
    
    If TERM > 0 Then
        GetMarketDate = Null
        Exit Function
    End If
    
    DCTR = 1: DD = 0
    Do Until DCTR = TERM
        RET = DateSerial(Year(YMD), Month(YMD), Day(YMD) + DD)
        If IsMarket(RET) Then DCTR = DCTR - 1
        DD = DD - 1
    Loop
    
    GetMarketDate = RET

End Function

次回はこれらの関数を使って株主優待投資を検証するつもりです。

 - ACCESSデータベース

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

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

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

Message

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