General Overview
Filters are used to identify sets of horses that fit undesirable criteria and exclude them from consideration.
When the player is able to identify and exclude from consideration sets of horses with low win rates and negative ROI, simple logic dictates
that win rate and ROI for the set of remaining horses will be higher than the set of horses that existed before weaker horses were removed. Even very small improvements in win rate and ROI can have a drastic effect upon bankroll size (for the better) as the effect of the improvement is applied over a period of time.
There are two types of Filters supported in JCapper: Preset Filters and Dynamic Filters. The major difference between the two filter types is this:
Preset Filters have filter parameters that are pre-defined. The user may choose to include or not include a Preset Filter as part of a UDM Definition. The user is unable to change the definitions of the filter itself.
Dynamic Filters offer the user the ability to define the factors, context, behavior, and numeric cutoffs of Dynamic Filters as the
FilterCode itself is written. This gives the user the power and flexibility to design and write Dynamic Filter Codes for specific
situations indicated by the player's own Data Window Research.
The Dynamic Filter Tool
The Dynamic Filter Tool in the UDM Wizard makes adding Dynamic Filters to and removing Dynamic Filters from a UDM Definition a breeze.
The tool is available from a button that becomes visible whenever Filters become the selected factor on the Modify UDM Screen. Users can
build a Dynamic Filter by selecting each of its elements (Factor, Context, Behavior, and Numeric Value) from available drop downs. As each
element of the filter is created, the filter code under construction appears in the Preview Window. When the filter code is complete, the
Add button becomes enabled and the user can add the filter to the UDM Definition simply by clicking the Add button. The user may also
remove the filter code from a UDM Definition simply by clicking the Delete button. Also present is an Edit Drop Down, allowing the user to
select any Dynamic Filter Code already part of the UDM Definition. Filter Codes selected with the Edit Drop Down will appear in the Preview
Window and may either be edited using the element drop downs or removed with the Delete button. The result can then be transferred back to
the Modify UDM Screen simply by clicking the Save and Close button. Other buttons present are: Close, Clear, and Reset.
Writing Dynamic Filters
A Dynamic Filter provides quite a bit of power and functionality. What follows below is a tutorial on how to write Dynamic Filters. Before
attempting to use the Dynamic Filter Tool, it is strongly recommended that you read the following tutorial on writing Dynamic Filters, A basic
understanding of what goes into a Dynamic Filter will make the Dynamic Filter Tool easier to use.
Four pieces of information are necessary in order to write a Dynamic Filter:
Bookend Characters
Context Definition
Behavior Definition
Numeric Cutoff
Bookend Characters
Bookend Characters serve a very important purpose. They are used to designate the factor that will be used by the Dynamic Filter being written. Different Bookend Characters are used for different factors. The following table lists the Bookend Characters currently supported by JCapper and the factors they apply to:
Bookend
Character(s)
Factor
*
Bris Speed Figure (Gap Best of Last 10)
^
Starts (Lifetime)
$
Weighted Figure (Number)
;
Late Pace Number (Last Start)
:
Late Pace Gap (Last Start)
#
Late Pace Rank (Last Start)
@
Surface Shift
>
Weight Shift
(
Class Shift (Purse Value)
)
Class Shift (Par & Race Strength)
!
Beaten Lengths (Finish Call Last Start)
\
Last Race Improvement (Bris Fig)
|
pctEarlyRankOfCP2
,
pctEarlyValueOfCP2
"
Previous Top Gap
=
TPace Number
?
TPace Rank
<
TPace Gap
%
xthStartForTrainer
+
Trainer Win Percent
~
Rider Win Percent
&
FimsInLastFour
{
PAL Gap
}
PAL Number
_
PAL Rank
%
XthStartForTrainer
[
Morning Line Rank
]
Morning Line Race Low
Hint~ Don't be intimidated by the funny looking bookend characters. You won't need to use them per se when
creating your own Dynamic Filters. They are created automatically each time you select a factor while using the Dynamic Filter Tool.
They are really just a form of machine code used by logic contained in the Data Window and Profile Marker.
Context Definition Context Definition allows the user the ability to specify the set of horses that the filter will be applied to.
Context can be defined using a Class Descriptor. When a valid Class Descriptor is used to define context, the filter will only be applied to races with a Class Descriptor that matches the Class Descriptor used in the Context Definition part of the Filter Code.
Context may also be defined using Age in years. When age is used to define context, the filter will only be applied to horses whose age in years matches the age in years used in the Context Definition part of the Filter Code.
The following table lists examples of some commonly used Context Definitions:
Context Definition
Description
ALL
Filter is applied to ALL Class Descriptors and Ages.
C
Filter is applied in Claiming Races only.
A
Filter is applied in Allowance Races only.
M
Filter is applied in Maiden Claiming Races only.
S
Filter is applied in Maiden Special Weight Races only.
CO
Filter is applied in Claiming Optional Races only.
N
Filter is applied in Non Graded Stakes Races only.
G
Filter is applied in Graded Stakes Races only.
R
Filter is applied in Starter Allowance Races only.
T
Filter is applied in Overnight Handicap Races only.
2
Filter is applied to 2 year olds only.
3
Filter is applied to 3 year olds only.
4
Filter is applied to 4 year olds only.
5
Filter is applied to 5 year olds only.
6
Filter is applied to 6 year olds only.
7
Filter is applied to 7 year olds only.
8
Filter is applied to 8 year olds only.
9
Filter is applied to 9 year olds only.
Bookending Context Definitions
Context Definition is accomplished by bookending or wrapping the Context Definition itself with Bookend Character(s).
Program Logic in both the Data Window and Profile Marker looks for and identifies valid Bookend Characters as a way of knowing which
factor to apply the filter code to. Context Definition is then extracted using the text found between valid Bookend Characters.
The following table lists some examples of how Context Definition is bookended. In each case, Context Definition is simply the text found between valid Bookend Characters:
Context Definition
Description
*ALL*
Bookend Character is *.
The Factor used for this filter will be Bris Speed Figure (Gap Best of Last 10.)
The Context Definition (text found between the Bookend Characters) is ALL.
This Filter will be applied to ALL Class Descriptors and Ages.
^C^
Bookend Character is ^.
The Factor used for this filter will be Starts (Lifetime.)
The Context Definition (text found between the Bookend Characters) is C.
This Filter will be applied to Claiming Races Only.
$3$
Bookend Character is $.
The Factor used for this filter will be Weighted Figure (Number.)
The Context Definition (text found between the Bookend Characters) is 3.
This Filter will be applied to 3 year olds only.
*4*
Bookend Character is *.
The Factor used for this filter will be Bris Speed Figure (Gap Best of Last 10.)
The Context Definition (text found between the Bookend Characters) is 4.
This Filter will be applied to 4 year olds only.
Behavior Definition
Behavior Definition, just like the name implies, allows the player to define the behavior of the Dynamic Filter.
Using a Behavior Definition, a Dynamic Filter can be made to filter out horses below a defined negative numeric value (NEG),
filter out horses below a defined positive numeric value (POS), filter out horses below a defined minimum value (MIN), or
filter out horses above a defined maximum value (MAX.)
The following table lists recognized Behavior Definitions for JCapper Dynamic Filters:
Behavior Definitions
Description
NEG
Used to specify a minimum negative value. Horses below a defined negative number are filtered out.
Note- The alphabetic characters NEG are used
instead of a minus sign inside a FilterCode to indicate a negative number. The reason for this
is when more than one filter is used in a UDM definition, each separate FilterCode is separated by a dash
or minus sign.
POS
Used to specify a minimum positive value.
Horses below a defined positive number are filtered out.
Behaves the same as MIN.
MIN
Used to specify a minimum positive value.
Horses below a defined positive number are filtered out.
Behaves the same as POS.
MAX
Used to specify a maximum positive value.
Horses above a defined positive number are filtered out.
MXN
Used to specify a maximum negative value.
Horses above a defined negative number are filtered out.
Note- The characters MXN represent a combination of abbreviations: MX for max and N for negative.
Negative numbers are not represented with a minus sign in FilterCodes because the minus sign or dash character is used to
separate individual FilterCodes when more than one FilterCode is used.
Numeric Cutoff
Numeric Cutoff is simply the cutoff number used by the filter.
The following table lists examples of Numeric Cutoffs being used with Behavior Definitions:
Partial
Filter
Code
Behavior Definition
Numeric Cutoff
Description
NEG10
NEG
10
All horses with a Context Definition numeric value less than negative 10 are filtered out.
POS10
POS
10
All horses with a Context Definition numeric value less than positive 10 are filtered out.
MIN10
MIN
10
All horses with a Context Definition numeric value less than positive 10 are filtered out.
MAX10
MAX
10
All horses with a Context Definition numeric value greater than positive 10 are filtered out.
MXN10
MXN
10
All horses with a Context Definition numeric value greater than negative 10 are filtered out.
Putting It All Together Writing Complete Dynamic Filter Codes~
Each Dynamic Filter Code will contain all four elements: Bookend Characters, Context Definition,
Behavior Definition, and Numeric Cutoff. All four elements are placed right next to each other
without spaces between them. Together, they form a Dynamic Filter Code.
The following table lists examples of Dynamic Filter Codes along with an explanation of how each
filter code is applied:
FilterCode
Explanation
*ALL*Neg10
For ALL classes and horses of ALL ages, any horse with not within 10 points of the
highest Bris Speed Figure (Gap Best of Last 10) in the race will be filtered out.
*CO*Pos10
In Claiming Optional races only, any horse with less than a 10 point advantage in
Bris Speed Figure (Gap Best of Last 10) over the second ranked horse in the race will be filtered out.
^A^min3
In Allowance races only, any horse with less than 3 lifetime starts is filtered out.
^4^max15
For 4 year olds only, any horse with more than 15 lifetime starts is filtered out.
$G$min95
In Graded Stakes Races only, any horse with a JCapper Weighted Figure less than 95 is filtered out.
$C$Max95
In Claiming Races only, any horse with a JCapper Weighted Figure more than 95 is filtered out.
$3$min90
For 3 Year Olds only, any horse with a JCapper Weighted Figure less than 90 is filtered out.
#G#max1
In Graded Stakes Races only, any horse with a rank for Late Pace Number (Last Race) greater than 1 is filtered out.
Obviously, quite a bit of power and flexibility can be introduced into a UDM Definition by using Dynamic Filters.
On the Preset Filters web page, four tests are presented for determining whether or not a Preset Filter should be
included as part of a UDM Definition. These same four tests also apply to Dynamic Filters.
A Dynamic Filter should be applied to the UDM only if all four of the following tests have been met:
The set of horses filtered out by the individual filter have significantly lower win rates than the overall win rate of horses for the UDM.
The set of horses filtered out by the individual filter have a significant negative roi.
You are working with enough data so that the set of horses filtered out by the individual filter have enough occurances to justify applilcation of the filter. Never rely on just a handful of occurances.
Win rate and roi for the set of horses filtered out by the individual filter should be similar when comparing Development Data results with Validation Data results. Don't assume that unseen data will bring the same results as Development Data. Test it.
Apply a Dynamic Filter to your UDM Definition only after careful testing has been performed and only after the above four tests have been met. It should be obvious that the set of horses being filtered out are really bad bets.
To apply a Dynamic filter to a UDM Definition, simply paste the FilterCode into the SpecialFilterCode field in the Profile Table UDM record. This can easily be done using either the UDM Wizard or the Filter View Profile Table Interface.
Hint~ Multiple filters can be applied to any UDM Definition. Simply paste each individual FilterCode value into the SpecialFilterCode field, and separate your FilterCodes with dashes (the "" character.) The SpecialFilterCode field will accept text up to 250 characters in length.