定投纳斯达克20年会有多少收益

发布时间:2026/11/11 9:55:09

定投纳斯达克20年会有多少收益 背景最近网上看到有人问豆包定投的问题验证1豆包的计算正确吗我拿同样的问题问了DeepSeek感觉Deepseek不太准截至到2026年4月来计算投入金额应该在60w左右。验证2再问问ChatgptChatgpt投入金额与豆包计算结果相同但持有的总市值本金收益与豆包计算的结果要差一半到底哪个是对的验证3我让Chatgpt写了一段代码以 $纳指100ETF-Invesco(QQQ)$ 为标的看看20年究竟能收益多钱标的: QQQ投资起始: 2006-01-01当前日期: 2026-05-28累计投入本金: 602,000.00累计持仓份额: 5,652.1816当前价格: 729.45当前市值: 4,122,983.94累计收益: 3,520,983.94总收益率: 584.88%年化收益率(XIRR): 19.28%当前市值为412w收益额为352w足够直观20年接近6倍的收益年化收益率约20%非常强业绩超过了80%的基金经理。代码import yfinance as yf import pandas as pd from dateutil.relativedelta import relativedelta from scipy.optimize import newton # # 参数配置 # TICKER SPY FX_TICKER CNYX # USD/CNY START_DATE 2006-01-01 INITIAL_MONTHLY_RMB 1000 YEARLY_INCREMENT_RMB 150 # # 下载数据 # def download_price_data( ticker, start_date ): df yf.download( ticker, startstart_date, auto_adjustTrue, progressFalse ) if df.empty: raise ValueError(f{ticker} 没有下载到数据) else: print(f获取到{len(df)}条数据) # 修复 MultiIndex if isinstance(df.columns, pd.MultiIndex): df.columns df.columns.get_level_values(0) df df[[Close]].copy() df.index pd.to_datetime(df.index) return df # # 生成定投日期 # def generate_invest_dates(df): start_dt df.index.min() end_dt df.index.max() current pd.Timestamp( yearstart_dt.year, monthstart_dt.month, day1 ) invest_dates [] while current end_dt: invest_dates.append(current) current relativedelta(months1) return invest_dates # # 获取实际交易日 # def get_actual_trade_date(df, invest_date): future_dates df.index[df.index invest_date] if len(future_dates) 0: return None return future_dates[0] # # XIRR # def xnpv(rate, cashflows): t0 cashflows[0][0] return sum( cf / ((1 rate) ** ((t - t0).days / 365.0)) for t, cf in cashflows ) def xirr(cashflows, guess0.1): return newton( lambda r: xnpv(r, cashflows), guess ) # # 定投模拟加入汇率 # def simulate_dca_with_fx( etf_df, fx_df, invest_dates, initial_monthly_rmb, yearly_increment_rmb ): total_shares 0.0 total_invested_rmb 0.0 records [] cashflows [] for invest_date in invest_dates: actual_date get_actual_trade_date( etf_df, invest_date ) if actual_date is None: break # # 获取 ETF 价格 # etf_price_usd float( etf_df.loc[actual_date, Close] ) # # 获取汇率 # CNYX 表示: # 1 USD ? RMB # fx_rate float( fx_df.loc[actual_date, Close] ) # # 计算定投金额 # years_passed actual_date.year - 2006 monthly_rmb ( initial_monthly_rmb years_passed * yearly_increment_rmb ) # RMB - USD monthly_usd monthly_rmb / fx_rate # 买入份额 shares_bought monthly_usd / etf_price_usd total_shares shares_bought total_invested_rmb monthly_rmb # 现金流人民币 cashflows.append( (actual_date, -monthly_rmb) ) records.append({ date: actual_date, monthly_rmb: monthly_rmb, fx_rate: fx_rate, monthly_usd: monthly_usd, etf_price_usd: etf_price_usd, shares_bought: shares_bought, total_shares: total_shares }) # # 当前资产 # latest_etf_price float( etf_df[Close].iloc[-1] ) latest_fx_rate float( fx_df[Close].iloc[-1] ) # ETF 市值美元 current_value_usd ( total_shares * latest_etf_price ) # 转回人民币 current_value_rmb ( current_value_usd * latest_fx_rate ) profit_rmb ( current_value_rmb - total_invested_rmb ) cashflows.append( ( etf_df.index[-1], current_value_rmb ) ) annual_return xirr(cashflows) result { total_invested_rmb: total_invested_rmb, total_shares: total_shares, current_value_usd: current_value_usd, current_value_rmb: current_value_rmb, profit_rmb: profit_rmb, xirr: annual_return, records: pd.DataFrame(records) } return result # # 主程序 # def main(): print(下载 ETF 数据...) etf_df download_price_data( TICKER, START_DATE ) print(下载汇率数据...) fx_df download_price_data( FX_TICKER, START_DATE ) # 对齐日期 common_index etf_df.index.intersection( fx_df.index ) etf_df etf_df.loc[common_index] fx_df fx_df.loc[common_index] invest_dates generate_invest_dates( etf_df ) result simulate_dca_with_fx( etf_dfetf_df, fx_dffx_df, invest_datesinvest_dates, initial_monthly_rmbINITIAL_MONTHLY_RMB, yearly_increment_rmbYEARLY_INCREMENT_RMB ) # # 输出 # print( * 60) print(fETF: {TICKER}) print( * 60) print( f累计投入(RMB): f{result[total_invested_rmb]:,.2f} ) print( f累计持仓份额: f{result[total_shares]:,.4f} ) print( f当前市值(USD): f{result[current_value_usd]:,.2f} ) print( f当前市值(RMB): f{result[current_value_rmb]:,.2f} ) print( f累计收益(RMB): f{result[profit_rmb]:,.2f} ) print( f总收益率: f{result[profit_rmb] / result[total_invested_rmb] * 100:.2f}% ) print( f年化收益率(XIRR): f{result[xirr] * 100:.2f}% ) print( * 60) # # 启动 # if __name__ __main__: main()
延伸阅读

