국내 대형주 · 삼성전자 · 익절 · 실측 재현 페이지
2007년 말 코스피 시가총액 상위 40개 종목(그 뒤 상장폐지·합병된 종목 포함)을 2008년부터 매달 샀다고 치고, 산 값보다 30% 오른 첫 날을 모두 모았습니다. 그날 계좌를 1,000만원으로 놓고 세 가지를 견줍니다. ① 바로 — 그날 종가에 팔아 KODEX200(코스피200 ETF)으로 옮긴다 ② 꺾이면 — 그 뒤 가장 높았던 종가보다 20% 내려간 날 종가에 팔아 KODEX200으로 옮긴다 ③ 그대로 — 3년 들고 간다 셋 다 750거래일(약 3년) 뒤 같은 날 종가로 평가합니다.
| 상황 | 할 일 |
|---|---|
| 산 대형주가 30% 올랐고, 팔 생각이 있다 | 꺾이길 기다리지 말고 그날 팔아 코스피200 ETF로 옮긴다 |
| 판 돈 | 현금으로 두지 않는다 — 현금(이자 0)으로 두면 꺾이면 쪽 2077번 중 1323번이 3년 뒤 1,000만원 아래 |
| 팔지 말지 자체 | 이 페이지의 질문이 아닙니다 — 그냥 둔 쪽이 가장 많이 남은 때도 많습니다(아래 한계) |
돌리는 법: zip 을 풀고 python run_profitsell.py
== 국내 · 2007년 말 시가총액 상위 40 (판 돈 → KODEX200) 30% 오른 날 2077번 · 종목 40개 · 첫 2008-02-15 · 끝 2023-08-23 3년 뒤 바로 판 쪽이 꺾이면 판 쪽보다 더 남은 것 1333번 꺾여서 판 것 2059번 · 판 날 계좌가 이미 1,000만원보다 적었던 것 1315번 3년 뒤 1,000만원보다 줄어든 것: 그대로 1069번 · 꺾이면 792번 · 바로 611번 단순 평균(1,000만원 기준): 그대로 1,176만원 · 바로 1,244만원 · 꺾이면 1,243만원 덜 남은 쪽 열 번에 한 번꼴 경계(하위 10%): 그대로 546만원 · 바로 918만원 · 꺾이면 813만원 종목마다 첫 사건만: 40개 중 32개 바로 승 꺾임 기준 10%: 바로 쪽이 더 남은 것 1403번 꺾임 기준 15%: 바로 쪽이 더 남은 것 1371번 꺾임 기준 25%: 바로 쪽이 더 남은 것 1316번 20% 오른 날(꺾임 20%): 2735번 중 바로 쪽이 더 남은 것 1804번 50% 오른 날(꺾임 20%): 1320번 중 바로 쪽이 더 남은 것 865번 2020년 이후 30% 오른 날 579번 중 바로 쪽이 더 남은 것 275번 · 줄어든 것 바로 275번 · 꺾이면 229번 판 돈을 현금(이자 0)으로 두면: 꺾이면 쪽 3년 뒤 1,000만원 아래 1323번 삼성전자만: 30% 오른 날 77번 · 바로 쪽이 더 남은 것 41번 · 셋 중 그냥 둔 쪽이 가장 많이 남은 것 63번 삼성전자(005930) — 30% 오른 날 전부: 2008-04-28 → 꺾여 판 날 2008-07-08(그날 계좌 829만원) · 3년 뒤 2011-04-13: 바로 1,250만원 · 꺾이면 1,231만원 · 그대로 1,302만원 2008-05-15 → 꺾여 판 날 2008-07-08(그날 계좌 777만원) · 3년 뒤 2011-05-02: 바로 1,274만원 · 꺾이면 1,216만원 · 그대로 1,262만원 2009-09-22 → 꺾여 판 날 2011-06-20(그날 계좌 990만원) · 3년 뒤 2012-09-21: 바로 1,213만원 · 꺾이면 990만원 · 그대로 1,621만원 2009-08-05 → 꺾여 판 날 2011-06-20(그날 계좌 1,115만원) · 3년 뒤 2012-08-03: 바로 1,254만원 · 꺾이면 1,039만원 · 그대로 1,742만원 2009-07-08 → 꺾여 판 날 2011-06-20(그날 계좌 1,248만원) · 3년 뒤 2012-07-06: 바로 1,377만원 · 꺾이면 1,161만원 · 그대로 1,821만원 2009-07-20 → 꺾여 판 날 2011-06-20(그날 계좌 1,184만원) · 3년 뒤 2012-07-18: 바로 1,277만원 · 꺾이면 1,066만원 · 그대로 1,718만원 2009-07-15 → 꺾여 판 날 2011-06-20(그날 계좌 1,227만원) · 3년 뒤 2012-07-13: 바로 1,347만원 · 꺾이면 1,113만원 · 그대로 1,757만원 2009-04-23 → 꺾여 판 날 2011-06-20(그날 계좌 1,304만원) · 3년 뒤 2012-04-20: 바로 1,551만원 · 꺾이면 1,300만원 · 그대로 2,101만원 2009-04-10 → 꺾여 판 날 2011-06-20(그날 계좌 1,356만원) · 3년 뒤 2012-04-06: 바로 1,634만원 · 꺾이면 1,389만원 · 그대로 2,270만원 2009-08-21 → 꺾여 판 날 2011-06-20(그날 계좌 1,079만원) · 3년 뒤 2012-08-22: 바로 1,289만원 · 꺾이면 1,052만원 · 그대로 1,715만원 2009-08-04 → 꺾여 판 날 2011-06-20(그날 계좌 1,127만원) · 3년 뒤 2012-08-02: 바로 1,266만원 · 꺾이면 1,065만원 · 그대로 1,790만원 2009-09-01 → 꺾여 판 날 2011-06-20(그날 계좌 1,023만원) · 3년 뒤 2012-08-31: 바로 1,223만원 · 꺾이면 972만원 · 그대로 1,585만원 2010-12-09 → 꺾여 판 날 2011-06-20(그날 계좌 877만원) · 3년 뒤 2013-12-17: 바로 1,016만원 · 꺾이면 868만원 · 그대로 1,547만원 2011-01-28 → 꺾여 판 날 2011-06-20(그날 계좌 792만원) · 3년 뒤 2014-02-11: 바로 926만원 · 꺾이면 767만원 · 그대로 1,326만원 2010-12-10 → 꺾여 판 날 2011-06-20(그날 계좌 875만원) · 3년 뒤 2013-12-18: 바로 1,022만원 · 꺾이면 871만원 · 그대로 1,550만원 2010-12-29 → 꺾여 판 날 2011-06-20(그날 계좌 847만원) · 3년 뒤 2014-01-09: 바로 968만원 · 꺾이면 831만원 · 그대로 1,378만원 2011-12-01 → 꺾여 판 날 2012-07-09(그날 계좌 1,054만원) · 3년 뒤 2014-12-15: 바로 1,000만원 · 꺾이면 1,086만원 · 그대로 1,210만원 2011-01-19 → 꺾여 판 날 2011-06-20(그날 계좌 802만원) · 3년 뒤 2014-01-29: 바로 932만원 · 꺾이면 783만원 · 그대로 1,311만원 2012-01-03 → 꺾여 판 날 2012-07-09(그날 계좌 1,019만원) · 3년 뒤 2015-01-19: 바로 1,018만원 · 꺾이면 1,057만원 · 그대로 1,253만원 2011-01-18 → 꺾여 판 날 2011-06-20(그날 계좌 826만원) · 3년 뒤 2014-01-28: 바로 931만원 · 꺾이면 797만원 · 그대로 1,352만원 2012-03-14 → 꺾여 판 날 2012-07-09(그날 계좌 901만원) · 3년 뒤 2015-03-31: 바로 972만원 · 꺾이면 977만원 · 그대로 1,189만원 2012-03-26 → 꺾여 판 날 2012-07-09(그날 계좌 884만원) · 3년 뒤 2015-04-10: 바로 998만원 · 꺾이면 973만원 · 그대로 1,205만원 2012-02-22 → 꺾여 판 날 2012-07-09(그날 계좌 941만원) · 3년 뒤 2015-03-11: 바로 967만원 · 꺾이면 1,001만원 · 그대로 1,270만원 2012-03-09 → 꺾여 판 날 2012-07-09(그날 계좌 916만원) · 3년 뒤 2015-03-26: 바로 989만원 · 꺾이면 992만원 · 그대로 1,191만원 2012-02-29 → 꺾여 판 날 2012-07-09(그날 계좌 934만원) · 3년 뒤 2015-03-18: 바로 991만원 · 꺾이면 1,019만원 · 그대로 1,285만원 2012-02-21 → 꺾여 판 날 2012-07-09(그날 계좌 955만원) · 3년 뒤 2015-03-10: 바로 966만원 · 꺾이면 1,015만원 · 그대로 1,242만원 2012-01-25 → 꺾여 판 날 2012-07-09(그날 계좌 1,011만원) · 3년 뒤 2015-02-06: 바로 990만원 · 꺾이면 1,067만원 · 그대로 1,270만원 2012-02-15 → 꺾여 판 날 2012-07-09(그날 계좌 992만원) · 3년 뒤 2015-03-04: 바로 977만원 · 꺾이면 1,064만원 · 그대로 1,306만원 2011-11-04 → 꺾여 판 날 2012-07-09(그날 계좌 1,126만원) · 3년 뒤 2014-11-18: 바로 1,014만원 · 꺾이면 1,178만원 · 그대로 1,239만원 2011-12-12 → 꺾여 판 날 2012-07-09(그날 계좌 1,044만원) · 3년 뒤 2014-12-24: 바로 1,027만원 · 꺾이면 1,090만원 · 그대로 1,265만원 2012-03-27 → 꺾여 판 날 2012-07-09(그날 계좌 859만원) · 3년 뒤 2015-04-13: 바로 995만원 · 꺾이면 953만원 · 그대로 1,163만원 2012-04-30 → 꺾여 판 날 2012-07-09(그날 계좌 810만원) · 3년 뒤 2015-05-18: 바로 1,010만원 · 꺾이면 895만원 · 그대로 979만원 2012-05-02 → 꺾여 판 날 2012-07-09(그날 계좌 799만원) · 3년 뒤 2015-05-19: 바로 1,006만원 · 꺾이면 886만원 · 그대로 979만원 2013-01-02 → 꺾여 판 날 2013-07-08(그날 계좌 778만원) · 3년 뒤 2016-01-15: 바로 882만원 · 꺾이면 785만원 · 그대로 749만원 2012-12-13 → 꺾여 판 날 2013-07-08(그날 계좌 804만원) · 3년 뒤 2015-12-30: 바로 943만원 · 꺾이면 847만원 · 그대로 861만원 2016-08-01 → 꺾여 판 날 2018-02-09(그날 계좌 1,474만원) · 3년 뒤 2019-08-27: 바로 1,057만원 · 꺾이면 1,253만원 · 그대로 1,522만원 2015-03-17 → 꺾여 판 날 2015-07-31(그날 계좌 792만원) · 3년 뒤 2018-04-04: 바로 1,258만원 · 꺾이면 1,058만원 · 그대로 1,661만원 2016-08-18 → 꺾여 판 날 2018-02-09(그날 계좌 1,409만원) · 3년 뒤 2019-09-16: 바로 1,117만원 · 꺾이면 1,284만원 · 그대로 1,556만원 2016-10-07 → 꺾여 판 날 2018-02-09(그날 계좌 1,355만원) · 3년 뒤 2019-11-01: 바로 1,139만원 · 꺾이면 1,269만원 · 그대로 1,638만원 2016-12-01 → 꺾여 판 날 2018-02-09(그날 계좌 1,321만원) · 3년 뒤 2019-12-27: 바로 1,244만원 · 꺾이면 1,327만원 · 그대로 1,775만원 2016-12-29 → 꺾여 판 날 2018-02-09(그날 계좌 1,263만원) · 3년 뒤 2020-01-30: 바로 1,176만원 · 꺾이면 1,241만원 · 그대로 1,717만원 2016-12-08 → 꺾여 판 날 2018-02-09(그날 계좌 1,291만원) · 3년 뒤 2020-01-07: 바로 1,201만원 · 꺾이면 1,282만원 · 그대로 1,712만원 2016-08-19 → 꺾여 판 날 2018-02-09(그날 계좌 1,380만원) · 3년 뒤 2019-09-17: 바로 1,114만원 · 꺾이면 1,256만원 · 그대로 1,517만원 2016-07-15 → 꺾여 판 날 2018-02-09(그날 계좌 1,522만원) · 3년 뒤 2019-08-09: 바로 1,079만원 · 꺾이면 1,304만원 · 그대로 1,540만원 2016-06-07 → 꺾여 판 날 2018-02-09(그날 계좌 1,654만원) · 3년 뒤 2019-07-02: 바로 1,180만원 · 꺾이면 1,531만원 · 그대로 1,794만원 2016-07-01 → 꺾여 판 날 2018-02-09(그날 계좌 1,576만원) · 3년 뒤 2019-07-26: 바로 1,170만원 · 꺾이면 1,440만원 · 그대로 1,743만원 2016-12-07 → 꺾여 판 날 2018-02-09(그날 계좌 1,304만원) · 3년 뒤 2020-01-06: 바로 1,209만원 · 꺾이면 1,282만원 · 그대로 1,721만원 2016-10-06 → 꺾여 판 날 2018-02-09(그날 계좌 1,367만원) · 3년 뒤 2019-10-31: 바로 1,127만원 · 꺾이면 1,271만원 · 그대로 1,627만원 2016-11-30 → 꺾여 판 날 2018-02-09(그날 계좌 1,324만원) · 3년 뒤 2019-12-26: 바로 1,227만원 · 꺾이면 1,311만원 · 그대로 1,732만원 2017-01-11 → 꺾여 판 날 2018-02-09(그날 계좌 1,189만원) · 3년 뒤 2020-02-11: 바로 1,182만원 · 꺾이면 1,213만원 · 그대로 1,693만원 2017-03-07 → 꺾여 판 날 2018-02-09(그날 계좌 1,132만원) · 3년 뒤 2020-04-01: 바로 884만원 · 꺾이면 875만원 · 그대로 1,242만원 2017-03-14 → 꺾여 판 날 2018-02-09(그날 계좌 1,100만원) · 3년 뒤 2020-04-08: 바로 926만원 · 꺾이면 910만원 · 그대로 1,281만원 2017-03-17 → 꺾여 판 날 2018-02-09(그날 계좌 1,073만원) · 3년 뒤 2020-04-13: 바로 921만원 · 꺾이면 894만원 · 그대로 1,242만원 2017-05-02 → 꺾여 판 날 2018-02-09(그날 계좌 1,010만원) · 3년 뒤 2020-06-01: 바로 1,000만원 · 꺾이면 944만원 · 그대로 1,239만원 2017-05-08 → 꺾여 판 날 2018-02-09(그날 계좌 965만원) · 3년 뒤 2020-06-03: 바로 1,010만원 · 꺾이면 945만원 · 그대로 1,259만원 2017-07-13 → 꺾여 판 날 2018-02-09(그날 계좌 894만원) · 3년 뒤 2020-08-06: 바로 1,039만원 · 꺾이면 954만원 · 그대로 1,251만원 2017-09-18 → 꺾여 판 날 2018-02-09(그날 계좌 862만원) · 3년 뒤 2020-10-16: 바로 1,037만원 · 꺾이면 923만원 · 그대로 1,244만원 2017-10-11 → 꺾여 판 날 2018-02-09(그날 계좌 825만원) · 3년 뒤 2020-10-30: 바로 981만원 · 꺾이면 855만원 · 그대로 1,133만원 2020-01-17 → 꺾여 판 날 2020-03-16(그날 계좌 798만원) · 3년 뒤 2023-02-02: 바로 1,138만원 · 꺾이면 1,178만원 · 그대로 1,131만원 2019-12-17 → 꺾여 판 날 2020-03-16(그날 계좌 868만원) · 3년 뒤 2023-01-03: 바로 1,061만원 · 꺾이면 1,145만원 · 그대로 1,073만원 2020-01-13 → 꺾여 판 날 2020-03-16(그날 계좌 815만원) · 3년 뒤 2023-01-27: 바로 1,162만원 · 꺾이면 1,216만원 · 그대로 1,175만원 2020-01-08 → 꺾여 판 날 2020-03-16(그날 계좌 861만원) · 3년 뒤 2023-01-20: 바로 1,160만원 · 꺾이면 1,237만원 · 그대로 1,187만원 2020-01-09 → 꺾여 판 날 2020-03-16(그날 계좌 834만원) · 3년 뒤 2023-01-25: 바로 1,159만원 · 꺾이면 1,218만원 · 그대로 1,179만원 2020-01-10 → 꺾여 판 날 2020-03-16(그날 계좌 822만원) · 3년 뒤 2023-01-26: 바로 1,165만원 · 꺾이면 1,216만원 · 그대로 1,170만원 2019-11-06 → 꺾여 판 날 2020-03-16(그날 계좌 923만원) · 3년 뒤 2022-11-22: 바로 1,166만원 · 꺾이면 1,294만원 · 그대로 1,241만원 2019-12-13 → 꺾여 판 날 2020-03-16(그날 계좌 900만원) · 3년 뒤 2022-12-29: 바로 1,082만원 · 꺾이면 1,194만원 · 그대로 1,110만원 2019-10-14 → 꺾여 판 날 2020-03-16(그날 계좌 984만원) · 3년 뒤 2022-10-28: 바로 1,142만원 · 꺾이면 1,303만원 · 그대로 1,251만원 2020-11-13 → 꺾여 판 날 2021-10-06(그날 계좌 1,172만원) · 3년 뒤 2023-11-30: 바로 1,081만원 · 꺾이면 1,083만원 · 그대로 1,252만원 2020-11-16 → 꺾여 판 날 2021-10-06(그날 계좌 1,118만원) · 3년 뒤 2023-12-01: 바로 1,046만원 · 꺾이면 1,020만원 · 그대로 1,180만원 2020-12-04 → 꺾여 판 날 2021-10-06(그날 계좌 1,036만원) · 3년 뒤 2023-12-21: 바로 1,007만원 · 꺾이면 985만원 · 그대로 1,140만원 2020-12-07 → 꺾여 판 날 2021-10-06(그날 계좌 1,016만원) · 3년 뒤 2023-12-22: 바로 1,005만원 · 꺾이면 969만원 · 그대로 1,132만원 2020-09-10 → 꺾여 판 날 2021-10-06(그날 계좌 1,259만원) · 3년 뒤 2023-09-26: 바로 1,097만원 · 꺾이면 1,119만원 · 그대로 1,267만원 2020-11-26 → 꺾여 판 날 2021-10-06(그날 계좌 1,090만원) · 3년 뒤 2023-12-13: 바로 1,018만원 · 꺾이면 1,000만원 · 그대로 1,164만원 2020-12-09 → 꺾여 판 날 2021-10-06(그날 계좌 1,003만원) · 3년 뒤 2023-12-27: 바로 1,013만원 · 꺾이면 970만원 · 그대로 1,153만원 2020-12-24 → 꺾여 판 날 2021-10-06(그날 계좌 952만원) · 3년 뒤 2024-01-15: 바로 958만원 · 꺾이면 886만원 · 그대로 1,037만원 2021-01-08 → 꺾여 판 날 2021-10-06(그날 계좌 814만원) · 3년 뒤 2024-01-25: 바로 820만원 · 꺾이면 746만원 · 그대로 889만원 2023-05-30 → 꺾여 판 날 2024-09-04(그날 계좌 992만원) · 3년 뒤 2026-07-01: 바로 4,131만원 · 꺾이면 3,950만원 · 그대로 4,623만원 == 미국 · 대형주 30 (판 돈 → SPY) 30% 오른 날 2045번 · 종목 30개 · 첫 2008-05-05 · 끝 2023-09-14 3년 뒤 바로 판 쪽이 꺾이면 판 쪽보다 더 남은 것 1279번 꺾여서 판 것 1530번 · 판 날 계좌가 이미 1,000만원보다 적었던 것 932번 3년 뒤 1,000만원보다 줄어든 것: 그대로 337번 · 꺾이면 95번 · 바로 2번 단순 평균(1,000만원 기준): 그대로 1,401만원 · 바로 1,437만원 · 꺾이면 1,423만원 덜 남은 쪽 열 번에 한 번꼴 경계(하위 10%): 그대로 893만원 · 바로 1,293만원 · 꺾이면 1,076만원 종목마다 첫 사건만: 30개 중 19개 바로 승 끝.
# -*- coding: utf-8 -*-
"""수익 난 대형주 — 그날 바로 팔까, 고점에서 꺾일 때 팔까 (AlgoLab · 2026-10-28)
돌리는 법: 이 파일 옆에 data_profitsell/ 폴더를 두고 python run_profitsell.py
표준 라이브러리만 씁니다. 가격 자료는 2026-10-02 까지 얼려 둔 일봉 종가(날짜·종가)입니다.
u2007/ 2007-12-28 실제 코스피 시가총액 상위 40종(상장 유지 = 야후 수정종가 · 상장폐지·합병 6종 = 네이버 종가 + 후신 이음)
us30/ 2005년 무렵 미국 시가총액 상위 30종(야후 수정종가) · index/ KODEX200(2009-04 이전 네이버 종가 이음) · SPY
30% 오른 날 : 2008-01 부터 매달 첫 거래일에 산 종목이, 산 뒤 500거래일(약 2년) 안에 처음으로
종가가 산 값의 1.3배 이상이 된 날 t. 그날 계좌 = 1,000만원. (같은 날이 여러 달에서 나오면 한 번만 센다)
바로 : t 종가에 팔아 지수 ETF(KODEX200 / SPY)로 옮긴다
꺾이면 : t 뒤 가장 높았던 종가보다 20% 이상 내려간 첫 날 종가에 팔아 지수 ETF로 옮긴다(3년 안에 안 꺾이면 그대로)
그대로 : 3년 들고 간다
평가 : 셋 다 t + 750거래일(약 3년) 종가로 같은 날 평가 · 옮길 때 비용 국내 0.4% · 미국 0.2% · 세금 없음
국내 종목은 하루 ±31% 넘는 등락을 액면분할 오류로 보고 0 으로 지운다.
"""
import csv
import math
import os
HERE = os.path.dirname(os.path.abspath(__file__))
D = os.path.join(HERE, "data_profitsell")
H, WIN, BUY0 = 750, 500, "2008-01-01"
US = "XOM GE MSFT C BAC WMT JNJ PFE AIG MO PG JPM IBM INTC CVX WFC KO CSCO GOOG VZ AMGN PEP HD COP HPQ UPS T ORCL QCOM MRK".split()
def load(path, clean):
d, c = [], []
for r in csv.reader(open(path, encoding="utf-8")):
if r and r[0][:1].isdigit():
v = float(r[1])
if clean and v <= 0:
continue
d.append(r[0]); c.append(v)
if clean:
x, p = [c[0]], 1.0 # 누적곱을 먼저 하고 첫 값을 곱한다(연구 코드 numpy 와 반올림 순서까지 같게)
for i in range(1, len(c)):
g = c[i] / c[i - 1] - 1
p *= 1 + (0.0 if abs(g) > 0.31 else g)
x.append(c[0] * p)
c = x
return d, c
def idx_at(xd, xc, day):
lo, hi = 0, len(xd)
while lo < hi: # 그 날짜 이하의 마지막 지수 종가
m = (lo + hi) // 2
if xd[m] <= day:
lo = m + 1
else:
hi = m
return xc[lo - 1]
def events(names, folder, index_file, cost, X, clean):
xd, xc = load(index_file, False)
out = []
for nm in names:
d, c = load(os.path.join(folder, nm + ".csv"), clean)
months = {}
for i, di in enumerate(d):
if di >= BUY0 and di[:7] not in months:
months[di[:7]] = i
seen = set()
for ym, b in months.items():
lim = min(len(c), b + WIN)
t = next((j for j in range(b + 1, lim) if c[j] >= (1 + X) * c[b]), None)
if t is None or t + H >= len(c) or (nm, t) in seen or d[t] < xd[0] or d[t + H] > xd[-1]:
continue
seen.add((nm, t))
seg = c[t:t + H + 1]
ix = [idx_at(xd, xc, dd) for dd in d[t:t + H + 1]]
out.append({"code": nm, "t": d[t], "dates": d[t:t + H + 1], "seg": seg, "ix": ix, "cost": cost})
return out
def trail_delay(seg, Y):
pk = seg[0]
for k in range(1, len(seg)):
pk = max(pk, seg[k])
if seg[k] <= (1 - Y) * pk:
return k
return None
def value(e, delay, to="idx"):
seg, ix, cost = e["seg"], e["ix"], e["cost"]
if delay is None:
return seg[-1] / seg[0]
v = seg[delay] / seg[0]
if to == "idx":
return v * ix[-1] / ix[delay] * (1 - cost)
return v * (1 - cost / 2)
def q(a, p):
s = sorted(a); k = (len(s) - 1) * p; f = math.floor(k)
return s[f] if f == k else s[f] + (s[f + 1] - s[f]) * (k - f)
def won(x):
return f"{round(x * 1000):,}만원"
def cell(evs, Y):
hold = [value(e, None) for e in evs]
now = [value(e, 0) for e in evs]
dl = [trail_delay(e["seg"], Y) for e in evs]
tr = [value(e, x) for e, x in zip(evs, dl)]
return hold, now, dl, tr
def report(name, names, folder, index_file, cost, clean, kr):
print(f"== {name}")
evs = events(names, folder, index_file, cost, 0.30, clean)
hold, now, dl, tr = cell(evs, 0.20)
n = len(evs)
print(f"30% 오른 날 {n}번 · 종목 {len({e['code'] for e in evs})}개 · 첫 {min(e['t'] for e in evs)} · 끝 {max(e['t'] for e in evs)}")
print(f"3년 뒤 바로 판 쪽이 꺾이면 판 쪽보다 더 남은 것 {sum(a > b for a, b in zip(now, tr))}번")
sold = [e["seg"][x] / e["seg"][0] for e, x in zip(evs, dl) if x is not None]
print(f"꺾여서 판 것 {len(sold)}번 · 판 날 계좌가 이미 1,000만원보다 적었던 것 {sum(s < 1 for s in sold)}번")
print(f"3년 뒤 1,000만원보다 줄어든 것: 그대로 {sum(h < 1 for h in hold)}번 · 꺾이면 {sum(t < 1 for t in tr)}번 · 바로 {sum(x < 1 for x in now)}번")
print(f"단순 평균(1,000만원 기준): 그대로 {won(sum(hold) / n)} · 바로 {won(sum(now) / n)} · 꺾이면 {won(sum(tr) / n)}")
print(f"덜 남은 쪽 열 번에 한 번꼴 경계(하위 10%): 그대로 {won(q(hold, .1))} · 바로 {won(q(now, .1))} · 꺾이면 {won(q(tr, .1))}")
first = {}
for i, e in enumerate(evs):
first.setdefault(e["code"], i)
print(f"종목마다 첫 사건만: {len(first)}개 중 {sum(now[i] > tr[i] for i in first.values())}개 바로 승")
if not kr:
return
for Y in (0.10, 0.15, 0.25):
_, n2, _, t2 = cell(evs, Y)
print(f" 꺾임 기준 {int(Y * 100)}%: 바로 쪽이 더 남은 것 {sum(a > b for a, b in zip(n2, t2))}번")
for X in (0.20, 0.50):
ev2 = events(names, folder, index_file, cost, X, clean)
_, n2, _, t2 = cell(ev2, 0.20)
print(f" {int(X * 100)}% 오른 날(꺾임 20%): {len(ev2)}번 중 바로 쪽이 더 남은 것 {sum(a > b for a, b in zip(n2, t2))}번")
rec = [i for i, e in enumerate(evs) if e["t"] >= "2020-01-01"]
print(f"2020년 이후 30% 오른 날 {len(rec)}번 중 바로 쪽이 더 남은 것 {sum(now[i] > tr[i] for i in rec)}번 · "
f"줄어든 것 바로 {sum(now[i] < 1 for i in rec)}번 · 꺾이면 {sum(tr[i] < 1 for i in rec)}번")
cash = [value(e, x, 'cash') for e, x in zip(evs, dl)]
print(f"판 돈을 현금(이자 0)으로 두면: 꺾이면 쪽 3년 뒤 1,000만원 아래 {sum(c < 1 for c in cash)}번")
ss = [i for i, e in enumerate(evs) if e["code"] == "005930"]
print(f"삼성전자만: 30% 오른 날 {len(ss)}번 · 바로 쪽이 더 남은 것 {sum(now[i] > tr[i] for i in ss)}번 · "
f"셋 중 그냥 둔 쪽이 가장 많이 남은 것 {sum(hold[i] > max(now[i], tr[i]) for i in ss)}번")
print("삼성전자(005930) — 30% 오른 날 전부:")
for i, e in enumerate(evs):
if e["code"] == "005930":
x = dl[i]
sd = e["dates"][x] if x is not None else "안 꺾임"
sv = won(e["seg"][x] / e["seg"][0]) if x is not None else "-"
print(f" {e['t']} → 꺾여 판 날 {sd}(그날 계좌 {sv}) · 3년 뒤 {e['dates'][-1]}: 바로 {won(now[i])} · 꺾이면 {won(tr[i])} · 그대로 {won(hold[i])}")
if __name__ == "__main__":
kr = sorted(f[:-4] for f in os.listdir(os.path.join(D, "u2007")) if f.endswith(".csv"))
report("국내 · 2007년 말 시가총액 상위 40 (판 돈 → KODEX200)", kr, os.path.join(D, "u2007"),
os.path.join(D, "index", "KODEX200.csv"), 0.004, True, True)
report("미국 · 대형주 30 (판 돈 → SPY)", US, os.path.join(D, "us30"), os.path.join(D, "index", "SPY.csv"), 0.002, False, False)
print("끝.")
알고랩 Strategy Lab — 전략을 검증하고, 검증한 것만 자동매매로 옮깁니다. 오른 주식을 정해 둔 날 팔고 옮기는 일은 사람보다 규칙이 잘합니다. 알고랩 자동매매 살펴보기 · 전략 검증 전체 보기
과거 데이터를 돌려 본 결과이며 미래 수익을 보장하지 않습니다. 투자 판단과 책임은 본인에게 있습니다.