@@ -93,13 +93,11 @@ while i<10: #控制行,1到9
9393
9494### 复利的力量
9595
96- 小明从2026年1月1日每日定投100元,年化收益率为10%,考虑到交易日,问小明在第几年可以实现100万的目标?
96+ 小明从2026年1月1日每日定投100元,年化收益率为10%,考虑到交易日(仅排除周末) ,问小明在第几年可以实现100万的目标?
9797
9898#### 题解
9999
100100``` python showLineNumbers
101- # 小明从2026年1月1日每日定投300元,年化收益率为10%,考虑到交易日(周一到周五),问小明在第几年可以实现100万的目标?
102-
103101from datetime import datetime, timedelta
104102import calendar
105103
@@ -112,19 +110,21 @@ target_amount = 1000000 # 目标金额 100万元
112110start_date = datetime(2026 , 1 , 1 )
113111current_date = start_date
114112
115- # 计算每日收益率(假设每年约250个交易日)
116- # 先估算,后面会根据实际交易日数调整
117- estimated_trading_days = 250
118- daily_return_rate = (1 + annual_return_rate) ** (1 / estimated_trading_days) - 1
119113
120- print (" =" * 60 )
121- print (" 定投计算(实际交易日:周一到周五)" )
122- print (" =" * 60 )
123- print (f " 起始日期: { start_date.strftime(' %Y年%m月%d 日' )} " )
124- print (f " 每日收益率: { daily_return_rate * 100 :.6f } % " )
125- print (f " 每日定投: { daily_investment} 元 " )
126- print (f " 目标金额: { target_amount:, } 元 " )
127- print (" -" * 60 )
114+ def count_trading_days (year ):
115+ """ 统计某一年内的交易日数(仅排除周末)"""
116+ days = 0
117+ date_cursor = datetime(year, 1 , 1 )
118+ end_date = datetime(year + 1 , 1 , 1 )
119+ while date_cursor < end_date:
120+ if date_cursor.weekday() < 5 :
121+ days += 1
122+ date_cursor += timedelta(days = 1 )
123+ return days
124+
125+
126+ trading_days_in_year = count_trading_days(start_date.year)
127+ daily_return_rate = (1 + annual_return_rate) ** (1 / trading_days_in_year) - 1
128128
129129# 模拟每日定投
130130total_amount = 0 # 当前总金额
@@ -146,6 +146,8 @@ while total_amount < target_amount:
146146 trading_days_this_year = 0
147147 last_year_end_amount = total_amount
148148 last_year_trading_days = 0
149+ trading_days_in_year = count_trading_days(current_year)
150+ daily_return_rate = (1 + annual_return_rate) ** (1 / trading_days_in_year) - 1
149151
150152 if weekday < 5 : # 周一到周五(0-4)是交易日
151153 trading_day_count += 1
0 commit comments