1. TARGET の外部指数
TARGET では外部指数を取り込んで検索や集計・分析が出来るようになりました。
2005.09.12現在 ⇒ Ver. 5.31(rev 003)
これは、画期的なことだと思います。
各人の使っている指数の有効性などが計れるので、何種類かの指数を比較したり、
その指数の使い方を考えたりすれば、馬券の方の回収率も間違いなく上がります。
上がらないようなら、、、
ここでは、TARGET取り込み用のデータとして、JVデータに含まれている
データマイニング(以下、DM)予想をサンプルとして使います。
TARGET の最新の Ver 5.41( 2006.04 )では、このDMの値を機能として表示できるよう
になっています。ということで、この項は参考程度に、
実際には、DM予想は予想走破タイムとして100分の1秒の値まで出しているのですが、
精度は10分の1秒までで充分だし、プラスマイナスの誤差は全く意味が無い?ので
無視ということにします。
指数としての扱いやすさを考えると、一番速いタイムを100として、それより遅いタイムを
(10分の1秒単位で)、1づつ減らすという方法をとります。
また、予想が提供されるタイミングが何回かありますが、検索・集計などで使うには成績
からの分、つまり馬体重発表後のデータでいいでしょう。
前提としては当然、JVデータをテキストファイルで保存していること、です。
下のスクリプトをコピペして使ってください。
コピペっていうのは、いやらしい略しかたですね。コピー&ペーストのことです。
名前を自分の場合、 dm2g.pl としていますが、ご自由に、、
パスその他は、それぞれの環境に応じて★の部分を書き換える必要があります。
ファイル名が同じなので、$pass と $outpass とは必ず異なる場所に!
TARGET での設定は、スクリプトの4〜5行目を参考にしてください。
#!/usr/bin/perl
# 成績確定データから、DM予想値をTarget用外部指数として
# 使えるようにする。全ファイル一括処理。指数のみ
# レースID; 新仕様(16桁) レース単位・CSV形式
# パス例; H:\GAIBU\DM\SESW%Y3%M1%D1.dat
# usage: perl dm2g.pl
use strict ;
my $pass = 'h:/TDAT/' ; # JVのSEテキストファイル所在地 ★
my $outpass = 'h:/GAIBU/DM/' ; # 外部指数ファイル出力先を指定 ★
# 成績確定ファイル( SESW ) から
my @mfile = grep { -e } glob "${pass}SESW*.DAT" ;
my @dm ; #
my $max = 99999 ; #
for my $file ( @mfile ) {
my $fn = ( split '/', $file )[-1] ;
my $outF = $outpass . $fn ;
open DAT, $file or die "?? $file ??:$!\n" ;
open OUT, ">$outF" ;
my $karicd = '0' ;
until ( eof( DAT ) ) {
my $record ;
my $dm = read ( DAT, $record, 554 ) ;
my ( $racecode, $ub, $tm ) = unpack '@11 A16 @28 A2 @537 A4', $record ;
unless ( $racecode eq $karicd ) {
&outp() if @dm > 0 ;
print OUT $racecode ;
$karicd = $racecode ;
}
$tm = &t2s( $tm ) ; # 100分の1秒( A5 )⇒ 10分の1秒( A4 )で充分
$max = $tm if $max > $tm ;
$dm[$ub] = $tm ;
}
&outp() ;
print "\t\t処理完了$fn\n" ;
close DAT ;
close OUT ;
sub outp {
for my $i ( 1..$#dm ) {
my $num = $dm[$i] ;
# 最速タイムを 100 として計算
my $dm = 100 + $max - $num ;
$dm = sprintf '%2d', $dm ;
print OUT ",$dm" ;
}
@dm = () ;
$max = 99999 ;
print OUT "\n" ;
}
}
sub t2s { # 時計表示を 1/10 秒に換算(手抜き)
my $ll = shift ; my $ans ;
my ( $w1, $w2, $w3 ) = unpack( "A1A2A1", $ll ) ;
$ans = $w1 * 600 + $w2 * 10 + $w3 ;
return $ans ;
}
同じ要領で、外部指数をいくつか登録して比較してみるのも面白いと思います。
ここまで読むくらいの人なら既に、外部指数を使い分けているかもしれませんが、
自分の使っている指数が、この指数より劣るようであれば考え直したほうがいい
ですよね。
リアルタイム系で取得した、DM予想値をTARGET用外部指数として使えるようにする
場合は以下の通りです。こちらは、予想値が 1日分まとめて提供されています。
#!/usr/bin/perl
# リアルタイム系で取得した、DM予想値をTarget用外部指数として
# 使えるようにする。全ファイル一括処理。レース順は不定or逆順。
#
# usage: perl dm2gb.pl
use strict ;
my $pass = 'h:/Others/' ; # JVのDM値ファイル所在地 ★
my $outpass = 'h:/GAIBU/DM2/' ; # 外部指数ファイル出力位置 ★
my @mfile = grep { -e } glob "${pass}0B13*.DAT" ;
for my $file ( @mfile ) {
my $fn = ( split '/', $file )[-1] ;
my $outF = $outpass . $fn ;
open DAT, $file or die "?? $file ??:$!\n" ;
open OUT, ">$outF" ;
until ( eof( DAT ) ) {
my @dm ; #
my $max = 99999 ; #
my $record ;
my $dm = read ( DAT, $record, 302 ) ;
my ( $racecode, $data ) = unpack '@11 A16 @31 A270', $record ;
print OUT $racecode ;
my @dmtm = unpack 'A15' x 18, $data ;
for my $ln ( @dmtm ) {
chomp ;
next unless $ln ;
# 100分の1秒 A5 ⇒ 10分の1秒 A4 で充分
my ( $ub, $tm ) = unpack '@0 A2 @2 A4', $ln ;
next unless ( $ub and $tm ) ;
$tm = &t2s( $tm ) ;
$max = $tm if $max > $tm ;
$dm[$ub] = $tm ;
}
for my $i ( 1..$#dm ) {
my $num = $dm[$i] ;
# 最速タイムを 100 として計算
my $dm = 100 + $max - $num ;
$dm = sprintf '%2d', $dm ;
print OUT ",$dm" ;
}
print OUT "\n" ;
}
print "\t\t処理完了$fn\n" ;
close DAT ;
close OUT ;
}
sub t2s { # 時計表示を 1/10 秒に換算(汎用)
my $ll = shift ; my $ans ;
my ( $w1, $w2, $w3 ) = unpack( "A1A2A1", $ll ) ;
$ans = $w1 * 600 + $w2 * 10 + $w3 ;
return $ans ;
}