「DIY競馬プログラミング JRA-VAN Data Lab.編」活用教室(2-9) 更新
05-09-04

1.時系列オッズのダウンロードプログラム
 前回までで応用編第一部の「レース解析」までのプログラムを作成しました。「レース解析」では、レース単位で単複オッズの票数や払戻情報を解析するだけで、各馬番ごとのオッズを解析することはしませんでした。今回は、各レースの馬番ごとの単複オッズの時系列データを解析するプログラムを作ります。今回作るプログラムの動作イメージは、
(1)「レース一覧」のレース行をダブルクリックすると該当するレースの「時系列オッズ(単複枠)」をダウンロードする。

(2)解析した単勝オッズをワークシート「単勝オッズ」に、複勝オッズをワークシート「複勝オッズ」に時系列で表示し、さらに折れ線グラフで表示する。

(3)ダブルクリックしないレース番号の単複オッズの時系列データは、レース中にはダウンロードしませんが、レース終了後に「JVDataダウンロード」ボタンをクリックすると未取得のレース分の時系列オッズをダウンロードします。

(4)馬連オッズについては解析しませんが、レース終了後に「JVDataダウンロード」ボタンをクリックすると全レース分の時系列馬連オッズをダウンロードします。つまり解析はしないが、データだけは取り込んでおくというわけです。(単複オッズの時系列解析をしてみると予想以上の時間がかかることがわかり、馬連まで解析するとさらに時間がかかるので、割愛しました。どうしても解析したい人はご自分でトライしてください。)

2.ワークシートの追加(挿入)
(1)ワークシートの"Sheet2"のタブをダブルクリックして名前を「単勝オッズ」(カタカナは半角)と変更します。
(2)メニューから「挿入」→「ワークシート」でワークシートが追加されるので、やはり名前を「複勝オッズ」と変更し、下図のように並び替えてください。


3.ワークシート「レース一覧」へのプログラム
(1)VBEモードで"Sheet1(レース一覧)"をダブルクリックします。
(General)というページが表示されます。


(2)"Worksheet"を選択します。


(3)"BeforeDoubleClick"を選択します。
Private Sub WorksheetDoubleClickというプロシージャが自動的に作成される。メインのプログラムをここに記述していきます。(上で"Worksheet"を選択した際に作成されたPrivate Sub Worksheet_SelectionChange は使用しませんので削除してもしなくてもどちらでもかまいません)


(4)「時系列オッズ(単複枠)」ダウンロードのフローチャート
フローチャートのイメージは下図のとおりです。
注意するのは、ワークシートからダブルクリックで直接JV-Linkを呼び出す場合には、ワークシートごとにJV-Linkの初期設定が必要なことです。


(5)ワークシート「レース一覧」へのプログラムコードの実際
@JV-Linkの定義
下記のコードをPrivate Sub Worksheet_BeforeDoubleClick の前に記述します。
これは、このワークシートで使うJV-Linkの定義をします。
"frmStart"で使用したJV-LinkはJVLink1 でしたが、ワークシートが変わるとJV-Linkを別にする必要があることがわかりました。


A[Private Sub Worksheet_BeforeDoubleClick]のコード
下記はコードの一部で、内部で使うサブルーチンの手前までのコードです。
[Set_JvLink_For_Worksheet]は、ワークシート用のJVLink初期設定ルーチンです。
青い下線部分は、DIY2固有のサブルーチンです。
このコードでは内部サブルーチンが多くありますが、メインは内部サブルーチンの[GetTimeChangeOdds1]と[ChartOddsData]です。



内部サブルーチンを順に記述していきます。以下のコードは上の Exit Sub の下に続けて記述します。
[CheckTargetArea]のコード
これはワークシート「レース一覧」でダブルクリックされた行・列が適切な範囲かどうかをチェックするサブルーチンです。範囲外の場合はメッセージを出します。


[SetKAISAIJOHO]
ダブルクリックした行の頭の競馬場名と一致する開催情報を「レース一覧」の左上の3つの情報から探ります。


[LineColorYellow]
ダブルクリックした行を「黄色」にします。


[GetKaisaiHenkoJoho]
開催変更情報を確認します。青い下線部分は、DIY2固有のサブルーチンです。


