Buying and Holding Tech Stocks: $500k in 10 Years : Chris
by: Chris
blow post content copied from Be on the Right Side of Change
click here to view original post
Disclaimer: Just a heads up: this isn’t financial advice! Always do your own research and talk to a professional before making any investment decisions.
Here are the top technology companies by market cap in 2014 (source):

Let’s assume a simple buy-and-hold strategy where you simply buy the top six tech stocks (by market cap) in the year 2014, assuming you don’t have any particular insight into the tech industry (e.g., seeing NVidia or Tesla early):
- Apple
- Microsoft
- IBM
- Oracle
- Meta
tech_stocks = ['AAPL', 'GOOGL', 'MSFT', 'IBM', 'ORCL', 'META']
In the US, the average income of a coder was roughly $76k per year in 2014 (source).
If you save only 10% of that, i.e., $7,200 per year or $600 monthly and you distribute that equally across the six chosen tech stocks, here’s the annual ownership of your stock portfolio:

Table: The table displays the year-end values of equal monthly $100-investments in our six tech stocks from 2014 to 2024, alongside their Compound Annual Growth Rates (CAGR).
Each row corresponds to a different stock, with columns indicating the investment’s worth at the close of each year.
The CAGR column reflects the average annual growth rate of the investment over the ten-year period.
For instance, an investment in Apple (AAPL) grew from $1,734 in 2014 to $134,446 by 2024, with a CAGR of 27.38% and annual contributions of $1,200 into AAPL.
Your total portfolio value of this simple buy-and-hold portfolio would be north of $500,000 after 10 short years! In this scenario, a 50-year-old could retire today, having started with $0 in 2014!

Assuming the compound annual growth rate remains ~15%, you’re technically retired because you don’t need your $76k paycheck anymore, given your $75k+ return on investment from year 11 onward!
Code
You can recreate this using the following Python script.
First install these libraries:
pip install yfinance pandas numpy matplotlib
Then copy and paste the following code into your Python script (my_file.py
) and run it:
import yfinance as yf import pandas as pd import numpy as np import datetime import matplotlib.pyplot as plt import matplotlib.ticker as ticker # Define the time period for the data end_date = datetime.datetime.now() start_date = end_date - datetime.timedelta(days=10*365) # List of top tech stocks based on market capitalization from about 10 years ago tech_stocks = ['AAPL', 'GOOGL', 'MSFT'] # , 'IBM', 'ORCL', 'META'] # , 'TCEHY', 'QCOM', 'INTC', 'CSCO'] # Function to perform dollar-cost averaging investment strategy def dollar_cost_averaging(initial_investment, monthly_investment, data): investment_values = {} total_asset_values = pd.Series(dtype=float) for stock in tech_stocks: # Initial investment initial_stock_investment = initial_investment / len(tech_stocks) # Monthly investment dates investment_dates = pd.date_range(start=data[stock].index[0], end=data[stock].index[-1], freq='M') stock_investment = np.zeros(len(data[stock].index)) # Apply initial investment stock_investment[0] += initial_stock_investment for date in investment_dates: # Find the closest trading date closest_date = data[stock].index[data[stock].index.get_loc(date, method='nearest')] investment = monthly_investment / len(tech_stocks) stock_investment[data[stock].index.get_loc(closest_date)] += investment # Calculate cumulative investment cumulative_investment = np.cumsum(stock_investment) # Adjusted close price for the stock adj_close = data[stock]['Adj Close'] # Calculate asset value over time asset_value = cumulative_investment / adj_close.iloc[0] * adj_close investment_values[stock] = asset_value total_asset_values = total_asset_values.add(asset_value, fill_value=0) # Aggregate yearly values yearly_values = {} for stock, asset_value in investment_values.items(): # Resample the asset value data to get the value at the end of each year yearly_values[stock] = asset_value.resample('Y').last() return yearly_values, total_asset_values # Function to calculate CAGR def calculate_cagr(start_value, end_value, num_years): return (end_value / start_value) ** (1 / num_years) - 1 # Main function to execute the strategy def main(initial_investment, monthly_investment): # Download historical data for the stocks stock_data = yf.download(tech_stocks, start=start_date, end=end_date, group_by='ticker') yearly_values, total_asset_values = dollar_cost_averaging(initial_investment, monthly_investment, stock_data) # Creating a DataFrame for yearly values yearly_table = pd.DataFrame(yearly_values).T yearly_table.columns = yearly_table.columns.year # Use year as column names # Format the table for better readability formatted_table = yearly_table.round().astype(int).applymap("${:,}".format) # Calculate CAGR cagr_values = {} for stock in tech_stocks: start_value = stock_data[stock]['Adj Close'].iloc[0] end_value = stock_data[stock]['Adj Close'].iloc[-1] num_years = (stock_data[stock].index[-1] - stock_data[stock].index[0]).days / 365.25 cagr_values[stock] = calculate_cagr(start_value, end_value, num_years) cagr_df = pd.DataFrame(cagr_values, index=['CAGR']) cagr_df = cagr_df.T cagr_df['CAGR'] = cagr_df['CAGR'].apply(lambda x: f'{x:.2%}') # Combine yearly values and CAGR in a single DataFrame for display combined_df = pd.concat([formatted_table, cagr_df], axis=1) print("Yearly Investment Values and CAGR for Each Stock:") print(combined_df.to_string()) # Plotting the total asset value over time ax = total_asset_values.plot(title='Total Asset Value Over Time') ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda x, p: f'${x/1000:,.0f}K')) plt.xlabel('Date') plt.ylabel('Total Asset Value') plt.show() if __name__ == "__main__": initial_investment = 0 # Modify this value as needed monthly_investment = 600 # Modify this value as needed main(initial_investment, monthly_investment)
You can modify the initial and monthly investments in the variables at the bottom of this script. If you don’t know how to run a script, consider this Python guide:
January 22, 2024 at 08:37PM
Click here for more details...
=============================
The original post is available in Be on the Right Side of Change by Chris
this post has been published as it is through automation. Automation script brings all the top bloggers post under a single umbrella.
The purpose of this blog, Follow the top Salesforce bloggers and collect all blogs in a single place through automation.
============================

Post a Comment