1000 REM AAII PROGRAM NO. 10 -- RETIREMENT PLANNER 1010 REM BY ROBERT OSTERLUND OF AAII. (C) COPYRIGHT 1986 BY 1020 REM THE AMERICAN ASSOCIATION OF INDIVIDUAL INVESTORS, 1030 REM 612 N. MICHIGAN AVE., CHICAGO, IL 60611, (312)280-0170. 1040 REM FROM THE SEPTEMBER 1986 ISSUE OF COMPUTERIZED INVESTING. BASED ON 1050 REM AN ARTICLE BY MICHAEL E. LEONETTI IN THE APRIL 1986 AAII JOURNAL. 1100 REM 1110 REM THE MARGINAL INCOME TAX RATE, PRE-TAX RATE OF RETURN, AND INFLATION 1120 REM RATE ARE THE EXPECTED, ON-AVERAGE VALUES OF THESE PARAMETERS FROM NOW 1130 REM UNTIL RETIREMENT, FOR THE TAX RATE, OR UNTIL THE DEATH OF THE LAST 1140 REM SURVIVING SPOUSE, FOR THE RATE OF RETURN AND INFLATION RATE. 1150 REM ANTICIPATED, POST-RETIREMENT EXPENDITURES SHOULD REFLECT THE DESIRED 1160 REM AVERAGE STANDARD OF LIVING AND BE BASED ON CURRENT PRICES. BE SURE 1170 REM TO ACCOUNT FOR ALL TYPES OF EXPENDITURES, INCLUDING INCOME, PROPERTY 1180 REM AND OTHER TAXES, AS WELL AS INCIDENTAL CASH EXPENSES. 1190 REM PRE-RETIREMENT CASH FLOWS INCLUDE SAVINGS OUT OF INCOME, PENSION AND 1200 REM IRA CONTRIBUTIONS, AND ANY OTHER FUNDS SET ASIDE FOR RETIREMENT. 1210 REM POST-RETIREMENT CASH FLOWS INCLUDE INCOME SOURCES SUCH AS SOCIAL 1220 REM SECURITY, PENSION BENEFITS, RENTAL INCOME, ETC., BUT EXCLUDE RETURNS 1230 REM FROM RETIREMENT CAPITAL AND SAVINGS (SUCH AS DIVIDENDS AND INTEREST). 2000 REM INITIALIZATION 2010 SS = 2: REM SET SS EQUAL TO 1 FOR APPLE II, ETC. 2020 DIM EX$(100),EP(100),EF(100) 2030 DIM DF$(2,10),VF(2,10),GF(2,10),YF%(2,10,2),RF(2,10),TF$(2,10) 2040 DEF FN PC(X) = INT(10*X+.5)/1000 2050 DEF FN RP(X) = INT(X*100+.5)/100 2060 DEF FN RD(X) = INT(X+.5) 3000 REM MAIN MENU 3010 GOSUB 12500 3020 PRINT "********* RETIREMENT PLANNER **********" 3030 PRINT 3040 PRINT "1> SPECIFY GENERAL PARAMETERS" 3050 PRINT "2> SPECIFY ANNUAL EXPENDITURES" 3060 PRINT "3> SPECIFY NET WORKING CAPITAL" 3070 PRINT "4> SPECIFY PRE-RETIREMENT CASH FLOWS" 3080 PRINT "5> SPECIFY POST-RETIREMENT CASH FLOWS" 3090 PRINT "6> INSPECT AGE/TIME TABLE" 3100 PRINT "7> COMPUTE COMPOUND GROWTH" 3110 PRINT "8> COMPUTE CAPITAL REQUIREMENT/SURPLUS" 3120 PRINT 3130 PRINT "ENTER 1-8 OR 0 TO QUIT PROGRAM"; 3140 INPUT A$: A% = VAL(A$) 3150 IF ((A%=0) AND (A$<>"0")) OR (A%<0) OR (A%>8) THEN 3130 3160 ON A% GOTO 4000,5000,6000,7000,8000,9000,10000,11000 3170 END 4000 REM SPECIFY GENERAL PARAMETERS 4010 GOSUB 12500 4020 PRINT "********* GENERAL PARAMETERS **********" 4030 PRINT 4040 PRINT "1> CURRENT YEAR"; TAB(39-LEN(STR$(YC%))); YC% 4050 PRINT "2> CURRENT AGE OF SPOUSE A"; TAB(39-LEN(STR$(AA%))); AA% 4060 PRINT "3> CURRENT AGE OF SPOUSE B"; TAB(39-LEN(STR$(AB%))); AB% 4070 PRINT "4> NO. OF YEARS UNTIL RETIREMENT"; TAB(39-LEN(STR$(TR%))); TR% 4080 PRINT "5> EXPECTED MORTALITY AGE" 4090 PRINT " OF SPOUSE A"; TAB(39-LEN(STR$(MA%))); MA% 4100 PRINT "6> EXPECTED MORTALITY AGE" 4110 PRINT " OF SPOUSE B"; TAB(39-LEN(STR$(MB%))); MB% 4120 PRINT "7> EXPECTED, ON-AVERAGE" 4130 PRINT " MARGINAL INCOME TAX RATE (%)"; 4140 PRINT TAB(39-LEN(STR$(100*RT))); 100*RT 4150 PRINT "8> EXPECTED, ON-AVERAGE" 4160 PRINT " PRE-TAX RATE OF RETURN (%)"; TAB(39-LEN(STR$(100*RR))); 100*RR 4170 PRINT "9> EXPECTED, ON-AVERAGE" 4180 PRINT " INFLATION RATE (%)"; TAB(39-LEN(STR$(100*RI)));100*RI 4190 PRINT 4200 PRINT "ENTER 1-9 TO MODIFY THAT PARAMETER" 4210 PRINT "OR 0 TO RETURN TO MAIN MENU"; 4220 INPUT A$: A% = VAL(A$): IF A$="0" THEN YR% = YC%+TR%: GOTO 3000 4230 IF (A%<1) OR (A%>9) THEN 4200 4240 PRINT: PRINT "WHAT IS THE "; 4250 ON A% GOTO 4260,4270,4280,4290,4300,4310,4320,4340,4360 4260 PRINT "CURRENT YEAR (19??)";: INPUT YC%: GOTO 4010 4270 PRINT "CURRENT AGE OF SPOUSE A";: INPUT AA%: GOTO 4010 4280 PRINT "CURRENT AGE OF SPOUSE B";: INPUT AB%: GOTO 4010 4290 PRINT "NUMBER OF YEARS UNTIL": PRINT "RETIREMENT";: INPUT TR%: GOTO 4010 4300 PRINT "EXPECTED MORTALITY AGE": PRINT "OF SPOUSE A";: INPUT MA%: GOTO 4010 4310 PRINT "EXPECTED MORTALITY AGE": PRINT "OF SPOUSE B";: INPUT MB%: GOTO 4010 4320 PRINT "EXPECTED, ON-AVERAGE": PRINT "MARGINAL INCOME TAX RATE (%)"; 4330 INPUT RT: RT = FN PC(RT): GOTO 4010 4340 PRINT "EXPECTED, ON-AVERAGE": PRINT "PRE-TAX RATE OF RETURN (%)"; 4350 INPUT RR: RR = FN PC(RR): GOTO 4010 4360 PRINT "EXPECTED, ON-AVERAGE": PRINT "INFLATION RATE (%)"; 4370 INPUT RI: RI = FN PC(RI): GOTO 4010 5000 REM SPECIFY ANNUAL EXPENDITURES 5010 GOSUB 12500 5020 PRINT "********* ANNUAL EXPENDITURES *********" 5030 PRINT 5040 PRINT " POST-" 5050 PRINT " CURRENT RETIRE" 5060 PRINT 5070 E1 = 0: E2 = 0 5080 FOR I=1 TO EX%+1 5090 IF I<10 THEN PRINT " "; 5100 PRINT MID$(STR$(I),SS); "> "; EX$(I); 5110 PRINT TAB(30-LEN(STR$(FN RD(EP(I))))); FN RD(EP(I)); 5120 PRINT TAB(39-LEN(STR$(FN RD(EF(I))))); FN RD(EF(I)) 5130 E1 = E1 + EP(I): E2 = E2 + EF(I) 5140 NEXT I 5150 PRINT " ------ ------" 5160 PRINT " TOTAL"; 5170 PRINT TAB(30-LEN(STR$(FN RD(E1)))); FN RD(E1); 5180 PRINT TAB(39-LEN(STR$(FN RD(E2)))); FN RD(E2) 5190 PRINT 5200 PRINT "ENTER 1"; 5210 IF EX% THEN PRINT "-"; MID$(STR$(EX%+1),SS); 5220 PRINT " TO MODIFY THAT EXPENDITURE" 5230 PRINT "OR 0 TO RETURN TO MAIN MENU"; 5240 INPUT A$: A% = VAL(A$): IF A$="0" THEN 3000 5250 EX% = EX% + ABS(A%-EX%=1) 5260 IF (A%<1) OR (A%>EX%) THEN 5200 5270 PRINT: PRINT "WHAT IS THE EXPENDITURE DESIGNATION" 5280 INPUT EX$(A%): EX$(A%) = LEFT$(EX$(A%),18) 5290 PRINT "WHAT IS THE CURRENT ANNUAL EXPENDITURE": PRINT "($)"; 5300 INPUT EP(A%): EP(A%) = FN RP(EP(A%)) 5310 PRINT "WHAT IS THE ANTICIPATED POST-RETIREMENT": PRINT "EXPENDITURE ($)"; 5320 INPUT EF(A%): EF(A%) = FN RP(EF(A%)) 5330 GOTO 5010 6000 REM SPECIFY NET WORKING CAPITAL 6010 GOSUB 12500 6020 PRINT "******** NET WORKING CAPITAL **********" 6030 PRINT 6040 PRINT "1> CURRENT EXISTING": PRINT " WORKING CAPITAL ($)"; 6050 PRINT TAB(39-LEN(STR$(CW))); CW 6060 PRINT "2> GROWTH RATE FOR EXISTING": PRINT " WORKING CAPITAL (%)"; 6070 PRINT TAB(39-LEN(STR$(100*RC))); 100*RC 6080 PRINT "3> ANTICIPATED LIABILITIES": PRINT " AT RETIREMENT ($)"; 6090 PRINT TAB(39-LEN(STR$(LR))); LR 6100 PRINT 6110 PRINT "ENTER 1-3 TO MODIFY THAT PARAMETER" 6120 PRINT "OR 0 TO RETURN TO MAIN MENU"; 6130 INPUT A$: A% = VAL(A$): IF A$="0" THEN 3000 6140 IF (A%<1) OR (A%>3) THEN 6110 6150 PRINT 6160 ON A% GOTO 6170,6190,6210 6170 PRINT "WHAT IS THE CURRENT EXISTING WORKING": PRINT "CAPITAL ($)"; 6180 INPUT CW: CW = FN RP(CW): GOTO 6010 6190 PRINT "WHAT IS THE GROWTH RATE FOR EXISTING": PRINT "WORKING CAPITAL (%)"; 6200 INPUT RC: RC = FN PC(RC): GOTO 6010 6210 PRINT "WHAT ARE THE ANTICIPATED LIABILITIES AT": PRINT "RETIREMENT ($)"; 6220 INPUT LR: LR = FN RP(LR): GOTO 6010 7000 REM SPECIFY PRE-RETIREMENT FUTURE CASH FLOWS 7010 CF% = F1 7020 GOSUB 12500 7030 PRINT "** PRE-RETIREMENT FUTURE CASH FLOWS ***" 7040 PRINT 7050 PD = 1: GOSUB 7300: F1 = CF% 7060 IF A%=0 THEN 3000 7070 GOTO 7020 7300 REM SUBROUTINE TO ACCEPT CASH FLOW DATA 7310 FOR I=1 TO CF%+1 7320 PRINT MID$(STR$(I),SS); "> "; DF$(PD,I) 7330 PRINT " --BEGINNING VALUE ($)"; 7340 PRINT TAB(39-LEN(STR$(VF(PD,I)))); VF(PD,I) 7350 PRINT " --ANNUAL RATE OF INCREASE (%)"; 7360 PRINT TAB(39-LEN(STR$(100*GF(PD,I)))); 100*GF(PD,I) 7370 PRINT " --YEAR FLOW BEGINS"; 7380 PRINT TAB(39-LEN(STR$(YF%(PD,I,1)))); YF%(PD,I,1) 7390 PRINT " --YEAR FLOW ENDS"; 7400 PRINT TAB(39-LEN(STR$(YF%(PD,I,2)))); YF%(PD,I,2) 7410 IF PD=2 THEN 7450 7420 PRINT " --PRE-TAX RATE OF RETURN (%)"; 7430 PRINT TAB(39-LEN(STR$(100*RF(PD,I)))); 100*RF(PD,I) 7440 PRINT " --RETURNS TAXABLE (Y/N)"; TAB(38); TF$(PD,I) 7450 NEXT I 7460 PRINT 7470 PRINT "ENTER 1"; 7480 IF CF% THEN PRINT "-"; MID$(STR$(CF%+1),SS); 7490 PRINT " TO MODIFY THAT CASH FLOW" 7500 PRINT "OR 0 TO RETURN TO MAIN MENU"; 7510 INPUT A$: A% = VAL(A$): IF A$="0" THEN 7820 7520 CF% = CF% + ABS(A%-CF%=1) 7530 IF (A%<1) OR (A%>CF%) THEN 7470 7540 PRINT: PRINT "WHAT IS THE CASH FLOW DESIGNATION" 7550 INPUT DF$(PD,A%): DF$(PD,A%) = LEFT$(DF$(PD,A%),28) 7560 PRINT "WHAT IS THE BEGINNING VALUE"; 7570 INPUT VF(PD,A%): VF(PD,A%) = FN RP(VF(PD,A%)) 7580 PRINT "WHAT IS THE ANNUAL RATE OF": PRINT "INCREASE (%)"; 7590 INPUT GF(PD,A%): GF(PD,A%) = FN PC(GF(PD,A%)) 7600 FOR K=1 TO 2 7610 PRINT "WHAT IS THE YEAR FLOW "; 7620 IF K=1 THEN PRINT "BEGINS"; 7630 IF K=2 THEN PRINT "ENDS"; 7640 INPUT YF%(PD,A%,K) 7650 IF YF%(PD,A%,K) >= YC% THEN YF%(PD,A%,K) = YF%(PD,A%,K) - YR% 7660 IF YF%(PD,A%,K) >= -TR%+1 THEN 7680 7670 PRINT "FLOW MUST OCCUR IN FUTURE, AFTER": PRINT "CURRENT YEAR": GOTO 7610 7680 IF (YF%(PD,A%,K)<=MA%-AA%-TR%) OR (YF%(PD,A%,K)<=MB%-AB%-TR%) THEN 7700 7690 PRINT "FLOW CANNOT OCCUR AFTER DEATH OF": PRINT "BOTH SPOUSES": GOTO 7610 7700 NEXT K 7710 IF YF%(PD,A%,1) <= YF%(PD,A%,2) THEN 7730 7720 PRINT "FLOW ENDING YEAR MUST NOT":PRINT "PRECEDE BEGINNING YEAR": GOTO 7600 7730 IF (PD=2) OR ((PD=1) AND (YF%(PD,A%,2)<=0)) THEN 7750 7740 PRINT "FLOW MUST END NO LATER THAN": PRINT "RETIREMENT YEAR": GOTO 7600 7750 IF (PD=1) OR ((PD=2) AND (YF%(PD,A%,1)>=0)) THEN 7770 7760 PRINT "FLOW MUST BEGIN NO SOONER THAN": PRINT "RETIREMENT YEAR": GOTO 7600 7770 IF PD=2 THEN 7820 7780 PRINT "WHAT IS THE PRE-TAX RATE OF": PRINT "RETURN (%)"; 7790 INPUT RF(PD,A%): RF(PD,A%) = FN PC(RF(PD,A%)) 7800 PRINT "ARE RETURNS FROM THIS FLOW TAXABLE"; 7810 INPUT TF$(PD,A%): IF (TF$(PD,A%)<>"Y") AND (TF$(PD,A%)<>"N") THEN 7800 7820 RETURN 8000 REM SPECIFY POST-RETIREMENT CASH FLOWS 8010 CF% = F2 8020 GOSUB 12500 8030 PRINT "***** POST-RETIREMENT CASH FLOWS ******" 8040 PRINT 8050 PD = 2: GOSUB 7300: F2 = CF% 8060 IF A%=0 THEN 3000 8070 GOTO 8020 9000 REM INSPECT AGE/TIME TABLE 9010 GOSUB 12500 9020 PRINT "*********** AGE/TIME TABLE ************" 9030 PRINT 9040 J = 0 9050 PRINT " -------YEAR-------" 9060 PRINT " AGE OF AGE OF ABSO- RELATIVE TO" 9070 PRINT "SPOUSE A SPOUSE B LUTE RETIREMENT" 9080 PRINT 9090 FOR K=J TO J+14 9100 IF AA%+K <= MA% THEN PRINT TAB(6-LEN(STR$(AA%+K))); AA%+K;: GOTO 9120 9110 PRINT TAB(4); "**"; 9120 IF AB%+K <= MB% THEN PRINT TAB(16-LEN(STR$(AB%+K))); AB%+K;: GOTO 9140 9130 PRINT TAB(14); "**"; 9140 PRINT TAB(26-LEN(STR$(YC%+K))); YC%+K; 9150 PRINT TAB(35-LEN(STR$(-TR%+K))); -TR%+K 9160 NEXT K 9170 PRINT 9180 PRINT "ENTER B TO BACK UP, C TO CONTINUE" 9190 PRINT "OR 0 TO RETURN TO MAIN MENU"; 9200 INPUT A$: IF A$="0" THEN 3000 9210 IF A$<>"B" AND A$<>"C" THEN 9180 9220 IF A$="B" THEN IF J THEN J = J-15 9230 IF A$="C" THEN IF (AA%+J+14"B" AND A$<>"C" AND A$<>"R" THEN 10200 10240 IF A$="R" THEN 10010 10250 IF A$="B" THEN IF J THEN J = J-15 10260 IF A$="C" THEN IF (AA%+J+14N) THEN N = MB%-AB% 11140 V = FV: R = RR: G = RI: N = N-TR%: GOSUB 12400 11150 CE = PF 11200 REM RETIREMENT-YEAR NET FUTURE VALUE OF CURRENT CAPITAL (CN) 11210 V = CW: R = RC: N = TR%: GOSUB 12100 11220 CN = FV - LR 11300 REM RETIREMENT-YEAR CAPITALIZED VALUE OF PRE-RETIREMENT, 11310 REM FUTURE CASH FLOWS (C1) 11320 C1 = 0 11330 FOR J=1 TO F1 11340 V = VF(1,J): R = RF(1,J)*(1-RT*ABS(TF$(1,J)="Y")): G = GF(1,J) 11350 N = YF%(1,J,2)-YF%(1,J,1): GOSUB 12300 11360 V = FF: R = RF(1,J)*(1-RT*ABS(TF$(1,J)="Y")): N = -YF%(1,J,2): GOSUB 12100 11370 C1 = C1+FV 11380 NEXT J 11400 REM RETIREMENT-YEAR CAPITALIZED VALUE OF POST-RETIREMENT CASH FLOWS (C2) 11410 C2 = 0 11420 FOR J=1 TO F2 11430 V = VF(2,J): R = RR: G = GF(2,J): N = YF%(2,J,2)-YF%(2,J,1): GOSUB 12400 11440 V = PF: R = RR: N = YF%(2,J,1): GOSUB 12200 11450 C2 = C2+PV 11460 NEXT J 11500 REM RETIREMENT-YEAR CAPITAL REQUIREMENT/SURPLUS 11510 CR = CE - CN - C1 - C2 11520 PRINT "YOUR PROJECTED CAPITAL "; 11530 IF CR>=0 THEN PRINT "REQUIREMENT"; 11540 IF CR<0 THEN PRINT "SURPLUS"; 11550 PRINT " AT": PRINT "RETIREMENT ($): "; FN RP(ABS(CR)) 11560 PRINT 11600 REM REQUIRED SAVINGS ADJUSTMENT 11610 ON SGN(CR)+2 GOTO 11620,11650,11650 11620 PRINT "THE AMOUNT YOU CAN DISSAVE EACH YEAR" 11630 PRINT "UNTIL RETIREMENT AND STILL MEET YOUR" 11640 PRINT "EXPENDITURE OBJECTIVES ($): ";: GOTO 11680 11650 PRINT "THE ADDITIONAL AMOUNT YOU MUST SAVE" 11660 PRINT "EACH YEAR UNTIL RETIREMENT TO MEET YOUR" 11670 PRINT "EXPENDITURE OBJECTIVES ($): "; 11680 V = 1: R = RR*(1-RT): G = 0: N = TR%-1: GOSUB 12300 11690 PRINT FN RP(ABS(CR)/FF) 11700 REM ACHIEVABLE POST-RETIREMENT ANNUAL EXPENDITURES WITH NO ADJUSTMENT 11710 PRINT 11720 PRINT "OTHERWISE, THE POST-RETIREMENT ANNUAL" 11730 PRINT "EXPENDITURES (IN CURRENT DOLLARS) YOU" 11740 PRINT "CAN ACHIEVE WITH NO PRE-RETIREMENT" 11750 PRINT "SAVINGS ADJUSTMENT ($): "; 11760 N = MA%-AA%: IF (MB%-AB%>N) THEN N = MB%-AB% 11770 V = 1: R = RR: G = RI: N = N-TR%: GOSUB 12400 11780 V = (CN+C1+C2)/PF: R = RI: N = TR%: GOSUB 12200 11790 PRINT FN RP(PV) 11800 PRINT 11810 PRINT "ENTER 0 TO RETURN TO MAIN MENU"; 11820 INPUT A$: IF A$<>"0" THEN 11810 11830 GOTO 3000 12000 REM FORMULAS & OTHER SUBROUTINES 12100 REM FUTURE VALUE (FV) 12110 FV = V * (1+R)^N 12120 RETURN 12200 REM PRESENT VALUE (PV) 12210 PV = V / (1+R)^N 12220 RETURN 12300 REM FUTURE VALUE OF CASH FLOW (FF) 12310 IF R=G THEN G = G-.0001 12320 FF = V * ((1+R)^(N+1) - (1+G)^(N+1)) / (R-G) 12330 RETURN 12400 REM PRESENT VALUE OF CASH FLOW (PF) 12410 IF R=G THEN G = G-.0001 12420 PF = V * ((1+R)^(N+1) - (1+G)^(N+1)) / ((R-G)*(1+R)^N) 12430 RETURN 12500 REM SUBROUTINE TO CLEAR SCREEN 12510 REM IN LINE 12540, 'CLS' IS THE SCREEN CLEARING COMMAND FOR PC'S & 12520 REM COMPATIBLES. USE 'HOME' INSTEAD FOR THE APPLE II, 'PRINT CHR$(26)' 12530 REM FOR THE KAYPRO (CP/M), 'PRINT CHR$(147)' FOR THE COMMODORE 64, ETC. 12540 PRINT CHR$(26) 12550 RETURN