ISA · 나스닥100 · S&P500 · 실측 재현 페이지

ISA에 S&P500 살까,
나스닥100 살까

매달 100만원씩 산 ISA 계좌를 세금까지 떼고 견줬습니다. 첫 사례(2021-11 시작 5년)는 국내 상장 ETF 실제 수정종가(TIGER 미국S&P500 360750 · TIGER 미국나스닥100 133690)이고, 1999년부터의 통계는 미국 ETF(SPY·QQQ 배당 포함) × 원/달러 환율입니다. 매달 첫 거래일 종가에 사고, 사고팔 때 편도 0.1%를 뺐습니다.

9,690만원2021-11 시작 5년 · 나스닥100 ETF · 넣은 돈 6,000만원 · 세금 뗀 돈
8,887만원같은 5년 · S&P500 ETF
231/273번1999년부터 5년 계좌에서 나스닥100 쪽이 더 남은 횟수

전체 결과 (세금 뗀 금액)

기간나스닥100 쪽이 더 남음가운데 S&P500가운데 나스닥100가운데 반반넣은 돈보다 줄어듦(S·N·반반)
5년(6,000만원)231/273번8,095만원8,835만원8,506만원25 · 26 · 29번
3년(3,600만원)237/297번4,227만원4,451만원4,342만원38 · 35 · 35번

세금 때문에 더 많이 남은 쪽이 뒤바뀐 경우 0번. 같은 3년을 예금에 두면 넣은 돈보다 줄어든 경우 0번(가운데 3,777만원).

나스닥100이 크게 진 때

시작넣은 돈S&P500나스닥100반반
1999-08 · 3년(ISA 출시 전, 있었다고 치고)3,600만원2,483만원1,535만원2,009만원
2019-12 · 3년3,600만원4,315만원3,960만원4,137만원

5년 진 42번 중 36번이 1999~2002 시작입니다. 3년 진 60번은 1999~2000 · 2003~04 · 2010 · 2019~20 시작에 몰려 있습니다.

그대로 따라 하는 법

한계·주의 — 먼저 읽어 주세요

받아가기

돌리는 법: zip 을 풀고 python run_isanq.py

그대로 돌린 출력

구간 1999-03 2026-11 333 달
36 {"창": 297, "나스닥승": 237, "승률": 0.798, "가운데": {"S": 4227, "N": 4451, "H": 4342}, "세금가운데": {"S": 47, "N": 72}, "세금으로뒤집힌창": 0, "최악": {"S": {"금액": 2483, "시작": "1999-08"}, "N": {"금액": 1535, "시작": "1999-08"}, "H": {"금액": 2009, "시작": "1999-08"}}, "원금미달": {"S": 38, "N": 35, "H": 35}, "닷컴밖패배": 38, "닷컴밖창": 251}
 최근 3년 더 오른 쪽 고르기: {"창": 261, "나스닥이같거나더": 240, "나스닥이더많음": 39, "최근승자가더많음": 21, "가운데_최근승자": 4506, "가운데_나스닥": 4523}
60 {"창": 273, "나스닥승": 231, "승률": 0.8462, "가운데": {"S": 8095, "N": 8835, "H": 8506}, "세금가운데": {"S": 208, "N": 290}, "세금으로뒤집힌창": 0, "최악": {"S": {"금액": 5414, "시작": "2004-03"}, "N": {"금액": 4873, "시작": "2000-05"}, "H": {"금액": 5180, "시작": "2000-05"}}, "원금미달": {"S": 25, "N": 26, "H": 29}, "닷컴밖패배": 6, "닷컴밖창": 227}
 최근 3년 더 오른 쪽 고르기: {"창": 237, "나스닥이같거나더": 227, "나스닥이더많음": 47, "최근승자가더많음": 10, "가운데_최근승자": 9024, "가운데_나스닥": 9058}
