FX Market Maker Robot

The FX Market Maker Robot is a server that Foresight Exchange players can use to make markets in selected claims. It is maintained by me, Neal Gafter, a.k.a. FX player Loophole.

I am maintaining these pages and the robot in hopes that it might improve liquidity and interest in the game. You are welcome to use these pages to configure the robot to use your own FX account as a market maker in various claims.

What is a market maker?

A market maker is a trading agent that improves liquidity.

The robot books a number of limit buy and sell orders clustered around the current market consensus price. As the price of the claim fluctuates, these booked orders will be executed, and you will profit from the spread between the bid and ask prices.

As the price of the claim moves down, the market maker purchases YES coupons and moves down its estimate of the market consensus price. As the price of the claim moves up, the market maker sells YES coupons and moves up its estimate of the market consensus price.

From time to time the robot examines the market to update its estimate of the market consensus price and replace booked orders. If the market consensus has moved too far then the robot abandons the claim. This prevents you from being caught on the wrong side of a claim when changes in real-world events drastically change the likely outcome of a claim.

You can override the consensus price chosen by the robot to be the center of the set of booked orders. I use this feature myself to accumulate (or reduce) positions in claims in which I am interested. If you want to accumulate YES coupons (or sell NO coupons), then you should increase the robot's consensus estimate from time to time. Conversely, if you want to sell YES coupons (or buy NO coupons) then you should decrease the robot's consensus estimate from time to time. This is a very practical way to get a good price for your trades.

How do I set up the robot?

The robot is a web server that runs on my machine. You configure it to act as market maker for you by filling in a form describing the details of how you want it to act. You start by giving the robot your FX user ID (the number) and your FX password. You can play with the configuration pages without giving it your correct password, but you will not be able to save your specifications or have them executed by the robot. To get started, this will give you an empty configuration form.

How do I use the configuration form?

The first section of the configuration form is where you identify youself to the robot. The robot needs your FX UID, FX password, and email address for many of its operations. Unless you Save your configuration, your password is not stored on my system. Your email address should be the same one that is registered on the FX account. The email address isn't used for anything yet, but eventually I expect to use it to email you the status of actions the robot takes on your behalf.

The configuration itself appears as a number of rows. Each row specifies the robot's behavior for one claim. The fields are:

N
Number of the row. You can change the numbers and use the Sort button to reorder the list.
Activate
When checked, this indicates that you intend the row to be considered as a market specification. Unchecked rows are simply preserved as text and ignored.
Claim
The name of the claim. Clear this field to delete a row.
Held
The number of coupons you currently hold in the claim.
Center
The market price of a YES coupon to be used as the center of the spread of booked orders.
Stiffness
How many coupons must be sold or bought by the market maker before the price moves by one cent. By default, stiffness=1.
Notes
Text notes. These are ignored but preserved by the robot.

The fact that the robot preserves inactive rows and notes is very useful for keeping track of what the robot is doing on your behalf. I tend to use notes to remind myself to change the spec from time to time to accumulate or reduce my position in various claims, and to remind myself to deactivate the claim when it nears judgment. I use inactive rows to remind myself to watch a claim and set up a market maker for the claim in the future.

Do I have to figure out all these values myself?

No. Except for the name of the claim you can have the robot fill in the fields for you with reasonable default values. If you leave Held blank, the robot will fill in your current holdings. If you leave Center blank, the robot will compute the current market consensus by taking the average of the bid, last, and ask prices. If you leave the Stiffness blank, the robot will fill in the value one. To have the robot fill in these values, check the Activate box and then the Check and Fill Defaults button.

You can also use the Check and Fill Defaults button to have the robot show you your current holdings and the current computed center for the claim.

How do I save a specification from one session to another?

After filling in the form, push the Save button at the bottom of the screen.

To reload it later, go to http://www.gafter.com/cgi-bin/neal/FXBot, fill in your UID and password, and push the Load button. As a shortcut, you can fill in the form below, push Load, and bookmark the resulting page which will contain your password in the URL. When you go to that bookmark it will load your latest saved specification.

Your FX UID: Your FX password:

How often does the robot replace booked orders

Without your explicit permission, the robot will not execute any actions on your behalf. You give it permission in one of two ways.

First, you can push the Execute button at the bottom of the configuration page. That causes the robot to immediately update your booked orders. Remember, the robot only considers the rows that have Activate checked.

Second, you can contact me at fxbot@neal.gafter.com and have me set up a cron job to automatically update your orders at prearranged intervals. My own orders are updated every three hours. The cron job would update your booked orders using the specification you have saved. You would be able to modify the robots behavior by editing and saving a new configuration at any time.

How does the robot change my booked orders as my holding change?

OK, here's the math behind the robot's actions.

From your specification, the robot selects a value for Z as follows

Z
= Held + Stiffness*Center + Delta
where
Held
are the holdings you specified
Stiffness
is the stiffness you specified
Center
is the center you specified
Delta
is a number from 0 to stiffness-1 to keep all the calculations integers
then to update your orders, the robot gets your actual holdings and calculates a new value for Center and Delta needed to keep the value of Z the same. Specifically
Center
= (Z - Held) / Stiffness
Delta
= Z - Held - Stiffness*Center

Although the value of Delta is normally hidden from you (and always zero if Stiffness is one), you can see how the robot would update the computed center by pushing the Check and Fill Defaults button, which updates and displays the values as described.

How should I use the robot if I want to accumulate YES coupons?

To accumulate YES coupons (or reduce your NO holdings) simply increase the value of Z by increasing the value of Held in the specification. To reduce your YES holdings (or increase your NO holdings) simply descrease the specified value of Held. Don't forget to save your changed specification.

The server takes a long time to respond

Many of the actions on this form require the robot to contact the FX server. For example, password verification, getting your current holdings, computing the market center for a claim, and so on. For very long market specifications (mine has about 45) it can take the server 1-2 minutes to execute your specification and respond. If the FX server is slow to repsond, it can take even longer. Please be patient.

Disclaimers

The robot is experimental. Although I believe it does what I wanted, there is the possibility that it has bugs, or that what I wanted it to do is not what you want. Use it at your own risk. I welcome comments, suggestions, bug reports, etc. Just email me at fxbot@neal.gafter.com.

Privacy. In order for the robot to execute trades on your behalf, it needs your password. Consequently, I will have access to your FX password. If you ask the robot to store your market maker configuration, your password is stored on my system. I have done what I can to protect passwords, but I cannot be responsible for compromise. If you suspect your password has been compromised, change your password on the FX system. That will also prevent the robot from executing any further actions on your behalf.

Good luck!

Regards,
fxbot@neal.gafter.com