Betfair utility functions in GO
Go code (golang) set of packages that provide many utility functions that help with day to day automation operations in the Betfair exchange.
Features include:
bfutils
packageThe bfutils
package provides some helpful methods that allow you to do some calculations with odds.
See it in action:
package main
import (
"fmt"
"github.com/gustavooferreira/bfutils"
)
func main() {
randomOdd := 4.051
index1, odd1, err := bfutils.OddShift(bfutils.RoundType_Floor, randomOdd, 10)
if err != nil {
panic(err)
}
fmt.Printf("Odd1: %.2f - position in the ladder: %d\n", odd1, index1+1)
index2, odd2, err := bfutils.OddShift(bfutils.RoundType_Floor, randomOdd, -10)
if err != nil {
panic(err)
}
fmt.Printf("Odd2: %.2f - position in the ladder: %d\n", odd2, index2+1)
ticksDiff, err := bfutils.OddsTicksDiff(bfutils.RoundType_Floor, odd1, odd2)
if err != nil {
panic(err)
}
fmt.Printf("Ticks difference between both odds: %d\n", ticksDiff)
}
betting
packageThe betting
package provides some helpful methods that allow you to calculate Free bets, GreenBooks
and various other related operations like computing green books at all odds, to be displayed on a
ladder.
See it in action:
package main
import (
"fmt"
"github.com/gustavooferreira/bfutils/betting"
)
func main() {
selection := betting.Selection{
Bets: []betting.Bet{
{Type: betting.BetType_Back, Odd: 4, Amount: 5},
{Type: betting.BetType_Lay, Odd: 3, Amount: 5},
{Type: betting.BetType_Back, Odd: 3.5, Amount: 10},
{Type: betting.BetType_Lay, Odd: 3.2, Amount: 10},
},
CurrentBackOdd: 2.4,
CurrentLayOdd: 2.42,
}
bet, err := betting.GreenBookSelection(selection)
if err != nil {
panic(err)
}
fmt.Printf("In order to green book this selection, put a {%s} bet at {%.2f} for £%.2f.\n",
bet.Type, bet.Odd, bet.Amount)
fmt.Printf("P&L\n")
fmt.Printf("---\n")
fmt.Printf("If this selection wins: £%.2f\n", bet.WinPL)
fmt.Printf("If this selection loses: £%.2f\n", bet.LosePL)
}
horserace
packageThe horserace
package provides helper functions that facilitate operations specifically with the horse racing markets.
See it in action:
package main
import (
"fmt"
"github.com/gustavooferreira/bfutils/horserace"
)
func main() {
raceBetfairName := "2m3f Hcap"
name, distance := horserace.GetClassAndDistance(raceBetfairName)
class, err := horserace.GetClassificationFromAbbrev(name)
if err != nil {
panic(err)
}
fmt.Printf("Race classification: %s\n", class)
fmt.Printf("Race distance: %s\n", distance)
}
conversion
packageThe conversion
package provides helper functions to convert distance from/to various different distance units.
See it in action:
package main
import (
"fmt"
"github.com/gustavooferreira/bfutils/conversion"
)
func main() {
raceDistance := "2m5f100y"
d, err := conversion.ParseDistance(raceDistance)
if err != nil {
panic(err)
}
fmt.Printf("This race distance [%s] has %d miles, %d furlongs and %d yards.\n",
d, d.Miles, d.Furlongs, d.Yards)
fmt.Printf("This race distance in meters is: %.2f\n", d.ToMeters())
}
To install bfutils, use go get
:
go get github.com/gustavooferreira/bfutils
This will then make the following packages available to you:
github.com/gustavooferreira/bfutils
github.com/gustavooferreira/bfutils/betting
github.com/gustavooferreira/bfutils/horserace
github.com/gustavooferreira/bfutils/conversion
Import the bfutils/betting
package into your code using this template:
package main
import (
"fmt"
"github.com/gustavooferreira/bfutils/betting"
)
func main() {
}
To update bfutils to the latest version, use go get -u github.com/gustavooferreira/bfutils
.
To run tests:
make test
To get coverage:
make coverage
Please feel free to submit issues, fork the repository and send pull requests!
When submitting an issue, we ask that you please include a complete test function that demonstrates the issue.
This project is licensed under the terms of the MIT license.