投资有风险,入市需谨慎。
懒人的投资 #
懒人的投资方法是复利定投,难点在于找到真正平均每年回报率高的产品以及真正地付诸行动。
定期定额投资指数基金(简称“定投”)是一种受到广泛推崇的策略,特别是对于长期投资者。 定投指数基金的策略很简单:无论市场行情如何,投资者都在固定时间(如每月、每季)投入固定金额购买指数基金。 这种方法有助于“摊平”投资成本,因为在市场低迷时,同样的资金可以购买更多份额,而在市场高涨时则相反。 长期而言,这种策略能够有效降低投资的平均成本,提高投资回报的可能性。
很好奇定投到底能赚多少,所以决定写个简单的程序来看看到底能赚多少。
选了几个常见的指数基金:
- SPY: 标普500指数ETF,该指数成份股包括了美国500家顶尖上市公司,占美国股市总市值约80%。
- QQQ:纳斯达克100指数ETF,该指数包括了美国纳斯达克100支最大型本地及国际非金融类上市公司。
- SPXL: 3倍杠杆标普500指数ETF
- TQQQ:3倍纳斯达克100指数ETF
定投总投入与总收入 #
下图展示了从2014-05-12年开始到2024-05-04结束,10年时间,每15天投资500块美元,在交易日期的最高价买入, 每日的总资产按照每日最低价计算,投资不同的指数基金的总投入与总资产:
长远来看,这样的策略似乎是可行的。加杠杆收益大,风险也大,三倍杠杆的SPXL在2020年4月的时候甚至总资产低于总投入,但同时收益也可能更大,三倍杠杆的TQQQ 到2024年总资产高达68万,是总投入的接近6倍。
如果在高位开始定投呢? #
如果在高位开始定投,会怎样呢?
下图以TQQQ为例,从2021年7月1日(股价高位)开始以同样的策略定投的总投入与总资产:
尽管定投可以减少市场波动的影响,但不同的入市时点仍然会对最终的投资收益产生重大影响。 如果在市场高点开始投资,则可能需要更长的时间来实现资本增值,投资初期都是亏钱,还是很考验心态的。
实操 #
所有这些分析都是基于历史数据,未来的市场走向存在不确定性。但感觉想偷懒,不想做太多功课,这个简单策略赚钱的几率还是挺大的。
代码 #
import pandas as pd
# history stock price is stored in stock_ticker.csv
file_name = 'tqqq'
file_path = file_name + '.csv'
data = pd.read_csv(file_path)
data['Date'] = pd.to_datetime(data['Date'])
data = data.sort_values(by='Date')
total_investment = 0
total_shares = 0
interval_days = 15
investment_amount = 500
start_date = data['Date'].min()
results = pd.DataFrame(columns=['Date', 'Total Shares', 'Total Cost', 'Total Value', 'Total Return'])
# Iterate over the dataframe by interval
for current_date in pd.date_range(start=start_date, end=data['Date'].max(), freq=f'{interval_days}D'):
# Find the row with the current date or the closest previous date
if not data[data['Date'] <= current_date].empty:
row = data[data['Date'] <= current_date].iloc[-1]
investment_price = row['High'] # Get the high price for the date
# Calculate the number of shares to buy
shares_bought = investment_amount / investment_price
# Update total shares and investment
total_shares += shares_bought
total_investment += investment_amount
# Calculate current total value using the low price of the most recent date
current_total_value = total_shares * row['Low']
# Prepare new row to add to the results DataFrame
new_row = pd.DataFrame({
'Date': [row['Date']],
'Total Shares': [total_shares],
'Total Cost': [total_investment],
'Total Value': [current_total_value],
'Total Return': [current_total_value - total_investment]
})
# Append new row to results DataFrame
results = pd.concat([results, new_row], ignore_index=True)
print(results)