[DisplayKaisaiInfo]
開催情報(レース条件など)を「単勝オッズ」「複勝オッズ」シートに表示します。


[GetTimeChangeOdds1]
このサブルーチンは、2つの重要なことを行います。1つは発走時刻とオッズデータの時刻の差異でダウンロードするかどうかの判断と、もう1つは時系列オッズのデータ数に応じて表示する点数を調整することです。時系列オッズは、数分ごとに発表されるため、前日発売の場合は、かなりのデータ数になります。このため全部のデータを表示し、折れ線グラフにすると時間もかかるため、データ数に応じて表示点数を調整します。データ数が50以下なら全部、50〜100の間は1つおき、100〜200の間は3分の1、200以上の場合は4分の1の点数にします。



[DisplayOddsInfo]
これはオッズ情報を各ワークシートに表示するサブルーチンです。ここも2つのポイントがあります。1つは、前のオッズデータとの変化率によりセルの色づけをすることと、もう1つは1〜3番人気のオッズのセル枠を色づけすることです。セル枠の色は1番人気が赤、2番人気が青、3番人気は緑です。



[ChartOddsData]
オッズデータをグラフにするルーチンです。
実際にグラフ化するのは[PlotOddsData]の部分です。


[DisplayBottomTitle]
これはオッズデータをグラフ化した後でワークシート「単勝オッズ」「複勝オッズ」のデータの下に馬番や着順を追加するルーチンです。



[ErrHandler]
エラーを処理するルーチンです。

(以上のコードはすべてPrivate Sub Worksheet_BeforeDoubleClickの中のものです。すべて続けて記述します。)

B共通プログラム
以下はワークシート「レース一覧」のWorksheetページに記述する共通のプログラムです。上記Private Sub Worksheet_BeforeDoubleClick のEnd Sub の後に続けて記述します。

[DownloadJVRTData_Time]
時系列オッズのダウンロードを行うサブルーチンです。"frmStart"で記述したものと基本的には同じですが、JVLinkモジュールがJVLink2となっている点が違います。



[GetJVRTData]
これもJVLink2となる以外は、"frmStart"で使ったものと同じです。


[ReadRTData]
これは"frmStart"で使ったものと同じです。


[SaveRTData]


[Set_JVLink_For_Worksheet]
これはワークシート用のJVLink2を初期設定するためのサブルーチンです。


[Log]
これは"frmStart"で使ったものと同じです。


[CellBorderColor]
「単勝オッズ」「複勝オッズ」シートのオッズデータのセル枠を人気順に応じてカラー化するサブルーチンです。1番人気を赤、2番人気を青、3番人気を緑とします。


[PlotOddsData]
時系列オッズデータを折れ線グラフにするサブルーチンです。最初はグラフシートがないので自動的に挿入します。



[Worksheet_BeforeRightClick]
これはダブルクリックで黄色に変化した行を元に戻すサブルーチンで、黄色の行を右クリックすると動作します。


4.時系列オッズダウンロードプログラムの実行
以上までできたらプログラムを実行しましょう。
ワークシート「レース一覧」の適当なレースの行をダブルクリックしてください。行のどこでもかまいません。下図のようになれば動作は正常です。単勝オッズがグラフ2、複勝オッズがグラフ1に表示されている場合がありますが、ワークシートのタブを左から「レース一覧」「Graph1」「Graph2」「単勝オッズ」「複勝オッズ」の順に並べなおしてやってみてください。
セルの幅は自動的には調整しませんので自分で調整してください。
(この動作は時間がかかります。10秒〜前日発売のレースでは1分くらい)





次回は、ワークシート「レース一覧」の枠線表を作るプログラムを作成します。

ホームへ 新タラレバ競馬倶楽部へ 応用編(2-1)へ (2-2)へ (2-3)へ (2-4)へ (2-5)へ (2-6)へ (2-7)へ (2-8)へ (2-9)へ (2-10)
活用教室:Chap5 →(1-1)(1-2)(1-3)
活用教室:Chap8 →(1-4)(1-5)(1-6)(1-7)(1-8)(1-9)(1-10)
活用教室:Chap9 →(1-11)(1-12)