Rounding on all transactions to 4 decimal places

Posted by MPSL 
Rounding on all transactions to 4 decimal places
November 10, 2011 05:41PM
I brought this up earlier today on this thread, talking to someone who appears to have been stung by the rounding system on here.

iPredict's help page mentions that research shows longshots are overvalued on prediction markets, and suggests shorting them to make cash. Vice-versa for something that is sure to happen. However, the rounding system on here can make that difficult and very risky at over 99.49% / under 0.051.

So as not to manipulate stock prices, I'll use the example of a closed stock - Fairfax to announce Trade Me IPO.

If I was 100% sure Fairfax would definitively announce an IPO in 24 hours, I would happily buy as many contracts as possible for 0.9950, knowing I would make ~0.5% interest in 24 hours if I was right (more than 6 times my money in a year if I could do it every day) . But if I placed an order at 0.9950, and someone sold them to me individually, each order would be rounded to $1.00 at my end, and I make nothing when the contract closes. The same applies if I offer to short a stock for 0.0050. It is unlikely someone would do this though, as they could pay the same price for shorting/buying two at a time, and then I’d still make my 0.5%.

But this doesn’t apply if I'm offering to buy above 0.9952 or short below 0.0048. If I place a buy order for 0.9953, someone can short the stock one at a time without paying a cent. On the other hand I would pay $1 for them - I can't make anything, and if I'm wrong, the person who shorted them made $1 per contract with no investment. No one can offer to buy any stocks at more than 0.9952 without giving someone a chance to short a stock for nothing. The same goes with a sell offer of anything under 0.0048.

So… say I try to avoid these situations by placing a buy order at 0.9949, so it's not possible for me to buy them for $1 after rounding. Suddenly my return depends hugely on how many stock are bought from me at a time:

No of Stock:....Unrounded:.....Rounded:...Interest:...Annual Equivalent.
1......................0.9949.............0.99...........1.01%......3828.67%
2......................1.9898.............1.99...........0.50%......523.91%
3......................2.9847.............2.98...........0.67%......1050.93%
4......................3.9796.............3.98...........0.50%......523.91%
5......................4.9745.............4.97...........0.60%......800.79%
6......................5.9694.............5.97...........0.50%......523.91%
7......................6.9643.............6.96...........0.57%......711.03%
8......................7.9592.............7.96...........0.50%......523.91%
9......................8.9541.............8.95...........0.56%......665.09%
10....................9.949...............9.95...........0.50%......523.91%

Because of the 5% cap on trading fees and the way rounding works, another trader would want to short stocks in lots of 2, 4, 6, 8, 10 or 12 at 0.9949 a stock, as they pay 0.5c/contract to do this. If they buy any other quantity, they pay more per contract.

Buying stock in lots of 2, 4, 6, 8, 10 or 12 are the numbers where I would earn the least. Without rounding, I would get a ~0.51% return on my stock if I'm right, instead I get ~0.5% - a loss of ~23% annually if I did it daily.

And in terms of meeting someone else's order, I should be able to make a profit on meeting any order below 0.9965 (once I've paid for the 0.35% trading fee). But if I'm buying single contracts, I can't pay more than 0.9914, or I'll be paying a dollar per contract after rounding. If I'm buying two contracts, I can pay up to 0.9939. This number does climb the more I buy at once, but I would have to buy at least 51 contracts in one trade to make any profit at 0.9964 per stock.

A user who isn't savvy to the way rounding works here could easily buy 5 stocks at a time for 0.9955 each, thinking they will make 0.1% after the trading fees are added, but would end up making nothing, especially if they used the multi-trade function, which doesn't include the fees for some reason?!

There are other examples I could use of this rounding problem involving in a variety of different situations like arbitraging, bundles, etc. but I think I've made my point.

Is there some reason all transaction aren't rounded to four decimal places? That would stop this problem. Values only need to be rounded when withdrawing the last of your money from iPredict.
Re: Rounding on all transactions to 4 decimal places
November 10, 2011 06:01PM
To top it off, I've just noticed that there is something strange with the rounding system on here. For example, I just tried buying a single stock listed at 0.8411. I had $1.28 in cash.

