Recently I put the maximum amount of cash into my IRA account. Since stock prices jump up and down all the time, I wondered whether the current price would be the best one to buy the stock at. In particular, I'm not withdrawing money from my IRA for the better part of 40 years, so I'm not going to sell it — I want the absolute lowest price possible.
Stock markets offer a type of order that's useful for this - you can put in a limit order, which says essentially "I'll buy N shares at price X", where X is some price below the last traded price of the stock. Anyone can take the other side of that order at any time, which usually happens when the stock price drops below the limit order! So you can put in a limit order at any time and it will execute whenever the stock price drops below that amount. I'm simplifying slightly but that's the gist.
So if the current stock price is X, what price should I put in my limit order for? You should be able to come up with some kind of model of the stock price and how it moves and say, roughly, "If you set your limit order at Z, there will be a ~98% chance of it executing in the next year." The normal criticism of stock price models is they underestimate the probability of extreme events, which is alright for us, since extreme events make it more likely our limit order will trigger.
I figured someone studied this problem before so I asked about it on Quant Stack Exchange and I got a really good answer! The answer pointed to two different papers, which have attempted to model this.
Essentially the model looks at the volatility of the stock - how often it jumps up and down - the stock's current price, the probability you want the order to hit, and the amount of time you want to wait. The formula is a little complex but it looks like this:
I wrote some code to compute these values for the stocks I wanted to buy. The hardest part is figuring out the volatility, because you need access to a lot of stock prices, and you'll want to compute the standard deviation from that. I was able to get historical price data from Quandl, and current stock prices from Yahoo.
Combine the two and you get output that looks like this:
$ go run erf.go main.go --stock=<stock> --total=5500 --percent 0.95
the standard deviation is: 0.006742
annualized: 0.107022
current price: 74.95
Based on this stock's volatility, you should set a limit order for: $74.35.
Compared with buying it at the current price, you'll be able to buy 0.6 extra shares (a value of $43.77)
Pretty neat! I've put the code up on Github, so you can take a look for yourself.
Liked what you read? I am available for hire.
I’m not convinced that using limit orders increases your expected value. Sure, you get more shares if your order goes through, but you also miss out on jumps if the stock price goes up.
For example, suppose you know there’s going to be an event next week (maybe a vote on a bill which affects the business) which will affect the stock price massively: the stock will be worth 2x if the vote goes through, and 1/2x if the vote fails. If you buy at market now, your expected return is 0%. If you set a limit order for 99% of the market price, you lose almost half your money if the order goes through, and don’t gain anything if it doesn’t.
Whoops, the example should have been 2x vs 0x to make the expected return 0.