Donald A. Swanson
This work describes a subjective method of constructing an odds line from the analysis of a thoroughbred horse race. It uses generic symbols matched up with Fibonacci numbers to solve the problem of computational stabilization and the favorite-longshot bias. Symbols are chosen by the handicapper to represent the race analysis. Fibonacci numbers are used to convert symbol combinations into weighted percentages.
The leftmost column in figure 1 shows the seven symbols used in the method. There are three one-part symbols and four two-part symbols. The left side symbol part is the "base" (+, N, Ø). The right side symbol parts (+, -) "modify" the base. Word descriptions are names for the symbols. Each symbol is matched up with a Fibonacci number. Symbols are hand-written with a forward slash "/" as a separator, for example: N- / ++ / Ø+. Memorize the symbols and word descriptions by writing them down a few times.
Absolute Analysis - Evaluates a single horse in isolation or against todays race conditions. Symbol selection starts with consideration of +, N, Ø before moving up or down to the appropriate symbol. The handicapper should mentally move toward N when uncertain.
Relative Analysis - Compares two or more horses against each other. In figure 1 rightmost column the symbols are numbered 1 to 7. The difference between the symbols is the degree of certainty that one horse will outperform the other(s). The range is 0 to 6 degrees. Symbol selection starts with consideration of N versus N before expanding outward. For example: speed ratings of 90 and 92 for two horses might get N, N or N, N+ or N-, N+ with degrees of certainty zero, one, and two. If the speed ratings are 90 and 98 then the two horses might get Ø, +. If the speed ratings are 90, 92, 98 then the three horses might get Ø, Ø+, + with total degrees 1 + 4 = 5.
Reverse Read Analysis - Reversing the symbols with differing parts can be helpful in situations with unknowns or application of historical "angles". A developing horse might be taking a large rise or drop in class or trying a new distance or surface. Symbol selection starts with consideration of base positive or negative. Analysis of available information for todays race will determine whether a positive reverse read should be modified neutral or doubtful.
The relative analysis of contenders versus non-contenders is + versus Ø.
Four win contenders in an eight horse field (4 / 8).
+ / + / + / + / Ø / Ø / Ø / Ø
13 + 13 + 13 + 13 + 1 + 1 + 1 + 1 = 52 + 4 = 56
cp = 52 / 56 = .929
nc - number of contenders fs - field size cp = (13 * nc) / ((13 * nc) + (fs - nc))
Races with two or more contenders use three factors arranged from left to right in order of importance. Factors can be two-part compounded, for example: class-speed, form-age, or distance-pedigree. Factor names are written in abbreviated form with a separator slash, for example: cls-sp / fm-age / dst-ped.
The N symbol can be extended to NN making the neutral base symbols N+, NN, N-. The factor symbols are the right side symbol parts (+, N, -) matched up with Fibonacci numbers 8, 5, 3 respectively. Figure 3 shows the six factor symbol combinations and word descriptions which must be memorized. Symbol combinations are written plain without the separator slash.
|N N N||neutral|
|+ N N||one plus|
|N N -||one minus|
|+ N -||one plus one minus|
|+ - -||one plus two minus|
|+ + -||two plus one minus|
Symbol combination selection usually starts with consideration of the "one plus" subset: (+ N N), (+ N -), (+ - -).
Factors can also be doubled, for example: speed, speed, distance-pedigree. There are two rules for selecting symbol combinations with doubled factors:
The doubled factor subset: (N N N), (N N -), (+ + -).
Two win contenders in an eight horse field (2 / 8).
cp = (13 * 2) / ((13 * 2) + (8 - 2)) = .813
The three factors chosen are class, form-surface, distance.
The (+ N -) combination generally works well.
8 + 5 + 3 = 16 // factor weight sum f1pct = (8 / 16) * .813 = .407 // (weight/sum) * cp f2pct = (5 / 16) * .813 = .254 f3pct = (3 / 16) * .813 = .152
Each contender gets three symbols one for each factor as shown in figure 4 center column.
|2 / 8||cls / fm-sf / dst||+ N -|
|#1||+ / N / N||13 / 5 / 5|
|#2||N- / N+ / +||3 / 8 / 13|
13 + 3 = 16 // factor 1 sum (13 / 16) * .407 = .331 // #1 (weight/sum) * f1pct (3 / 16) * .407 = .076 // #2 5 + 8 = 13 // factor 2 sum (5 / 13) * .254 = .098 // #1 (weight/sum) * f2pct (8 / 13) * .254 = .156 // #2 5 + 13 = 18 // factor 3 sum (5 / 18) * .152 = .042 // #1 (weight/sum) * f3pct (13 / 18) * .152 = .110 // #2
Sum the three percentages for each contender.
.331 + .098 + .042 = .471 // #1 .076 + .156 + .110 = .342 // #2
Sort the final percentages in descending order before converting into odds.
odds = (1 / pct) - 1 (1 / .471) - 1 = 1.123 // #1 (1 / .342) - 1 = 1.924 // #2
Select the increment for rounding off.
if odds < 1 then inc = 10 elseif odds < 2 then inc = 5 elseif odds < 5 then inc = 2 else inc = 1 odds = (int((odds * inc) + .5)) / inc (int((1.123 * 5) + .5)) / 5 = 1.2 // #1 (int((1.924 * 5) + .5)) / 5 = 2 // #2
|2 / 8||cls / fm-sf / dst||+ N -|
|#1||+ / N / N||.471||6 / 5|
|#2||N- / N+ / +||.342||2 / 1|
Scaling Percentage To Symbol Numbers 1 To 7.
pct - percentage from 0 to 1 conv - converted into a 1 to 7 number conv = int((((pct * 100) + 16.667) / 16.667) + .5)
Win / Place Percentage.
nc - number of entrants or contenders st() - number of starts this year plus last year wp() - number of wins and places this year plus last year wt() - Fibonacci numbers 1,2,3,5,8,13,21 for i = 1 to nc wp(i) = wp(i) / st(i) conv = int((((wp(i) * 100) + 16.667) / 16.667) + .5) wp(i) = wt(conv) next i
Earnings Per Start.
en() - earnings this year plus last year (earnings are rounded to the nearest thousand) high - highest value found cap = 180 // eps limited to USD-180k high = 0 for i = 1 to nc en(i) = en(i) / st(i) if en(i) > cap then en(i) = cap if en(i) > high then high = en(i) next i for i = 1 to nc en(i) = en(i) / high conv = int((((en(i) * 100) + 16.667) / 16.667) + .5) en(i) = wt(conv) next i
Recent Representative Speed Rating.
scale - scaling increment sr() - speed rating scale = 2.0 high = 0 for i = 1 to nc if sr(i) > high then high = sr(i) next i offset = (high / scale) - 7 for i = 1 to nc sr(i) = int(((sr(i) / scale) - offset) + .5) if sr(i) < 1 then sr(i) = 1 sr(i) = wt(sr(i)) next i
This ABC function named "truncate" converts a percentage value (pct) into fractional odds. The truncate increment (inc) starts at 20 which rounds down to the nearest 1 / 20th. If one of the tests are true then the numerator and denominator are calculated in the return statement. If all of the tests are false then the increment is cut in half.
HOW TO RETURN truncate pct: PUT (1 / pct) - 1 IN odds PUT 20, 0 IN inc, dn WHILE dn = 0: PUT (floor(odds * inc)) / inc IN odds SELECT: odds mod 1 = 0: PUT 1 IN dn odds < 5 AND odds mod .5 = 0: PUT .5 IN dn odds < 2 AND odds mod .2 = 0: PUT .2 IN dn odds < 1 AND odds mod .1 = 0: PUT .1 IN dn odds < 1 AND odds mod .25 = 0: PUT .25 IN dn odds < .25: PUT .05 IN dn ELSE: PUT floor(inc / 2) IN inc RETURN odds / dn, 1 / dn