0.8411 + 0.0035 = 0.8446. Rounded it's 0.84. That's what the advanced trade feature quoted me too. After the transaction, my cash balance should have been $0.44. It was $0.43.

I don't know what's going on there. But rounding to 4 decimal places would make this all much clearer and fairer. Four decimal places means no trade total would be rounded at all, unless the total trading fees were less than 0.35 cents.
Re: Rounding on all transactions to 4 decimal places
November 10, 2011 07:05PM
It seems to me MPSL, that there really is no need for rounding whatsoever. All transactions are electronic so if prices are quoted to four decimal places then the accounting for each transaction should be the same. There is no reason that I can see for it to be otherwise.
Re: Rounding on all transactions to 4 decimal places
November 10, 2011 07:27PM
The only time rounding to 4 decimal places would apply would be if the total trade fee is less than 0.35 cents per contract.

For example, if you bought 1 contract at 0.0555, the trade fee would be 0.002775 (5% of trade total). It would cost you $0.058275.

Totals could be calculated exactly, but rounding to four digits on displays seems more realistic than up to 6. But I would be happy with no rounding and 6 digits displayed too.

I know sometimes rounding is actually necessary when floating-point numbers are used by whatever is calculating the result otherwise the result can be inaccurate (like in JavaScript or Excel). So if there is some need to round somewhere, 4 would avoid rounding on most transactions. 6 would mean all transactions cost exactly what they should. But 2 is ridiculous, given the number of small transactions that happen on iPredict all the time.



Edited 2 time(s). Last edit at 11/10/2011 07:52PM by MPSL.
Re: Rounding on all transactions to 4 decimal places
November 10, 2011 09:44PM
I'm pretty sure that behind-the-scenes, it actually does record your cash to the 4 decimal place level, but it only shows you rounded values to 2 DP.

A couple of times I've made trades and expected my balance to be at a certain figure, but it's been 1 cent off what I expected. Like placing a sell order that it claims will add 50c to my balance (because it's rounded it down from 50.1), but actually my balance has gone up by 51c because I had something like 0.9c left over and the extra 0.1c tipped it over to show a full cent.



Edited 1 time(s). Last edit at 11/10/2011 09:45PM by Lanthanide.
Re: Rounding on all transactions to 4 decimal places
November 10, 2011 09:46PM
MPSL my point relates to situations like your earlier example -

"To top it off, I've just noticed that there is something strange with the rounding system on here. For example, I just tried buying a single stock listed at 0.8411. I had $1.28 in cash.

0.8411 + 0.0035 = 0.8446. Rounded it's 0.84. That's what the advanced trade feature quoted me too. After the transaction, my cash balance should have been $0.44. It was $0.43.

I don't know what's going on there. But rounding to 4 decimal places would make this all much clearer and fairer. Four decimal places means no trade total would be rounded at all, unless the total trading fees were less than 0.35 cents."


Without rounding the cost would have been $1.28 less .8446 leaving a balance .4354. Why should it be otherwise than this. I accept there is a need to round to something as shown by your later example of 6 decimal points. All I'm really saying is keep it the same for everything.
Re: Rounding on all transactions to 4 decimal places
November 10, 2011 10:18PM
@Oracle What I meant was that the numbers weren't even rounding to two decimal places properly. Rounding to the nearest cent should have left me with $0.44, not $0.43. But I would prefer no rounding for any trades ($0.4354).

@Lanthanide This could be the case. But it would be nice to have it clarified somewhere - does it record 4 decimal places behind the scenes, 6 decimal places or just the two it displays? I can't find any information about how rounding works here. I assumed trades were rounded to what they are quoted as in the history. But if they are using the full 6 digits behind the scenes, it would be very helpful to see at least four of them.
Sorry, only registered users may post in this forum.

Click here to login