사례 {"사례60_최근": {"start": "2021-11", "end": "2026-11", "S": 8835, "N": 9472, "H": 9154, "S_tax": 290, "N_tax": 360, "flip": false, "paid": 6000, "dep": 6465}, "사례60_꼭대기": {"start": "2021-11", "end": "2026-11", "S": 8835, "N": 9472, "H": 9154, "S_tax": 290, "N_tax": 360, "flip": false, "paid": 6000, "dep": 6465}, "사례36_닷컴": {"start": "1999-08", "end": "2002-08", "S": 2483, "N": 1535, "H": 2009, "S_tax": 0, "N_tax": 0, "flip": false, "paid": 3600, "dep": 3911}, "사례36_코로나전": {"start": "2019-12", "end": "2022-12", "S": 4315, "N": 3960, "H": 4137, "S_tax": 57, "N_tax": 18, "flip": false, "paid": 3600, "dep": 3693}}
예금 3년: {'창': 297, '가운데': 3777, '원금미달': 0}
3년 패배 시작 달: ['1999-03', '1999-04', '1999-05', '1999-06', '1999-07', '1999-08', '1999-09', '1999-10', '1999-11', '1999-12', '2000-01', '2000-02', '2000-03', '2000-04', '2000-05', '2000-06', '2000-07', '2000-08', '2001-09', '2002-04', '2002-05', '2002-07', '2003-03', '2003-04', '2003-05', '2003-06', '2003-07', '2003-08', '2003-09', '2003-10', '2003-11', '2003-12', '2004-01', '2004-02', '2004-03', '2004-04', '2004-05', '2004-06', '2004-07', '2005-03', '2005-12', '2010-02', '2010-03', '2010-04', '2010-05', '2010-06', '2010-07', '2010-08', '2019-06', '2019-07', '2019-08', '2019-09', '2019-10', '2019-11', '2019-12', '2020-01', '2020-02', '2020-03', '2020-04', '2020-05']
5년 패배 시작 달: ['1999-03', '1999-04', '1999-05', '1999-06', '1999-07', '1999-08', '1999-09', '1999-10', '1999-11', '1999-12', '2000-01', '2000-02', '2000-03', '2000-04', '2000-05', '2000-06', '2000-07', '2000-08', '2000-09', '2000-10', '2000-11', '2001-05', '2001-06', '2001-07', '2001-08', '2001-09', '2001-10', '2001-11', '2001-12', '2002-01', '2002-02', '2002-03', '2002-04', '2002-05', '2002-06', '2002-07', '2003-02', '2003-03', '2003-10', '2003-12', '2004-01', '2018-01']
최대낙폭(원화·월) {'S': -40.9, 'N': -77.9} 월변동폭 {'S': 4.0, 'N': 6.49}
전체 배수 {'S': 10.7, 'N': 17.1} 반반이 사이 {'3년': 297, '5년': 273}
국내 상장 실물 같은 5년: {'S': 8887, 'N': 9690, '달수': 60}

