home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / MISC / FINANCE / INVEST.LBR / CDURATN.BZS / CDURATN.BAS
BASIC Source File  |  2000-06-30  |  5KB  |  95 lines

  1. 5   REM    PRINT CHR$(26) -- CLEARS THE SCREEN REPLACE IF NECESSARY
  2. 10  REM    BOND DURATION PROGRAM
  3. 20  REM    BY BOB EDWARDS - AAII
  4. 30  REM 
  5. 40  REM   SEE MARCH 1984 AAII JOURNAL
  6. 50  REM
  7. 60  PRINT CHR$(26) : PRINT "    BOND DURATION CALCULATIONS"
  8. 70  PRINT : PRINT "THIS PROGRAM ASSUMES SEMI-ANNUAL": PRINT "INTEREST PAYMENTS.
  9. 80  DIM D(50): DIM Q(50): DIM PC(50):I% = 0
  10. 90  PRINT : PRINT : PRINT "PROVIDE THE FOLLOWING INFORMATION:"
  11. 100 I% = I% + 1
  12. 110  PRINT : PRINT : PRINT "BOND ";I%: PRINT : PRINT : INPUT "WHAT IS THE COUPON RATE? ";C
  13. 120  PRINT : PRINT : INPUT "HOW MANY YEARS TO MATURITY? ";N: PRINT : PRINT : PRINT "WHAT IS THE BOND PRICE": INPUT "AS PERCENT OF PAR VALUE? ";F
  14. 130  PRINT : INPUT "ARE ALL VALUES CORRECT? (YES:Y, NO:N) ";J$: IF J$ = "Y" GOTO 150
  15. 140  PRINT CHR$(26) : GOTO 110
  16. 150 CD = C * 5:NP = N * 2:M = 10 * F:R = ((1000 - M) / N + 2 * CD) / ((M + 1000) / 2) / 2
  17. 160 RT = (CD - (M - 1000) * R / ((1 + R) ^ NP - 1)) / M
  18. 170 X = 100000! * RT:Z = 100000! * R:L =  ABS (X - Z)
  19. 180  IF L <  = .001 THEN  GOTO 200
  20. 190 R = (RT + R) / 2: GOTO 160
  21. 200 Y = RT * 200:Q = 100:Y =  INT (Y * Q + .5) / Q
  22. 210  PRINT CHR$(26) : PRINT "BOND ";I%: PRINT "PRICE AS % OF PAR: ";F;"%": PRINT "(PRICE FOR $1000 BOND: $";M;")": PRINT "COUPON: ";C;"%": PRINT "MATURITY: ";N;" YEARS": PRINT "YTM: ";Y;"%"
  23. 220 CM = CD / M:YR = 1 + RT
  24. 230 D = 0!
  25. 240  FOR P = 1 TO NP
  26. 250 D = D + P * CM * (1 / YR) ^ P
  27. 260  NEXT P
  28. 270 D = D + 1000 * NP / (M * (YR ^ NP))
  29. 280 P = 100:D =  INT (.5 * D * P + .5) / P: PRINT : PRINT : PRINT "BOND DURATION: ";D;" YEARS":D(I%) = D
  30. 290  PRINT : PRINT : PRINT : PRINT "WHICH OF THE FOLLOWING CALCULATIONS": PRINT "DO YOU WISH TO PERFORM NEXT?": PRINT : PRINT "  (S) PRICE SENSITIVITY ANALYSIS": PRINT : PRINT "  (D) ANOTHER DURATION": PRINT : PRINT "  (P) PORTFOLIO DURATION"
  31. 300  PRINT : PRINT "  (F) CALCULATIONS FINISHED": PRINT : INPUT "(TYPE S, D, P, OR F) ";V$
  32. 310  PRINT CHR$(26) : IF V$ = "D" GOTO 100
  33. 320  PRINT CHR$(26) : IF V$ = "P" GOTO 600
  34. 330  PRINT CHR$(26) : IF V$ = "F" GOTO 910
  35. 340  PRINT CHR$(26) : PRINT "  INTEREST RATE SENSITIVITY ANALYSIS"
  36. 350  PRINT : PRINT "BOND ";I%: PRINT "COUPON: ";C: PRINT "PRICE AS % OF PAR: ";F;"%"
  37. 360 M = F * 10
  38. 370  PRINT "(PRICE FOR $1000 BOND: $";M;")": PRINT "MATURITY: ";N;" YEARS": PRINT "YTM:  ";Y;"%"
  39. 380  PRINT : INPUT "WHAT IS THE NEW INTEREST RATE (%)? ";X
  40. 390  PRINT "(PERCENTAGE CHANGE IS APPROXIMATE. NEW"
  41. 400  PRINT " BOND PRICE IS CALCULATED USING THE"
  42. 410  PRINT " NEW INTEREST RATE, AND IS ACCURATE.)"
  43. 420 EL = ( - D) * ((1 + X / 100) - (1 + Y / 100)) / (1 + Y / 100)
  44. 430 P = 100:EL =  INT (100 * EL * P + .5) / P
  45. 440  PRINT : PRINT "THE PERCENTAGE PRICE CHANGE= ";EL;"%"
  46. 450 W = 1
  47. 460 XR = X / 200 + 1
  48. 470 M = 200 * CD / X * (1 - (XR) ^ ( - NP)) + 1000 * XR ^ ( - NP)
  49. 480 P = 100:MP =  INT (M * P + .5) / P:MP = MP / 10
  50. 490  PRINT : PRINT "NEW BOND PRICE: ";MP;" PERCENT OF PAR,"
  51. 500 P = 100:MD =  INT (M * P + .5) / P
  52. 510  PRINT "OR $";MD;" FOR A $1000 BOND."
  53. 520  PRINT : PRINT : PRINT "INDICATE YOUR NEXT CALCULATION:"
  54. 530  PRINT "  (S) ANOTHER INTEREST RATE"
  55. 540  PRINT "  (D) DURATION FOR NEXT BOND"
  56. 550  PRINT "  (P) PORTFOLIO DURATION"
  57. 560  PRINT "  (F) CALCULATIONS FINISHED": INPUT "(TYPE S, D, P, OR F) ";Z$
  58. 570  IF Z$ = "S" GOTO 340
  59. 580  PRINT CHR$(26) : IF Z$ = "D" GOTO 100
  60. 590  IF Z$ = "F" GOTO 910
  61. 600  FOR I = 1 TO I%: PRINT "BOND ";I,"DURATION ";D(I): NEXT I
  62. 610  GOTO 690
  63. 620  PRINT CHR$(26) :TD = 0:PT = 0
  64. 630  FOR L = 1 TO (I% - 1): PRINT "BOND ";L,"DURATION: ";D(L): INPUT "       PERCENTAGE OF PORTFOLIO: ";PC(L)
  65. 640 TD = TD + D(L) * PC(L) / 100:PT = PT + PC(L): NEXT L
  66. 650  PRINT "BOND ";I%,"DURATION: ";D(I%): PRINT "          PORTFOLIO PERCENTAGE: ";(100 - PT)
  67. 660 TD = TD + D(I%) * (100 - PT) / 100:W = 1000:TD =  INT (TD * W + .5) / W
  68. 670  PRINT : PRINT "PORTFOLIO DURATION: ";TD;" YEARS"
  69. 680  GOTO 870
  70. 690  PRINT : PRINT 
  71. 700  PRINT "THIS PROGRAM CAN CALCULATE PORTFILIO": PRINT "COMPOSITION BASED ON DOLLAR VALUES": PRINT "OR PERCENTAGES."
  72. 710  PRINT : INPUT "WHICH DO YOU PREFER? ($ OR %) ";U$
  73. 720  IF U$ = "%" THEN  GOTO 620
  74. 730 TQ = 0
  75. 740  PRINT CHR$(26) : FOR L = 1 TO I%: PRINT "BOND ";L: INPUT "DOLLAR AMOUNT: $";Q(L):TQ = TQ + Q(L): NEXT L
  76. 750  FOR L = 1 TO I%
  77. 760 PC(L) = Q(L) / TQ
  78. 770 W = 10000
  79. 780 PC(L) = 100 * ( INT (PC(L) * W + .5) / W)
  80. 790  GOTO 800
  81. 800  NEXT L
  82. 810  PRINT CHR$(26) : FOR L = 1 TO I%
  83. 820  PRINT "BOND ";L; TAB( 9)"PORT %: ";PC(L); TAB( 25)"DUR: ";D(L)
  84. 830  NEXT L
  85. 840 PD = 0
  86. 850  FOR L = 1 TO I%:PD = PD + (PC(L) * D(L) / 100): NEXT L:Q = 1000:PD =  INT (PD * Q + .5) / Q
  87. 860  PRINT : PRINT : PRINT "PORTFOLIO DURATION: ";PD;" YEARS"
  88. 870  PRINT : PRINT : PRINT "DO YOU WISH TO MAKE ANOTHER"
  89. 880  PRINT : PRINT "PORTFOLIO CALCULATION?"
  90. 890  PRINT : INPUT "(YES:Y, NO:N) ";E$
  91. 900  PRINT CHR$(26) : IF E$ = "Y" GOTO 600
  92. 910  PRINT:PRINT:PRINT:PRINT:PRINT:PRINT "THIS PROGRAM HAS ENDED."
  93. 920  END 
  94. E$
  95. 900  PRINT CHR$(26) : IF E$ = "Y" GOTO 600