競馬予想プログラミングに関する記事を「投稿まとめ」で一覧にしてます。この記事は「自動投票」の一覧に含まれてます。一覧の順に読むとステップごとで分かりやすいです。
【弐ノ型】自作プロシージャで指数データを登録する
フローチャートにある「カスタム処理A」がこれに該当します。「app_custom_shisu」というプロシージャで、指数データを登録する自作プロシージャを呼び出す方法です。
呼び出しは任意なので必要な場合のみ使います。【壱ノ型】のように画面だけで自動投票する場合は、「カスタム処理A」は初期状態のまま何もしなくてOKということです。
- オリジナルの指数を作るアイデアがあって、
- 条件を「自動投票設定登録」画面だけで設定できて、
- 指数データの登録をプログラムで自動化したい。
という場合はこの方法が最適です。要するに、画面で外部指数ファイルを登録する代わりに、自作プロシージャで指数データを登録しよう、ってことです。
馬体重ランキング指数
自作プロシージャの作成例として、ここでは「馬体重ランキング指数」というのを作ってみます。速報馬体重のデータから、次のような感じの指数データを登録するプロシージャを作りました。自動投票の指数データは「指数2」テーブルに登録します。
このページの最後に、サンプルのプロシージャを有料会員に公開しています。ユーザーがカスタマイズして利用することも可能ですし、SQLを学習したい方の参考にもなります。
データの内容は「馬体重ランキング(順位)データを作成するプロシージャ」の記事で作ったやつと同じなんですが、それを速報馬体重と自動投票でやってみようという試みです。
今回は馬体重の「順位」が欲しいだけなので「指数」の項目はどうでも良いのですが、それっぽくするために馬体重を指数にしました。そうすれば、プロシージャで作った馬体重の順位が本当に正しいのか、自分の目で確認できるというオマケも付いてくるので。
指数No(shisu_no)
主キーの「指数No」は、今回の例では【弐ノ型】にちなんで「102」にしました。この指数Noは「外部指数設定一覧」画面の指数Noと重複しない値を使ってください。指数Noは最大9999まで登録できるので、シミュレーション用は100未満、自動投票用は100以降などと自分のルールを決めると良いでしょう。
また、プロシージャで使う指数Noは「外部指数設定登録」画面から登録しておくのがオススメです。この指数Noは使用中だとわかるように。「外部指数設定一覧」画面で見ると次のような感じになります。
プロシージャが作る指数の内容が期待通りか?この時点でプロシージャ単体のテストをしておけば、この後の作業がスムーズです。全部作ってからテストして失敗すると何が原因か、わかりにくいので。
自動投票する対象レース
自動投票する対象レースは「馬体重ランキング別データ分析」の記事と同じで、
- サラ系2歳
- ダート1000m~1400m(いわゆるスプリント戦)
- ダート馬場状態 = 良
とします。この条件で単勝を買い続けるだけで回収率が150%を超えた、というパターンです。
※2020/10/03作成時点
プロシージャの名前は「myp_shisu_rank_bataiju」にしました。
プロシージャの名前はルールを守って自分の好きにすればOKです。名前のルールは「オブジェクトのネーミングのルール」をご覧ください。
プロシージャのSQLファイルが書けたら、いつものように「SQLファイルをまとめて実行する」の記事を参考にSQLを実行します。
カスタム処理A(app_custom_shisu)
次に、指数データを登録する自作プロシージャを「カスタム処理A」で呼び出す設定をします。ここでは「A5:SQL Mk-2」を使って説明します。画面左側の「データベース」のツリーを次の手順で展開します。
- 「>」をクリックして「pckeiba 」のツリーを展開します。
- 「>」をクリックして「public <カレントスキーマ>」のツリーを展開します。
- 「>」をクリックして「ストアドプロシージャ」のツリーを展開します。
- 「app_custom_shisu」をダブルクリックします。
そしたら画面右側に、こんな画面が表示されるので「ソース」のタブをクリックします。
なお、この画面の「パラメータ」のタブにも書いてますが、ソフトが渡してくる「カスタム処理」の引数は4つあって、内容は次の通りです。
- p_kaisai_nen(開催年)
- p_kaisai_tsukihi(開催月日)
- p_keibajo_code(競馬場コード)
- p_race_bango(レース番号)
ソフトが「app_custom_shisu」を呼び出すとき、この引数で「レース詳細」のキーを渡してきます。
自作プロシージャの呼び出し
そして「ソース」の初期状態は次のようになってます。
この「ここで指数テーブル書き込みのプロシージャを呼び出して下さい。」というコメントが書いてる下に自作プロシージャの呼び出し「CALL~」を追記します。BEGIN~END;のブロック内ならどこに書いても良いです。
「ブロック」とは、ここではBEGIN~END;の間の5~7行目のことを指します。コメントの上に書いても良いです。なんならコメント消しても大丈夫です(笑)が、とにかくBEGIN~END;のブロック内であればユーザーの自由にプログラミングしてOK。ソフトの動作に影響なしということです。
具体的に今回の例なら、ここに次のコードを書きます。
CALL myp_shisu_rank_bataiju(102, p_kaisai_nen, p_kaisai_tsukihi, p_keibajo_code, p_race_bango);
コードを書いたら、画面右上の「ソース反映」をクリックします。
SQLプログラミングは「大文字/小文字」を区別しませんが、PostgreSQLのお作法的に書くとこんな感じになります。お作法をざっくり言うと予約語は大文字、その他は小文字。他の記事で管理人@PC-KEIBAが作ったプロシージャも、全てこのお作法に倣ってます。
「ソースをデータベースへ反映しました。」のダイアログが表示されたら「OK」ボタンをクリックして完了です。
なお、「app_custom_shisu」にロジックをガリガリ書くことはオススメしません。この例のようにロジックを書いたプロシージャを呼び出すだけにしておいたほうが、
- わかりやすい
- 美しい
- 修正が簡単
という理想的なプログラムになります。
馬連や3連単で指数を2つ以上作りたい場合とか、処理が長すぎてプロシージャを分割したいという場合は、複数行の「CALL~」を書いて呼び出します。データを一時作成する自作テーブルをいくつ使っても良いし、プロシージャの作り方に決まりも制限もありません。最終的に指数データが完成すればOKです。
以上で【弐ノ型】の伝授は終わりです。