── 계좌별 결과 — 5년 (시작 달 · S&P500 · 나스닥100 · 반반, 세금 뗀 만원)
1999-03 6092 5287 5690
1999-04 5801 5025 5413
1999-05 5888 5049 5469
1999-06 5870 5233 5552
1999-07 5872 5304 5588
1999-08 5848 5093 5471
1999-09 5794 4963 5378
1999-10 5954 5275 5614
1999-11 5801 5314 5558
1999-12 5723 5396 5559
2000-01 5781 5405 5593
2000-02 5673 5139 5406
2000-03 5668 5097 5383
2000-04 5573 5010 5291
2000-05 5487 4873 5180
2000-06 5756 5447 5601
2000-07 5883 5394 5639
2000-08 6055 5844 5949
2000-09 6050 5828 5939
2000-10 6175 6063 6119
2000-11 6077 6003 6040
2000-12 6355 6487 6421
2001-01 6207 6250 6228
2001-02 6050 6160 6105
2001-03 6173 6192 6182
2001-04 6224 6269 6246
2001-05 6091 6036 6064
2001-06 6060 5850 5955
2001-07 6047 5765 5906
2001-08 6109 5492 5801
2001-09 6343 5951 6155
2001-10 6369 6051 6217
2001-11 6478 6265 6372
2001-12 6554 6432 6493
2002-01 6623 6384 6504
2002-02 6840 6577 6708
2002-03 6692 6501 6597
2002-04 6763 6551 6657
2002-05 7005 6841 6923
2002-06 7213 7023 7118
2002-07 7076 7037 7056
2002-08 6845 6999 6922
2002-09 7015 7271 7143
2002-10 7058 7337 7197
2002-11 6829 7465 7147
2002-12 6772 7136 6954
2003-01 6747 7135 6941
2003-02 6538 6513 6525
2003-03 6260 6097 6182
2003-04 6578 6644 6611
2003-05 6900 7179 7039
2003-06 6878 7350 7114
2003-07 6565 6999 6782
2003-08 6247 6632 6439
2003-09 6976 7410 7193
2003-10 6698 6642 6670
2003-11 5942 6003 5972
2003-12 5723 5619 5671
2004-01 5982 5946 5964
2004-02 5602 5946 5774
2004-03 5414 6088 5751
2004-04 5507 6184 5846
2004-05 5537 6376 5966
2004-06 5770 6494 6148
2004-07 5765 6611 6210
2004-08 6059 6976 6524
2004-09 6194 6994 6595
2004-10 6020 6872 6455
2004-11 6136 6916 6529
2004-12 6370 7184 6777
2005-01 6468 7501 6985
2005-02 6316 7098 6707
2005-03 6387 7315 6851
2005-04 6559 7525 7042
2005-05 6624 7682 7153
2005-06 6428 7513 6970
2005-07 6231 7163 6697
2005-08 6491 7433 6962
2005-09 6309 7186 6747
2005-10 6378 7466 6922
2005-11 6493 7792 7142
2005-12 6773 8092 7432
2006-01 6959 8197 7578
2006-02 7058 8312 7685
2006-03 7097 8297 7697
2006-04 6992 8083 7538
2006-05 6987 8078 7533
2006-06 6819 7855 7337
2006-07 6854 7838 7346
2006-08 6511 7659 7085
2006-09 6183 7269 6727
2006-10 6261 7506 6884
2006-11 6560 7788 7174
2006-12 6712 7801 7256
2007-01 6952 7896 7424
2007-02 7077 8241 7659
2007-03 7251 8586 7918
2007-04 7512 9002 8257
2007-05 7445 8768 8106
2007-06 7106 8261 7683
2007-07 7321 8449 7885
2007-08 7253 8301 7777
2007-09 7434 8696 8065
2007-10 7478 8551 8014
2007-11 7248 8042 7645
2007-12 7115 7922 7518
2008-01 7230 7947 7589
2008-02 7641 8163 7902
2008-03 7576 7987 7781
2008-04 7946 8255 8101
2008-05 7917 8295 8106
2008-06 8347 8754 8550
2008-07 8260 8589 8424
2008-08 8565 8961 8763
2008-09 8044 8620 8332
2008-10 8096 8790 8443
2008-11 8270 8929 8600
2008-12 8372 9060 8716
2009-01 8387 9070 8729
2009-02 8189 8924 8557
2009-03 8475 9246 8860
2009-04 8473 9002 8738
2009-05 8201 8540 8371
2009-06 8235 8684 8460
2009-07 8254 8816 8535
2009-08 8191 8893 8542
2009-09 8293 9102 8698
2009-10 8341 9130 8736
2009-11 8664 9528 9096
2009-12 8968 9930 9449
2010-01 8879 9634 9256
2010-02 8625 9405 9015
2010-03 8951 9928 9440
2010-04 8627 9429 9028
2010-05 8609 9500 9054
2010-06 8823 9790 9306
2010-07 8675 9547 9111
2010-08 8989 10079 9534
2010-09 8255 9140 8698
2010-10 8225 9136 8680
2010-11 8580 9721 9151
2010-12 8562 9711 9137
2011-01 8439 9493 8966
2011-02 8151 9058 8604
2011-03 8421 9255 8838
2011-04 8187 8947 8567
2011-05 8095 8511 8303
2011-06 8457 9062 8759
2011-07 8100 8485 8292
2011-08 8000 8648 8324
2011-09 7999 8675 8337
2011-10 7805 8605 8205
2011-11 7792 8590 8191
2011-12 8153 8605 8379
2012-01 8562 9075 8819
2012-02 8202 8982 8592
2012-03 8424 9163 8793
2012-04 8072 8956 8514
2012-05 8218 9299 8759
2012-06 8191 9373 8782
2012-07 8292 9139 8715
2012-08 8174 9264 8719
2012-09 8088 9272 8680
2012-10 8359 9360 8860
2012-11 8180 9343 8761
2012-12 8098 9125 8612
2013-01 8001 9043 8522
2013-02 8328 9487 8907
2013-03 7942 9261 8602
2013-04 7445 8480 7963
2013-05 7682 8850 8266
2013-06 7833 9216 8525
2013-07 8072 9496 8784
2013-08 8234 9569 8902
2013-09 8397 9870 9133
2013-10 8360 9714 9037
2013-11 7883 8997 8440
2013-12 7857 8773 8315
2014-01 7127 7926 7527
2014-02 7581 8417 7999
2014-03 7831 8692 8261
2014-04 7973 9000 8486
2014-05 8242 9413 8827
2014-06 7831 8542 8186
2014-07 8197 9161 8679
2014-08 8279 9283 8781
2014-09 8250 9132 8691
2014-10 8184 9010 8597
2014-11 8215 9162 8689
2014-12 8392 9356 8874
2015-01 8518 9637 9077
2015-02 8674 10067 9370
2015-03 8196 9654 8925
2015-04 6830 8396 7613
2015-05 7669 9540 8604
2015-06 8181 10317 9249
2015-07 8125 10685 9405
2015-08 8444 11223 9834
2015-09 8858 12156 10507
2015-10 8305 11117 9711
2015-11 7887 10260 9074
2015-12 8411 11053 9732
2016-01 8245 10878 9562
2016-02 8571 11496 10034
2016-03 8777 11376 10077
2016-04 9043 11374 10209
2016-05 9243 11487 10365
2016-06 9041 11024 10032
2016-07 9406 11809 10608
2016-08 9568 12069 10818
2016-09 9780 12399 11089
2016-10 9569 11862 10715
2016-11 9896 12386 11141
2016-12 9649 12241 10945
2017-01 10136 12495 11316
2017-02 9668 11387 10528
2017-03 9064 10455 9760
2017-04 9521 10972 10247
2017-05 8991 9934 9462
2017-06 8672 9293 8983
2017-07 8361 8829 8595
2017-08 8915 9700 9308
2017-09 8834 9429 9131
2017-10 8602 9024 8813
2017-11 8792 8835 8814
2017-12 8468 8543 8506
2018-01 7747 7508 7628
2018-02 7990 8109 8050
2018-03 8105 8253 8179
2018-04 8360 8911 8636
2018-05 8476 8959 8718
2018-06 8385 9456 8920
2018-07 8638 9686 9162
2018-08 8615 9671 9143
2018-09 8641 9646 9144
2018-10 8349 9356 8852
2018-11 8211 9157 8684
2018-12 8456 9443 8950
2019-01 8588 9555 9072
2019-02 8934 10004 9469
2019-03 9229 10355 9792
2019-04 9379 10262 9821
2019-05 9131 9837 9484
2019-06 9412 10282 9847
2019-07 9647 10753 10200
2019-08 9392 10002 9697
2019-09 9235 9682 9459
2019-10 9297 9794 9546
2019-11 9561 10102 9832
2019-12 10138 10664 10401
2020-01 10171 10855 10513
2020-02 10176 10743 10460
2020-03 9797 10134 9965
2020-04 9422 9607 9515
2020-05 9015 9373 9194
2020-06 9014 9561 9287
2020-07 9151 9705 9428
2020-08 9268 9882 9575
2020-09 9441 9987 9714
2020-10 9783 10553 10168
2020-11 10029 11078 10554
2020-12 10065 10912 10489
2021-01 9836 10538 10187
2021-02 9898 10643 10271
2021-03 9562 10133 9847
2021-04 9476 10091 9784
2021-05 10011 11152 10582
2021-06 10598 12321 11460
2021-07 10558 12158 11358
2021-08 9805 10745 10275
2021-09 9363 10307 9835
2021-10 9263 10617 9940
2021-11 8835 9472 9154

