對上一層:  應用實例 >

比較馬匹轉馬房前後表現

Print this Topic Previous pageReturn to chapter overviewNext page

下表顯示了一名為「轉馬房前後」的檢視的結構,這檢視可顯示:

1.曾轉換馬房的參賽馬,並展示轉換馬房的日期
2.轉馬房之前馬匹的上名統計
3.轉馬房之後馬匹的上名統計

 

檢視:轉馬房前後

欄名

算式

類別 (字數)

馬匹

(內置欄位:馬匹名稱)


舊馬房日期

HrDate(1, [For Not ]+Same('HrStableID( )'))

Date

轉馬房前表現

HrWQPStat(,'For HrDate( )<='+Qstr(Column('舊馬房日期')),.Null.)

Character (23)

轉馬房後表現

HrWQPStat(,'Where HrDate( )>'+Qstr(Column('舊馬房日期')),.Null.)

Character (23)

 

假如我們把這檢視應用於 2005 年 5 月 1 日第 6 場賽事,檢視將會顯示如下圖所示的結果,結果顯示賽事中 4 匹轉換了馬房的馬的上名率都有改善:

 

以下我們會詳細闡述檢視所顯示的資料、如何建立有關的算式和一些有用的技巧及加快檢視速度的秘訣。闡述的內容由淺入深,使 MCL 的初學者亦可以明白,就算您是已經十分熟識 MCL,部份內容亦會加深您對 MCL 的了解。假如您完全沒有建立檢視的經驗,請參閱建立馬匹檢視一頁。

 

找出某一賽事的日期

要找出某一賽事的日期我們可以用 MCL 函數 HrDate( ),如果沒有傳入任何參數,HrDate( ) 將會傳回即場賽事的日期,假如我們要知道出賽馬匹上一次賽事的日期,則我們可以用 HrDate(1),要知道馬匹對上第二次賽事的日期則可以用 HrDate(2),如此類推。我們亦可以利用 HrDate( ) 找出合乎某一條件的賽事的日期,例如下面的 MCL 算式可以找到馬匹上次勝出的日期:

HrDate(1, [For HrFp( )=1])

 

上式的第一個參數「 1 」表示要找上一次賽事,但不是一般的上一次,而要是合乎條件 HrFp( )=1 的一次,由於函數 HrFp( ) 傳回馬匹的名次,所以條件是「馬匹的名次是 1 」的一次。

我們可以把上述的算式放入檢視中以測試算式的結果,請注意算式傳回的資料是「日期」,所以我們要把欄的資料類別設定為「日期」,例如上列算式的設定如下:

 

假如我們把檢視算式應用於 2005 年 5 月 1 日第 6 場的賽事,我們將會得到下面的結果。

在圖中我們見到「順利取勝」上一次出賽(相對於 5 月 1 日)的日期為 13/04/2005,它亦在同日的賽事勝出。

 

馬匹上次轉換馬房的日期

要知道在一場賽事中馬匹所屬的馬房,我們會用 MCL 函數 HrStable( ),假設馬匹即場屬「告東尼」馬房,要找仍在舊馬房的賽事的日期,我們可以用以下的算式:

HrDate(1, [For Not HrStable( )='告東尼'])

 

但由於每隻參賽馬所屬的馬房幾乎都不相同,我們不能像上式般把馬房的名稱直接寫在算式之中,要解決這問題,我們可以利用 Same( ) 函數,把上面的算式改寫成:

HrDate(1, [For Not ]+Same('HrStable( )'))

 

Same('HrStable( )') 其實是 [HrStable( )=]+Qstr(HrStable( )) 的縮寫,假如馬匹的在本場屬馬房「告東尼」,投注樂會自動把 Same('HrStable( )') 轉換為 [HrStable( )='告東尼'],假如馬匹的在本場屬馬房「梁定華」,則投注樂會自動把 Same('HrStable( )') 轉換為 [HrStable( )='梁定華']。

 

上名統計