更多相关文章

2026/11/11 9:01:34

龍魂·数字根计算引擎 v1.0

这是专门为龙魂系统定制的数字根计算引擎,CNSH五行计算器和流场压缩核的底层组件。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 龍魂数字根计算引擎 v1.0 DNA: #龍芯⚡️丙午乙未甲辰离为火-数字根引擎-v1.0 CONFIRM: #CONFIRM&#x1f30…

2026/11/9 3:33:00

带你从不同视角了解三大MQ

前言 首先我提一点我自己的学习心得,我通过最近学习项目,我觉得我们在学习新技术的时候,要始终记得有一个前提:技术的诞生是为了解决问题。 我们不要为了学而去学,这样其实没自己思考学的和理解的也比较慢&#xff0…

2026/11/7 20:21:54

AI写作工具在学术专著创作中的高效应用

1. AI写作工具在学术专著创作中的革命性应用当我在2022年第一次尝试用AI工具辅助完成我的第三本专业著作时,那种效率提升的震撼感至今难忘。传统专著写作往往需要耗费学者数月甚至数年的心血,而现在,合理运用AI工具可以将初稿产出时间缩短60%…

2026/11/11 9:53:44

中国建筑特种工考证怎么报名怕考不过白交培训费

中国建筑特种工考证怎么报名怕考不过白交培训费 你是不是也担心,花了几千块报了中国建筑特种工考证,结果一到考试就懵了?报名流程复杂、考试内容不熟悉、培训机构忽悠人……这些问题都可能让你白费钱还拿不到证。这篇文章,就帮你理清楚中国建筑特种工考证…

2026/11/11 9:53:44

南宁市电工证怎么查多少钱才能顺利复审延期

南宁市电工证怎么查多少钱才能顺利复审延期 证书过期了不知道怎么复审延期,南宁电工朋友你不是一个人,我身边就有好几个同行因为没及时查证,结果工作受阻、项目停滞,甚至被单位罚款。别急,今天就带你一步步搞清楚【南宁市电工证怎么查】,顺便解答【多少…

2026/11/11 9:48:43

厦门高压电工证价格多少钱?上岗必备证书怎么选才不吃亏

厦门高压电工证价格多少钱?上岗必备证书怎么选才不吃亏 证书过期了不知道怎么复审延期,工作随时可能被叫停,这是很多电工朋友的真实写照。你是不是也遇到过这种情况?手头的高压电工证眼看就要到期,却不知道如何操作,甚至担心一旦过期就等于没了“上岗必…

2026/11/10 8:12:38

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/11 0:02:26

考低压电工证通过率考试真题与备考技巧

低压电工证通过率高不高?学历不高也能考,值不值得考? 你是不是总听说电工证能帮你找高薪工作,但又担心自己学历不够,考不上?其实,低压电工证考试门槛并没有你想象中那么高,关键是方法对不对。这篇文章就告诉你, 考低压电工证通过率到底有多高 ,…

2026/11/11 0:02:26

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名 你是不是也和我一样,刚毕业就听说低压电工证学时必须达标才能上岗?可一打听,发现报名机构五花八门,价格参差不齐, 不知道去哪报名怕被中介坑…

2026/11/10 20:08:15

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