FAQ BetFair betting bot - MarketFeeder Pro - triggered automated betting software
- How to make a trigger start 45 sec after or before the off?
- After I started MF Pro and opened 'Triggers', I can't see the triggers I added last time
- How do I stop it betting when my balance reaches certain level?
- My triggers are not working. What to do?
- How to calculate the amount I want to back to win £100?
- How can I apply staking plans?
- How can I cancel a trigger if another trigger has worked?
- How do I compare the current price with that 1 hour ago?
- How to bet a percent of the total bank
- How to bet on a selection based on its position in the list, and not its price
- How to make a trigger bet the default betting amounts specified for the market
- How to check or uncheck all selections in the market
- How to bet to a fixed liability/payout
- How to bet on the selection with the specific BetFair order
- How to cancel all unmatched bets if at least one was matched
- How to cancel unmatched bets and post them at the best price before the start of the event
- How to Dutch Selections Chosen By Specific Conditions
- How to bet in races with a specific number of runners?
- How to stop betting after x wins/losses in a row?
- How to back at lay odds and lay at back odds?
- How to eliminate the loss on possible winners In-Play?
- How to apply triggers to specific markets
- How to apply various stop-loss methods
- How to determine whether the previous event affected by a trigger has finished
- How to apply the 'Fill or kill' rule?
- Betting on selections whose IDs are given in Excel
- How to bet in horse races with specific distance
- Maximum Number of Markets - Some Notes
- In order to prevent the software freezing while it is obtaining the data from the Internet or putting them into the Excel spreadsheet, such slow processes are maintained in so-called "threads". A thread is a separate process that is launched independently (in terms of time) from the main program. The more slow processes are required the more threads need to be created.
- Every market you add to MarketFeeder Pro involves several threads - the slowest ones perform retrieving the list of selections and getting the current prices from BetFair. Plus sending these data into the spreadsheet.
- Apart from refreshing the markets the software needs to keep an eye on the current list of your bets, your available funds, account statement and the list of triggers, offsets and books. It needs to write down the information about the markets into the log files. The price that we pay for the versatility of the software is the load on our computer resources.
- Finally we get to the most important part: your computer resources are finite. You can't consume them boundlessly. There is a limit of total processes that can be run by your CPU, or bits of information stored in your computer's RAM. So it's not a surprise that MarketFeeder Pro operates within these limits. It's got the same CPU, RAM and Internet line that are shared by the other pieces of software and hidden system processes.
- When you add too many markets to MF Pro and begin refreshing them too frequently the software does its best to provide the requested data at a given speed. Thus it opens as many threads as it can to make you be able to manipulate the main window and spreadsheet without the need to wait until the required data are obtained from BetFair. At some critical point - if you keep adding the load - the application will reach its allowed limit. This limit is different for every computer and depends on many factors. At this point the software will stop working and quit - because this is the way the operational system protects itself from crashing altogether.
- Do I need to have MS Excel installed to run MarketFeeder Pro?
- Can MarketFeeder Pro trade in different currencies?
- Is it limited in bet size?
- Does it support multiple markets?
- What does Triggered Betting mean?
- Can I run my own macros in the spreadsheet connected to MarketFeeder Pro?
- How can it help me to earn money?
- Do I have to pay extra-fee for using BetFair API?
- I don't see a suitable trigger in the Trigger Examples
- What can I do if I connect MarketFeeder Pro to Excel?
- What is Auto-Greenup?
- How many triggers can I maintain at the same time?
- Can I connect external spreadsheets to MarketFeeder Pro?
- Will I be able to use the software at my home AND at my work?
- What markets can I trade in?
- Can I set up a trigger that watches or bets on several runners?
- Can MarketFeeder Pro bet in In-play markets?
- Can I check an event's state (for example Suspended or In-play) in my triggers?
- What happens to my Dutching bets when one or more runners are withdrawn?
- What options can I set for Auto-Dutching?
- Maximum Payout that you are prepared to spend on a selection
- Amount to win (or to lose) per each selection
- Minimum profit %
- Bet on the Back or Lay side (or both)
- Bet on the first ... selections (and therefore calculate book% only for those selections)
- Stop after each Dutching (to give you time to check if everything is correct)
- Adjust amounts (if the calculated bet size is greater than the amount offered in the market)
- Bet In-Play (whether to activate Auto-Dutching when the market is In-Play)
- How would I set up a trigger that allowed me to dutch the top four runners?
- I have 2 Betfair accounts and run 2 systems I'd like to work on both Betfair accounts using your software - one from my pc and one from my laptop. Is that possible?
- Can I save and recall defined triggers, pass them to another user?
- Can I sell triggers?
- Is it safe to use MarketFeeder Pro?
- Can I test my staking plans with MarketFeeder Pro?
- Starting MF pro causes unexpected closing. Why?
- Excel Cell References
- Cell Addressing
- Go to cell A7.
- Type 1. Press Enter.
- Type 1. Press Enter.
- Type 1. Press Enter.
- Go to cell B7.
- Type 2. Press Enter.
- Type 2. Press Enter.
- Type 2. Press Enter.
- Go to cell A10.
- You should be in cell A10.
- Type =.
- Use the up arrow key to move to cell A7.
- Type +.
- Use the up arrow key to move to cell A8.
- Type +.
- Use the up arrow key to move to cell A9.
- Press Enter.
- Look at the Formula bar while in cell A10. Note that the formula you entered is recorded in cell A10.
- You should be in cell A10.
- Choose Edit > Copy from the menu. Moving dotted lines appear around cell A10, indicating the cells to be copied.
- Press the Right Arrow key once to move to cell B10.
- Choose Edit > Paste from the menu. The formula in cell A10 is copied to cell B10.
- Press Esc to exit the Copy mode.
- Highlight cells A7 to B9. Place the cursor in cell A7. Press F8. Press the down arrow key twice. Press the right arrow key once. A7 to B9 should be highlighted.
- Click the Copy icon
, which is located on the Formatting toolbar. - Use the arrow key to move the cursor to cell C7.
- Click the Paste icon
, which is located on the Formatting toolbar. - Press Esc to exit Copy mode.
- Move the cursor to cell C10.
- Type =.
- Use the up arrow key to move to cell C7.
- Press F4. Dollar signs should appear before the C and before the 7.
- Type +.
- Use the up arrow key to move to cell C8.
- Press F4.
- Type +.
- Use the up arrow key to move to cell C9.
- Press F4.
- Press Enter. The formula is recorded in cell C10.
- Your cursor should be in cell C10.
- Hold down the Ctrl key while you press "c" (Ctrl-c). This copies the contents of cell C10.
- Press the right arrow once.
- Hold down the Ctrl key while you press "v" (Ctrl-v). This pastes the contents of cell C10 in cell D10.
- Press Esc to exit the Copy mode.
- Move the cursor to cell E1.
- Type =.
- Press the up arrow key once.
- Press F4.
- Press F4 again. Note that the column is relative and the row is absolute.
- Press F4 again. Note that the column is absolute and the row is relative.
- Press Esc.
- Text and Values in One Cell
- How To Use Excel IF Function
- Functions
- How to Determine whether VBA is Enabled
- Adjusting formulas to your Regional Settings
- From the Taskbar, click Start -> Settings -> Control Panel
- In Control Panel, double-click Regional Options or Regional Settings
- Click the General property page. Check the language that your computer is using
- Click the Number property sheet. Examine how the numbers are configured for your computer. Here is an example:

- Click the Currency property sheet. Check how the money value is set to display in your computer.
- Click the Date property page. Check how dates are set to display in your computer:

- Click the Time property sheet. Review how the numbers are set to display in your computer.
- When you have finished examining the property sheets, click Cancel (unless you want to save or apply the changes you might have made, in which case you would click OK).
- replace all commas with semi-colons. Example: instead of "=IF(5>6, 4.2, 6.1)" write "=IF(5>6; 4.2; 6.1)"
- replace all periods with commas. Example: instead of "=IF(5>6; 4.2; 6.1)" write "=IF(5>6; 4,2; 6,1)"
- Excel AND Function
- Excel Date and Time Format
- 1.0 is 1 day.
- 0.5 is half of the day - that is 12:00
- 1.1 is 1 day, 2 hours and 24 min
- 30.5 is 30 days and 12 hours
- How to optimize the load on computer resources
- Do not start Excel if you are not planning to utilize any sheets and formulas stored in cells. The speed of connection to Excel is extremely low, and the software has to spend substantial CPU resources on maintaining this connection. If you do need to use Excel, think which markets you need to see there, and which can be monitored inside the application only. For example, if you only use Excel for trading in horse races, then there is no point in displaying football or financial markets there.
- While editing triggers, it is recommended to break them into separate files, containing no more than 10 triggers in each.
- Minimize the default market history depth (on the “General Options” tab). For example, if you only analyze the change of price within the last 5 minutes, there is no sense in keeping the history of the last 30 minutes.
- Unless it is absolutely necessary, do not monitor more than a couple of markets simultaneously. You can add as many markets as you wish to the “My Markets” list. Yet starting all of them at a time will certainly make MarketFeeder Pro put them in a queue, and the average refresh rate may become very low. There are options that allow you to start monitoring markets at a certain time before their beginning, and stop monitoring them at some point after their start. Use these options whenever possible.
- Keep the refresh rate of each market within reasonable bounds. Assign different refresh rate for in-play and idle markets. There is usually no sense in updating a horse or greyhound race once per second at 2 hours before their beginning.
- Edit the frequency of updating the list of bets and account statement. These options are available on the “Betting Options” tab of the “Settings” window. If you are not using any staking plans which are based on the outcome of the previously settled event, set the refresh rate of the account statement to around 5 minutes or more.
- Turn “Retrieve all price offers” off (“General Options”, under “Selection Info”), if you don’t need to use the amounts offered at all prices for each selection.
- Close “Price Ladder” if you do not need it – it consumes much traffic.
- Configure the “UK and Australian Markets” tickboxes (“General Options” tab) – untick those that you won’t be using.
- Choosing your own winners when testing a system
- How to apply triggers to specific selections
- How to make staking plans work for my trigger
- Working with User Variables. Lesson 1
- Working with User Variables. Lesson 2
- Using Command Line to start the program
- Limiting the liability of a bet
- Dutching in place markets (markets with multiple winners)
- Transferring funds between main and Australian wallets
- Addressing win and place markets through variables. Lesson 1.
- How to know which trigger is working at the moment?
- Bets below the minimum - important information
- Controlling the number of betting transactions
- Betting at Starting Price (SP)
- Addressing win and place markets through variables. Lesson 2.
- Choosing the favourite among imported selections
- Tips for Programmers
- Tips based on the results of the first Trigger Battle
- Download results from BetFair...
- Settle finish markets automatically
- Finish a market automatically after settlement
- ASK YOUR OWN QUESTION
Just add one of the following conditions to your trigger:
To start before the off:
Minutes Before the Off is equal or less than 0.75
To start after the off:
Minutes Since the Off is equal or greater than 0.75
Triggers are loaded into the software after the event tree and "My Markets" are loaded. The order of loading is crucial, because if any of triggers refer to a specific market that is not loaded yet, they won't be able to operate correctly.
Therefore you just need to wait till both event tree and "My Markets" list get loaded. Then press the "Triggers" button one more time.
There are two ways of doing that.
1. Edit "Betting Options", "Banking":
Stop automated betting when the total bank has reached ...
2. Add the following condition to your triggers:
Trigger Expression total_funds is equal or greater than [insert amount here]
Note: if you are trading in test Mode, the condition must refer to a different variable:
Trigger Expression test_funds is equal or greater than [insert amount here]
First of all, check if you turned the triggered betting on. If the bulb button next to "Triggers" looks like this:
, then you need to turn them on by pressing the bulb and making it look green.
Also, open your triggers and check if they are active. If a trigger or trigger block is not active its body is painted with gray colour. The "Execute" field of the trigger must not be set to "never". There is a quick way to check which triggers are currently active. Just click on the bar in the bottom of the application:

