- Hardware And Software Advices
- Customize Ipposnif
1.Hardware And Software Advices
Minimum hardware requirement
The default configuration of Ipposnif can run on a dual core 2.2Ghz
with 4GB ram and 10GB of free disk space. The program will run fluently
using a quad core with SSD disk.
Ipposnif uses SQL Server 2016 LocalDB to store data, reading and
writing millions of records every day. The data in the database is
recorded in a fragmented way, so most of the time it is spent searching
the start position of data. Classic hard disks have to mechanically
move the heads to the start position of data, instead Solid State Disks
have no mechanical part to move and the time it takes to access info is
30/40 times faster. Overall the speed increase of a database running on
SSD is between 50% and 1000%. So consider the purchase of an SSD disk
as first step to enhance the Ipposnif performance.
Processors and SQL Server
Ipposnif uses Microsoft SQL Service Broker to execute and balance the
external web requests (odds refresh, bets, etc..) Service Broker is a
powerful and scalable queue manager: it can take advantage of all
available processors, parallelizing the tasks in a reliable way.
Microsoft SQL Service Broker is part of SQL server. SQL server used by
Ipposnif is the ‘LocalDB’ version that is free but allows
the use of only one physical processor (with all its cores). So if you
have a multiprocessor pc and if you want to use all of them you have to
switch to another version of SQL Server. To switch to another instance
of SQL Server, open the file ipposnif.ini with Notepad (you can find in
the same directory of the program, normally C:\Program Files
(x86)\Ipposnif). Edit the value ‘data_source’ with the
SQL server instance source name you want to connect to. Restart the
program and a new Ipposnif database with the name
‘IpposnifDB’ will be created. The user that runs
Ipposnif, must have administrative permissions.
Another important element that affects the overall speed is the quality
of the internet connection. Mainly it consists of the latency (ping
response time) and by the data volume supported. In the default
configuration, Ipposnif generates peaks of data traffic of 200Kbit
second. If your connection does not support easily this volume of
traffic all the system will slow down because the requests made, even
if parallelized, will need more time to be completed.
Telemetry is a functionality of Azure Cloud that can
track the activity of an Ipposnif instance installed on a virtual
You can monitor the virtual machine and the Ipposnif activity with
charts like the following one:
When the option "Instrumental Key" has a value, telemetry is active and Ipposnif sends, every four minutes, the
following information to the telemetry collector:
- Balance (current available balance for
- Liability (current liability)
- Processes (count of processes in the last minute
excluding external API requests)
- Errors (count of Service Broker errors in the
- API Requests (count of API requests in the last
- getPrices net ms (average response time of the
getPrices Betfair API)
- getPrices CPU ms (average processing time of the
getPrices Betfair API)
- Main Clock ms (average processing time of the
sp_Main procedure, the heartbeat of Ipposnif)
- TrigBet ms (average processing time of the
betting procedure, where conditions are checked and bet
- IpposnifDB Data Size (size of the Ipposnif
database. It can never overcome 10000 Mb).
- Transactions (count of transactions in the last
hour, when it overcomes 5000 you are subject to extra Betfair
To get these charts, first, you have to
create a new Azure virtual machine and install Ipposnif on it.
Then in the Azure Cloud Management Console add a new resource of type
Once you have created the new resource, copy the Instrumental key
you can find in the properties and paste it into the Ipposnif option.
Wait some minutes (5-10) until Ipposnif has sent some data to the
Then in the telemetry property page click the link “Metric
Explorer”, click “edit” on the empty chart that
will appear. Choose the metrics you want to add to this chart. You will
find the Ipposnif ones inside the group "Custom".
The aggregation type to apply is “max” for the metrics
"IpposnifDB Data Size" and "Transactions", the type is "sum" for metric
"Errors", the type is “average” for all the other metrics
- ©Betfair is the largest international betting
exchange of the globe with hundreds of markets open every day.
Ipposnif can place bets only on Betfair markets.
- Betfair Markets work in a similar way to the
stock exchange markets: some people place requests to buy the
object of the market, other people place requests to sell the same
thing. When two requests match, the exchange occurs. Betfair
markets are normally linked to a sport event (like for ex. a horse
race ) and the objects exchanged are the chance to win of each
Selection(runner) of this event. A market can have a minimum of two
selections (like the market 'Match Odds' of a Tennis match)
or more selections (like the market 'Win' of a Horse Race). A sport
event can have more than one market linked to it, for example a
soccer match can have the market “Match Odds”, the
market “Correct Score” and many others. A market, when
the event is finished, can have one winning selection (like for
example in the WIN market of an horse race) or more winning
selections (like in the PLACE market of a horse races).
- Bet is a transaction on a Betfair market; every bet is defined by five elements:
- The Selection(runner) and the Market where to place the bet.
- The Type Back(buy) or Lay(sell). If the type is back you act
as a punter: if the horse wins you win the amount of your bet
multiplied by the odd of the horse, if it loses you pay the
amount of the bet. If the type is lay you act as a bookmaker:
if the horse wins you pay the amount of your bet multiplied by
the odd of the horse, if it loses you win the amount of the
- The Price(odd) of the horse defines the odd at which the
transaction must be made. If the bet placed doesn't meet a request of opposite type for the same price, it remains in a "unmatched bet" status. As soon as two bets of
opposite type have the same price, the exchange takes place. The bet has now
a “matched bet” status. Unmatched bets can be deleted in any moment by the user while matched bets cannot be deleted.
Betfair prices go from 1.01 to 1000, but not all decimals are represented with a price. The prices have increments that start with 0.01 for the lower odds, and it arrives at 10 for the higher odds.
There are 350 available prices in Betfair:
- (incr. of 0.01) 1.01, 1.02, 1.03, 1.04, 1.05, 1.06, 1.07, 1.08, 1.09, 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.17, 1.18, 1.19, 1.20, 1.21, 1.22, 1.23, 1.24, 1.25, 1.26, 1.27, 1.28, 1.29, 1.30, 1.31, 1.32, 1.33, 1.34, 1.35, 1.36, 1.37, 1.38, 1.39, 1.40, 1.41, 1.42, 1.43, 1.44, 1.45, 1.46, 1.47, 1.48, 1.49, 1.50, 1.51, 1.52, 1.53, 1.54, 1.55, 1.56, 1.57, 1.58, 1.59, 1.60, 1.61, 1.62, 1.63, 1.64, 1.65, 1.66, 1.67, 1.68, 1.69, 1.70, 1.71, 1.72, 1.73, 1.74, 1.75, 1.76, 1.77, 1.78, 1.79, 1.80, 1.81, 1.82, 1.83, 1.84, 1.85, 1.86, 1.87, 1.88, 1.89, 1.90, 1.91, 1.92, 1.93, 1.94, 1.95, 1.96, 1.97, 1.98, 1.99, 2.00
- (incr. of 0.02) 2.02, 2.04, 2.06, 2.08, 2.10, 2.12, 2.14, 2.16, 2.18, 2.20, 2.22, 2.24, 2.26, 2.28, 2.30, 2.32, 2.34, 2.36, 2.38, 2.40, 2.42, 2.44, 2.46, 2.48, 2.50, 2.52, 2.54, 2.56, 2.58, 2.60, 2.62, 2.64, 2.66, 2.68, 2.70, 2.72, 2.74, 2.76, 2.78, 2.80, 2.82, 2.84, 2.86, 2.88, 2.90, 2.92, 2.94, 2.96, 2.98, 3.00
- (incr. of 0.05) 3.05, 3.10, 3.15, 3.20, 3.25, 3.30, 3.35, 3.40, 3.45, 3.50, 3.55, 3.60, 3.65, 3.70, 3.75, 3.80, 3.85, 3.90, 3.95, 4.00
- (incr. of 0.10) 4.10, 4.20, 4.30, 4.40, 4.50, 4.60, 4.70, 4.80, 4.90, 5.00, 5.10, 5.20, 5.30, 5.40, 5.50, 5.60, 5.70, 5.80, 5.90, 6.00
- (incr. of 0.20) 6.20, 6.40, 6.60, 6.80, 7.00, 7.20, 7.40, 7.60, 7.80, 8.00, 8.20, 8.40, 8.60, 8.80, 9.00, 9.20, 9.40, 9.60, 9.80, 10
- (incr. of 0.50) 10.50, 11, 11.50, 12, 12.50, 13, 13.50, 14, 14.50, 15, 15.50, 16, 16.50, 17, 17.50, 18, 18.50, 19, 19.50, 20
- (incr. of 1) 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
- (incr. of 2) 32, 34, 36, 38, 40, 42, 44, 46, 48, 50
- (incr. of 5) 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
- (incr. of 10) 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, 710, 720, 730, 740, 750, 760, 770, 780, 790, 800, 810, 820, 830, 840, 850, 860, 870, 880, 890, 900, 910, 920, 930, 940, 950, 960, 970, 980, 990, 1000
- The Size(amount) of the bet defines the maximum amount of
money that you wish to exchange. Betfair takes care of
accumulating bets from different bidders in order to exchange
the maximum amount of money, and this is done in a
completely transparent and anonymous way.
- The Persistence of the bet defines the behaviour of the bet
when the event starts:
- Lapse: the unmatched bet will be voided.
- Persist: if the market goes in play, the unmatched bet
will be kept in play, otherwise the bet will be voided.
- Market_on_close: bet will be matched by Betfair using the
starting price. The starting price is calculated by Betfair conciliating all the "Market on close" requests from all the users.
- Trade is the container for bets used by Ipposnif.
A bet is always contained in a trade. Every trade contains at least one bet, but it can contain more bets
of the same or different type. Trades are produced by Ipposnif
strategies; each trade is technically an instance of the
- Strategy is a set of criteria that defines which
runners, when and how much to bet on them. Each strategy produces
trades, and depending by the configuration it can have one trade
open at one time or more trades open at the same time on more
markets an runners.
- Hedging also called "greening up" is the operation
of counterbalancing a bet with another of the opposite type. The scope is to shorten
the loss or to cash out the profit.
- Overround: is a index showing how much the odds
of a Betfair market (back or lay) are fair. More this is index is
close to 100 and more the market is fair. For example a Back
Overround of 110 means that if the player bets all the runners
(with a size inversely proportional to the price) he will lose 10%
of the investment.
- Ticks: Increments between two prices. For example between 1.50 and 1.51 there is 1 tick of distance, between 990 and 1000 there is also 1 tick of distance. Ticks can be negative, for example between 2.2 and 2.16 there is -2 ticks of distance.
Ipposnif is an open system because all the betting logic
and the data is contained unencrypted in the Microsoft SQL Server 2016
Microsoft SQL Server Management Studio
Using the proper tools, you can connect to the database and
modify or add variables and functions developed by you.
The official tool, for managing SQL Server databases, is Microsoft SQL Server Management Studio (SSMS)
. It is free software.
Connect to the database
The server name for the connection is:
The version of SQL Server used by Ipposnif is the LocalDB 2016. This free version allows only local connections, so you can connect to it, only from the same machine where Ipposnif is installed.
Once you are connected, you can browse SQL Server using Object Explorer. All the Ipposnif procedures and data are contained in the database with name
How to add a new variable
To add a new variable, that can be used from the strategies, simply insert a record in the table [tbl_SysVariables].
All the fields are mandatory:
- Name: a unique combination of the following characters abcdefghijklmnopqrstuvwxyz_0123456789
- Declaration: where to specify the type of the variable.
- Funct: the SQL expression to retrieve and assign the value to the variable.
Example of a new variable that returns the count of runners in the market with and odd between 2 and 7:
The variable @id_race
present in the [Funct] expression is an index variable resolved automatically. Only the following index variables can be used in the field [Funct]:
Some of the variables present in the table [tbl_SysVariables] (for ex. @bet_size) are used by the system and by some strategies. If you wish to change an existing variable, don't edit it directly, but instead create a copy of the record with a new variable name.
- @id_strategy contains the id of the strategy processed in that moment
- @id_race contains the id of the market processed in that moment
- @id_horse contains the id of the selection processed in that moment
- @id_trade contains the id of the trade processed in that moment
- @nbet contains the ordinal number (in the current trade) of the bet processed in that moment