── 계좌별 결과 — 3년 (시작 달 · S&P500 · 나스닥100 · 반반 · 예금, 세금 뗀 만원)
1999-03 3482 2468 2975 3932
1999-04 3525 2570 3047 3927
1999-05 3275 2173 2724 3923
1999-06 2984 1928 2456 3918
1999-07 2732 1649 2190 3914
1999-08 2483 1535 2009 3911
1999-09 2538 1613 2076 3907
1999-10 2562 1662 2112 3903
1999-11 2726 1979 2353 3900
1999-12 2859 2251 2555 3897
2000-01 2737 2045 2391 3895
2000-02 2608 2031 2319 3891
2000-03 2577 2117 2347 3888
2000-04 2857 2412 2635 3886
2000-05 2967 2598 2782 3883
2000-06 3147 2825 2986 3880
2000-07 3193 2937 3065 3876
2000-08 3199 3094 3147 3873
2000-09 3344 3378 3361 3869
2000-10 3284 3295 3289 3865
2000-11 3536 3726 3631 3862
2000-12 3651 3836 3746 3859
2001-01 3793 3908 3851 3858
2001-02 3822 3927 3874 3856
2001-03 3930 4002 3966 3854
2001-04 3761 3826 3795 3852
2001-05 3820 3834 3827 3850
2001-06 3817 3968 3893 3848
2001-07 3828 4021 3924 3846
2001-08 3820 3876 3848 3844
2001-09 3792 3782 3787 3842
2001-10 3886 3978 3932 3839
2001-11 3789 3966 3878 3837
2001-12 3733 3998 3869 3834
2002-01 3769 3985 3878 3831
2002-02 3700 3785 3743 3829
2002-03 3699 3732 3715 3827
2002-04 3641 3638 3639 3825
2002-05 3587 3514 3551 3823
2002-06 3761 3881 3823 3821
2002-07 3828 3800 3814 3819
2002-08 3907 4015 3961 3817
2002-09 3871 3923 3897 3816
2002-10 3909 3980 3944 3815
2002-11 3820 3863 3841 3814
2002-12 3959 4096 4028 3814
2003-01 3842 3898 3870 3815
2003-02 3717 3787 3752 3815
2003-03 3750 3735 3743 3816
2003-04 3742 3725 3734 3817
2003-05 3632 3545 3589 3819
2003-06 3586 3398 3492 3820
2003-07 3557 3321 3439 3822
2003-08 3574 3140 3357 3824
2003-09 3700 3386 3543 3826
2003-10 3703 3438 3571 3828
2003-11 3761 3564 3663 3830
2003-12 3801 3668 3735 3832
2004-01 3834 3632 3735 3834
2004-02 3951 3747 3852 3837
2004-03 3860 3693 3780 3840
2004-04 3897 3723 3814 3843
2004-05 4025 3886 3955 3845
2004-06 4137 3986 4062 3848
2004-07 4056 4002 4029 3851
2004-08 3928 4002 3965 3853
2004-09 4037 4183 4110 3857
2004-10 4070 4241 4155 3860
2004-11 3950 4341 4145 3863
2004-12 3923 4163 4043 3866
2005-01 3910 4171 4040 3870
2005-02 3794 3824 3809 3874
2005-03 3626 3579 3603 3877
2005-04 3840 3933 3886 3879
2005-05 4027 4250 4138 3881
2005-06 4010 4339 4174 3884
2005-07 3824 4128 3976 3886
2005-08 3622 3907 3770 3888
2005-09 4067 4364 4215 3891
2005-10 3902 3905 3904 3894
2005-11 3446 3515 3480 3897
2005-12 3320 3286 3303 3899
2006-01 3475 3484 3479 3898
2006-02 3253 3482 3367 3893
2006-03 3142 3560 3351 3886
2006-04 3196 3611 3404 3879
2006-05 3216 3732 3474 3871
2006-06 3350 3801 3575 3864
2006-07 3345 3854 3603 3857
2006-08 3512 4047 3793 3850
2006-09 3586 4032 3820 3844
2006-10 3484 3948 3724 3838
2006-11 3550 3957 3762 3833
2006-12 3699 4097 3903 3828
2007-01 3765 4265 4017 3823
2007-02 3670 4024 3853 3818
2007-03 3724 4141 3936 3814
2007-04 3837 4252 4045 3810
2007-05 3881 4335 4108 3805
2007-06 3776 4242 4010 3800
2007-07 3660 4045 3860 3794
2007-08 3838 4199 4018 3789
2007-09 3728 4056 3896 3785
2007-10 3783 4217 4001 3781
2007-11 3860 4402 4131 3777
2007-12 4033 4576 4304 3774
2008-01 4145 4628 4386 3771
2008-02 4206 4689 4447 3769
2008-03 4229 4666 4447 3768
2008-04 4161 4523 4342 3767
2008-05 4159 4510 4334 3767
2008-06 4066 4391 4229 3767
2008-07 4097 4394 4246 3768
2008-08 3897 4303 4100 3769
2008-09 3693 4092 3898 3770
2008-10 3757 4242 4001 3772
2008-11 3949 4401 4175 3773
2008-12 4033 4390 4211 3775
2009-01 4162 4412 4287 3777
2009-02 4225 4579 4402 3779
2009-03 4306 4738 4522 3781
2009-04 4431 4936 4684 3783
2009-05 4363 4778 4571 3785
2009-06 4136 4478 4307 3786
2009-07 4235 4553 4394 3788
2009-08 4170 4451 4311 3789
2009-09 4256 4645 4450 3789
2009-10 4262 4546 4404 3789
2009-11 4109 4255 4182 3789
2009-12 4017 4170 4093 3788
2010-01 4070 4171 4120 3787
2010-02 4288 4274 4281 3786
2010-03 4237 4174 4205 3785
2010-04 4432 4313 4373 3784
2010-05 4403 4330 4366 3783
2010-06 4623 4557 4590 3782
2010-07 4553 4455 4504 3780
2010-08 4694 4624 4659 3779
2010-09 4396 4440 4418 3777
2010-10 4398 4501 4449 3776
2010-11 4468 4560 4514 3774
2010-12 4511 4632 4571 3773
2011-01 4516 4655 4585 3771
2011-02 4407 4595 4501 3769
2011-03 4565 4777 4671 3768
2011-04 4572 4667 4620 3766
2011-05 4431 4441 4436 3765
2011-06 4456 4525 4490 3763
2011-07 4465 4596 4530 3762
2011-08 4430 4636 4533 3761
2011-09 4472 4734 4603 3759
2011-10 4474 4729 4602 3757
2011-11 4625 4920 4772 3755
2011-12 4767 5116 4942 3752
2012-01 4701 4951 4826 3750
2012-02 4553 4819 4686 3748
2012-03 4714 5082 4898 3746
2012-04 4538 4830 4684 3743
2012-05 4524 4872 4698 3740
2012-06 4628 5019 4824 3738
2012-07 4539 4888 4713 3735
2012-08 4697 5158 4928 3732
2012-09 4307 4676 4492 3729
2012-10 4290 4682 4486 3726
2012-11 4471 4979 4725 3724
2012-12 4451 4956 4703 3721
2013-01 4369 4821 4595 3719
2013-02 4205 4578 4392 3717
2013-03 4333 4657 4495 3715
2013-04 4201 4480 4341 3713
2013-05 4151 4252 4202 3711
2013-06 4331 4512 4421 3709
2013-07 4155 4227 4191 3707
2013-08 4108 4304 4206 3704
2013-09 4122 4323 4223 3702
2013-10 4035 4294 4164 3700
2013-11 4041 4292 4166 3698
2013-12 4236 4302 4269 3696
2014-01 4455 4539 4497 3695
2014-02 4274 4496 4385 3693
2014-03 4388 4583 4485 3692
2014-04 4210 4478 4344 3691
2014-05 4287 4638 4462 3690
2014-06 4271 4656 4464 3688
2014-07 4327 4534 4431 3687
2014-08 4268 4588 4428 3686
2014-09 4227 4589 4408 3685
2014-10 4369 4628 4498 3684
2014-11 4279 4617 4448 3684
2014-12 4249 4524 4386 3683
2015-01 4218 4506 4362 3683
2015-02 4407 4743 4575 3684
2015-03 4213 4643 4428 3684
2015-04 3968 4279 4123 3684
2015-05 4102 4478 4290 3685
2015-06 4191 4676 4433 3685
2015-07 4324 4829 4577 3685
2015-08 4415 4876 4646 3686
2015-09 4508 5042 4775 3686
2015-10 4488 4966 4727 3687
2015-11 4235 4606 4420 3687
2015-12 4228 4506 4367 3688
2016-01 3845 4088 3966 3689
2016-02 4094 4351 4223 3690
2016-03 4231 4497 4364 3691
2016-04 4310 4657 4483 3692
2016-05 4451 4866 4659 3693
2016-06 4230 4416 4323 3694
2016-07 4431 4739 4585 3694
2016-08 4473 4792 4632 3695
2016-09 4453 4707 4580 3694
2016-10 4412 4635 4524 3694
2016-11 4421 4702 4561 3694
2016-12 4502 4784 4643 3694
2017-01 4559 4903 4731 3693
2017-02 4639 5107 4873 3693
2017-03 4381 4888 4634 3692
2017-04 3641 4249 3953 3691
2017-05 4103 4814 4458 3690
2017-06 4373 5194 4784 3688
2017-07 4339 5364 4852 3686
2017-08 4506 5613 5060 3683
2017-09 4715 6048 5381 3680
2017-10 4420 5522 4971 3678
2017-11 4204 5093 4648 3675
2017-12 4479 5466 4972 3673
2018-01 4387 5358 4872 3670
2018-02 4554 5636 5095 3668
2018-03 4666 5570 5118 3666
2018-04 4798 5555 5176 3664
2018-05 4886 5580 5233 3662
2018-06 4769 5346 5057 3660
2018-07 4946 5709 5328 3658
2018-08 5025 5833 5429 3656
2018-09 5133 5989 5561 3655
2018-10 5024 5736 5380 3654
2018-11 5197 5989 5593 3653
2018-12 5061 5904 5482 3653
2019-01 5299 6002 5650 3654
2019-02 5016 5422 5219 3654
2019-03 4685 4953 4819 3655
2019-04 4901 5167 5034 3657
2019-05 4620 4670 4645 3658
2019-06 4453 4366 4410 3660
2019-07 4285 4131 4208 3663
2019-08 4560 4525 4542 3667
2019-09 4515 4391 4453 3672
2019-10 4394 4197 4296 3677
2019-11 4483 4099 4291 3685
2019-12 4315 3960 4137 3693
2020-01 3953 3458 3714 3702
2020-02 4083 3773 3929 3709
2020-03 4145 3849 3997 3715
2020-04 4273 4153 4213 3722
2020-05 4305 4160 4233 3728
2020-06 4249 4388 4318 3734
2020-07 4373 4499 4436 3740
2020-08 4353 4500 4427 3746
2020-09 4361 4503 4432 3752
2020-10 4217 4393 4305 3757
2020-11 4141 4314 4228 3763
2020-12 4254 4457 4356 3768
2021-01 4319 4534 4427 3773
2021-02 4497 4781 4639 3778
2021-03 4647 4983 4815 3782
2021-04 4724 4969 4847 3785
2021-05 4606 4792 4699 3788
2021-06 4751 5030 4890 3791
2021-07 4875 5289 5082 3794
2021-08 4754 4954 4854 3796
2021-09 4685 4833 4759 3798
2021-10 4731 4931 4831 3800
2021-11 4875 5125 5000 3801
2021-12 5183 5455 5319 3802
2022-01 5208 5594 5401 3803
2022-02 5225 5579 5402 3802
2022-03 5038 5287 5163 3801
2022-04 4852 5032 4942 3800
2022-05 4681 4957 4819 3798
2022-06 4696 5070 4883 3796
2022-07 4768 5137 4953 3793
2022-08 4825 5205 5015 3790
2022-09 4915 5247 5081 3787
2022-10 5085 5510 5298 3784
2022-11 5206 5749 5477 3781
2022-12 5229 5635 5432 3779
2023-01 5101 5399 5250 3777
2023-02 5107 5378 5242 3775
2023-03 4912 5063 4987 3774
2023-04 4845 4989 4917 3772
2023-05 5093 5463 5278 3771
2023-06 5361 5975 5668 3770
2023-07 5313 5858 5585 3769
2023-08 4913 5149 5031 3768
2023-09 4671 4909 4790 3767
2023-10 4598 5018 4808 3767
2023-11 4363 4451 4407 3766

