A company's Employee Stock Purchase Plan (ESPP) represents a potentially great benefit that can add thousands of dollars to your net income every year. By understanding how your company's ESPP works, you can make an educated decision about how much you should contribute.
Each company's stock and ESPP is different, along with an employee's ability to contribute. In order to see how valuable an ESPP is to you, let's enter some information about your company's ESPP and your personal preferences.
What is the structure of your company's ESPP?
What are the fundamentals of the stock?
This is important because more volatile stocks will have a higher expected rate of return, which will increase the benefit of the ESPP.
What is your situation as it relates to your ESPP?
This plan doesn't contribute any money to the ESPP.
This plan contributes the maximum amount of money to the ESPP each period, without intentionally overpaying.
For an employee stock plan, the employee is typically allowed to purchase stocks at a discount to the market price. If the employer has a solid plan, the employee can even purchase stocks using a lookback
method that takes the lower of the price at the beginning of the offering period or the price at the end of the offering period, multiplied by the discount rate. Employees typically set how much they want to contribute
at the beginning of the period, and if needed, they can lower their contribution midway through the period. This is a great benefit that should be utilized by many employees, provided the discount rate is high enough.
Employee Stock Purchase Plans are regulated by the IRS, and have a maximum contribution limit. You are allowed to purchase 25000 worth of stock per year, which is divided into 2 (or more) offering periods.
This means if you buy $15000 worth of stock in the first period, you can only buy $10000 worth of stock in the second period. Additionally, the IRS calculates the amount of stock purchased by multiplying
the price at the beginning of the offering period by the number of shares purchased at the end of the offering period. So if the stock price falls in the first period and you contribute a large amount,
you won't be able to contribute as much in the second period. This can be very bad if the stock price falls in the first period, and rises in the second period, because you miss out on the lookback discount
of the stock price in the second period, which translates into significantly larger capital gains. This means that the if the employee is able to contribute a large amount of money in periods where the stock rises,
they can get more value out of the ESPP.
Lastly, employees may also want to be conscious of how much they contribute to the ESPP, as they may overcontribute due to the above IRS rules. This can result in a refund at the end of the year, which is money
that could have been in a bank account earning interest. This is where the liquidity preference rate comes in to assign value to money that is not contributed to the ESPP. This happened to me last year due to CVS' dropping
stock price, and I funnelled that energy into this project!
In order to determine the inputs company stock parameters, I utilized the polygon API and the fred API. Polygon contains a wealth of stock information, but using the free tier, I can get the basics needed to do these calculations. The fred API is used to get the risk free rate. In order to calculate the stock volatility, I used the polygon API to get the options pricing for the stock approximately 1 year out for the option with the strike place that is closest to the current stock price. From there, I used the Black-Scholes formula to calculate the volatility of the stock. In order to calculate the expected rate of return, I pulled the past 24 months of stock prices to the past 24 months of SPY prices, and plugged those into the CAPM formula to get the expected rate of return.
In order to forecast the price of the stock, I used the volatility and expected rate of return to generate 1000 simulations of the stock price over the course of the year a Monte Carlo simulations. For the intervals, I used the number of pay periods the employee has per year, because that represents moments where the employee can change their contributions.
In order to run the strategies, the model iterates through the stock prices one period at a time. The strategies are functions that determine how much money the employee should contribute given the current stock price and the current state of what the employee is able to contribute to the ESPP. After the end of every pay period, a function runs to update the current state of the ESPP. At the end of every offering period, stocks are purchased according the rules set forth by the IRS, taking into account the lookback and discount rates. If the employee overcontributes, the excess money is refunded.
I developed multiple different strategies to try and maximize the benefit of the ESPP. Ultimately, the best strategy is just to put as much money as you can reasonably afford into the ESPP. Trying to game the system by looking to maximize your contributions in periods where the stock price rises can result in higher gains, but it is very difficult to time and the return on time investment isn't there.
However, I did develop two strategies that do attempt to maximize the benefit of the ESPP, and both managed to outperform the "Max Contribution with no overpayment" strategy.
The first strategy is "Readjust Halfway". This strategy attempts to contribute the maximum amount of money for the first 3 months of the year, but then reduces the contribution if the stock
is not performing well. That way, the employee can potentially take advantage of a stock price rise in the second period of the year.
The second strategy is "Maximize for Large Periods". This strategy is similiar to readjust halfway, but it is attempting to readjust every single period by generating probability distributions
of the stock's performance the rest of the period. Essentially, it is doing a simulation of a simulation to determine the chances the period will be a high performing period.
Once the period is identified as a low performing period, the strategy shifts to contributing a lower amount of money the rest of the period so the employee can still take full advantage of the stock
plan, which may not happen if they eliminate contribtions altogether.
You can find the source code for the stock strategies at my GitHub repository: ESPP