自動投票の作り方【弐ノ型】

プログラミング

競馬予想プログラミングに関する記事を「投稿まとめ」で一覧にしてます。この記事は「自動投票」の一覧に含まれてます。一覧の順に読むとステップごとで分かりやすいです。

【弐ノ型】自作プロシージャで指数データを登録する

フローチャートにある「カスタム処理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」を使って説明します。画面左側の「データベース」のツリーを次の手順で展開します。

  1. 「>」をクリックして「pckeiba 」のツリーを展開します。
  2. 「>」をクリックして「public <カレントスキーマ>」のツリーを展開します。
  3. 「>」をクリックして「ストアドプロシージャ」のツリーを展開します。
  4. app_custom_shisu」をダブルクリックします。

そしたら画面右側に、こんな画面が表示されるので「ソース」のタブをクリックします。

なお、この画面の「パラメータ」のタブにも書いてますが、ソフトが渡してくる「カスタム処理」の引数は4つあって、内容は次の通りです。

  1. p_kaisai_nen(開催年)
  2. p_kaisai_tsukihi(開催月日)
  3. p_keibajo_code(競馬場コード)
  4. p_race_bango(レース番号)

ソフトが「app_custom_shisu」を呼び出すとき、この引数で「レース詳細」のキーを渡してきます。

自作プロシージャの呼び出し

そして「ソース」の初期状態は次のようになってます。

この「ここで指数テーブル書き込みのプロシージャを呼び出して下さい。」というコメントが書いてる下に自作プロシージャの呼び出し「CALL~」を追記します。BEGINEND;のブロック内ならどこに書いても良いです。

「ブロック」とは、ここではBEGINEND;の間の5~7行目のことを指します。コメントの上に書いても良いです。なんならコメント消しても大丈夫です(笑)が、とにかくBEGINEND;のブロック内であればユーザーの自由にプログラミングして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です。

以上で【弐ノ型】の伝授は終わりです。

「投稿まとめ」にもどる

SQLファイルのダウンロードと使い方

コンテンツの残りを閲覧するにはログインが必要です。 お願い . あなたは会員ですか ? 会員について