끝.

재현 코드 전문

# -*- coding: utf-8 -*-
"""ISA 매달 100만원 — S&P500 ETF 대 나스닥100 ETF, 세금 뗀 끝 금액 (표준 라이브러리만)

자료(이 폴더 data/):
  SPY_1d.csv, QQQ_1d.csv  야후 close(배당 보정) · DEXKOUS.csv 미 연준 원/달러 · KR3M.csv 한국 3개월 금리
판: 매달 첫 거래일 종가에 100만원어치 삼(편도 0.1%). 만기 달 첫 거래일 종가에 평가(편도 0.1%).
세금: 일반형 ISA — 순이익 200만원 비과세, 넘는 몫 9.9%.
ASOF: 2026-11 첫 거래일까지. 실행: python run_isanq.py
"""
import csv
import json
import os
import statistics as st
import sys

try:
    sys.stdout.reconfigure(encoding="utf-8", errors="replace")
except Exception:
    pass
HERE = os.path.dirname(os.path.abspath(__file__))
ASOF = "2026-11"
COST = 0.001


def rd(name, datecol=0, valcol=1):
    out = []
    with open(os.path.join(HERE, "data", name), encoding="utf-8-sig", newline="") as f:
        r = csv.reader(f)
        next(r)
        for row in r:
            try:
                v = float(row[valcol])
            except (ValueError, IndexError):
                continue
            out.append((row[datecol][:10], v))
    out.sort()
    return out