要知道馬匹的上名數字,我們用 HrWQPStat( ),我們亦可以在函式中加入篩選賽事的條件,例如要知道馬匹在草地的表現,我們可以用

HrWQPStat( ,[For HrIsTurf( )])

 

要知道馬匹在非草地的表現則可以用

HrWQPStat( ,[For Not HrIsTurf( )])

 

要比較馬匹某日(例如 1/1/2005)之前和之後的上名率,我們可以用下列算式:

HrWQPStat( ,[For HrDate( )>={^2005/1/1}])        && 2005 年 1 月 1 日後上名率

HrWQPStat( ,[For Not HrDate( )<{^2005/1/1}])     && 2005 年 1 月 1 日前上名率

 

假如某些馬可能在 2005/1/1 之後才開始出賽,上面第二個算式的結果將會是 0 ,為了分辨是「條件不適用」抑或是「條件適用但上名數字為 0」,我們可以設定算式的預設值為 .Null.,使條件不適用的時候算式傳回 .Null.:

HrWQPStat( ,[For HrDate( )>={^2005/1/1}],.Null.)        && 2005 年 1 月 1 日後上名率

HrWQPStat( ,[For Not HrDate( )<{^2005/1/1}],.Null.)     && 2005 年 1 月 1 日前上名率

 

 

比較轉馬房前後的上名數目

綜合以上的基本知識,我們不難建立出一個比較馬匹轉馬房前後上名數目的檢視,現把檢視欄的結構列出:

欄名

算式

類別 (字數)

馬匹

(內置欄位:馬匹名稱)


舊馬房日期

HrDate(1, [For Not ]+Same('HrStable( )'))

Date

轉馬房前表現

HrWQPStat(,'For HrDate( )<='+Qstr(Column('舊馬房日期')),.Null.)

Character (23)

轉馬房後表現

HrWQPStat(,'For HrDate( )>'+Qstr(Column('舊馬房日期')),.Null.)

Character (23)

 

利用 While 加快統計速度

我們可以把檢視中「轉馬房後表現」的條件式中的 For 改為 While 以加快速度,分別是

使用 For 投注樂將會一場不漏地檢查馬匹的所有往績以找尋條件的賽事
使用 While 投注樂將會由即場賽事開始,逐一檢查以住賽事是否合乎條件,一旦遇到不合條件的賽事便立即停止,餘下的更早的賽事便不會理會

 

由於統計「轉馬房後表現」時,「舊馬房日期」及之前的早期賽事不在統計範圍之內,所以用 While 比用 For 大為省時,但「轉馬房前表現」一欄的 For 則不可以改為 While。改良後的檢視如下:

 

HrStableID( ) 和 HrStable( ) 的分別

函數 HrStableID( ) 傳回兩個字母的馬房代號,比 HrStable( ) 傳回完整的名稱速度更快和更準確,在一般統計之中,當我們要做比較的時候,我們都應該盡量以比較 ID 代替比較名稱。

 

加入了上面兩點的改善建議之後,檢視的結構變成:

欄名

算式

類別 (字數)

馬匹

(內置欄位:馬匹名稱)


舊馬房日期

HrDate(1, [For Not ]+Same('HrStableID( )'))

Date

轉馬房前表現

HrWQPStat(,'For HrDate( )<='+Qstr(Column('舊馬房日期')),.Null.)

Character (23)

轉馬房後表現

HrWQPStat(,'While HrDate( )>'+Qstr(Column('舊馬房日期')),.Null.)

Character (23)

 

加入更多條件

您可以根據自己的需要在上述檢視的算式之中加入更多的條件及欄位。例如假設您只想比較一年之內曾轉換馬房的馬,您可以把「舊馬房日期」的算式修改為:

HrDate(1, [While HrDaysAgo( )<=365 For Not ]+Same('HrStable( )'))

 

 


Page url: http://www.racematenet.com/help/index.html?see_performance_enhanced_by_a_stable_change.htm