04話「経験10年以上のシステムエンジニアが設計する投資競馬システム」
投資競馬システムのデータフローダイアグラム(DFD)
このブログ記事のタイトルが「経験10年以上のシステムエンジニアが設計する」となっているが、タイトルの通り、私は、システムエンジニアの経験が10年以上ある。
システムエンジニアも色々と専門分野があるのだが、アプリケーションエンジニアと呼ばれるソフトウェアの開発技術者である。
本業は、競馬には関係の無い、企業のシステム開発が仕事であるが、ある日同僚の「自宅に構築した競馬のデータベースが上手く動かない」という相談に乗ったことをきっかけに、トラブっている同僚と同じデータベース環境を自分のPCに再現したことが始まりで、何年かすると、遂には競馬の自動投票システムを構築できる域に到達した。
投資競馬を知るうちに、競馬をシステマチックに合法的に勝つ方法が確かに存在し(ここは第01話、第02話あたりの記事を読んで欲しい)、こういう方法なんだろうなと思っていることを記事に残して、誰かがこの記事を読んで、本当に億を手にしたら面白いなと思っている。本当に誰かが到達して欲しい。
ここで、「億を稼げる投資競馬システムができるなら、なぜ秘密にして自分だけでやらないの?」という疑問に行きついたと思う。
実は、このシステムの「(1-2)競馬分析」だけが、ブラックボックスになっていて、継続的に100%を超える分析を行うロジックが必要になる。
投資競馬を合法的に進める為には、別の記事で「03話「合法的に納税しながら稼ぐ投資競馬」」に記載した制約をくぐりながら、ロジックを決める必要があり、私も到達できていない。
投資競馬システムで説明する「競馬予想データ」が肝になるが、良くある◎〇▲△×※などで予想を示して、(例えば、×、▲、◎で的中などと)どれかが当たると的中したとする予想さいとの「競馬予想」とは、一線を画す。
「03話「合法的に納税しながら稼ぐ投資競馬」」に記載した制約の通り、ほとんどのレースに投票して、利益を上げる必要があるので、その手法や予想のアプローチも、巷にあふれている競馬予想とは異なるものである(第01話から最終話まで読んで頂くと分かるように記事を書いていく)。
また、ここまでシステムを考えて、この記事の残課題として、誰かが後何を考えたらこのシステムが稼働できるのか?明確なのでそれも説明する。
私は、システムエンジニアなのでシステム開発は専門であるが、競馬予想は専門ではないので、競馬分析や競馬予想ができる人がこの記事を見ると、本当に投資競馬が実現する。
この連載を全話読んで頂くと分かるが、「(1-2)競馬分析」ができれば、投資競馬が実現可能であることを示す予定である。
そして、残りの「(1-2)競馬分析」で、厳密に、何をしないといけないのかを最後に貴方にお知らせする。
この投資競馬のパズルの最後のワンピースを貴方が埋めることができれば、投資競馬システムが稼働でき、貴方は本当に億を手にするかも知れない。
この記事の最後には、このシステムを貴方が手に入れる(開発するか、開発を依頼する)方法にも言及する。
説明を先に進めると、図は、データフローダイアグラム(DFD)と呼ばれるモデリング手法で、投資競馬システムを図示したものである。
順に説明して行こう。
大きくシステムは2つに分かれる。
1.競馬分析システム・・・(1-1)(1-2)と記載している緑の枠の部分
2.投資競馬システム・・・(2-1)~(2-7)と記載している青の枠の部分
図を目で順に追う場合、(1-1)(1-2)(2-1)(2-2)(2-3)(2-4)・・・(2-7)と番号順に見て欲しい。
競馬分析システム
図の緑枠は、「競馬分析システム」として、「投資競馬システム」とは分けて開発できる別システムである。
日頃、競馬の過去のレース結果を集めて、データとして格納するのが「(1-1)競馬情報蓄積」機能である。
JRA-VANを使っているなど普段使っているツールがあるなら、いつも使っているツールで構わない。
新たに開発するなら、有料のJRA-VANや有料の競馬情報サイト、もしくは、JRAのホームページからレース結果をパース(画面に表示される情報をデータ化して必要な情報だけを取得すること)して取得する方法なども考えられる。
図の「競馬過去実績データ」と書いている部分は、データストアと言って、データベースのテーブルのようなイメージで情報を保存することを意味する。
データストアは保存する概念であり、データベースのテーブルでも、EXCELでもファイルでもなんでも構わない(そこまでは定義しない)。
システム的には論理設計と言って、実際に何に保存するかまだ決めていないが、「何かに保存することは定義する。」ということである。
ちなみに具体的にEXCELに保存するなり、MYSQLというデータベースのテーブルに保存するなどの具体的な実装方法まで設計したものを物理設計と言う。
ここでは論理設計(具体的に何に保存するかまでは決めていない)と思って頂きたい。
「競馬過去実績データ」と「今週のレース情報」を入力にして、「競馬予想データ」を作成する処理が「(1-2)競馬分析」機能である。
「(1-2)競馬分析」機能の目的は、「競馬予想データ」を作成することですので、EXCELを駆使してデータを作成しても構わない。
ただ、「競馬予想データ」は、厳密に定義するので、その情報をアウトプットすることが、この機能の肝である。
競馬の情報は、おおよそ3段階で情報が発表される。
1.枠番なしの出馬表
2.馬番確定後の出馬表(前日)
3.レース直前に天候、馬場状態、出走取消、馬体重(増減)、騎手乗り替わり、オッズなどの重要な情報が発表される
「(1-2)競馬分析」機能を実行するタイミングは、「2.馬番確定後の出馬表」が発表された後である。
つまり、レースの前日の夜に「(1-2)競馬分析」機能を実行して、「競馬予想データ」を作るという運用になる。
競馬予想データ
先にも書いた通り、「競馬予想データ」は曖昧なものではない。
上記のデータ項目を基本とする。
「(1-2)競馬分析」機能を実行するタイミングでは、オッズ情報がないが、最終的に投票前にオッズが分かると予想回収率が計算できる。
「競馬予想データ」は、「投資競馬システム」(青枠のシステム)の「(2-4)馬券買目判定」機能で、買目判定の重要な決定要因になる。
但し、貴方の競馬予想に使うファクターによって、項目を追加する必要がある。
追加する項目も明確に説明できる。曖昧ではない。
前述の通り、競馬の情報は、おおよそ3段階で情報が発表される。
1.枠番なしの出馬表
2.馬番確定後の出馬表(前日)
3.レース直前に天候、馬場状態、出走取消、馬体重(増減)、騎手乗り替わり、オッズなどの重要な情報が発表される
「(1-2)競馬分析」は、上記の「2.馬番確定後の出馬表(前日)」のタイミングなので、「3.レース直前に天候、馬場状態、出走取消、馬体重(増減)、騎手乗り替わり、オッズなどの重要な情報が発表される」情報は反映できないことになる。
なので、「3.レース直前に天候、馬場状態、出走取消、馬体重(増減)、騎手乗り替わり、オッズなどの重要な情報が発表される」のファクターで変化する項目がある場合は、その情報を予め「競馬予想データ」に埋めておく必要がある。
例えば、貴方の競馬分析でレース直前に判明する「馬場状態」が重要なファクターなら、「競馬予想データ」を下記の通りにすべきである。
競馬予想データ(馬場状態を付加)
これで、「3.レース直前に天候、馬場状態、出走取消、馬体重(増減)、騎手乗り替わり、オッズなどの重要な情報が発表される」の情報を取得した時、馬場状態のファクターを反映して競馬予想データを使うことができる。
この例では、馬場状態を「良」「稍重」と「重」「不良」の2パターンに分けたが、4パターンに分けて分析することもできる。
同様に馬体重増減が10kg以上あった場合に、予想を変動させたりもできる。
騎手乗り替わりによって率をどのように変化させるかや、出走取消があった場合に他の馬の率をどう再計算するかは、工夫が必要である。
もしこの点を細かく制御するなら、「競馬予想データ」に項目を追加するより、「(2-4)買目判定」機能にロジックを追加して対応すべきである。
出走取消、騎手乗り替わり以外のファクターは、上記の通り、「競馬予想データ」の項目に項目を追加して、対応することになる。
「競馬予想データ」が作れたら、いよいよ「投資競馬システム」(データフローダイアグラムの青枠の部分)を動かすことになる。
投資競馬システム
赤枠の部分全体で「投資競馬システム」である。
レース当日に「(2-1)競馬開催情報取得」機能で、今日のレース情報を取得する。
今日の開催競馬場一覧、競馬場毎のレース一覧、発走時刻、出馬表も取得する。
前述の通り、競馬の情報は、おおよそ3段階で情報が発表される。
1.枠番なしの出馬表
2.馬番確定後の出馬表(前日)
3.レース直前に天候、馬場状態、出走取消、馬体重(増減)、騎手乗り替わり、オッズなどの重要な情報が発表される
ここでは、「2.馬番確定後の出馬表(前日)」の情報を取得することを想定している。
但し、この発走時刻は、トラブルがあると変更される為、発走時刻は、定期的に(例えば何分か毎に)情報を取得して洗い替えることを想定している。
「(2-2)競馬発走タイマー」は、「(2-1)競馬開催情報取得」機能で取得した「今日のレース情報」の発走時刻を見て
例えば発走3分前になると次に発走するレースをターゲットにタイマーが起動する仕組みである。
発走3分前にタイマーが起動するとそれを契機に「(2-3)競馬直前公開情報取得」「(2-4)馬券買目判定」「(2-5)競馬自動投票」・・・と連動して動作する。
「(2-3)競馬直前公開情報取得」機能が動いて、上記の「3.レース直前に天候、馬場状態、出走取消、馬体重(増減)、騎手乗り替わり、オッズなどの重要な情報が発表される」情報を取得する。
「(2-4)馬券買目判定」では、3分後に発走するレースを対象に、「競馬予想データ」を元に、投票する馬券を決定し、投票資金管理情報を元に賭金と当たった場合の最低払戻金を算出する。
当然ながら、最低払戻金が必ずプラスになる条件で馬券を購入する。
「(2-4)馬券買目判定」は、投資競馬システムの肝になる部分である。
投資競馬で、特に重要な考え方は2点ある。
1.資金が無くなり、破綻することを防ぐ
(いつか必ず発生する連続不的中に備える)
2.ほとんどのレースに投票する必要がある
(※「03話「合法的に納税しながら稼ぐ投資競馬」」参照)
この2点は、それだけでブログ記事になるほど大きな話なので、別途記事に書くことにして、先に進む。
(この2点の話は、01話から順に全話を読むと出てくるように記事を構成する予定。)
「(2-4)馬券買目判定」の機能で買目を決定したら、後はそれに従って「(2-5)競馬自動投票」機能で即PATの投票を行い、「(2-6)競馬投票記録」の機能で記録する。
即PATにある資金は、常に増減していくのと、投資競馬をほぼ毎レース繰り返しながら、的中したのかどうか、資金が増えたのか減ったのかをシステム内で資金状態を管理しながら稼働させる必要がある。
その為、「(2-7)競馬レース結果取得」機能でリアルタイムに的中情報や払戻金の結果を反映しながら、投資競馬を進める必要がある。
「03話「合法的に納税しながら稼ぐ投資競馬」」で、「馬券購入の正確な記録を残す(申告の為)」と記載したが、それはここに記載の「馬券購入履歴」のことではない。
「馬券購入の正確な記録を残す(申告の為)」に使う情報は、この投資競馬システムの情報として残すのではなく、Club JRA-Netからダウンロードした方が、自分で作成したものではなく、第3者によってしかもJRAが作成したデータなので、良いように思う。
投資競馬システムを開発する方法
では、どうやって投資競馬システムを開発する方法があるのだろうか?
1.自分で開発にチャレンジ
2.クラウドワークス/ランサーズ/ココナラでシステムエンジニアに開発依頼する
3.SNSでシステムエンジニアを探して、開発依頼する
4.知り合いのシステムエンジニアを探して、開発依頼する。
のような方法がある。
もし貴方がシステムエンジニアだったり、プログラム開発経験があるなら、自分で開発にチャレンジして欲しい。
この記事を見て自分で開発する人が居るなら、ツイッターでDM送ってください。繋がりましょう。
この投資競馬システムの開発は、開発の難易度が高い。
1.競馬を知らないと正しいシステムが構築できない側面
2.即PATシステムで自動投票するプログラムの仕様が分からない点
の2つが開発を複雑にする。
競馬を知らないプログラマーでは、例えば、放馬してしまってレースが始まらない状態で、別の競馬場の次のレースが始まったり、写真判定で予定では結果が出るはずのレースのレース結果が出ないまま、次の別の競馬場のレースが始まったり、開発者が競馬に同着があることを知らずに1着は1頭だと思ってシステムを開発したりする可能性は、十分にある。
即PATの仕様は複雑で難しい。
競馬を知らない人が即PATの投票をエミュレートして、プログラムから馬券を買うようなプログラムが書けないと思われる。
誰かに依頼する時、そのエンジニアが、競馬を知っているかは、十分に確認する必要がある。
競馬を知らないと、良い投資競馬システムは、開発できないと断言する。
クラウドワークス、ランサーズ、ココナラなどで開発を依頼を行いたいが、依頼する仕様をどのように文書化したら良いか分からないなど、困っている方が居れば、私が支援させて頂くこともできる(有償ですが、貴方の要望を聞いて、開発者に依頼する為の要件定義書を作ったりすることはできます)。