def first_of_month(px, fx):
    """달 첫 거래일 원화값 — 환율은 그날까지의 마지막 값."""
    res, j, last, seen = {}, 0, None, set()
    for d, c in px:
        while j < len(fx) and fx[j][0] <= d:
            last = fx[j][1]
            j += 1
        m = d[:7]
        if m in seen or last is None or c <= 0 or m > ASOF:
            continue
        seen.add(m)
        res[m] = c * last
    return res


def header_idx(name, col):
    with open(os.path.join(HERE, "data", name), encoding="utf-8-sig", newline="") as f:
        return next(csv.reader(f)).index(col)


FX = rd("DEXKOUS.csv")
col = header_idx("SPY_1d.csv", "close")
S0 = first_of_month(rd("SPY_1d.csv", 0, col), FX)
N0 = first_of_month(rd("QQQ_1d.csv", 0, col), FX)
IDX = sorted(set(S0) & set(N0))
S = [S0[m] for m in IDX]
N = [N0[m] for m in IDX]
RATE = {}
for d, v in rd("KR3M.csv"):
    RATE[d[:7]] = v
_last = None
R = []
for m in IDX:
    if m in RATE:
        _last = RATE[m]
    R.append(_last)


def tax(end, paid, free=200.0, rate=0.099):
    return max(end - paid - free, 0.0) * rate


