计算脚本

TRADING_DAYS_PER_YEAR = 252
YEARS_TO_CALCULATE = [5, 10, 15, 20, 25, 30]

ASSET_ANNUAL_RETURN = {
    "纳斯达克100": 0.12,
    "标普500": 0.10,
    "黄金": 0.06,
    "债券": 0.035,
}


def calculate_expected_value(daily_amount, annual_return, years):
    periods = TRADING_DAYS_PER_YEAR * years
    principal = daily_amount * periods
    daily_return = (1 + annual_return) ** (1 / TRADING_DAYS_PER_YEAR) - 1

    if abs(daily_return) < 1e-12:
        total_amount = principal
    else:
        total_amount = daily_amount * (((1 + daily_return) ** periods - 1) / daily_return)

    profit = total_amount - principal
    return principal, profit, total_amount


def calculate_plan(total_amount, output_file="定投结果.txt"):
    output_lines = []

    def emit(line=""):
        output_lines.append(line)
        print(line)

    plans = {
        "稳健型": {
            "纳斯达克100": 0.20,
            "标普500": 0.30,
            "黄金": 0.25,
            "债券": 0.25
        },
        "均衡型(推荐)": {
            "纳斯达克100": 0.30,
            "标普500": 0.30,
            "黄金": 0.20,
            "债券": 0.20
        },
        "进取型": {
            "纳斯达克100": 0.40,
            "标普500": 0.30,
            "黄金": 0.15,
            "债券": 0.15
        }
    }

    for plan_name, assets in plans.items():
        emit(f"\n{plan_name}】")
        total = 0
        plan_annual_return = 0
        for asset, ratio in assets.items():
            amount = round(total_amount * ratio)
            total += amount
            plan_annual_return += ASSET_ANNUAL_RETURN.get(asset, 0) * ratio
            emit(f"{asset}{amount} 元")
        emit(f"合计:{total} 元")

        emit(f"组合预期年化收益率:{plan_annual_return * 100:.2f}%")
        emit("年限 | 本金(万元) | 收益(万元) | 总金额(万元)")
        emit("-" * 49)

        for years in YEARS_TO_CALCULATE:
            principal, profit, total_future = calculate_expected_value(total_amount, plan_annual_return, years)
            principal_wan = principal / 10000
            profit_wan = profit / 10000
            total_future_wan = total_future / 10000
            emit(
                f"{years:>2}年 | {principal_wan:>10,.2f} | {profit_wan:>10,.2f} | {total_future_wan:>12,.2f}"
            )

    with open(output_file, "w", encoding="utf-8") as file:
        file.write("\n".join(output_lines) + "\n")

    print(f"\n结果已输出到:{output_file}")


if __name__ == "__main__":
    total_amount = float(input("请输入每个交易日定投总金额(元):"))
    calculate_plan(total_amount)

结果

【稳健型】
纳斯达克100:60 元
标普500:90 元
黄金:75 元
债券:75 元
合计:300 元
组合预期年化收益率:7.78%
年限 | 本金(万元) | 收益(万元) | 总金额(万元)
-------------------------------------------------
 5年 |      37.80 |       8.04 |        45.84
10年 |      75.60 |      36.90 |       112.50
15年 |     113.40 |      96.02 |       209.42
20年 |     151.20 |     199.16 |       350.36
25年 |     189.00 |     366.30 |       555.30
30年 |     226.80 |     626.49 |       853.29

【均衡型(推荐)】
纳斯达克100:90 元
标普500:90 元
黄金:60 元
债券:60 元
合计:300 元
组合预期年化收益率:8.50%
年限 | 本金(万元) | 收益(万元) | 总金额(万元)
-------------------------------------------------
 5年 |      37.80 |       8.87 |        46.67
10年 |      75.60 |      41.24 |       116.84
15年 |     113.40 |     108.95 |       222.35
20年 |     151.20 |     229.80 |       381.00
25年 |     189.00 |     430.56 |       619.56
30年 |     226.80 |     751.47 |       978.27

【进取型】
纳斯达克100:120 元
标普500:90 元
黄金:45 元
债券:45 元
合计:300 元
组合预期年化收益率:9.22%
年限 | 本金(万元) | 收益(万元) | 总金额(万元)
-------------------------------------------------
 5年 |      37.80 |       9.70 |        47.50
10年 |      75.60 |      45.75 |       121.35
15年 |     113.40 |     122.76 |       236.16
20年 |     151.20 |     263.43 |       414.63
25年 |     189.00 |     503.08 |       692.08
30年 |     226.80 |     896.59 |     1,123.39