It will open a window where you will see all active triggers to the right.
If this does not help either, analyze trigger logs carefully. You can access trigger logs by clicking on the trigger row in the aforesaid window. Trigger logs must contain all the information you need to find out why your triggers are not being executed.
Also, check this option: "No triggering till ... mins before the event's start". Make sure it doesn't block your triggers.
Amount: 100/(back_price-1)
Similarly, if you want to lay to a liability of £100, use the following formula:
Amount: 100/(lay_price-1)
New staking plans examples are available for version 6.0.
Using the "Win/Lose Trigger Variables" you can utilise various staking plans in MF Pro's triggers.
Here are several examples.
1. Backing or laying £10 and recouping losses in the next bets. Then returning to the original bet size as soon as the bet won.
Amount: IF(last_lost=0, 10, 10+last_lost)
2. Laying to the liability of £10 and recouping losses in the next bets. Then returning to the original bet size as soon as the bet won.
Amount: IF(last_lost=0, 10/(lay_price-1), 10/(lay_price-1)+last_lost)
3. Backing £10, and if the bet lost, adding £10 to every next bet until it wins, then reverting to the original bet size. For example, 10, 20, 30, 40, etc.
Amount: IF(last_lost=0, 10, 10+hist_1_backa)
For laying:
Amount: IF(last_lost=0, 10, 10+hist_1_laya)
4. Laying £10 and doubling bet size after every 2 losing events, till the bet wins. Then stopping. Example: 10, 10, 20, 20, 40, 40
Amount: IF(last_won=0, 10, IF(AND(last_lost>0, losses%2=0), hist_1_laya*2, hist_1_laya))
Condition to add to the trigger:
Total Won Amount is equal or less than 0
5. Add winnings from a back bet to the next bet size. Reset the bet amount to the original value if a bet loses. Example: 10@1.4 (won), 14@2.2 (won), 16.8@4.5 (lost), 10
Amount: IF(last_won>0, 10 + hist_1_pl, 10)
You can modify this to stop after a certain number of consecutive wins. For example, to reset the bet size to the initial £10 after 3 wins in a row, change the "Amount" field to:
Amount: IF(AND(last_won>0, wins<3), 10 + hist_1_pl, 10)
6. Backing to the profit of £10, then if the bet lost recouping the losses plus 50% of the initial profit target. I.e.: £25@1.4 (lost), £33.33@2.2 (lost), £20.95@4.5 (won), £10 etc.
Amount: IF(last_lost=0, 10/(back_price-1), (10+last_lost + 5)/(back_price-1))
7. Doubling bet size after each loss, i.e. 10, 20, 40, 80 etc.
For backing:
Amount: IF(losses=0, 10, hist_1_backa*2)
For laying:
Amount: IF(losses=0, 10, hist_1_laya*2)
8. Backing/laying according to Fibonacci staking plan
For backing:
Amount: IF(losses<2, 2, hist_1_backa+hist_2_backa)
For laying:
Amount: IF(losses<2, 2, hist_1_laya+hist_2_laya)
9. Backing to the profit of £10, then recoup the losses in the next game so as to win the target £10 and recover the previously lost amount. I.e. £6.67@2.5 (lost), £20.84@1.8 (lost), £31.26@2.2 (lost), £102.64@1.67 (won), £5.0@3.0 etc.
Amount: (10 + last_lost) / (back_price-1)
10. Laying on a selection, then recouping the loss according to the following plan (commission not included).
Add 1/4 of the loss to the next four bets. If all of them won, revert to the original lay amount. If at least one of them lost, then adding 1/4 of that loss to the next four bets and so on. Example: £10@2.5 (lost £15), £13.75@5.0 (won £13.75), £13.75@3.35 (won £13.75), £13.75@1.9 (lost £12.38), £13.09@4.8 (won £13.09), £13.09@2.0 (won £13.09), £13.09@2.6 (won £13.09), £13.09@2.8 (won £13.09), revert to £10. Overall P/L: £52.48
Amount: IF(last_lost>0, X+last_lost/4, IF(OR(wins>3, wins=0), X, hist_1_laya))
Replace X with the initial amount of your stake, for example 10.
11. Laying to a fixed liability, then increasing it by 10% after each loss and reverting to the original amount after a win. Example: £125@1.8 (lost £100), £91.67@2.2 (lost £110), £161.33@1.75 and so on.
Amount: IF(losses=0, 100, last_lost*1.1)/(lay_price-1)
There is a special trigger action "deactivate trigger/block". It makes the specified trigger inactive (sets its "Execute" field to "never"). You can apply this action if certain conditions are met. For example:
Trigger 1
Action: deactivate trigger/block Trigger 2
Conditions:
Any Selection's Back Matched is greater than 0
Trigger 2
...
This example shows how Trigger 1 deactivates Trigger 2 as soon as at least one matched back bet is detected in the market.
If you want to perform some action and deactivate a trigger simultaneously, then it's better to do it otherwise. In the trigger, that must be deactivated when another trigger gets executed, add the following condition:
Trigger or Trigger Block [trigger name] has not been executed
This will guarantee that the trigger won't work if the trigger specified as [trigger name] has been executed at least once.
For example:
Trigger 1
Action: lay
Price: lay_price
Amount: 10
Conditions:
Any Selection's Back Matched is greater than 0
Trigger 2
Action: cancel back
Conditions:
Any Selection's Back Unmatched is greater than 0
and Trigger or Trigger Block Trigger 1 has not been executed
There are two ways of doing this: through a special trigger condition, and through a trigger variable.
1. Trigger condition
Selection's Back Price Dif over [x] mins
Selection's Lay Price Dif over [x] mins
By inserting a number instead of [x], you can get the absolute price difference within the last x minutes. The word "absolute" means that the difference is not given in price ticks. For example, if the back price was 4.0 ten minutes ago, and now became 4.4, then the condition:
Selection's Back Price Dif over 10 mins is equal to 0.4
will be true, because the price has changed exactly by 0.4. If it were 4.4 five minutes ago, and became 3.8, then "Selection's Back Price Dif over 5 mins" will be -0.6.
Therefore to know how much the price changed within the last hour, construct a similar condition:
Selection's Back Price Dif over 60 mins ...
or
Selection's Lay Price Dif over 60 mins ...
2. Trigger Expression
There are special trigger variables returning the price difference over time as an absolute value, and as a number of ticks. They are, respectively, pdif_[number] and tdif_[number]. You can use these variables in trigger expressions. To find out whether the back price grew more that by 5 ticks over the last 20 minutes, create the following condition:
Trigger Expression tdif_20 is greater than 5
Another example: finding out if the price has dropped by more than 20% over the last 15 minutes:
Trigger Expression -pdif_15*100/(back_price-pdif_15) is greater than 20
If the price was - say - 6.0 fifteen minutes ago, and became 5.0, then pdif_15 will return -1.0. Inserting these figures in the formula will give us:
--1*100/(5--1) = 100/6 = 16.67%
So it is not greater than 20.
Examples
1. Lay on any selection whose price increased by 3 or more ticks over the last 10 minutes
Action: lay
Price: lay_price
Amount: specify amount
Markets, Market Status: choose appropriate
Selections: All Matching Selections
Execute: once per market
Conditions are met:
Any Selection's Lay Price is greater than 0
and Trigger Expression tdif_10 is equal or greater than 3
2. Lay on any selection whose price increased by 20% over the last 10 minutes
Action: lay
Price: lay_price
Amount: specify amount
Markets, Market Status: choose appropriate
Selections: All Matching Selections
Execute: once per market
Conditions are met:
Any Selection's Lay Price Dif over 10 mins is equal or greater than (lay_price-pdif_10)*0.2
3. Back on any selection whose price decreased by 40% within the last 20 minutes
Action: back
Price: back_price
Amount: specify amount
Markets, Market Status: choose appropriate
Selections: All Matching Selections
Execute: once per market
Conditions are met:
Any Selection's Back Price Dif over 20 mins is equal or less than -(back_price-pdif_20)*0.4
To bet 5% of the available funds, in test or real mode:
0.05*IF(test_mode=1, test_funds, total_funds)
To bet 10% of the balance, in both test and real mode:
0.1*IF(test_mode=1, test_balance, balance)
To bet to the liability of 10% of the bank, at the current lay price, apply the following formula:
0.1*IF(test_mode=1, test_balance, balance)/(lay_price-1)
To bet at a different price just replace "lay_price" with the price you want to bet at.
If you want to bet on the first selection in BetFair's list, no matter what its price is and whether it is a favourite or not, use the following trigger scheme:
Action: choose appropriate
Selections: All Matching Selections
Conditions:
Any Selection's Back Price is less than 1000
and Trigger Expression sel_index is equal to 1
The first condition here is superfluous, it is only needed because the "Selections" field contains the word "Matching". The second condition is what picks the first selection in the list, as sel_index returns its position.
If you want to bet on a group of selections, say the first 4, change the conditions to:
Any Selection's Back Price is less than 1000
and Trigger Expression sel_index is less than 5
To apply the trigger to the last 3 selections in the list, you would write:
Any Selection's Back Price is less than 1000
and Trigger Expression sel_index is between runner_number-4 and runner_number
Insert the following values into the Amount field of the trigger.
For backing:
Amount: default_backa
For laying:
Amount: default_laya
Switch a market to the "Full Mode", then right-click on any checkbox next to "Apply GreenUp, Dutching & Triggers". Select the necessary option ("Check All", "Uncheck All", "Toggle All") from the pop-up menu.
1. Backing at the current back odds
The trigger variable for the current back odds is back_price. So to back to fixed winnings you should insert the following formula:
[winnings]/(back_price-1)
where [winnings] is the amount you want to win. For example, to win £10:
10/(back_price-1)
2. Laying at the current lay odds
The trigger variable for the current lay odds is lay_price. So to lay to a fixed liability, apply the following formula:
[liability]/(lay_price-1)
where [liability] is the amount you are prepared to lose.
For example, to lay to the liability of £10, use this formula:
10/(lay_price-1)
Note: the above formulas are supposed to be inserted in the "Amount" field of the trigger.
If you want to bet on the first, second, third etc. selection, according to the order that BetFair set for this market, and not to the prices, you need to use the trigger variable sel_index, which returns the index of the selection in the BetFair list of runners.
There are many ways of adding the appropriate condition to your trigger, depending on which conditions you already have there. Here are just a couple of examples:
1. Betting on the first selection in the list.
Selections: All Matching Selections
Conditions are met:
Any Selection's Back Price is greater than 0
and Trigger Expression sel_index is equal to 1
Note: the first condition does not do anything related to the task, but it is required, because the "Selections" field is set to "All Matching Selections". So the first condition must start with "Any Selection's". As you can see, it will choose all selections in the market, because their prices are all above 0.0. Then the second condition will filter out the single selection that is number one in the list.
2. Betting on the second selection, if it is the favourite (according to its price).
Selections: Favourite
Conditions are met:
Trigger Expression sel_index is equal to 2
3. Betting on the first three selections
Selections: All Matching Selections
Conditions are met:
Any Selection's Back Price is greater than 0
and Trigger Expression sel_index is less than 4
4. Betting on the first selection if its lay price is less than 3.0
Selections: All Matching Selections
Conditions are met:
Any Selection's Lay Price is less than 3.0
and Trigger Expression sel_index is equal to 1
5. Betting on the first selection if its lay price is less than 3.0, or betting on the second selection if its lay price is less than 5.0. Otherwise don't bet at all.
Selection: All Matching Selections
Conditions are met:
Any Selection's Lay Price is less than 3.0
and Trigger Expression sel_index is equal to 1
OR
Any Selection's Lay Price is less than 5.0
and Trigger Expression sel_index is equal to 2
Note: the above trigger's conditions contain a block of conditions, connected with the OR operator.
Some strategies lay or back on all selections in the market, and cancel all unmatched bets as soon as at least one of the bets has been matched. Below is a simple trigger that shows how to do that.
1. Cancelling back bets
Action: cancel back
Markets, Market Status: choose appropriate
Selections: All Matching Selections
Execute: once per market
Conditions are met:
Any Selection's Back Unmatched is greater than 0
and Any Other Selection's Back Matched is greater than 0
2. Cancelling lay bets
Action: cancel lay
Markets, Market Status: choose appropriate
Selections: All Matching Selections
Execute: once per market
Conditions are met:
Any Selection's Lay Unmatched is greater than 0
and Any Other Selection's Lay Matched is greater than 0
If you are performing some kind of repetitive greening up or auto-dutching, you may encounter the problem of unmatched bets. If you leave them till the moment when the event starts, they will be automatically voided by BetFair, and you may be exposed to big losses.
To minimize these losses you may want to cancel all unmatched bets right before the off (say, when it's left less than 30 sec) and post them at the best price available. There are two options of doing this.
1. Stop-Loss Options
Go to "Settings", "Stop-Loss" options, and configure this option:
Post unmatched bets at best available price on these conditions:
If the time left till the off is less than ... mins
This will make MF Pro automatically adjust the price of your unmatched bets, as to make them matched. This option will suit perfectly for closing unmatched bets generated from auto-dutching, and all other non-hedging strategies.
2. Trigger - Distribute Loss Between Selections
If you were greening up, and unmatched bets left, then just posting them at the current best price, with their bet size remaining the same, will be a bad option. The better one will be distributing the loss equally among all selections in the market. For that purpose you may set up the following triggers:
Trigger 1:
2a) Cancelling Back Bets
Name: cancelling bets
Action: cancel back
Markets: choose appropriate
Selections: All Matching Selections
Market Status: Not In-Play
Execute: once per market
Conditions are met:
Any Selection's Back Unmatched is greater than 0
and Minutes Before the Off is less than 0.5
2b) Cancelling Lay Bets
Name: cancelling bets
Action: cancel lay
Markets: choose appropriate
Selections: All Matching Selections
Market Status: Not In-Play
Execute: once per market
Conditions are met:
Any Selection's Lay Unmatched is greater than 0
and Minutes Before the Off is less than 0.5
2c) Cancelling All Bets
Name: cancelling bets
Action: cancel all
Markets: choose appropriate
Selections: All Matching Selections
Market Status: Not In-Play
Execute: once per market
Conditions are met:
Any Selection's Back Price is greater than 0
and Minutes Before the Off is less than 0.5
AND
Any Selection's Back Unmatched is greater than 0
or Any Selection's Lay Unmatched is greater than 0
Note: the first condition in trigger 2c does not have any function, except that it starts the conditions list, because the "Selections" field is set to "All Matching Selections". When "Selections" contain the word "Matching", the first condition must start with the words "Any Selection's".
Trigger 2:
Action: distribute loss between selections
Markets: choose appropriate
Selections: All Matching Selections
Market Status: Not In-Play
Execute: once per market
Conditions are met:
Any Selection's Affected by Trigger cancelling bets
The second trigger is common for all three variants: it finds the selections whose bets were cancelled by the first trigger, and distributes their loss equally.
If you want to Dutch the whole field, just use the "Auto-Dutching" button and its settings in each market.
But if you want to Dutch only on special selections, chosen according to some criteria, you should set up a trigger. The trigger must pick the selections by the special conditions, and then apply one of the trigger variables: either match_b_book (if you are backing) or match_l_book (if you are laying).
For example, if you want to back-Dutch all selections whose price falls between 3.0 and 9.0, then set up this trigger:
Action: dutch back
Amount to win: input the amount you want to win
Markets, Market Status: choose appropriate
Selections: All Matching Selections
Execute: once per market
Conditions are met:
Any Selection's Back Price is between 3 and 9
and Trigger Expression match_b_book is less than 100
This trigger picks all selections priced between 3 and 9, and makes sure that the book percentage they make together is less than 100. As you know if it is equal or greater than 100, it is impossible to back-Dutch.
You can customize this trigger. For example, if you wish to bet only if the book% is between 60 and 90, modify the second trigger condition:
and Trigger Expression match_b_book is between 60 and 90
Add the following condition to your trigger:
Market's Number of Selections is ...
For example, to bet in races with 8 or more runners:
Market's Number of Selections is equal or greater than 8
Bet in a race with less than 10 runners:
Market's Number of Selections is less than 10
Note: this certainly concerns not only races, but all other types of markets as well.
1. Stop after 5 wins in a row.
Add the following condition to your trigger:
Trigger Expression wins is less than 5
2. Stop after 4 losses in a row.
Add the following condition to your trigger:
Trigger Expression losses is less than 4
3. Stop if the total won amount is greater than 10 and the number of wins is equal or greater than 6:
Total Won Amount is equal or less than 10
and Trigger Expression wins is less than 6
When you set up a betting trigger, you can set the "Price" property to any value, trigger variable or a combination of trigger variables, numbers and arithmetic expressions.
Therefore, to bet at back prices (no matter whether you are backing or laying), input "back_price". And to bet at lay prices, input "lay_price". For example:
Action: back
Price: lay_price
Action: lay
Price: back_price
If you want to place a back bet on any selection that hit a certain price value (for example 1.5), use the following trigger:
Action: spread loss
Markets: choose the type of market you will be trading in
Selections: All Matching Selections
Market Status: In-Play
Execute: once per selection
Conditions are met:
Any Selection's Back Price is equal or less than 1.5
and Fitting Selection's Profit/Loss is less than 0.0
This trigger will eliminate the loss on any selection whose price is 1.5 or lower. Thus their P/L will be showing a figure very close to zero. If there are more than one such selection, even if they take on their prices at different times, the bet will be placed on each of them.
If you want to place only one bet on the first selection, that drops below the minimum, change "once per selection" to "once per market".
MF Pro gives you the ability to apply your triggers to special gorups of markets, such as "Horse Races", "Soccer Games", "Greyhound Races" etc. But sometimes you may need to make it even more specific, for example, only handicap races, or only FTSE markets. How to do that? The answer is: through parsing the market's name.
The type of the market you want to pick can often be taken from its name. For example, handicap races contain the word "Hcap" in its name. Therefore, to make a trigger be executed only in handicap markets, simply add the following condition:
Market's Name contains Hcap
If you want to apply a trigger to daily Up or Down financial markets, add the following condition:
Market's Name contains Daily U/D
For triggering in Australian Horse races:
Market's Name contains (AUS)
and so on.
Here are several methods that you may use to stop potential loss made by one or more bets.
1. Matching unmatched bets at the best available price.
MarketFeeder Pro offers built-in options for posting your unmatched bets at the best available price, on certain conditions. Use the "Stop-Loss" tab in "Settings" to configure the conditions, on which MF Pro will match your unmatched bets automatically, in every monitored market.
You can also do this using a trigger (if you want to stipulate special conditions that are not available in "Stop-Loss" options. See an example of such trigger below:
Action: match back unmatched bets / match lay unmatched bets
Markets, Market Status: choose appropriate
Selections: all matching selections
Execute: once per market (or choose another option, if you want to do this several times)
Conditions are met:
Any Selection's ... (specify the parameters of the selections, whose bets must be matched)
2. Eliminating the loss on a specific selection, and spreading it equally among the other selections
You can create a trigger, which will remove all potential loss (zeroing the P/L) for a specified selection, and spread it equally among the other selections. Below is the trigger example:
Action: spread loss
Markets, Market Status: choose appropriate
Selections: all matching selections
Execute: once per market (or choose another option, if you want to do this several times)
Conditions are met:
Any Selection's ... (specify the parameters of the selections, whose bets must be matched)
Usually traders do this at In-Play, when the selection they laid becomes a potential winner with a low price. So one of the most frequently used trigger is:
Action: spread loss
Markets: All Markets
Market Status: In-Play
Selections: all matching selections
Execute: once per market
Conditions are met:
Any Selection's Profit/Loss is less than 0
and Fitting Selection's Back Price is equal or less than ... (here comes the lowest price limit)
3. Distributing the loss on a specific selection equally between all selections in the market.
This option is available for selections, which you laid or backed on, in case you want to compensate the potential loss with an opposite bet, thus distributing the loss in the same way, as distributing the profit with a "green up" function. For example, if you backed on a selection before the off, and at In-Play its price grew up to the limit of a potential loser, you may want to make a lay bet and "green it down". And on the contrary, if you laid on a subsequent potential winner, you will expect the program to back on the selection and distribute the loss. The difference between "spreading the loss" and "distributing the loss" is that the "spread loss" function eliminates the loss completely, plus it can do this even if you did not bet on that specific selection (for example, if its loss was generated by back bets placed on other selections). The "distribute loss" function just reduces the potential loss (makes it equal for all selections), and it will work only if you placed at least one bet on the selection.
A corresponding trigger is composed similarly to a "spread loss" one:
For laying after backing:
Action: distribute loss between selections
Markets: All Markets
Market Status: In-Play
Selections: all matching selections
Execute: once per market
Conditions are met:
Any Selection's Back Matched is greater than 0
and Fitting Selection's Back Price is equal or greater than ... (here comes the highest price limit)
For backing after laying:
Action: distribute loss between selections
Markets: All Markets
Market Status: In-Play
Selections: all matching selections
Execute: once per market
Conditions are met:
Any Selection's Lay Matched is greater than 0
and Fitting Selection's Lay Price is equal or less than ... (here comes the lowest price limit)
Add these two conditions to your trigger:
Previous Triggered Event's Outcome is settled
or Trigger or Trigger Block [choose the current trigger's name] has not been executed (overall)
This literally means: if there was at least one event where the trigger has been already executed, then check if it was settled. If not, then execute the trigger anyway.
The word (overall) here means, that you need to tick the box titled "overall". Note: before adding the second condition, you need to save the trigger, so that its name appears in the drop-down list with trigger names
Note: to be able to perform these conditions, disable the option "Delete finished event automatically" in "General Options".
First of all, if you are looking for the way to match unmatched bets at the best price, if they have not been taken within a certain period of time, use the built-in "Stop-Loss Options".
But if you want to cancel one or more unmatched bets, if they have not been matched within certain time, then use the triggers given below.
The triggers are given for back bets only. If you want to cancel lay bets, just replace all back-oriented options with the same lay-oriented options.
1. Cancelling unmatched bets, if it's been more than 5 minutes since they were placed.
Action: cancel back
Markets, Market Status: choose appropriate
Selections: All Matching Selections
Execute: once per selection
Conditions are met:
Any Selection's Back Unmatched is greater than 0
and Trigger Expression now_time - bu_backtime is greater than 5*0.000694
Pay attention to the figure "5" in the second condition. If you want to change the period of time from 5 minutes to anything else, you need to replace "5" with the new number of minutes.
The trigger is set to be executed "once per selection". It means it'll be checking unmatched bets for each selection, and will cancel them in 5 minutes after they are placed, no matter when they were placed. You can change this option to "once per market", and in that case the trigger will be activated as soon as there is at least one unmatched bet. It will cancel all unmatched bets that will meet the condition, and then will stop monitoring that market.
2. Cancelling unmatched bets, if it is 1 minute left till the beginning of the event
Action: cancel back
Markets, Market Status: choose appropriate
Selections: All Matching Selections
Execute: once per market
Conditions are met:
Any Selection's Back Unmatched is greater than 0
and Minutes Before the Off is equal or less than 1
This trigger will cancel all unmatched bets at 1 minute before the scheduled start.
Either back or lay on the selections whose order is specified by the numbers given in an Excel spreadsheet.
For example, you enter the IDs of the horses you want to bet on a daily basis, in an Excel spreadsheet. See below:
![]() |
![]() |
This means you want to bet on the second, seventh and eighth horse in a race. The numbers in the sheet indicate the position of the horse in the list of selections that BetFair forms for each market.
1. Create a spreadsheet where you will insert the values that the trigger must refer to.
2. Give the sheet where these data will be stored some name, for example, "Sheet1".
3. Now you need to allocate the cells where you will input the indices of selections. For instance, A1:A5 or A1, B1, C1. There can be any number of cells as you may want to bet on any number of selections.
4. Save the sheet somewhere where you'll be able to find it later.
5. Create the following trigger:
Action: back (or lay)
Price, Amount: type in the corresponding values
Markets, Market Status: select appropriate
Selections: All Matching Selections
Conditions are met:
Any Selection's Rank is in list cell_Sheet1_A1, cell_Sheet1_A2, cell_Sheet1_A3, cell_Sheet1_A4 ...
Instead of the ellipsis continue the list of the cells where selections IDs are stored. If there is only one such cell, then certainly the list will end at cell_Sheet1_A1.
The addresses of the cells are made up as an example. Your sheet may be called in a different way, for example "selections". In that case the address of the cell will be cell_selections_A1, or cell_selections_B5 if you choose another column and row.
6. Press the "Launch Excel" button. The program will connect to the sheet that you have just created.
7. Now add the markets you want to trade in to "My Markets", and start monitoring them. The trigger will check the aforesaid cells and place the bet on the selections with those indices.
8. Be sure to always open the previously saved sheet before pressing "Launch Excel", in order to make MF Pro connect to that sheet instead of creating a new one.
You can read the details on Excel-related variables in the help file's chapter "Trigger Variables" / "Excel-Bound Variables".
In order to place bets using only one trigger for all the markets you'll be monitoring, you can insert the list of selections IDs in the corresponding market sheets. These market sheets are created automatically for each market in "My Markets" list as soon as you press the "Launch Excel" button. They are named after the ID of the market. You can allocate a special column for the selections IDs, for example, P, and insert them in each market sheet. Then modify the above trigger:
Conditions are met:
Any Selection's Rank is in list cell_querymarket_id_P1, cell_querymarket_id_P2, cell_querymarket_id_P3, cell_querymarket_id_P4 ...


In this example the trigger will bet on "Miss Sophisticat", "Blue Dynasty" and "Zafisio" in the race "16:50 Sand", and also on other horses whose IDs will be stored in the first three cells of the "P" column of other market sheets.
If you have the names of selections rather than their IDs, then it is more reasonable to use the "Import selections for auto-trading" button. See an example here.
BetFair does not provide a separate bit of information for a race's mileage.
Instead it adds the distance to the name of each race.
So in order to apply a trigger to races with specific distance, you can analyse the market's name. Examples:
Market Name contains "1m"
This will make a trigger be executed in all markets with distance >= 1 mile.
Market Name contains " 7f"
or Market Name contains " 6f"
or Market Name contains " 5f"
This will work in all races whose distance is 5, 6 or 7 furlongs. Pay attention to the space character preceding the distance - it guarantees that the name does not have any pattern like "2m5f" or "1m6f".
Please read the following text very attentively to avoid possible problems when you'll be trying to monitor several markets in MarketFeeder Pro. There are a couple of points that you should be aware of:
Now most of you think that they are free to set the refresh rate to 2 sec and then load the whole today's race card into MF Pro. This is wrong. Try to do the same thing with Internet Explorer. Open 40-45 instances of your Internet browser, load a market into each of them and start clicking "Refresh" or "F5" every 2 sec in every window. You will soon notice that your computer needs a reset. So why do you think there's much difference with MarketFeeder Pro?
What I'm driving at is: consider your computer's capacity before you start loading it. You may have enough memory space and powerful CPU, but a bad Internet line which will hamper the refreshing. Or you may be running other resource-consuming software on the background (like Norton Antivirus or other kinds of firewall or anti-virus software). Applications like MSN, ICQ or chat windows also eat their share of Internet and CPU. Background Windows security update is the thing you need to take into account to.
So try to increase the load step by step - starting from maybe 3-4 markets and then adding more of them once you have realized that MF Pro is performing well enough.
And of course, don't forget to consider one or more of the following advices:
NO, you don't need Excel or any other spreadsheet software to be installed on your computer. You can use MarketFeeder Pro 5.0 without this software.
Connecting to Excel is just an option that is available, but not a system requirement.
No, MarketFeeder Pro allows you to bet starting from 0.01 fraction of your currency item.
Yes, you can connect MarketFeeder Pro to a spreadsheet of any configuration and level of complexity. It may have built-in macros, functions, sheets, buttons etc.
First of all, traders with moderate experience can earn money easily using the common trading functions, such as "Auto-Greenup" and "Auto-Dutching". They work in a fully automated mode, and unless you have a very bad luck, you will find yourself in profit after a while.
If you know a profitable strategy, MarketFeeder Pro can help you to implement it without staying in front of your computer. This will save you a great deal of time, and add money to your account. Review the list of trigger examples on our web site, and take a look at how simple staking plans are realized.
If you have MS Excel installed, you can extend the area of things you can do with MarketFeeder Pro.
Firs of all, you can get use of so-called "Custom Cells": you can view and access additional pieces of information on selections or markets. You can define these pieces with your own formulas and expressions, and then tell MarketFeeder Pro to display them in the market sheet, together with the regular market information. For example, you may display the selection's chances of winning apart from its decimal odds. That can be achieved by creating a custom cell with a formula 100/back_price, where back_price is a built-in trigger variable returning a selection's back price.
Secondly, you can view selected markets in the spreadsheet you will connect to. Each market is displayed in a separate sheet. You can use every cell in your own calculations. You can connect your own pre-formatted spreadsheets to MarketFeeder Pro, and use the results of your formulas in triggered betting, thus initiating bets based on your own calculations.
Finally, if you have some programming skills, you can send and cancel bets directly from Excel, using the examples of functions we suggested in the help file.
Greening-up is a betting function, often referred to as "hedging" or "offset betting", that allows you to generate equal profit on all selections, regardless of the event's outcome. It is based on backing at high odds and laying at low odds, or in other words "buying low, selling high".
Aut-Greenup is a function of MarketFeeder Pro that automatically greens-up the market you have placed a bet in, if the current prices allow it to do that. So if you first laid, the Auto-Greenup function will look for the possibility to back at higher odds, and vice versa: if you backed, it will wait till it can lay and close your position.
All the calculation is made automatically.
The number of triggers is not limited. MarketFeeder Pro will execute all active triggers that are stored in the trigger file you will load.
Yes, definitely. Triggers allow you to choose one or more selections that you want to work with, even if they are in different markets. You can address the selections by their names, position in the list (Favourite, Second Favourite, Probable Loser etc.), as well as by the special parameters these selections may have. The parameters can be defined by the conditions, that your trigger will have. For example, you may pick all the selections that have a specific price range.
Yes, MarketFeeder Pro detects the state of the event and allows you to place and cancel bets when a market is In-running. Where markets support bet persistence, you can make MF Pro keep unmatched bets at In-Play, or match them at the starting price.
You can bet manually - either in a special betting area or through one-click - and also set up triggers that will be executed in In-play markets.
Yes, you can make a trigger be executed only in certain market states: either In-play, Idle, Suspended or combination of these.
Besides, there is a special trigger variable that returns the current state of the market (market_inplay). You can use it in your triggers.
After a runner is withdrawn, all matched and unmatched bets placed on it are voided. Thus, by making simple calculations, you can see that if you made back bets, your winnings will even increase. By removing one of the back bets you will increase profit on each runner that is left in the list.
On the contrary, if you were betting on the lay side, removing at least one of the runners will spoil your P/L scheme dramatically. The voided lay bets were the source of profit for all the other runners, so after its removal you will lose a certain amount on all runners where you bet.
So it is reasonable to play lay Dutchings only if you are 100% sure that no more runners will be withdrawn in the course of the day. Unfortunately it is hard to predict this happening.
The available options are:
Unfortunately this is not possible unless you purchase two copies of MF Pro. We have no way to verify that both accounts belong to your name.
But if you change your username after having purchased MF Pro, we can substitute it for free, if you email us specifying your old and your new usernames.
Yes, all triggers are saved in text files, with an *. XML extension. When you are editing triggers in the "Triggers" window, you can press the "Save As" button, and save the triggers in any file on your computer. You can then send this file to your friends, and they can open it using the "Open" button. It is as easy as that!
You can make your own collection of triggers, saving them in different files.
Yes, you are fully authorized to sell your own trigger files to other people. MarketFeeder Pro has a special interface for doing that. After having created the triggers for sale, you can encrypt them with a password, and even make them open only in a specific copy of MarketFeeder Pro.
Encrypted files can be opened and executed, but nobody will be able to see or modify the fields of the triggers.
MarketFeeder Pro does not store your secret information anywhere, even on your own computer. It passes your username and password over the Internet only once, at the moment of logging in, and only to BetFair server, through a connection that is protected with 128-bit SSL encryption.
We do not store your passwords on our computers, and don't pass them anywhere except BetFair. MarketFeeder Pro has been tested by BetFair technicians, before it was granted the right to be called an official BetFair solution.
Yes, with new version 6.0 you can simulate settling markets as frequently as you want. This gives you an opportunity to quickly test any strategy or staking plan without actually waiting for the events to finish.
Note, you must do it under an account with Administrator privilages.
More often than not when we create a formula using one of Excels built-in functions we will be referring it to a cell or range of cells. An example of a single cell reference would be A1. An example of a range of cells reference would be A1:A10. For the first example we are referring to the content of cell A1 only, while in the second example we would be referring to the contents of cells A1, A2, A3, A4, A5, A6, A7, A8, A9, A10. Using the reference A1:A10 is just a simple method that Excel will automatically recognize. If we use the reference A1:C5 we are telling Excel to refer to the contents of cells A1, A2, A3, A4, A5, B1, B2, B3, B4, B5, C1, C2, C3 C4, C5.
Relative Cell References
In Excel there are two types of cell references, these are Relative and Absolute. We will first look at relative cell references. All the examples in the Cell References paragraph are what are known as relative cell references.
As you may remember in lesson 1 we discussed that each cell on an Excel Worksheet has it’s own unique address, e.g. A1 is the relative address of the first cell on all Worksheets, while IV65536 is the relative address of the last cell on all Worksheets. The reason why they are called relative is because they are relative to the cell they are used in. This will be best explained by a simple example.
In cell A1 type the number 1 and in cell A2 type the number 2.
Select cells A1:A2 and use the Fill Handle to fill down to A10, so that we have the numbers 1 to 10 in cells A1:A10.
In cell B1 type this simple reference: =A1 and push Enter.
Select cell B1 and do one of the following
Copy and then select B2:B10 and paste.
Double click the Fill Handle.
You should now have the numbers 1 to 10 in both A1:A10 and B1:B10. This because we typed a relative cell reference in cell B1 (=A1), which is telling Excel to make cell B1 equal the value of the cell one column to the left on the same row i.e. A1. So when we copy the reference in B1 i.e. =A1 and paste it into cell B2 Excel is still going to reference the cell one column to the left on the same row i.e. A2. Copying the same cell (B1) and pasting it into cell B3 again tells Excel to reference the cell one column to the left on the same row i.e. A3.
Lets now copy the content of cell B1 and paste it into cell D1, this time we should get the result 0 (zero). If you click in cell D1 and look in the Formula bar you will see the relative cell reference: =C1. The reason we get the result of 0 (zero) is because the value of an empty cell is 0 (zero).
Absolute Cell References
Ok, let’s now look at what an Absolute cell reference is. Basically an absolute cell reference is a reference to a cell that does not change no matter where it is copied. Again this will be easier to see by using an example.
Delete the contents of cells B1:B10 and D1.
In cell B1 type the absolute cell reference =$A$1 and push Enter.
Select cell B1 and either
Copy and then select B2:B10 and paste.
Double click the Fill Handle
This time you should have the number 1 in cells B1:B10 and if you select any cell in B1:B10 and look in the Formula bar, they will all have the absolute cell reference =$A$1. This is because by using the $ (dollar sign) we are telling Excel to always refer to the same cell no matter where we copy this reference to. The $ in front of the A ($A) is telling Excel to make the column reference absolute, while the $ in front of the 1 ($1) is telling Excel to make the row reference absolute. So the reference in its entirety is what is known as an Absolute cell reference.
If you grasped this concept we can move on to what is known as a either an:
Absolute row relative column reference or;
Relative row absolute column reference.
Again the best way to see this is by using a small example.
Relative Row Absolute Column Reference
Try this:
Delete the contents of cells B1:B10.
In B1 type the Relative row absolute column reference: =$A1 and push Enter.
Select cell B1 and either.
Copy and then select B2:B10 and paste.
Double click the Fill Handle
You will have the numbers 1 to 10 in cells B1:B10. This is because the row portion of the reference (1) is relative. Now copy cell B10 to cell D1 and you should get the result 1. This is because the column portion of the reference ($A) is absolute. If you click in any cell in the range B1:B10 or D1 and look in the Formula bar you will see that the row portion is always relative to the row the reference resides in, while the column reference is always absolute.
The same principle also applies to any reference that has an absolute row relative column reference. Again this can be best seen via the use of a small example.
Absolute Row Relative Column Reference
Try this:
Delete the contents of cells B1:B10 and D1.
In B1 type the absolute row relative column reference: =A$1 and push Enter.
Select cell B1 and either;
Copy and then select B2:B10 and paste.
Double click the Fill Handle.
You will have the number 1 in cells B1:B10. This is because the row portion of the reference ($1) is absolute. Now copy cell B10 to cell D1 and you should get the result 0, this is because the column portion of the reference (A) is always relative to the column the reference resides in. If you click in any cell in the range B1:B10 and look in the Formula bar you will see that the row portion is always absolute. If you click in cell D1 and look in the Formula bar you should see =C$1
Microsoft Excel records cell addresses in formulas in three different ways, called absolute, relative, and mixed. The way a formula is recorded is important when you copy it.
With relative cell addressing, when you copy a formula from one area of the worksheet to another, Microsoft Excel records the position of the cell relative to the cell that originally contained the formula. The following exercises demonstrate:
In addition to typing a formula, as you did in Lesson 1, you can also enter formulas by using Point mode. When you are in Point mode, you can enter a formula either by clicking on a cell with your mouse or by using the arrow keys.
Copying by Using the Menu
You can copy entries from one cell to another cell. To copy the formula you just entered, follow these steps:
Compare the formula in cell A10 with the formula in cell B10 (while in the respective cell, look at the Formula bar). The formulas are the same except that the formula in cell A10 sums the entries in column A and the formula in cell B10 sums the entries in column B. The formula was copied in a relative fashion.
Before proceeding with the next exercise, you must copy the information in cells A7 to B9 to cells C7 to D9. This time you will copy by using the Formatting toolbar.
Copying by Using the Formatting Toolbar
Absolute Cell Addressing
An absolute cell address refers to the same cell, no matter where you copy the formula. You make a cell address an absolute cell address by placing a dollar sign in front of both the row and column identifiers. You can do this automatically by using the F4 key. To illustrate:
Copying by Using the Keyboard Shortcut
Now copy the formula from C10 to D10. This time, you will copy by using the keyboard shortcut.
Compare the formula in cell C10 with the formula in cell D10. They are the same. The formula was copied in an absolute fashion. Both formulas sum column C.
Mixed Cell Addressing
You use mixed cell addressing to reference a cell that is part absolute and part relative. You can use the F4 key.
Did you know that you could combine text and values in a single cell?
For example, assume cell A12 contains the value 1435. Enter the following formula into another cell:
="Total: "&A12
The formula cell will display: "Total: 1435."
The ampersand is a concatenation operator that joins the text with the contents of cell A12.
Applying a number format to the cell containing the formula has no effect, because the cell contains text, not a value. As a work-around, modify the formula to use the TEXT function (the second argument for the TEXT function consists of a standard Excel number-format string).
="Total: "&TEXT(A12,"$#,##0.00")
This formula will display "Total: $1,435.00."
Here's another example formula that uses the NOW function to display some text along with the current date and time:
="Report printed on "&TEXT(NOW(),"mmmm d, yyyy at h:mm AM/PM")
The Excel If function is a powerful tool that can be used when the information you want in a cell is conditional. Its particularly handy if you need to specify two or more different responses for a cell based on conditions you specify.
The Excel If function is extremely versatile, however its often seen as quite a confusing function to use. Once you learn how to use Excel's IF function, you'll wonder what you ever did without it!
Microsoft explains the syntax of the Excel IF function:
=IF(logical_test,value_if_true,value_if_false)
What that means, simply put, is this:
=IF("if the condition stated here is true", "then enter this value", "else enter this value")
A practical example would be a spreadsheet containing exam marks for students.
Perhaps you wanted to see at a glance who had failed and who had passed. An IF function would be perfect for this. Let's assume that the pass mark is 50 and the marks are in column B, starting from row 4. Our formula would look like this:
=IF(B4>50, "Pass", "Fail")
So, this formula says if the data in cell B4 is greater than 50, then put "Pass" in the cell this formula is in, otherwise put "Fail" in the cell. You can then simply copy this formula for the entire list of names - Excel will change the cell reference for you.
The Excel IF function is an important one to understand. It can be used to great effect by itself, as a nested IF function or in conjunction with other functions.
There are a wide range of functions available for calculations, to enter one use the Function choice from the Insert menu option or click on the = button in the edit line.
(In v7 click on the function
button Which starts up the Function Wizard which is an aid to correctly entering the required function. Functions are grouped by category. )
Choose the one you want and then click on the [Next] button, following the instructions in the next window.
Ranges of cells
An example of using formulae and functions

Assume you have a list of people and marks in columns A and B and a pass mark stored in cell B2. You wish to automatically enter in column C whether or not the person has passed

Select the Function Category and then the function required. Press [OK]

Fill in the blanks and press [OK]

Extend the formula down to cover the other cells.

If VBA is installed, it may be disabled. If one of the following DWORD registry keys exists and has a value that is greater than 0, VBA is disabled.
• Microsoft Office 2003
HKLM\Software\Microsoft\Office\11.0\Common\VBAOff
HKCU\Software\Microsoft\Office\11.0\Common\VBAOff
• Microsoft Office XP
HKLM\Software\Microsoft\Office\10.0\Common\VBAOff
HKCU\Software\Microsoft\Office\10.0\Common\VBAOff
When we list trigger examples on this web site we assume that a user has specific regional settings: either "English (United States)" or "English (United Kingdom)". The main difference of these settings from others is the decimal separator character. It is a period - ".". In reality many European and other countries use comma as a decimal separator - ",".
Thus if you live in Germany the formulas given in the trigger examples may not work on your computer. You will have to manually adjust them to your local settings using a simple guide below.
Step 1. Checking the Computer's Regional Settings
Step 2. Adjusting your formulas
We will leave out the fact that Excel translates the names of the functions in the local language. We assume that you are able to make the translation.
If you have comma as a decimal separator, apply the following changes to the formulas you'll find on our web site:
That's it - you may proceed working with MarketFeeder Pro!
In Excel, the And function returns TRUE if all conditions are TRUE. It returns FALSE if any of the conditions are FALSE.
The syntax for the And function is:
And( condition1, condition2, ... )
condition is something that you want to test that can either be TRUE or FALSE. There can be up to 30 conditions.
For example:
Let's take a look at an example:

Based on the Excel spreadsheet above:
=And(A1>10, A1<40) would return TRUE =And(A1=30, A2="Microsoft") would return FALSE =And(A1>=5, A1<=30, A2="Tech on the Net") would return TRUE
Microsoft Excel stores dates as sequential numbers known as serial values. Excel stores times as decimal fractions because time is considered a portion of a day. Dates and times are values and so you can add, subtract, and include dates and times in other calculations. For example, to determine the difference between two dates, you can subtract one date from the other. You can view a date as a serial value and a time as a decimal fraction by changing the format of the cell that contains the date or time to General format.
Excel (by default) uses the 1900 date system. This simply means that the date 1 Jan 1900 has a true numeric value of 1, 2 Jan 1900 has a value of 2 etc. These values are called "serial values" in Excel and it is these serial values that allows us to use dates in calculations.
Examples:
Here is the list of most frequently used time fragments:
1 second = 0.00001157
1 minute = 0.000694
5 minutes = 5*0.000694 = 0.00347
1/2 hour = 0.02082
1 hour = 0.04167
MarketFeeder Pro’s functions can be divided into two groups:
1. Inward calculations and processing of the data
2. Interaction with BetFair
The first group operates the information that MarketFeeder Pro receives from BetFair and from the user. These functions include displaying market information and bets, calculating bet sizes, executing triggers, importing and exporting data from Excel and calculating the values of trigger variables.
The speediness of these functions depends only on the capacity of your computer’s CPU, and the volume of RAM (computer’s memory). It is recommended to follow these tips to avoid overloading your computer:
The second group includes logging in to BetFair, requesting the amount of funds available for betting, updating account statement, bet history, list of matched and unmatched bets, market prices etc. These are the slowest functions, because they imply passing data to and from the Internet. Besides the performance of BetFair itself matters a big deal. As you know, MarketFeeder Pro is based on the service called BetFair API. This API (application programming interface) accepts the requests for data from MarketFeeder Pro, processes them at the BetFair’s server and returns the response back to the software. This, together with the time required to deliver the request and response via the Internet, may take up to several seconds per request. It is important to understand, that whatever the software may be trying to do, it can’t influence such things as the speed of your Internet connection AND the performance of the BetFair server.
In the evenings, when thousands of bettors come home from work; or when a market turns in-play and the volume of bets increases enormously, the API may start freezing occasionally. This certainly decreases the software’s capacity to maintain fast refresh.
Here are some advices as to how to maximize the efficiency of the second group of functions:
Whenever you see that the refreshing has frozen for more than 10 seconds, you may stimulate it by pressing the manual refresh button available under the “Start/Stop” button in each market.
Analyze the charts given on the “Connection Monitor” screen. They show you the time (per request and average) that it takes to get a response from BetFair. By estimating the peaks and slumps on the charts, you can find out when the software experiences problems with reaching BetFair.
With the latest version of MF Pro 6.0, which is currently in beta-testing stage, it has become possible to test different betting systems without risking actual money.
There are several rules which MF Pro can follow when settling a market in Test Mode. Some of them are pretty automated, like random winner or the selection with the lowest traded price.
These methods are convenient when you have loads of markets to test in one go. But they can prove inefficient when you bet on different selection each time and there is no generic rule to describe your choice.
That's when you should use the "Select Winner" option from the pop-up menu that comes on clicking on the "Settle" button.

Using this option you can choose any selection from the market and make it a winner. For example, if you want the selection you backed or laid on to be a winner, you can do that using a simple procedure.
Check a video lesson for more details.
If you want to make your triggers bet on specific selections, rather than on "Favourite", "All Matching Selections", "Probable Loser" etc., then you have two options:
1. Create a separate trigger for each selection you want to bet on.
A trigger can be applied to a specific market and selection. You just select the market in the event tree, then go to "Triggers" page, create a trigger and select that market from the drop-down list. After you have selected the market, the list of its selections will appear in the "Selections" field, and you can choose the one you want to bet on.
![]() |
![]() |
2. Apply Greenup, Dutching & Triggers
If the above option does not suit your needs or you want to apply the trigger to more than one selection, then you will need to mark all selections that you will be trading on. Click on each market that you will be betting in, and switch it to "Full Mode". If you do this regularly, then you should consider turning "Full Mode" on by default. Then uncheck all selections that you will not be betting on. They will be grayed out. The rest selections will be the ones that your triggers will be working with.
Then set the "Selections" field of the trigger to "All Selections". In spite of the word "All", the trigger will be applied only to those selections that you marked on the market page.

3. Matching a pattern in the selection's name
This method is efficient if you always bet on a selection with a specific name, for example "The Draw" in Soccer, or "FTSE Down" in Financial markets.
For example, to bet on "The Draw", add a trigger with the following properties:
Action, Price, Amount, Markets, Market Status - choose appropriate
Selections: All Matching Selections
Conditions are met:
Any Selection's Name contains "The Draw"
The trigger will be applied to "The Draw" in any monitored market. To apply it to other selections, just change the "The Draw" pattern to something else.
___________________________________________________
Another example is betting on a specific trap in Greyhound races:
Any Selection's Name is equal to "Trap 1"
To get the list of selections with several trap numbers, you can add more conditions, for example:
Any Selection's Name is equal to "Trap 1"
or Any Selection's Name is equal to "Trap 3"
or Any Selection's Name is equal to "Trap 5"
There is a list of popular staking plans in our Trigger Examples (which, by the way, you can help extend by emailing to our support).
The trigger files are available for download and immediate testing in MF Pro. To download and save the file, right-click on the link that starts with "Right-click here to download the trigger file". Then select the "Save As" or "Save Target As" option (this depends on the type of your browser) and save it as a file on your hard disk. The location does not matter.
Having done that, open MF Pro and press the "Triggers" button:

When the triggers window opens, press "Open" button to load the file you just saved.

After the file loads, it is theoretically ready to test. Just close the triggers window, make sure you have activated Test Mode and start refreshing markets.
We recommend you to also watch our video lesson "How to test staking plans".
Once you understood the idea behind a staking plan, you may want to change it or apply it to a different trigger than the one in the example. For instance, the example may back on the favourite, whereas you want to back on the third favourite at 1 minute before the off.
To adjust the example file to your needs is quite easy.
First of all, almost all staking plan examples are built so that the trigger that actually places a back or lay bet is always positioned in the end of the list. See below:

So that's the first clue you should look for. Usually the other triggers do not need to be changed at all, as a staking plan ought to work in the same way for any market or selection it is applied to.
If the amendments you are going to do are easy and fast, like change the selection and add one condition, then just do it on the spot -choose a different option from the drop-down list, press "Edit" button next to "Conditions" and add the required conditions. Then save the triggers.

You can immediately check if you did correct changes by running the triggers on a list of markets, as described in the video lesson on testing staking plans.
However, if your trigger is much more complicated or involves cooperating with other triggers, then you must first open the file where it is stored. Do this by pressing the "Open" button again and loading the file. Don't worry about the staking plan trigger, you'll be able to load it later.
Once the file with the triggers you designed has opened, press the "Copy" button on the trigger you want to bet instead of the one in the example.

After that, re-open the file with the example, as described above. Be sure not to copy anything else into the clipboard while doing this, as the trigger will be copied there.
On the green trigger block panel, which is in the top of the file, find a button titled "Paste Trigger" and press it.

The trigger will be inserted in the block, on top of other triggers in the same block.

Now, it is important to understand that the order in which triggers appear in the block is crucial to the way the whole block works! They ought to be executed in exactly the same order as they appear in the staking plan example. That is why you must use Drag and Drop to move this trigger to the bottom of the block, just above the trigger that was originally placing bets in the example. If the height of the triggers window does not let you do this in one go, you can drag and drop it several times, until it moves down to the right position.
Having done that, disable the other trigger that used to place bets, for you don't want it any more. Disabling or deactivating a trigger means setting its "Execute" property to "never".

Don't forget to press "Save Triggers" button again.
Now you are ready for another round of testing. Feel free to make as many changes to the trigger file as you want, until you've refined your own staking plan.
Please note: user variables have been introduced in version 6.0.
In this lesson we are going to learn how to create a user variable and assign it a value.
Almost in any staking plan it is important to remember the starting bank value. Usually the following profits and losses are compared with the initial bank and the size of the stake is adjusted accordingly.
That's why in many examples you will notice a trigger that creates a user variable called "starting_bank". We are going to analyse this trigger thoroughly.

First of all, the "Action" parameter is "set user variable". That's how you both create a user variable AND change its value. Before a trigger with this action is executed at least once, a variable with such name simply does not exist, and the program can't take it into account when checking trigger conditions or evaluating arithmetic expressions.
The name we chose is "starting_bank", though it could have been anything at all, like "start_value", "MYBANK", "bank1", "sizeBegin2" or "abcdefg". The only limitation here is that the name can't coincide with any other trigger variable supported by the program. Otherwise MF Pro will be confused as to what value the variable should actually return.
Then comes the value of the variable. In this case it is a formula:
IF(test_mode=1, test_balance, balance).
What does it mean? It can be translated into: if Test Mode is turned on, then take the value of the Test Funds balance, otherwise take the value of the real-money balance.
The function IF allows you to check conditions within the formula. The built-in variables "test_mode", "test_balance" and "balance" are explained in the help file, chapter "Triggered Betting", "Trigger Variables", "General Variables".
In other words, if you are in Test Mode, the variable "starting_bank" will have the value of the test bank, otherwise it will have the value of your real-money bank.
Now, in "Markets" and "Market Status" fields we put "All Markets", because we want to remember the bank value no matter what the market's current status is. As for "Selections", here you can put anything you like, as long as at least one selection is eligible for the trigger. We put "All Selections", but it could have been "Favourite", "Second Favourite", but not "First Matching Selection", for instance, as the trigger does not have any conditions to match.
Finally, the "Execute" property is set to "one time only", because we want to remember the starting bank just once, before we start doing anything else. Had it been set to "once per market", the value of "starting_bank" would have been changed every time you started refreshing a new market to place a bet in it. That would certainly affect the staking plan.
Ok, having saved the trigger, we may now close the triggers window and check how it has been executed. The simplest way to do this is to view the variable's value in the "View Variables" window.

Upon opening this window, type in "starting_bank" and let it show you its value.

Remember that each time you save triggers all user variables are reset! It means they lose their value and need to be initialised again.
Ok, now feel free to ask questions in the "Comments" section of this article.
In this lesson we are going to learn how to set a user variable to different values depending on different market conditions.
Suppose you have a problem:
Take a horse, let it be the favourite priced between 2.0 and 5.0, and put it in one of three ranges, pricewise.
If its price is 3.0 or less - range 6.
If its price is between 3.1 and 4.0 - range 7
For prices between 4.1 and 5.0 - range 8
Then if the horse's price gets higher than its range value, lay on this selection.
For example, the favourite's price is 3.5. It falls into range 7. If at any time during the race its price gets to 7.0 or higher, we're going to lay on that horse.
Let's create a user variable called "price_range" and determine what value it'll have. If we literally follow all the instructions above, we may come up with these three triggers.

Each trigger checks if the favourite's price is in the given range and sets "price_range" to the corresponding value. Pay attention to the second condition in each trigger: it prevents the variable from being set several times.
The variables are created "Individually for each market" in case you want to refresh several markets at the same time.
To lay on that horse when its price becomes higher than price_range, we may use this trigger:

However, there is a way to do the same thing just in two triggers: one for setting the price_range variable, and another one - for laying on the selection. We just need to use a slightly more complex formula.
Let's take a look at this trigger.

This trigger determines the price range of the selection and creates the corresponding variable. Its single condition checks whether the favourite's price is within the minimum and maximum limitations. The rest of the work is done by the formula in the "Value" field.
It operates a trigger variable "match_1_back_price" which returns the price of the selection that was chosen by the trigger. See help file's chapter "Triggered Betting" -> "Trigger Variables" -> "Matching Selections Variables".
The nested IF function checks three conditions:
1. If back price is <= 3, then return 6
2. Else If back price <= 4, then return 7
3. Otherwise return 8.
Since the condition of the trigger stipulates that "Selection's Back Price is between 2 and 5", there is no need to check the first and last price limits in the formula.
To lay on the same runner we now can use a simpler trigger:

Right-click here to download the trigger file.
You can try both ways of solving this problem, and to get a stronger understanding of the formula I'd recommend you to play with the nested IFs a little. For example, try to change the values of the range, or add the fourth range to the formula, and see how the trigger will behave.
Version 6.0 now allows you to start MF Pro from the command line or create a shortcut (program link) to launch it with username and password already entered.
Please note that our hands are tied with BetFair security requirements, so our program ought not to save your username or password anywhere on your computer.
So instead it's you who can decide whether to save them, but in encrypted form, in a shortcut or a batch file that can later be launched by Windows Scheduler.
To generate a command line string use "Command Line Settings" in "General Options" tab.

You then can use this string to make a batch file or to create a task in Windows Scheduler to open MF Pro at a certain time of day.
You can also create a shortcut for launching MF Pro without manual log-in by pressing the "Create Shortcut" button. It'll make a file with a ".lnk" extension. You then can double-click this file instead of the usual program's icon in order to start MarketFeeder Pro.
In this article we are going to show how to place a bet whose liability does not exceed the specified limit, using a trigger.
For example, I want to lay 10% of my bank on the third favourite, but only if the total liability of my bet does not exceed £100.
Let's take a look at this market:

Here the third favourite is "Pallantes Cross". Suppose, my bank is £200, so I want to lay £20 on this selection. To find out the possible liability of the bet I right-click on the lay button of this selection and enter the amount of the stake into the appropriate text field:

The program shows that the liability will be -£152. That is more than £100, so how do I create a trigger that will lay to the maximum liability of £100?
First of all, I'll add a trigger that defines the size of my bet:

The formula says:
0.1*IF(test_mode=1, test_balance, balance)
I created a user variable called my_bet, to make the further calculations easier. This way I tell the program to take 10% of the test balance, if Test Mode is turned on, or the real balance, if Test Mode is turned off.
Now I'll add the second trigger:

The formula says:
IF(my_bet*(lay_price-1) > 100, 100/(lay_price-1), my_bet)
What does it mean? As you know, the liability of a lay bet is calculated as (stake size)*(lay price - 1). In this case the size of the stake is stored in the variable my_bet, so the liability of the bet is:
my_bet*(lay_price-1)
The formula therefore checks if the liability is greater than £100. If it is, it lays 100/(lay_price-1). This way the liability of the bet will be exactly £100.
If it is not greater than £100, then it simply bets the intended stake size.
I'll set my test bank to £200 and run the triggers.

The trigger limited the liability to £100 (the 0.03 fraction appears because of rounding errors). The stake size was calculated automatically.
Now I'll reduce my bank to £50 and will repeat the trigger.

While I was creating this example, the third favourite changed to "Invincible Prince". Since 10% of the bank make £5, and the liability of the bet does not exceed £100, the program placed £5 at 7.2.
Right-click here to download the trigger file.
Note: you can set the minimum size of the bet to avoid laying below the allowed minimum. To do this, add the following conditions to the trigger:

Here it is supposed that £2 is the minimum bet size, and £100 is the maximum liability.
Change any of these fields to whatever you want.
| Did you know that with MF Pro 6.0 you can also Dutch in place markets? | What is Dutching? |
Dutching in place markets is very similar to Dutching in win markets (where only one selection can win). The only difference is the condition on which the decision is made.
When Dutching, your profit will depend on the book percentage formed by the selections you bet on. As you know, for backing it should be less than 100%, and for laying - more than 100%. With place markets the book% figure is multiplied by the number of places. So, in a market with 3 places, the back book% must be less than 300%, and lay book% must be greater than 300% to make a perfect Dutch.
Let's take a look at an example. I've added a 3-place market of a horse race, 18:00 Bev, and will back-Dutch on the first 6 favourites. Here are my Auto-Dutching options:
I have set it to win a fixed amount of 4. My objective will be to place back bets, though I have checked both "Back side" and "Lay side". The thing is, if I limit the number of selections to the first 6 favourites, the lay book % formed by those selections will never be higher than 300%.
The important thing to understand about Dutching in place markets is that you will win the specified "Amount to win" only if all winning places are taken by the selections you back on. I.e. if at least one of the winning places is taken by a runner that you did NOT back on, you may win less, or even lose your money.
In order to win guaranteed profit, you need to back or lay on all selections in the market, just like with win market Dutching.
Another difference between win and place market Dutching is that in win markets you always know how much exactly you will win or lose. With place markets your P/L will depend on how many winners you have guessed. The maximum loss can be expected in a case when you did not back on any of the winners.
Here is what I get when I activate Auto-Dutching with these settings.

Let's compute together.
The best case would be if any three selections I backed on were the winners. For example, "Daisy Brown", "Menediva" and "High Rolling". I then would win ~ 4, commission exclusive:
P/L = -24.28 - 16.18 + 16.11 + 18.5 -7.63 + 17.5 = 4.02
Then there are several other variants of outcomes. For instance, the three winners could be "Diamond Laura", "Your Ladyship" and "Three Sons", the latter not being in the list of backed selections. Then my P/L would be:
P/L = 2.43 - 16.18 - 10.6 - 8.22 + 19.08 - 9.21 = -22.7
In the worst case, when the winners are "Foricherforpoorer", "Three Sons", "Cygnet Committee", my P/L would hit the biggest negative value:
P/L = - 24.28 - 16.18 - 10.6 - 8.22 - 7.63 - 9.21 = -76.12
Now take a look at the book % values of this market:

Here is a rule which may help you choose the right market to Dutch in:
The bigger is the book%, the more money you may lose in the end when trying to win the same amount. Or rather, the bigger is the result of the following formula:
book% - (number of places * 100)
Here this number is 25.53% - this is quite a large deviation from the ideal, so the market is probably not the best one to Dutch, from the risks perspective.
Once you find a market where this figure is negative, i.e. book % is 295% in a 3-place market, you can back on all selections in this market to win a guaranteed profit!
Lay-Dutching
Lay-Dutching has the same principles as back-Dutching, only you will lay on the probable losers. If all the selections you laid on lose, you will win the maximum amount of money. If their book% is greater than (number of places * 100), you will win a guaranteed profit, no matter what runners will take the first places.
Here is an example of a perfect lay Dutching:

We may pick any three winners and calculate the P/L. For example, if the winners are "What A Fela", "Pedregal" and "Badtanman":
P/L = 162.32 + 160.47 - 161.83 + 108.84 + 94.87 - 185.31 - 212.32 + 36.95 = 3.99
Remember: you don't need to configure MF Pro in a special way to do Dutching in place markets: just apply the same settings as in win markets.
Did you know that you can now transfer funds between your wallets inside MF Pro 6.0?
The amount of money in each wallet is displayed in the top of the application's window (UK: / AUS: ):

The second text link is underlined. Click on it to open a new window.

Specify the wallet from which you want to take the money, and the amount of transfer. Click on "Transfer" and the funds will be immediately moved from one wallet to another.
Please make sure that neither wallet is suspended prior to doing this.
As you probably know already, MF Pro allows you to check the parameters of the same selection in win and place markets, through the prefix "winplace_". It means that while checking the price of the favourite inside a win market, you can - for instance - check this horse's price (or any other property) in the corresponding place market.
These references can sometimes look quite complicated, so we will have some practice in connecting win and place markets in triggers.
Example.
Back £10 on the second favourite in a win market, and lay £20 on the same horse in place market.
We will need two triggers, one for each type of market. The first trigger is simple, for it only places a back bet on the second favourite, without any conditions:

Pay attention to the "Markets" field of the trigger: it is set to "Win Markets", in opposition to the second trigger, which will lay in "Place Markets".
I presume all is clear with this one, so I'll proceed to the next trigger. If not, please ask your questions in the comments to this article.
If you don't know how to make the second trigger, just follow this simple rule: always start with something that you are absolutely sure of, and do it step by step. What we know for sure is that the trigger must be executed in "Place Markets", it must lay, at the best price, and with the amount that we chose to be the default lay amount in that market.

What is important about this trigger is that you can not put "Second Favourite" in the "Selections" field: the second favourite in win market may not be such in the corresponding place market, so you will end up laying on the wrong horse! Here is an example of such situation:

The second favourite in win market is "Armenian Boy": it has the same back price as "Sea Cliff", but its lay price is 1 tick lower.

In place market the obvious second favourite is "Sea Cliff".
So I put "All Matching Selections" in the "Selections" field, and it means that I will add conditions to this trigger to search for the right selection to lay on.
You might suggest that I add the following condition:
Any Selection's Affected by Trigger backing on 2nd favourite
The logic behind this is correct, but the problem is, the trigger affected the selection of the win market, and technically it is not identical to the same selection in place market. Therefore this condition will not find any matching selections.
So I will add these two conditions instead:

The first one,
Any Selection's Lay Matched is equal to 0
finds all selections that have not been layed yet. In other words, it just makes sure I have not placed a lay bet on that horse before.
The second one actually finds the right selection:
and Trigger Expression winplace_back_matched is greater than 0
A variable back_matched returns the total amount of matched back bets for the given selection. After adding winplace_ in front of it, it returns the value of matched back bets for the same selection in place market.
The trigger will check this condition against each selection in the place market. If you back on one horse in win market, this condition will be met only by one horse in the corresponding place market - the one that you backed on.
Therefore, the second condition filters out all other selections and returns just one, which the trigger then lays on.
Right-click here to download the trigger file.
Often you may want to run multiple triggers at the same time: some of them gathering data, others placing bets. This article will help you to find out what triggers are active, i.e. are ready to be executed, and what are not, and why.
First of all, there are special settings in MarketFeeder Pro that regulate the work of triggers. These are mainly the "Trigger Options" tab in "Settings" and the "Triggers On/Off" bulb button. Let's take a closer look at them.

By default the option "No triggering till ... mins before the event's start" is turned off. But it if you activate it, it will suspend all triggers, no matter what their "Execute" field is set to, until the specified time before the scheduled start. You might forget about this setting and wonder why your triggers are not working. The most obvious clue in such case is that triggers will not generate any log files. This will most probably mean that they are blocked by this setting, unless their "Execute" is set to "never".
The second setting that may influence triggered betting is "Don't bet in actions ... if there were unmatched bets and at least one bet was not cancelled". It apparently affects only the listed trigger actions. If this option is turned on, triggers with those actions will not bet until all unmatched bets have been cancelled. This option was introduced to prevent endless bets being placed on top of unmatched bets, in case there is some problem with cancelling them.
There is a general trigger switch that may disable them completely; it is the bulb button in the top of the application:
|
All triggers are disabled |
Some triggers may work |
It is always recommended to check the status of this button when you switch Test Mode off.
After you have made sure that triggered betting is activated, you may review the list of triggers that potentially can be executed by clicking on the bottom bar of the application's main screen:

Click on this bar to expand the panel:

On the left side you will see the list of all triggers that might be executed at some point. It may happen though, that they will never get an opportunity to set into action. It all depends on triggers' properties and the state of the markets they will be applied to.
Each trigger is displayed in a separate row. Next to the bullet you can see the number of selections the trigger has been applied to. If, for instance, it backs on the favourite in each market, this number will be equal to the number of markets it has backed in. If it bets on three selections per market, this figure will show three times as much.
Once a trigger has been executed (i.e. once it has performed its "Action" at least to one selection), the whole row will turn green.

If a trigger does not seem to work, it's worth checking its log file. Trigger log files are made to record all the information about how trigger's conditions are checked, what selections it picks, what bets it is about to place and, most importantly, why it can't do this. So whenever you are puzzled as to why your trigger does not do what you told it, click on the corresponding row to open its log. Example:

And here is an example of what you might find in the log file:
|
----------------------------------------- Checking condition: Any Selection's Lay Price is between 1.01 and 2 |
You can see that the log says "Condition is false". That's why the trigger is not placing any bets. And why is that condition false? You can see the list of selections and their prices indicating that they don't fall into the range of 1.01 to 2.0.
MF Pro can place bets smaller than the minimum allowed bet size. However, by default this function is turned OFF, for your own benefit.
We received a few complaints from users whose accounts were suspended or under the threat of suspension due to their abusing this function. Please beware that BetFair do not encourage you betting below the minimum allowed bet size!
So you may turn this option on and use it at your own discretion. No complaints will be accepted with regards to this matter.
To turn this option on, tick the box titled "Allow small bets" in "Betting Options".
The latest update of MF Pro 6.0 (as of July 31) allows you to limit the number of betting transactions per minute or per hour. Since BetFair charges for exceeding 1000 transactions per hour, this can be of great help to bettors whose strategies imply continuous placing, updating and/or cancelling bets.
There is a new setting in "Connection Monitor", "Transaction limit per minute / hour".

By default it is set to "1000 per hour". This means that if you place or update more that 1000 bets in any hour of the day, MF Pro will alert you. If "Automatically prevent exceeding the limit" is turned on, the program will stop placing any bets until sufficient time has passed.
You can also access the limit value and the number of transactions you've made over the specified period through the new trigger variables:
| mntr_trans_limit | The value of the current transaction limit |
| mntr_trans_number | The number of transactions that have been made by MF Pro within the specified period |
It is therefore reasonable to check your current transaction intensity in trigger conditions, if you have reasons to think that the next bet may exceed the limit. Here is an example:

The second condition says:
and Trigger Expression mntr_trans_number is less than mntr_trans_limit - matching_numberThe meaning of this is: check whether the bets the trigger is about to place will not exceed the limit, because they will add up to already placed transactions. The variable matching_number returns the number of selections that matched trigger's conditions, and therefore it is equal to the number of bets this particular trigger may place.
Please note that if you restart the application, the history of the previous transactions will be lost, and the program will start counting them from scratch.
Betting at SP turned out to be confusing to quite a lot of MF Pro users, so it's better to clarify some things in a separate article.
First of all, starting prices are computed by BetFair, immediately after a market turns In-Play. It means that while a market is still Idle, it is in fact not possible to place a normal bet at SP, because the SP itself is unknown. The "far SP" and "near SP" are just auxiliary figures that are meant to give you the idea of what the future SP might be.
Therefore, betting at SP is actually telling BetFair that you want your bet to be offered at the starting price WHEN this price becomes available. Since at the moment of betting the price is not known, you can't predict how much money you will win. That is why when laying you are required to input the liability of your bet, not the amount, as with a normal bet. The liability is the amount of money you might lose regardless of the price of the bet, and it is not surprising that it's the only thing BetFair cares when accepting your SP bet. :)
We often get requests to make a trigger that bets at SP after the market turns In-Play. This in fact means that a normal bet should be placed, only its price will be the same as the actual SP of the selection in question. This has nothing to do with the "bet at SP" functionality, so it would be a mistake to try and set the trigger's action to "back at SP" or "lay at SP", if your aim is to bet In-Play. As soon as the market turns In-Play, the starting prices are formed and available to all bettors, so you can place a usual bet at that price.
Here are two pictures demonstrating the difference.
Laying at SP before the In-Play:

Laying at SP after the In-Play:

So, here is a correct example of a trigger that will back at the starting price on the favourite AFTER In-Play.

The variable "actual_sp" returns the actual starting price of a selection, if the market supports this function at all. Keep in mind that currently only some races are equipped with starting prices, so don't try doing that with a football match for instance.
If even after reading this article you are still unsure which option to choose, try them both, only in TEST MODE.
We are often asked the same question over and over again:
How to bet on the selection in Place market that is the favourite in Win market.
That is, there is no need to place any bets in Win markets: they just need to remember the favourite selection and either back or lay on that selection in Place market.
The word "remember" often baffles MF Pro users, as they think they need to create a trigger with the "remember" action, to record the favourite. However this approach is unnecessarily complicated in this case, as you will need more triggers to do the same thing. If you are curious how to do this, read until the end of the article.
My advice is: always use the tools that are invented specially for certain needs. In this case you need to connect win and place markets together, so do use the "winplace_" prefix that is designed exactly for this purpose!
You will need only one trigger to achieve that goal.

Let's look into it: I've selected "Place Markets" as "Markets" because that is where my trigger will actually place the bet. It does not matter that it will also check some parameters of the win market: what matters is where this trigger should perform its action.
For "Selection" I've chosen "First Matching Selection", although it could have been "All Matching Selections" as well, for there will be only one selection that will match the trigger's conditions.
The first trigger's condition needs to start with "Any Selection's", because of "First Match Selection" in the "Selections" field. The program needs some criteria to start filtering out selections. Since usually users ask to limit the price of the bet, I've added the condition "Any Selection's Back Price is less than 5". But if you don't need that condition, make it be always true, for instance "Any Selection's Back Price is greater than 0".
The second condition is the key one: it checks whether the rank (order) of the given selection is equal to 1 in the corresponding win market. The prefix "winplace_" in the variable "winplace_sel_order" tells MF Pro to look for the same selection in the opposite market, and evaluate the trigger variable for that selection.
So what the program does, step by step, is take all selections from the Place market whose price is less than 5.0. Then for each such selection it finds a match in the win market and check that selection's rank. Once it's found the favourite, it places the bet.
Right-click here to download the trigger file.
This is what you'll get in the end.
Win Market:

Place Market:

Pay attention to the fact that the selection may not be the favourite in the place market as well. In this example "Line Kendie" is the second favourite in the Place market, but MF Pro backed on it because it is the favourite in the Win market.
Complicated way to do this
Here's an example of a more complicated yet working way to achieve the same goals. Compare both examples and draw your own conclusions.

This is a case study on how to do the following.
Import selection names from a file (it could be the list of horses from a tipster), then back on those who are the favourites, i.e. have the lowest price in the market.
First of all, you need to create a text file with all selections listed on a separate line. You can use any text editor, for example the built-in Notepad:

Then open MF Pro and add the markets to which the selections in the file below.

Then switch to "My Markets" tab and press the button "Import selections for auto-trading":

Open the file where you saved the list of selections. If you did everything right, the program will tell you how many selections have been imported:

The selections that have not been imported will be greyed out and will not be affected by triggers or other auto-trading tools.
Then you need to create the following trigger. It is simplistic - only backing on the imported selection if it is the favourite, but you may add your own conditions to it.

Save the trigger and start refreshing markets in due time. The trigger will back those selections who were imported AND are the favourites. It will leave out all the other selections.



If you have some knowledge of Visual Basic scripting, particulary of VBA - the language used for creating macros in MS Office - the following tips can be useful for you.
Though all betting functions are implemented within the application, you may still want to launch betting from inside your Excel spreadsheet. This must be achieved through special functions with a pre-defined syntax. These functions exchange data with MF Pro through a DDE channel. DDE is a technology that allows two applications to interact with each other.
At the end of this page you will see the examples of both betting and cancelling procedures. You can apply these examples right away without knowing much about DDE technology. If you are interested in details please read the following paragraph.
Examples
Backing
Sub Back(marketID As Long, selectionID As Long, price As Double, amount As Double)
Dim feed As Integer
Dim data As String
feed = Application.DDEInitiate("FEEDER5", "betting")
If feed > 0 Then
data = "back/" & marketID & "/" & selectionID & "/" & price & "/" & amount
Range("AA1000") = data
Application.DDEPoke feed, "bet", Range("AA1000")
End If
End Sub
Laying
Sub Lay(marketID As Long, selectionID As Long, price As Double, amount As Double)
Dim feed As Integer
Dim data As String
feed = Application.DDEInitiate("FEEDER5", "betting")
If feed > 0 Then
data = "lay/" & marketID & "/" & selectionID & "/" & price & "/" & amount
Range("AA1000") = data
Application.DDEPoke feed, "bet", Range("AA1000")
End If
End Sub
Updating a bet addressed by its ID
Sub Update(betID As Double, newPrice As Double, newAmount As Double)
Dim feed As Integer
Dim data As String
feed = Application.DDEInitiate("FEEDER5", "betting")
If feed > 0 Then
data = "update/" & betID & "/" & newPrice & "/" & newAmount
Range("AA1000") = data
Application.DDEPoke feed, "bet", Range("AA1000")
End If
End Sub
Note: if you wish to leave either price or amount the same, you can input zero (0) instead of any of these parameters (but not both at the same time). For example:
Update 4038075284#, 0, 4
This will change only the amount of the bet.
Cancelling a bet addressed by its ID
Sub Cancel(betID As Double)
Dim feed As Integer
Dim data As String
feed = Application.DDEInitiate("FEEDER5", "betting")
If feed > 0 Then
data = "cancel/" & betID
Range("AA1000") = data
Application.DDEPoke feed, "cancel", Range("AA1000")
End If
End Sub
Cancelling a lay bet addressed by its price and amount
Sub CancelCustom(betType As String, marketID As Double, price As Double, amount As Double)
Dim feed As Integer
Dim data As String
feed = Application.DDEInitiate("FEEDER5", "betting")
If feed > 0 Then
data = betType & "/" & marketID & "/" & price & "/" & amount
Range("AA1000") = data
Application.DDEPoke feed, "cancel", Range("AA1000")
End If
End Sub
Example: CancelCustom "lay", 20520613, 2, 10
Here are some friendly remarks and suggestions for the competitors, both present and future, regarding the technical side of their triggers:
Unmatched bets
There has been a lot of situations when a bet was placed by trigger, and it was reflected in the action log, then it stayed unmatched and later was lapsed, thus didn't get on the account statement. Bare in mind that when In-Play, prices may change really fast, so the price you offered a couple of seconds ago might not be taken. If your strategy allows it, offer a price that is several ticks worse than the current one, otherwise get prepared than certain percentage of your bets will never get matched. If in Test Mode, go to "Test Mode" options and turn on "Delay placing and cancelling Test Bets".
Order of triggers
Sometimes trigger B uses variables and other data that should have been set in trigger A, yet trigger B comes before trigger A. It may lead to confusion, so always structure your triggers according to the order in which you expect them to be executed. It is super-easy to change the order of triggers – just drag-n-drop them to the position they must take using the mouse.
Unset variables
Which leads me to another thing. I noticed that in some triggers a user variable, say, var1 would be set to an arithmetic expression involving another variable, say var2:
set user variable var1 to value var1 + var2 + 2
But the thing that was not taken into account is that var2 was not set at the moment of executing this trigger. Therefore, the program, being unable to evaluate var2, assigned the whole expression to var1. During the next execution of this trigger it became var2 + 2 + var2 + 2, then var2 + 2 + var2 + 2 + var2 + 2 and so on. You can guess what happened in about an hour - the program has eaten up almost all memory and was duly closed. It could have been avoided if you had read chapter "Tips on working with user variables", particularly these paragraph:
2. Always initialise user variables with the very first triggers in your trigger block, as the variables that do not have any value are not parsed. The easiest way to do this is to create a trigger that will be executed one time only.
You can also initialise a variable manually, by entering the corresponding value in the "View Variables" window.
3. If you assign a variable some trigger expression where other user variables are involved, make sure that those variables are initialised as well. Use the trigger condition "User Variable(s)... are set".
Unnecessary condition blocks
I'm talking about structures such as:
Selection's Back Price is less than 10
and Selection's Back Matched is equal to 0
AND
Minutes before the off is less than 0.5
and Market's Volume is greater than 10000
Why adding the condition block? It's only required when you combine conditions that are connected with a different operator than some other conditions in the block. Here all conditions are connected with an "AND". It would make sense if it were:
Selection's Back Price is less than 10
and Selection's Back Matched is equal to 0
AND
Minutes before the off is less than 0.5
or Market's Volume is greater than 10000
and also in this case:
Selection's Back Price is less than 10
or Selection's Back Matched is equal to 0
OR
Minutes before the off is less than 0.5
and Market's Volume is greater than 10000
Compare condition blocks to parentheses: you use them if there are different arithmetic operations in the same expression, e.g.:
(5 + 4) * (10 + 2)
But if it's something like that:
5 + 4 + 10 + 2
you don't need parentheses, as they won't affect the final result, but will complicate the expression.
Settling markets
It has been revealed that many find "Test Mode" settings confusing, as I sometimes noticed that all three options were turned on:
The second and third options are actually mutually exclusive. There are two events that can happen to a market: it can finish (i.e. be closed by BetFair) and settled (i.e. have its bets settled and the winner appointed). These options determine the order in which these events will happen. If "Settle finish markets..." is ON, the market gets settled immediately after its status turns "Finished". Usually at this point BetFair does not have the winner name ready, so it only can mean that MF Pro will settle the market based on the setting "By default settle according to this rule".
The option "Finish a market automatically..." makes it happen the other way round: if the market is settled already (for instance, if you settle it manually or using a trigger), MF Pro sets its status to "Finished".
There is absolutely no sense in having these options ON at the same time.
Besides if you want the results to be real and come from BetFair instead of being generated by the program, do NOT turn any of these two options and leave just "Download results from BetFair...". Actually, the manual says the same thing, but who on earth reads manuals! :(