def acct(i0, T, w, mon=100.0):
    sn = ss = 0.0
    for k in range(T):
        sn += mon * w * (1 - COST) / N[i0 + k]
        ss += mon * (1 - w) * (1 - COST) / S[i0 + k]
    pre = (sn * N[i0 + T] + ss * S[i0 + T]) * (1 - COST)
    paid = mon * T
    return pre, pre - tax(pre, paid), paid


def deposit(i0, T, mon=100.0):
    v = 0.0
    for k in range(T):
        rate = R[i0 + k]
        v = (v + mon) * (1 + (rate or 0.0) / 100 / 12)
    return v - tax(v, mon * T)


def table(T):
    rows = []
    for i0 in range(len(IDX) - T):
        pS, s, paid = acct(i0, T, 0.0)
        pN, n, _ = acct(i0, T, 1.0)
        _, h, _ = acct(i0, T, 0.5)
        rows.append(dict(start=IDX[i0], end=IDX[i0 + T], S=s, N=n, H=h, S_tax=pS - s, N_tax=pN - n,
                         flip=(pN > pS) != (n > s), paid=paid, dep=deposit(i0, T) if R[i0] is not None else None))
    return rows


def recent_winner(i0, L=36):
    return "N" if N[i0] / N[i0 - L] > S[i0] / S[i0 - L] else "S"


def summary(T):
    t = table(T)
    w = sum(r["N"] > r["S"] for r in t)
    worst = {a: min(t, key=lambda r: r[a]) for a in "SNH"}
    out = {
        "창": len(t), "나스닥승": w, "승률": round(w / len(t), 4),
        "가운데": {a: round(st.median(r[a] for r in t)) for a in "SNH"},
        "세금가운데": {"S": round(st.median(r["S_tax"] for r in t)), "N": round(st.median(r["N_tax"] for r in t))},
        "세금으로뒤집힌창": sum(r["flip"] for r in t),
        "최악": {a: {"금액": round(worst[a][a]), "시작": worst[a]["start"]} for a in "SNH"},
        "원금미달": {a: sum(r[a] < r["paid"] for r in t) for a in "SNH"},
        "닷컴밖패배": sum(r["N"] <= r["S"] and not ("1999-01" <= r["start"] <= "2002-12") for r in t),
        "닷컴밖창": sum(not ("1999-01" <= r["start"] <= "2002-12") for r in t),
    }
    return out, t


def lookup(t, start):
    r = next(x for x in t if x["start"] == start)
    return {k: (round(v) if isinstance(v, float) else v) for k, v in r.items()}


def rule_vs_nasdaq(T):
    """시청자 기본값 — 계좌 여는 달 직전 3년 더 오른 쪽. 그 3년 자료가 있는 달만."""
    a, g, ng = 0, [], []
    for i0 in range(36, len(IDX) - T):
        _, n, paid = acct(i0, T, 1.0)
        _, s, _ = acct(i0, T, 0.0)
        pick = n if recent_winner(i0) == "N" else s
        g.append(pick); ng.append(n)
        a += n >= pick
    return {"창": len(g), "나스닥이같거나더": a, "나스닥이더많음": sum(x > y for x, y in zip(ng, g)),
            "최근승자가더많음": sum(y > x for x, y in zip(ng, g)),
            "가운데_최근승자": round(st.median(g)), "가운데_나스닥": round(st.median(ng))}


