ÐÏࡱá>þÿ þÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot Entryÿÿÿÿÿÿÿÿ*0_šîÏ»òÀð^@¥ó ×(ÆþÿÿÿContentsÿÿÿÿÿÿÿÿÿÿÿÿ(%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$%&'()þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot Entryÿÿÿÿÿÿÿÿ*0_šîÏ»òÀð^gÿ×(ÆþÿÿÿContentsÿÿÿÿÿÿÿÿÿÿÿÿ(%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿýÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !"þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì‹{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss\fprq2 System;}{\f3\fmodern\fprq2 Courier New;}} {\colortbl\red0\green0\blue0;\red0\green175\blue0;\red0\green0\blue255;} \deflang1033\pard\plain\f3\fs20\cf2 MODEL\plain\f3\fs20\cf0 : \par \plain\f3\fs20\cf1 ! Solves the generic Markowitz portfolio \par model in a loop to generate the points \par on the efficient frontier;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 SETS\plain\f3\fs20\cf0 : \par ASSET: RATE, UB, X; \par COVMAT( ASSET, ASSET): V; \par POINTS: XRET, YVAR; \par \plain\f3\fs20\cf2 ENDSETS\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 DATA\plain\f3\fs20\cf0 : \par \plain\f3\fs20\cf1 ! Number of points on the \par efficient frontier graph;\plain\f3\fs20\cf0 \par NPOINTS = 10; \par POINTS = 1..NPOINTS; \par \plain\f3\fs20\cf1 ! The stocks;\plain\f3\fs20\cf0 \par ASSET = GOOGLE, YAHOO, CISCO; \par \plain\f3\fs20\cf1 ! Expected growth rate of each asset;\plain\f3\fs20\cf0 \par RATE = 1.3 1.2 1.08; \par \plain\f3\fs20\cf1 ! Upper bound on investment in each;\plain\f3\fs20\cf0 \par UB = .75 .75 .75; \par \plain\f3\fs20\cf1 ! Covariance matrix;\plain\f3\fs20\cf0 \par V = 3 1 -.5 \par 1 2 -.4 \par -.5 -.4 1; \par \plain\f3\fs20\cf2 ENDDATA\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf1 ! Below are the three objectives we'll use;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 SUBMODEL\plain\f3\fs20\cf0 SUB_RET_MAX: \par [OBJ_RET_MAX] \plain\f3\fs20\cf2 MAX\plain\f3\fs20\cf0 = RETURN; \par \plain\f3\fs20\cf2 ENDSUBMODEL\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 SUBMODEL\plain\f3\fs20\cf0 SUB_RET_MIN: \par [OBJ_RET_MIN] \plain\f3\fs20\cf2 MIN\plain\f3\fs20\cf0 = RETURN; \par \plain\f3\fs20\cf2 ENDSUBMODEL\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 SUBMODEL\plain\f3\fs20\cf0 SUB_MIN_VAR: \par [OBJ_MIN_VAR] \plain\f3\fs20\cf2 MIN\plain\f3\fs20\cf0 = \par \plain\f3\fs20\cf2 @SUM\plain\f3\fs20\cf0 ( COVMAT( I, J): V( I, J) * X( I) * X( J)); \par \plain\f3\fs20\cf2 ENDSUBMODEL\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf1 !and the constraints;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 SUBMODEL\plain\f3\fs20\cf0 SUB_CONSTRAINTS: \par \plain\f3\fs20\cf1 ! Compute return;\plain\f3\fs20\cf0 \par RETURN = \plain\f3\fs20\cf2 @SUM\plain\f3\fs20\cf0 ( ASSET: RATE * X); \par \plain\f3\fs20\cf1 ! Must be fully invested;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @SUM\plain\f3\fs20\cf0 ( ASSET: X) = 1; \par \plain\f3\fs20\cf1 ! Upper bounds on each;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( ASSET: \plain\f3\fs20\cf2 @BND\plain\f3\fs20\cf0 ( 0, X, UB)); \par \plain\f3\fs20\cf1 ! Must achieve target return;\plain\f3\fs20\cf0 \par RETURN >= RET_LIM; \par \plain\f3\fs20\cf2 ENDSUBMODEL\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 CALC\plain\f3\fs20\cf0 : \par \plain\f3\fs20\cf1 ! Set some parameters;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf1 ! Reset all params;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @SET\plain\f3\fs20\cf0 ( 'DEFAULT'); \par \plain\f3\fs20\cf1 ! Output error messages only;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @SET\plain\f3\fs20\cf0 ( 'TERSEO', 2); \par \plain\f3\fs20\cf1 ! Suppress status window;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @SET\plain\f3\fs20\cf0 ( 'STAWIN', 0); \par \par \plain\f3\fs20\cf1 ! Solve to get maximum return;\plain\f3\fs20\cf0 \par RET_LIM = 0; \par \plain\f3\fs20\cf2 @SOLVE\plain\f3\fs20\cf0 ( SUB_RET_MAX, SUB_CONSTRAINTS); \par \par \plain\f3\fs20\cf1 ! Save maximum return;\plain\f3\fs20\cf0 \par RET_MAX = OBJ_RET_MAX; \par \par \plain\f3\fs20\cf1 ! Solve to get minimum return;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @SOLVE\plain\f3\fs20\cf0 ( SUB_RET_MIN, SUB_CONSTRAINTS); \par \par \plain\f3\fs20\cf1 ! Save minimum return;\plain\f3\fs20\cf0 \par RET_MIN = OBJ_RET_MIN; \par \par \plain\f3\fs20\cf1 ! Interval between return points;\plain\f3\fs20\cf0 \par INTERVAL = \par ( RET_MAX - RET_MIN) / ( NPOINTS-1); \par \par \plain\f3\fs20\cf1 ! Loop over range of possible returns, \par minimizing variance;\plain\f3\fs20\cf0 \par RET_LIM = RET_MIN; \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( POINTS( I): \par \plain\f3\fs20\cf2 @SOLVE\plain\f3\fs20\cf0 ( SUB_MIN_VAR, SUB_CONSTRAINTS); \par XRET( I) = RET_LIM; \par YVAR( I) = OBJ_MIN_VAR; \par RET_LIM = RET_LIM + INTERVAL; \par ); \par \par \plain\f3\fs20\cf1 ! Display the results;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( ' Return Variance', \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)); \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( POINTS: \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( \plain\f3\fs20\cf2 @FORMAT\plain\f3\fs20\cf0 ( XRET, '#12.6G'), \par \plain\f3\fs20\cf2 @FORMAT\plain\f3\fs20\cf0 ( YVAR, '#12.6G'), \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)) \par ); \par \plain\f3\fs20\cf2 ENDCALC\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 CALC\plain\f3\fs20\cf0 : \par \par \plain\f3\fs20\cf1 ! The remainder of the model graphs the efficient frontier;\plain\f3\fs20\cf0 \par \par NHASHY = 20; \par NHASHX = 60; \par SCALE = 10; \par \par V0 = \plain\f3\fs20\cf2 @FLOOR\plain\f3\fs20\cf0 ( YVAR( 1) * SCALE); \par V0 = V0 / SCALE; \par V1 = \plain\f3\fs20\cf2 @FLOOR\plain\f3\fs20\cf0 ( YVAR( NPOINTS) * SCALE + .5); \par V1 = V1 / SCALE; \par \par R0 = \plain\f3\fs20\cf2 @FLOOR\plain\f3\fs20\cf0 ( RET_MIN * SCALE); \par R0 = R0 / SCALE; \par R1 = \plain\f3\fs20\cf2 @FLOOR\plain\f3\fs20\cf0 ( RET_MAX * SCALE + .5); \par R1 = R1 / SCALE; \par \par \plain\f3\fs20\cf2 ENDCALC\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 SETS\plain\f3\fs20\cf0 : \par HASHX /1..NHASHX/: XAXIS; \par HASHY /1..NHASHY/: YAXIS; \par GRID( HASHY, HASHX): CHECK; \paì‹{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss\fprq2 System;}{\f3\fmodern\fprq2 Courier New;}} {\colortbl\red0\green0\blue0;\red0\green175\blue0;\red0\green0\blue255;} \deflang1033\pard\plain\f3\fs20\cf2 MODEL\plain\f3\fs20\cf0 : \par \plain\f3\fs20\cf1 ! Solves the generic Markowitz portfolio \par model in a loop to generate the points \par on the efficient frontier;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 SETS\plain\f3\fs20\cf0 : \par ASSET: RATE, UB, X; \par COVMAT( ASSET, ASSET): V; \par POINTS: XRET, YVAR; \par \plain\f3\fs20\cf2 ENDSETS\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 DATA\plain\f3\fs20\cf0 : \par \plain\f3\fs20\cf1 ! Number of points on the \par efficient frontier graph;\plain\f3\fs20\cf0 \par NPOINTS = 10; \par POINTS = 1..NPOINTS; \par \plain\f3\fs20\cf1 ! The stocks;\plain\f3\fs20\cf0 \par ASSET = GOOGLE, YAHOO, CISCO; \par \plain\f3\fs20\cf1 ! Expected growth rate of each asset;\plain\f3\fs20\cf0 \par RATE = 1.3 1.2 1.08; \par \plain\f3\fs20\cf1 ! Upper bound on investment in each;\plain\f3\fs20\cf0 \par UB = .75 .75 .75; \par \plain\f3\fs20\cf1 ! Covariance matrix;\plain\f3\fs20\cf0 \par V = 3 1 -.5 \par 1 2 -.4 \par -.5 -.4 1; \par \plain\f3\fs20\cf2 ENDDATA\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf1 ! Below are the three objectives we'll use;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 SUBMODEL\plain\f3\fs20\cf0 SUB_RET_MAX: \par [OBJ_RET_MAX] \plain\f3\fs20\cf2 MAX\plain\f3\fs20\cf0 = RETURN; \par \plain\f3\fs20\cf2 ENDSUBMODEL\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 SUBMODEL\plain\f3\fs20\cf0 SUB_RET_MIN: \par [OBJ_RET_MIN] \plain\f3\fs20\cf2 MIN\plain\f3\fs20\cf0 = RETURN; \par \plain\f3\fs20\cf2 ENDSUBMODEL\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 SUBMODEL\plain\f3\fs20\cf0 SUB_MIN_VAR: \par [OBJ_MIN_VAR] \plain\f3\fs20\cf2 MIN\plain\f3\fs20\cf0 = \par \plain\f3\fs20\cf2 @SUM\plain\f3\fs20\cf0 ( COVMAT( I, J): V( I, J) * X( I) * X( J)); \par \plain\f3\fs20\cf2 ENDSUBMODEL\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf1 !and the constraints;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 SUBMODEL\plain\f3\fs20\cf0 SUB_CONSTRAINTS: \par \plain\f3\fs20\cf1 ! Compute return;\plain\f3\fs20\cf0 \par RETURN = \plain\f3\fs20\cf2 @SUM\plain\f3\fs20\cf0 ( ASSET: RATE * X); \par \plain\f3\fs20\cf1 ! Must be fully invested;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @SUM\plain\f3\fs20\cf0 ( ASSET: X) = 1; \par \plain\f3\fs20\cf1 ! Upper bounds on each;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( ASSET: \plain\f3\fs20\cf2 @BND\plain\f3\fs20\cf0 ( 0, X, UB)); \par \plain\f3\fs20\cf1 ! Must achieve target return;\plain\f3\fs20\cf0 \par RETURN >= RET_LIM; \par \plain\f3\fs20\cf2 ENDSUBMODEL\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 CALC\plain\f3\fs20\cf0 : \par \plain\f3\fs20\cf1 ! Set some parameters;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf1 ! Reset all params;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @SET\plain\f3\fs20\cf0 ( 'DEFAULT'); \par \plain\f3\fs20\cf1 ! Output error messages only;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @SET\plain\f3\fs20\cf0 ( 'TERSEO', 2); \par \plain\f3\fs20\cf1 ! Suppress status window;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @SET\plain\f3\fs20\cf0 ( 'STAWIN', 0); \par \par \plain\f3\fs20\cf1 ! Solve to get maximum return;\plain\f3\fs20\cf0 \par RET_LIM = 0; \par \plain\f3\fs20\cf2 @SOLVE\plain\f3\fs20\cf0 ( SUB_RET_MAX, SUB_CONSTRAINTS); \par \par \plain\f3\fs20\cf1 ! Save maximum return;\plain\f3\fs20\cf0 \par RET_MAX = OBJ_RET_MAX; \par \par \plain\f3\fs20\cf1 ! Solve to get minimum return;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @SOLVE\plain\f3\fs20\cf0 ( SUB_RET_MIN, SUB_CONSTRAINTS); \par \par \plain\f3\fs20\cf1 ! Save minimum return;\plain\f3\fs20\cf0 \par RET_MIN = OBJ_RET_MIN; \par \par \plain\f3\fs20\cf1 ! Interval between return points;\plain\f3\fs20\cf0 \par INTERVAL = \par ( RET_MAX - RET_MIN) / ( NPOINTS-1); \par \par \plain\f3\fs20\cf1 ! Loop over range of possible returns, \par minimizing variance;\plain\f3\fs20\cf0 \par RET_LIM = RET_MIN; \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( POINTS( I): \par \plain\f3\fs20\cf2 @SOLVE\plain\f3\fs20\cf0 ( SUB_MIN_VAR, SUB_CONSTRAINTS); \par XRET( I) = RET_LIM; \par YVAR( I) = OBJ_MIN_VAR; \par RET_LIM = RET_LIM + INTERVAL; \par ); \par \par \plain\f3\fs20\cf1 ! Display the results;\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( ' Return Variance', \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)); \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( POINTS: \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( \plain\f3\fs20\cf2 @FORMAT\plain\f3\fs20\cf0 ( XRET, '#12.6G'), \par \plain\f3\fs20\cf2 @FORMAT\plain\f3\fs20\cf0 ( YVAR, '#12.6G'), \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)) \par ); \par \plain\f3\fs20\cf2 ENDCALC\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 CALC\plain\f3\fs20\cf0 : \par \par \plain\f3\fs20\cf1 ! The remainder of the model graphs the efficient frontier;\plain\f3\fs20\cf0 \par \par NHASHY = 20; \par NHASHX = 60; \par SCALE = 10; \par \par V0 = \plain\f3\fs20\cf2 @FLOOR\plain\f3\fs20\cf0 ( YVAR( 1) * SCALE); \par V0 = V0 / SCALE; \par V1 = \plain\f3\fs20\cf2 @FLOOR\plain\f3\fs20\cf0 ( YVAR( NPOINTS) * SCALE + .5); \par V1 = V1 / SCALE; \par \par R0 = \plain\f3\fs20\cf2 @FLOOR\plain\f3\fs20\cf0 ( RET_MIN * SCALE); \par R0 = R0 / SCALE; \par R1 = \plain\f3\fs20\cf2 @FLOOR\plain\f3\fs20\cf0 ( RET_MAX * SCALE + .5); \par R1 = R1 / SCALE; \par \par \plain\f3\fs20\cf2 ENDCALC\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 SETS\plain\f3\fs20\cf0 : \par HASHX /1..NHASHX/: XAXIS; \par HASHY /1..NHASHY/: YAXIS; \par GRID( HASHY, HASHX): CHECK; \par \plain\f3\fs20\cf2 ENDSETS\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 CALC\plain\f3\fs20\cf0 : \par XWIDTH = ( R1 - R0) / NHASHX; \par XAXIS( 1) = R0 + XWIDTH; \par XAXIS( NHASHX) = R1; \par \par YHEIGHT = ( V1 - V0) / NHASHY; \par YAXIS( 1) = V0 + YHEIGHT; \par YAXIS( NHASHY) = V1; \par \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( HASHY( J) | J #GT# 1 #AND# J #LT# NHASHY: \par YAXIS( J) = YAXIS( J - 1) + YHEIGHT; \par ); \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( HASHX( J) | J #GT# 1 #AND# J #LT# NHASHX: \par XAXIS( J) = XAXIS( J - 1) + XWIDTH; \par ); \par \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( GRID: CHECK = 0); \par \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( POINTS( P): \par J = 1; \par \plain\f3\fs20\cf2 @WHILE\plain\f3\fs20\cf0 ( XRET( P) #GT# XAXIS( J): J = J + 1); \par I = 1; \par \plain\f3\fs20\cf2 @WHILE\plain\f3\fs20\cf0 ( YVAR( P) #GT# YAXIS( I): I = I + 1); \par CHECK( I, J) = 1; \par ); \par \par INDENT = 12; \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 2), (INDENT-3)*' ', 'Variance', \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)); \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( INDENT*' ', '^', \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)); \par \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( HASHY( I): \par \plain\f3\fs20\cf2 @IFC\plain\f3\fs20\cf0 ( I #EQ# 1: \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( ( INDENT - 5) * ' ', \plain\f3\fs20\cf2 @FORMAT\plain\f3\fs20\cf0 ( V1, '#4.2G'), ' |'); \par \plain\f3\fs20\cf2 @ELSE\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @IFC\plain\f3\fs20\cf0 ( I #EQ# \plain\f3\fs20\cf2 @SIZE\plain\f3\fs20\cf0 ( HASHY): \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( ( INDENT - 5) * ' ', \plain\f3\fs20\cf2 @FORMAT\plain\f3\fs20\cf0 ( V0, '#4.2G'), ' |'); \par \plain\f3\fs20\cf2 @ELSE\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( INDENT*' ', '|'); \par ); \par ); \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( HASHX( J): \par \plain\f3\fs20\cf2 @IFC\plain\f3\fs20\cf0 ( CHECK( \plain\f3\fs20\cf2 @SIZE\plain\f3\fs20\cf0 ( HASHY) - I + 1, J): \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( '*'); \par \plain\f3\fs20\cf2 @ELSE\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( ' '); \par ); \par ); \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)); \par ); \par \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( INDENT*' ', NHASHX*'-', '>', \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)); \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( (INDENT-2)*' ', \plain\f3\fs20\cf2 @FORMAT\plain\f3\fs20\cf0 ( R0, '#4.2G'), ( NHASHX - 4)*' ', R1, \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)); \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( ( INDENT + NHASHX - 3)*' ', 'Return', \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 3)); \par \par \plain\f3\fs20\cf2 ENDCALC\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 END\plain\f3\fs20\cf0 \par } \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( ( INDENT + NHASHX - 3)*' ', 'Return', \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 3)); \par \par \plain\f3\fs20\cf2 ENDCALC\plain\f3\fs20\cf0 \par \par \pr \plain\f3\fs20\cf2 ENDSETS\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 CALC\plain\f3\fs20\cf0 : \par XWIDTH = ( R1 - R0) / NHASHX; \par XAXIS( 1) = R0 + XWIDTH; \par XAXIS( NHASHX) = R1; \par \par YHEIGHT = ( V1 - V0) / NHASHY; \par YAXIS( 1) = V0 + YHEIGHT; \par YAXIS( NHASHY) = V1; \par \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( HASHY( J) | J #GT# 1 #AND# J #LT# NHASHY: \par YAXIS( J) = YAXIS( J - 1) + YHEIGHT; \par ); \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( HASHX( J) | J #GT# 1 #AND# J #LT# NHASHX: \par XAXIS( J) = XAXIS( J - 1) + XWIDTH; \par ); \par \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( GRID: CHECK = 0); \par \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( POINTS( P): \par J = 1; \par \plain\f3\fs20\cf2 @WHILE\plain\f3\fs20\cf0 ( XRET( P) #GT# XAXIS( J): J = J + 1); \par I = 1; \par \plain\f3\fs20\cf2 @WHILE\plain\f3\fs20\cf0 ( YVAR( P) #GT# YAXIS( I): I = I + 1); \par CHECK( I, J) = 1; \par ); \par \par INDENT = 12; \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 2), (INDENT-3)*' ', 'Variance', \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)); \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( INDENT*' ', '^', \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)); \par \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( HASHY( I): \par \plain\f3\fs20\cf2 @IFC\plain\f3\fs20\cf0 ( I #EQ# 1: \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( ( INDENT - 5) * ' ', \plain\f3\fs20\cf2 @FORMAT\plain\f3\fs20\cf0 ( V1, '#4.2G'), ' |'); \par \plain\f3\fs20\cf2 @ELSE\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @IFC\plain\f3\fs20\cf0 ( I #EQ# \plain\f3\fs20\cf2 @SIZE\plain\f3\fs20\cf0 ( HASHY): \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( ( INDENT - 5) * ' ', \plain\f3\fs20\cf2 @FORMAT\plain\f3\fs20\cf0 ( V0, '#4.2G'), ' |'); \par \plain\f3\fs20\cf2 @ELSE\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( INDENT*' ', '|'); \par ); \par ); \par \plain\f3\fs20\cf2 @FOR\plain\f3\fs20\cf0 ( HASHX( J): \par \plain\f3\fs20\cf2 @IFC\plain\f3\fs20\cf0 ( CHECK( \plain\f3\fs20\cf2 @SIZE\plain\f3\fs20\cf0 ( HASHY) - I + 1, J): \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( '*'); \par \plain\f3\fs20\cf2 @ELSE\plain\f3\fs20\cf0 \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( ' '); \par ); \par ); \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)); \par ); \par \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( INDENT*' ', NHASHX*'-', '>', \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)); \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( (INDENT-2)*' ', \plain\f3\fs20\cf2 @FORMAT\plain\f3\fs20\cf0 ( R0, '#4.2G'), ( NHASHX - 4)*' ', R1, \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 1)); \par \plain\f3\fs20\cf2 @WRITE\plain\f3\fs20\cf0 ( ( INDENT + NHASHX - 3)*' ', 'Return', \plain\f3\fs20\cf2 @NEWLINE\plain\f3\fs20\cf0 ( 3)); \par \par \plain\f3\fs20\cf2 ENDCALC\plain\f3\fs20\cf0 \par \par \plain\f3\fs20\cf2 END\plain\f3\fs20\cf0 \par }