if __name__ == "__main__":
    print("구간", IDX[0], IDX[-1], len(IDX), "달")
    res = {}
    for T in (36, 60):
        s, t = summary(T)
        res[str(T)] = s
        print(T, json.dumps(s, ensure_ascii=False))
        res[f"최근승자_{T}"] = rule_vs_nasdaq(T)
        print(" 최근 3년 더 오른 쪽 고르기:", json.dumps(res[f"최근승자_{T}"], ensure_ascii=False))
    t60, t36 = table(60), table(36)
    res["사례60_최근"] = lookup(t60, t60[-1]["start"])
    res["사례60_꼭대기"] = lookup(t60, "2021-11")
    res["사례36_닷컴"] = lookup(t36, "1999-08")
    res["사례36_코로나전"] = lookup(t36, "2019-12")
    print("사례", json.dumps({k: res[k] for k in res if k.startswith("사례")}, ensure_ascii=False))
    dep = [r for r in t36 if r["dep"] is not None]
    res["예금36"] = {"창": len(dep), "가운데": round(st.median(r["dep"] for r in dep)),
                   "원금미달": sum(r["dep"] < r["paid"] for r in dep)}
    print("예금 3년:", res["예금36"])
    print("3년 패배 시작 달:", [r["start"] for r in t36 if r["N"] <= r["S"]])
    print("5년 패배 시작 달:", [r["start"] for r in t60 if r["N"] <= r["S"]])
    json.dump(res, open(os.path.join(HERE, "_공개코드출력.json"), "w", encoding="utf-8"), ensure_ascii=False, indent=1)
    def mdd(x):
        pk, m = x[0], 0.0
        for v in x:
            pk = max(pk, v)
            m = min(m, v / pk - 1)
        return round(m * 100, 1)
    res["원화월기준_최대낙폭"] = {"S": mdd(S), "N": mdd(N)}
    def vol(x):
        r = [b / a - 1 for a, b in zip(x, x[1:])]
        return round(st.pstdev(r) * 100, 2)
    res["월변동폭"] = {"S": vol(S), "N": vol(N)}
    print("최대낙폭(원화·월)", res["원화월기준_최대낙폭"], "월변동폭", res["월변동폭"])
    json.dump(res, open(os.path.join(HERE, "_공개코드출력.json"), "w", encoding="utf-8"), ensure_ascii=False, indent=1)
    res["전체배수"] = {"S": round(S[-1] / S[0], 1), "N": round(N[-1] / N[0], 1)}
    t60all, t36all = table(60), table(36)
    res["반반_사이"] = {"3년": sum(min(r["S"], r["N"]) <= r["H"] <= max(r["S"], r["N"]) for r in t36all), "5년": sum(min(r["S"], r["N"]) <= r["H"] <= max(r["S"], r["N"]) for r in t60all)}
    print("전체 배수", res["전체배수"], "반반이 사이", res["반반_사이"])
    # 국내 상장 실물로 같은 사례(2021-11 시작 5년) — 합성 아님
    cR = header_idx("133690_KS_1d.csv", "close")
    def mon_real(name):
        o = {}
        for d, c in rd(name, 0, cR):
            if d[:7] <= ASOF and c > 0:
                o.setdefault(d[:7], c)
        return o
    rn, rs = mon_real("133690_KS_1d.csv"), mon_real("360750_KS_1d.csv")
    ms = [m for m in IDX if "2021-11" <= m <= "2026-11"]
    def real_end(px):
        sh = sum(100 * (1 - COST) / px[m] for m in ms[:-1])
        e = sh * px[ms[-1]] * (1 - COST)
        return round(e - tax(e, 100.0 * (len(ms) - 1)))
    res["사례_실물"] = {"S": real_end(rs), "N": real_end(rn), "달수": len(ms) - 1}
    print("국내 상장 실물 같은 5년:", res["사례_실물"])
    json.dump(res, open(os.path.join(HERE, "_공개코드출력.json"), "w", encoding="utf-8"), ensure_ascii=False, indent=1)
    print("\n── 계좌별 결과 — 5년 (시작 달 · S&P500 · 나스닥100 · 반반, 세금 뗀 만원)")
    for r_ in t60all:
        print(r_["start"], round(r_["S"]), round(r_["N"]), round(r_["H"]))
    print("\n── 계좌별 결과 — 3년 (시작 달 · S&P500 · 나스닥100 · 반반 · 예금, 세금 뗀 만원)")
    for r_ in t36all:
        print(r_["start"], round(r_["S"]), round(r_["N"]), round(r_["H"]), round(r_["dep"]))
    print("\n끝.")

알고랩 Strategy Lab — 전략을 검증하고, 검증한 것만 자동매매로 옮깁니다. 알고랩 자동매매 살펴보기 · 전략 검증 전체 보기

과거 데이터를 돌려 본 결과이며 미래 수익을 보장하지 않습니다. 투자 판단과 책임은 본인에게 있습니다.