1�/a0QoG#12輮5m%�Bmk?
鶃0/ k" �(e
/cM%��kc' �Projecting year陇�CS MOW Modific ation`BAd卄宱鄘gene, �
CIf b@WriteB�R纄turns�� Dim dR嗫Last As Doub亖dC恥mul@ve�*�
Current� )vNorPmalsaV蘟nt�?OutFr別q�Long 碢e€蟙)n$峰裮en�
劳2€\俧uencyy
= 愜�%A[kR�(�'` Initial�ve(羆\bpM(k摄1踽k羭1h`�.�d燻E ' Ge€t the n徕€line of�ndom num宐e#Hag S€ddr�dds.pItem� �yEnsure we haven't� go�pa"cc燋們�`'`.L�bN2 > .RhCall 0h.Raise(vbOb�/Ri�:, "Cu渟t�鎵t
mp� be 'er€v 宎Ad�3ord0er."鑘� Do€ Until \
�=^
7 f,=r0Read�;oLo渙p)bcc��8Mn/= H'af扁bnoy 驫pP嵋prjm悊$匴8=Fbcc, �(曬 d�<=�B0� R-+`KP)`FpbpB1T4�>-D羒bpSigmBa�Sqr(�)5(�劕扝 8[@' ADcc鉐e b慞r
euRoutp饀t p釫��6龕~1p(1�$a.�2�Yan ?��1胝慭 8K0篩Q1s)C#, 侰�
k f �疍 (�+� 妢 2i鞯3 �R-�@��0�樢刼蟖o#��' 蟦羘Compa祃y €restruc�儼?logicS鹈 h�:ep萵o�vHI1�4Cre p#Array蔽CLng���, fee@k:?�!�/]揚+nnxualS1�!觶T纎Excel� 襌騶卲�(rTardge恮ng惣�
,� v9i, t嵗@崄, �&�
XLSpacerRows�/
轛Multi±CSVs@F>e-岸 _L (n�@伻c@�c�^s(P,\� oo€ToMatri嘞纋es(na碴 煚连_�na���x[ @浌5�0� #坅' Q耬rl哝孯�?#'%ip�%(亩rTargetRange, vHeaderInfo`Initia lCurvlqu@artrat(bWriteBondReturns,
nXLSpacerRows)
Els俥 If �MultipleCSVs = F俛( Then -€ Call {Scenario$To2(nFi`leNumD�Z
[DMatrixCs(naYiXeld処弙━n瀉仸埈婯nd�
慐��Case 3�' Mon0thly FbTo郋xcel_慯B
�(g恗on�徢,��顝d0廧廦!�巆u�,�!JSelect�乤Next i!' �q Loop
CS MOW燣dification - Removed a lot of code dealing with outpu`
�NR= True(SWorksh@eets("俿�").' u�0("A2�!If!aClog#▼E%'�is @a bit lazy but the easiest way to c�!梠pen� f鄶s��姛嚍嚔�Appld*.StatusBareα�Errora坅aBee4牂xSub
�
Fa`d:��
焷?�%' �D)a' Handle Esc or Ctrl�-Break�@%.絙e�189釧 E��倳Ms@gBox("!:" + vbCrLfADesc榬ipaS聈
�Q�"
'�r€QineA8interpol€� via forward� c!銇^� I�ViaF�(Du牆@_s() As@ Doubl€鏢€hortCpniLongSInd苮!!, _�勯辽Coef0�A?B
�a ��Gu餰ss0�
r^?aIOC�coupon;DebugO�Bool鄀an, �a-���At恮�7e>.VB_ProcData�Invoke_Func 3" \n14"�3Con0;ep駠(0.01�Di俶繨lumnse潎i!�Gfl�m dOm f慜m vOm �屯a�€vdop蘢s�
dar&csco= 繳Bound/5� C= T$+�y�#* rA/t�#*穚d�0�os�#d�0�q��a�R<= ��
p: i馺1 TPZ��A蠪(i <> 1�)cF1g=i)Pm��€癣`�.25濢f��:�+ ':镟
��(�r� 印Ro餓s
=�5i�碔p= 梻nq3v� (1郠f / 2) ^� (-d *�;�%= (�)�/ ���[a吚s#- v)`', Db+ B* /�Q�-p2* Er
/�5- ([(騠�
2)� �R�%璔v��3=�v_�{鬖rs�
aL�5= -�
/€戵�
�(aV
�7樏�
a*Abs(4�#p5慶*�) < ┭MOr>A/��) '� Also纜v Hthe郷ng爘ccordingl€y
Priv PP Subc SD;Tob (ByRef BDRa�, v/萓罞銵I狅ia纋Curve*o崄�(SsA, b�癇ond�4穪,@�vknXLSpa纁erRow/�a1'rTemR,�
n嘫A1Set �= �S= UBpoundR�
�- L_e!�' D鑢op� Ad?�b.p[ize(b衇!$i�1� o�5r�皦e绬firs�ow i巗"妏 st�-- we'll@ overw�! 爃!I�!yie餷d c�z�.Offset(�0A�, YA繮oints�
�O�1E
qti衚z鴈ro&o�郂����0�&�7a�'�#礩€潫&銣h烑?�= �#\�,Wh-A陱' Up�0"er�5 v['s�<�ne袚bl€ank rowA汢
�rus++ :1�, 0UP=醰gBcomma demim郈d fiqz緻禓CSV(GA罃ege _v7緻1g緻 VB緻leo緻�=t驴@ #DP � A?6�, j丟胠��0E��1�:盧顂�3�? 0粡?Q`k1胏rf岫r �.凘eleme鐮1�"O #�p]慳1罒I12? �3? 4);CSMp/(� 厶' �3 ��?kq&膆/P鑚 <9? �66搅 3f�i<�jE耨Els&遵��麠
*7 聈H�U�席��1#繿2煹��仮餤of謀粪�tB)� 1��Os郂戦�
R嫐mq%j0$g_n�=繮recis€氏吵, n":3�虏 If
Ne0xt j�8If bWriteBondReturns = Tru@e Then� @ For j41 To ZPoiHnts@ 榡< <8��l #fileNum,€ Round(}(i, j), g_nCSVPrecision)B; iElse � 6W
+ndb�嫏E���i
�
� Sub'乲tes output data to separate matrix 僺 (in .csv for)
Priv'僱ScenarioToM%�F€焥(劉bers() As Integer, vInitia@lCurveAVA@ant, �D€#Double,丂Boole繿n, nah�?纋�蒼!�@1 Dim i�Long纔�nEle黰e悋D3�1Ab �' A, row寐浨= UB怑5, 1) - LP+ 1乫 '�媏achbu揽yJgA"�始Yie靗d 脚+=俼@F耡騤> ��b耛缑崻蔶(1伩慌Note: Fi rst e肔 i坰 i脀 st翂a€�gnore謉�/i�2vF&鹀bui`uG)珆觟fG?}t雜� ~%Gm 瘏m$聶�'値 �!a煕"�'=,a�=�� �.陇�.!�9/A�& m煠_疍痑)�� i1!�1)2�姠H�痮@��臌隙o(�朝t �
p�i�b7€€8睑:�0鈳yE>襬齿��膪:�0鈳测贰>俄芘辞齿��胱��<�oX��胱��NHoX��#�*#��€8↑#�*#��
€8↑#*#€@�2�����oh�€€8痮 �动th�(<���$$����,�K�
_�,7#_�0齣\�]�L��/<�黇_�,�\��"_�0_�,���_�,\�跽�L�麥<��"_� $蹂_� 蝉跽€�耞� _� �8
耞�$$蹂_� 蝉跽€�耞� _� �8�耞�(�_鮝㩳4��$蹂_� 蝉跽€�耞� $豕_�$蝉鹡8
耞�$:_� 靇�$禚=摀匆1�>倡鷧9%羺.�>砡�_�_f4�$蹂_� 蝉跽€�耞� $豕_�$蝉鹡8
耞�$$跹_�(蝉暼8�耞�('�膈a_�(察�8�於玷_�_�_↓k\�l�:_� 靇�$禚=摀匆1�>倡鷧9%羺.�>砡�冲�龝>'<�1玄'轧'酤:L�N���0>玄F$�
/玄6
<�$��酤轧rU€€€€~| N �y8 Y i�
9a��� A �9�� 1Q��1y�� i9����Qy������ Iy � ������ Y!��
��!Iq���9"� #� $1%Q%i%�%�%���{,l龘@h�$
h�䴕H�FBtl�h�5H�ol��K�)u@�U�K�)u@tl�ol��K�)u@鬼�x�K�)u@箃l��
�
Gtl�ol�tt�4�$h�H��&$� $
0K^#%�� 狘$
狘
< 狘l�5I�q>|�'€�%:慄
%狘$
狘
� |黙l��"q$�)狘|�5l�"l$蘬$棠l$棠�
�q$�l$��
�q ��l$��
�q ��
�q �W(\�%(<�%狘'€�%:慄%$
�狘al|�|��麺p)狘|�6l��k��V��€��€��€鶺枣SUU�?�d鶺枣SUU�?�d鶺枣SUU�?�d�):r?辊H鷒訜鼿Y?辊H鶮�8滪諀?�H繴U�?辊,付d4
@�,�c恜@@�,┠蠩n?��緰�;要?��3掦床3�?�%狘'€�%:慄
%$
�Q狘齩l鲐� 橗8C��(\�%(慄%佚l�麷�橗
2��5l�8C��(\�%(慄%佚l�麷�橗
2��5l�8C��(\�%(慄%佚l�麷�橗
2��5l�H|�'€�%:慄%狘$
狘
� |黙l�(\�]�/Vp�)狘|�5l�k��0D:€�%|�:慄%狘$
�狘
d|��裏䴓)狘|�5�>|�'€�%:慄%狘$
狘
� |黙l��"q�)狘|�5l� ]�(\�%(<�%狘'€�%:慄%$
�狘al|�|��麱莗螨)狘|�6l��1狘'€�%:慄%$
�狘al�麱�狘5l�k螨��z=|�'€�%:慄%狘$
狘
� |黙l�`1�)狘|�5l�
�p�3狘'€�%:慄%$
�狘al�c\黓�3狘5l�uC椠k��gl椠*1椠l椠k�E|�'€�%:慄%狘$
狘
� Q|ol��
黗1忑狘6l��Bl忑J�埤鳿忑M慄@l�
!l�:€�"]�<'�6l黒�l忑"*1忑%狘'€�%:慄#%$
�Q狘齩l鲐��禳�
㩳�=l忑FL�禳龘@(慄%佚l�麛黗�l禳例�/�6l��
禳fIk��%狘'€�%:慄$%$
�Q狘齩l鲐��禳�㩳酐=l忑FL�禳龘@(慄%佚l�麛黗�l禳�/�6l��
禳f酐�l�:
�q�
跞qx�lq�
�q傈�p狐1|�:慄%狘$
�狘
dl|�=%)狘|�狘'€�%:慄&%
�%Q狘��'l�'鐀键5l�k狐�(l键漪�⺌�(l键漪�⺌
�q
�qll瞦酎�p饵�p袋
�q渣�p颤&kl �猯蝉椠勰�9'潲'�:€�)N��'l€*狘狘
D+狘6l���!�l酎��h�䦷€!�l��\�䦷€��
X�€��
T�€��
P�€��
L�€��
0�€��
,�€��
(�€鷞瓽醶�?t岨鷉fffff�?t匎3|�'€�%:慄,%狘$
狘
� Q|ol�,�狘,��5I���� ,�l�
-l�,�(\�%(慄%,�l�Bt�5l�(\�%(慄 %,�l�Bt濑5l�
m濑
.to�o濑痶宁鷪糅讈�@箃滯懌鼴4o?�臌�9
.t旫��?�lX��?�lX�膈lX�膈lX�膈lX�膈lX�膈lX�
膈lX�膈 lX�膈
lX�膈lT�膈lP�膈lL�&僚扬譹?辊lT鷶t澳�?�lP鷐�#麬�?�lL鶮櫱�鄆?辊lT鶰橕请?�lP'T湮斏?�lL�膪fb9悤z?lT$鮚 �?�lP鶩
坝k谵?�lL�膪�氪Eq?lT鶾序q�?�lP
焛s�?�lL�膪�?S�>lT�#,贇u2�?�lP鷒&椸凁�?�lL鷆礍Ua@j?�lT� -鞄�?�lP堚纐?�lLxy嫗搯?�lT�1}び?�lP\x�o�?�lL�膈 lT�膈 lP�膈 lL�簁斅?�
lT�膪P_��%�?
lP�膪攓巳��?
lL立厁猥?tD�鷢M烚(在?箃<�繮靠检?t4��禳ld茺�"'�l酎��
t�䦷€'�l��
p�䦷€-�l�蝉�
<�䦷€-�l�蝉�
@�䦷€�l��l�䦷€�l酎��玄䦷€�l��烃䦷€k���+�ll ��酏䦷€8lx�齣L�禳龘@(慄%ll�麛�(<�麥"q瘘6l��:/l禳l傈�#�*Fl�%� 狘$
狘
/�狘5l�
0m
1�� lt���m
1�� lp���m
1�� l<���m
1�� l@���m滯
1�ll��o宁�l玄�2�� lt����l玄~��lt���(��lt�����lp���(��lt�����l<���(��lt�����l@���m旫
1�l烃�
�q帱�潼l酎㩳喳�k饵�V帱龘@禳龘@|�:慄2%狘$
�狘
d|歭�3Bl潼�lh���)狘|�5l�]l帱�i€�%禳龘@|�:慄2%狘$
�狘
d|歭�3Bl潼�lh���)狘|�5l�l帱�猶帱�*瘘M慄@l�
4l麭l潼�lh���5l�*瘘M慄@l�
4l麭l潼�lh���5l�
潼f喳��潼l㩳帖&k饵�V帱龘@禳龘@|�:慄2%狘$
�狘
d|歭�3Bl潼�l\���)狘|�5l�]l帱�i€�%禳龘@|�:慄2%狘$
�狘
d|歭�3Bl潼�l\���)狘|�5l�l帱�猶帱*瘘M慄@l�
4l麭l潼�l\���5l�*瘘M慄@l�
4l麭l潼�l\���5l�
潼f帖��� lt���tL���lt���tD�ot\�o滯t|�o宁t件o旫tl��帱l㩳柠3$l帱�l\�.利�
5t耕-利o耕tT�.o|333333@h戫|?5�?o|醶瓽徕?oT�倡tt�mt�
1l帱�猯l��oT�t轧$l帱�l\�.利�
5t耕-利o耕tT�Nol�(\徛�@蛞MbX�?ol{瓽醶�?o匎o轧臭雘匎�臌席��?oT�倡倡td�k颤|o旫td�md�
1l帱�猯烃�ot⺶|�od⺶l��茳l㩳胞��l帱�l茳猶攸$l攸�lh�.利�
5t耕-利o耕tT�[鲽S悭浤�?
.t耕ot攵9
1to\a2U0*﹕?o\䁖耕醶瓽崾?o件�/�$亝?玱oT�倡t!m
1l攸� lt���oT�t轧k袋s l攸�lh�����?��Bl攸�lh��龘@渣龘@狘$
狘䴕l�6麭tT�狘5l�+F�雔攸�lh���k慄%渣龘@狘$
狘䴕l�6BtT�狘5l�oT��K�)u@�M�K�)u@tT�oT��K�)u@鬼�p�K�)u@箃T��$l攸�lh�.利�
5t耕-利o耕tT�{鲽S悭浤�?
.t耕od攵9
1to件�/�$仴?o件�/�$亝?iUMu/?o\䁖耕痮o岨o轧臭雘岨�臌席��?oT�倡倡t逮o逮l攸�猯玄�>l攸�猯玄攸� lt���玪攸�lt���&l攸�lt���襇bp?��:l攸� lt�����?砽攸�lt���l�猶l$��l茳��5 oL�l攸� lt���玹L� oD�l攸�lt���玹D�$oL��雔攸� lt���倡tL�$oD��雔攸�lt���倡tD�ot\�o逮t件
茳f胞�l$�# oL��攵l帱� lp���l攸� lt���tL� oD��攵l帱�lp���l攸�lt���tD��椟�
㩳狖Tl椟l0l椟l(
椟f狖:5�l帱���潼�l帱��
d橕H@l潼� lt���l潼� lt���攵l潼� l@���@l潼�lt���l潼�lt���攵l潼�l@���T$@M-垓?l潼�l@���锄u剥蟖拘?l潼� l@���朝?
弐?玪潼�l@��� l潼�l@���襇b`?��.��?l潼�l@���砽潼�l@���Z键�+廂0�,�4�<�D�L�P�T Y慃l潼� l@�.旣�l潼�l@�.利�X�
78-利-旣�p更�椟�
㩳匊Hl椟l0�胍p更k更>H
椟f匊!k更�椟�
㩳|麌l椟l(l潼l椟l@���
椟f|鹐y''�'<:L�8禳龘@(慄%ll��
9-利��:<�:潲潼M,�@l�
9l颸�
6l��鹟鸤�<��<�椟�
㩳酊<l椟l0l潼l椟l@���
椟f酊
潼f橕�l$⺮瘊l瘊��95�l帱���潼�l帱��d楮6�厅�
㩳帔,z�l潼��猯厅l@����l潼��猯厅l@���l潼��猯厅l@���攵l潼l厅l<���
厅f帔�
潼f楮�'l瘊��'�厅�
㩳佞' �l帱�猯厅lp����悬�㩳喧�Rl帱�猯厅lp����l帱�l悬猯厅l@���玪帱�猯厅lp���
悬f喧�0l帱�猯厅lp����攵l帱�猯厅lp���
厅f佞\
帱f柠�k� �雔 惰q滫 禳龘@(慄%ll��"q旡5l��帱�㩳岤� #(€�%l帱€鼲龘@,�l�Bt鳃5l���?�l帱l酏����?t历狘帱橗
,Q狘滮慃滮
(;l慃l旡�19'潲'�:€�<�N��'l€*狘狘
D+狘6l���慃滮
(;l慃l旡�al�滮
;l鰻�1
�q攸
�q橔�潼l㩳匉� �茳l㩳|鷼 l攸l帱€秊l@���t苞mm鳃
=t耕l帱do鳃l帱Hl帱,o苞o鳃kL黮帱o耕除k\黮攸�i慄%狕l��麭t跟6l��o苞t鳃o历�雘跟t历l攸�甽滫迈�€ o历l橔l帱l酏����?t历l橔�猶橔l攸�猶攸
茳f|鷽
潼f匉�
帱f岤~=禳龘@(慄%ll�鼖 �lFY慃禳�
>��5l�l$⺮x�lx�{!k�*!�酏p�,��
?v!k螨��S!酏p�,���
@t!酏Yt�p�,�例Y慃
A�"lx�"k��!�酏<�,��
?�!k螨���!酏<�,���
@�!酏Yt�<�,�例Y慃
A�"lx��"k�6"�酏@�,��
?�"k螨��_"酏@�,���
@€"酏Yt�@�,�例Y慃
A
禳f茺�
k��#1|�:慄%狘$
�狘
d|楤)狘|�D:€�&%|�:慄%狘$
�狘
d|��裏䴓B)狘|�5�k=k螨%#�>%黤慄%� 狘$
狘
狘l键潺=
C%黤慄%� 狘$
狘
狘k螨�#�>k=l键潺=$慃*狘狘
+l慃��狘�#N'潲'�'DE*#��*狘狘
,+l�*Fl�
2��狘6l���$0x#滮�,�>
烃simp橗忑�:simeType �trl�on bH�sd:pitiveI�yp佚�L�mple€�nameMultiC� <酏sequd�
-- MSX�on,�restction � sd dene chi�en0�me="h� typ\�:str狕例cursunboun�
eqP�e>
<�:anyt�ute 椠@�:comT�pe>
X�:com玄pe n,�p�ceFi(�abstctH利旣��狘|�l���潲l�\�<������€�qx��(�,�倡�0�倡th��雝`��雝H��雝@��雝0��雝(���p�lx�忐f��op��胪�op�鑰p��氙鑰’t`����?t`�'op�鑰p�鑰 倡op�鑰$h�倡tX�op��
烊�op��氙鑰4X�
oX�op�鑰4��雘X��攵玱`�刽氤tP�,o`�刽雘X��攵玱`�刽氤�氙硂p�鑰$〕t8�o@�oH��雘P�oX�东t@�Bo(�o0��雘P�oX�东oH�o8�硂X�动oH��雘P�oX��臌隙op�鑰$〕痶(�oH�oP�硉H�o0�oP�硂H�o8�倡t0��雘H�痮@�秓p�鑰8�"o0�筼@�遏雘��龝��(l�$玄<�$��酤轧0�t'�€€蝉�\�龺 ( �%(@�%€齣�%\�( �%(@�%€齣�%\�( �%(@�%(�%\�( �%(@�%(�%\�
�qX��T�€㩳棹c�P�€㩳帼YlX��猶X�X�龘@(@�%€齣�%\�X�龘@(@�%€齣�%\�X�龘@(@�%lT�齣�%\�X�龘@(@�%lP�齣�%\�
P�f帼�
T�f棹� \��l�龝�t,l�\�0(�€�€�L猶p��x�lp�㩳h���x�龘@(X�%l(�鼖x�龘@(�%l棹鼖x�龘@(佝%l鼖x�龘@(橚%lh�鼖h�棹(��I6(�棹h�lx�����t��
㩳`﨣lt��
��婆)(H�%t�龘@l(�鼖(��J5(�?)(H�%t�龘@l(�鼖(��K5(�
t�f`��|&��?��?��?�L ��t��
㩳X�(lt��
��婆�5�lx�lt�€.TMX�@(�
M-T�(��J5(�5�lx�lt�€.TMX�@(�
M-T�(��K5(�
t�fX䴓����t��㩳Llt����5�lx�lt�€ .TMX�@(�
M-T�(��J5(��5�lx�lt�€ .TMX�@(�
M-T�(��K5(�
t�fL﨟
x�fh�.C0�$ T�(�棹h�08CrU€€€ ��������(�`�����������a+(�`�����������q/x�`8�������)����)Ii����� k++(kkk+++kk#((�`�������)A/,!`�������)Yq//8I`���������������((((Pq`�����������)Qy�� =�//k#k(D�`�����������1)Qy��&//k#kH�`�����������IQy�i�f/k#fkn��������dpp#详�������������������������x��ME�������������������������������������������������������������������������������������������������������������������������������������������P(���6
�����"����L��������L�����
����<����������0�X`���������8�k���������� �`凘����l�����in��`��������8�k���������� �`凘����l�����aH�����`����������k�����������`凘����l������`�����h����� 劆����d���8%���������X冃������€��������������%����p�������������������������������� �����������������������������x�����H����������������������������������������������������������������0���������>@�`T����� @��D����� @�����@��� �� @��0�������������������������������������������������������������������������������������������������������������������������
�������������� @�� ����� @���������� @���������� �����(��������������������������������������������@���������������������������������������������������������������������������������������������������������>€�€@��\����� �€@�����L����� @�����H��� �� @@@�����8����� �����������������������������������������������������������������������������������������������������������������������������������������������������>l禳Ths@��\����� �艪�����L����� @�����H��� �� ee@�����8����� �禳������������������������������������������������������X����������������������������@t Modio��`�X]���<� Pass the scenario numbers through to the generation routine�� B@��Std50$�'@fset @A>��C��o�����]���� �����<� Pass the scenario numbers through to the generation routine�� B@4������CustomScenarios$�.��� �%"X'��CustomStart$�.�� � �%�'@ @A> seleco������������r�Attribute VB_Name = "ButtonClicks"
Opti@on ExpDit
Pub, Sub Generate12()
Dim vScenarioList 怉s Vant F' Pas€s the s)€ numberrough tog^€tine@ThisWorkbook.Apctiv�y= Range("@Std12"烠榓ll�(
1Endov50Mv � v50HvC ustom<, Bn臩Coun~L纎ng, r羳俠徚h�€U€Set�C/苰僂�)= CLng(r.Cells(1, 1�)聤�tart�M況.Resizq@��%"]�@磖Ka@��������]�貗�40�>@��leme]�{TW �
@��se att]��0勿]�嘭^vc@� name]�介ПH砅@�8anguag]�x~祻*@�Patio]�菹J�
�?�hment]�瘉枥$⒃?�€ due]�\p晾4@��nsta]�:p,趀@��2- a]�蒑牯�@�� c]�浵?\�@��ated p]�覠琖剽?�� .�i�
������������€`�����\�����`劼����X�����`�0T�����`勱����P�����`勵����L������+`������������
�����P�i���������������€L T+*x`��������X瘙kX����
\�i�������������€8 ����`������������
�������i�)儬����������€the %i儛��������������€on f��������������x冐������H��������������%���������������������������������X���������������������������������x�`����H�������������������������������������������������������������0`*����z�����l忑 �狘'€�%��������
������4n0��
@�h����� 龘@@��X����� 麫��T����� �
@��P����� %狘@�hL��� �� Q狘@��H����� 兀�����D����� (慄@� 4����� @�8$����� 禳f@�P����� �:@���������� l�����酤���� �1@�����瘙�� �� 燻x����������������������������������������� H������������X �������������������������������������������������X������������ ����8`6����l������p睭 l p����蝉椠@�€H����� N��X*@��D���� €�魼��@����� �� \�@�����<���� X� � �@� ,����� �@�( ����� 魼�@ ����� €@�p ���� €@�����忐���� €@�����荥���� €� ��?t岨����€t匎3�p XPh€����(@����������h�����
��������(������������������������������������������������H
P`
`<����t�����糅讈p
H
陸B4��������t旫+�1貱拉4pF瀔@�;�-�>q�@磖Ka@@�€d����� �
貗�40�>纚TW �
@�0勿h€ X�€ 8€ "8€ ����€ 4`€�€�€�€�€�€€ ����€(€@€X€p€�€ ����€�€�€�€�€€€ ����€0€H€`€x€ ����€ �€�€�€ ����€ �€€ ����€ ,�*E@€ �����p€ .€�������h€ .x���������x€ .��""������x�€€ ����€ $�B��€ �€ ��������€ ������€ ������0�2H�
h�
x€ ����� ���€ ����€ D�B����€ ��������€ ����� € �F �` € ����€ Dh B�� �� € ��85��cB(7.784894002r4繷9E€o�A)-0.322396�458)136eZ.�75丅€48+侭胕c�)-€J4973253934373�*4.374€Z14146
�Z93816�398€487Gd��69570�9 46�d��4671290700hda2.44513413714d3.7P5440€P1€4"A!'腫brea`k-poi繹'p恄lowE0.`+�25 high �1 - �aa
work var iable耣Di坢 q噳, r+��If argu
m纋 � of @bounds�afi罒uorA p <= 0 Or€ p >= 1幛酅r.Rbg���鄦R抶纄r reg爫�q�Sqr(-2 * Log(p�) *(€S*�+ c2)�q 3&4&5&6) / _箖
a Ccdf*dfdf1�Eldse�"p_�3嗥n-� '_Lp ;0.魾( @5=``� E�*+ a�r�a�"�""���(� b 阞 b b �$Ay?up€餂<\=-齺4(?=鉆�
r �� �+ �nd 郔f
Epe|剛@ranspop2a( 2D�7n癶rrTay�T�A�(€vSourceQ9銿a€;nt���I!,dn沚�2�.�Re�2(�?o "� T装A �F爦i�9C觼 qjv� s d(j, i)�(i,
j@ Next� j�i�1k�#' VBA 饍vides a use蠷s RN messag0慺 it ca€n't ope敔 fileO�$In袛St餦m(q阔oT�锄@磖Ka@玱T�锄貗�40�>阔oT�锄{TW �
@玱\�锄�0勿B@H��
* 'lp�You must ensure that the Initial Treasury Yield Curve in the sheet "Assumptions" is the same as the one used to create the scenarios used to generate the surplus values. After doing this, go back to the sheet "C3Factor" and click the "Calculate RBC C-3 Factor" button again.'"�Verification of user inputs'$ " $$l',k��� & .��
CalcC3.CalcC3 8B@0A@hk���o������������.�Attribute VB_Name = "Ini@tC3"
SHub P()LStylbYesNoCancel + vbExclamationDefaultButton2
Msg聅 theal Treasury Yield C€urve in#sheet ""@AssumpXs,""產Ione used t8o cM�`sc€enarios@generaurplus va lues?€xTit俵"Verifc僤of�rIputs孯es纏onse1gj怋ox(, 崒, �#倳If �vbNo ThePn
S乶s(妌).Select�喌OKOn€�
�€ ����€ R��(�0€ �����$@�$h���$��$��$��€ �����(€ 40�h�p������D������L鬹p#鰓���������������������������x��ME�������������������������������������������������������������������������������������������������������������������������������������������(<��<��<��<�������聬8����L��������������聬P����L��������������聬`����L��������������聬"�����L��������������聬&�����L��������������聬(��������L����������������������L���2���������������������������������@擝��������L��L��@擠��������L��L��`凢����������L�� 凥���������L������L��� 凧���������%"����� 凩��������0P 凬��������h0uyP`凱���������� 凴���������huy�`凾����������`刅����������`刋���������� 刏��������8衭y 刓��������p @X �4��������� vy�`刞����������`刡����������`刣����������`刦����������x`刪����������`刯����������`刲����������`刵����������`刾����������`剅����������`則���������� 剉���������wy� 剎�������� 8wy`剒����������`剕����������`剘����������`剙����������`剛����������`剟����������`剢����������`剤����������`剨����������`剬����������`剮����������`剱����������`剴����������`剶���������� 剸���������P� 剺���������� 剼�������� 劀��������P8`劄����������`劆����������`劉���������� 劋���������� 劍���������5k
��`劏����������`勡����������`勣����������`勦�����������`勨�����������?`勪�����������?`勬����������th�`勮����������`勱����������`勳����������`勵����������`勷����������`�6����������`勽����������`匂����������`匄����������`匉����������`匋����������`匎����������`�����������`�����������`�����������`�����������@���������L��`�
����������`�����������`�����������`����������� ����������
% �8���������z�
�:��������8€N@ �<��������pPzX �>���������pz� 凘����������z�`凚����������`凞����������`凢����������`凥����������`凧����������`凩����������`凬����������`凱����������`凴���������� 凾���������pz� 刅��������(
�z
刋��������`
�zH
`刏���������� 刓���������
�z�
`刕����������`刞�����������
8h��� @`€���@h���聬����L��������������聬����L��������������聬(����L��������������聬 x����L��������������聬$�����L������������������������������������������8`�(Px��������
������������������������������N��€ �����€ ����€ . € >P€ ����€ �€ �€ �€ �€ ����€ ( € (0 € ����€ ,X �� € �����6� € *� € ������ �
€ ����€ 0
€ �����8
�
@
�P
�X
�h
�p
�€
��
€ ����€ 6�
�.�
�(�
� € r0€ J��F��T@€ ���������"�€ *�€ 0
�(P
€ (x
��
€ (�
€ ������
��
���(�8€ ����€ 0H€ �����tx�j�€ ����€ .`€ 2�€ 2�€ 0�40€ 0h€ 0�€ 0�€ 0�€ 2(€ 2`�4�€ 2�€ �����B�PP�6��@�€ ����€ F�`�x���������������€ ������ �0�@�X�p������������ �@�X�p������������ �8�P�`�p�€����������€ �����€ ����� € �����0@�p€ ����€ dx€ ������€ &€ ((�P€ &p€ �������4�€ &�€ (�$8€ (`€ ��������€ `�€ € <�(€ @h€ �€ �� �� �€ �
€ ����� € t8€ �€ <��€ @€ P€ h�x��€ ��
�€ ����€ $�€ "��� �(�0€ �����8€ ����€ VP€ �������&��*��8 € *X��€ �������&��*��h�p€ ,�€ ��������€ ��������€ ����€ > € �����@ �&` �*� �f� �" !�H!€ ����€ P!€ ,p!€ J�!€ �!€ P"€ X"€ p"� �"€ �"�&�"�*�"��#��#�F�#�&$�<�8$€ ,x$��$€ ����€ �$€ V�$€ T %€ Rx%€ P�%€ &€ �����0&�8&�
@&€ ����€ PP&€ 4�&€ ����€ �&€ 2�&€ ,('€ 2X'€ *�'€ �'€ ����€ P�'€ �����: (�F`(�F�(€ ����€ :�(€ �����\0)�V�)€ ����€ N�)€ ����� j8*��*��*�b�*�@+�
`+�
p+€ ����€ €+€ ����€ �+€ 6�+€ �+€ �,€ �,€ �,€ ����€ �,€ �,€ (�,€ -€ b8-€ �-€ >�-€ �-€ ����€ .€ �����
(.€ �����
8.€ ����€ ����€ DH.�"�.��.��.��.�/�8/�H/�8P/��/�
�/�
�/�
�/€ ����€ ������/��/��/��/��/�0€ X 0�x0��0�D�0�
1�1�1�881�
p1�$€1�d�1�2�N2�h2�€2��2�Z�2�
3�(3�03�ZH3�
�3��3�"�3�
�3��3�4€ �����4�(4�@4�X4�h4�€4��4�$�4�H�4�5�N 5�2p5��5��5��5�>�5�86�
P6�`6�
€6€ ������6��6��6��6��6�
�6�F7�H7�`7�x7��7��7��7��7��7��7�
�7�
8€ �����8� 8�88�
H8�X8�`8�p8��8��8��8��8��8�9�89�X9�x9��9��9��9��9�:�8:�X:€ �����`:�x:�X�:�"�:�
;� ;€ ����€ X8;��;��;��;�
�;��;�<�� <��
@<�€ �����P<��h<��€<��$�<���<��
�<�€ ����€ "�<�€ $�<�� =€ ����€ ,8=€ (h=�
�=�
�=€ ������=€�=�
�=�
�=€ ����€ �=�>€ ����� >�8>����H>���x�. Constants needed for random number generator-1]�€�������跽���9%羺.�>�8]�8
�(���P�鹡�`�=摀匆1�>�x��]�8��������暼��ough�M CS MOW Modification - I tried to make minimal modifications to this routine.�t�O Merely enough to keep the routine running given the other modifications to the� �O workbook. Further cleanup is left as an exercise to the interested reader ;-)lp�]��H�v CalcC3 generates one-year rates in the same manner as CalcScen and uses these rates in the calculation of C-3 factors]��`y]�x]������8�p]��������y]��@�x]���������]�(�@�X�p��]�������(�]�@�X�p]����������]���0�H�`]�x����� ]�X�p��]����]�]�(�@�X�pr
x]����������]����� � �0 �H �` ����]�x �� �� ����]�� �� c]�� ]�
�
as]�'s:\actuarial\actres\irategen\errors.tmp�8
����]�P
�h
�€
����]��
]��
]��
��@�x��]�����0�H]�`�x������]���0
�h
�€
��
]��
�7 Ensures that we can access all ranges in this workbook B@��K EnableCancelKey ensures we get to wrap up the process on esc or ctrl-break�F 8(���C3Factor$>%"'B���C3Factor$>%"'R R$b'D���C3Factor$>%"'F���C3Factor$>%"'L�����C3Factor$>%"'N�����吞烫烫�?'P B��- Get the appropriate list of scenario numbers�KT�Std12$�'`�����KT�Std50$�'`�KT���CustomScenarios$�%"X��CustomStart$�%�'`n����C3Factor$>B@H�(Mode = Sheets("Assumptions").Cells(1, 9)�8If (Mode <> 1 And Mode <> 2 And Mode <> 3) Then Mode = 1�Sheets("Scenarios").Select�Range("a2:es16384").Select�Selection.ClearContents�Range("a2").Select�"Application.ScreenUpdating = False�"Application.Calculation = xlManual�% Seed for the random number generator��'F `��'��! number of scenarios to project�#If (noscen > 200) Then noscen = 200 B'�'�)Set OutputSheet = Worksheets("Scenarios") D�$�'z � ��d��� ��k��xk��p�/ Inputs to generate the interest rate scenarios�'�� number of years to project over�'�� prjmode = 12 for monthly � �'��llowdis = False ' set lowdis equal to "True" if scenarios are to be generated using low discrepancy pointsX@�Cuse_T = False ' set use_T to "True" if using the T distributionz�'��8 the degrees of freedom parameter for the T distribution�'�G set to "True" if the variance of (ST - LT) is assumed to be a constant� ����N� ����R0� �� ����
�H`z�$ReDim annrate(noscen, noyrs + 1, 10)z�*ReDim quartrate(noscen, noyrs * 4 + 1, 10)� �� �����
�Z��!ReDim annltvar(noscen, noyrs + 1)� �� ���v��"ReDim annratvar(noscen, noyrs + 1)��
�����
�����
����
��8��
��X��
��x�* Input the Appropriate Correlation Factors�{瓽醶�?'��_ Correlation between ln. of the LT rate and the ln. of the difference of the ST and the LT rate�ffffff�?'��U Correlation between the monthly var. of ln(LT) and the monthly variance of (ST - LT)�( Set up the initial Treasury Yield Curve�+Month_3 = Sheets("Assumptions").Cells(2, 4)�+Month_6 = Sheets("Assumptions").Cells(3, 4)�*Year_1 = Sheets("Assumptions").Cells(4, 4)���InitialTreasuryCurve$�%"!d'd�*Year_2 = Sheets("Assumptions").Cells(5, 4)�*Year_3 = Sheets("Assumptions").Cells(6, 4)�*Year_5 = Sheets("Assumptions").Cells(7, 4)�*Year_7 = Sheets("Assumptions").Cells(8, 4)�+Year_10 = Sheets("Assumptions").Cells(9, 4)�,Year_20 = Sheets("Assumptions").Cells(10, 4)� ��InitialTreasuryCurve$�%"!d'p�,Year_30 = Sheets("Assumptions").Cells(11, 4) p$8'��!- The initial log of the 20-year interest rate d p'z�!9 The initial difference of the 1-year to the 20-year rate�堲圩伋@'��! The initial variance of ln(LT)�陸B4o?�$8'��! The initial variance of (ST-LT)�@ These constants are for the forward rate interpolation program:��?�+���?�+���+���+���+���+���+��
�+��� +�嗹��
+���+�N��+���+��&僚扬譹?�+���t澳�?�+��m�#麬�?�+��K櫱�鄆?�+��M橕请?�+���'T湮斏?�+���fb9悤z?�+���$鮚 �?�+��F
坝k谵?�+����氪Eq?�+��[序q�?�+���
焛s�?�+����?S�>�+��#,贇u2�?�+��o&椸凁�?�+��c礍Ua@j?�+��脜 -鞄�?�+��虉饫q?�+��饃y嫗搯?�+��仉1}び?�+��糪x�o�?�+��� +��� +��� +��簁斅?�
+���P_��%�?�
+���攓巳��?�
+��读x猥?'��€M烚(在?'��肜P靠检?'�� ��� �� F ��$`�'��About to begin Scenario � 8(:A@��] Initialize variables -- Sub (9) refers to the long-term rate, sub (3) to the short-term rate �$< ��� +H� annrate(i, 1, 9) = Exp(initrt20)�"quartrate(i, 1, 9) = Exp(initrt20) �$< ��� +Z�annltvar(i, 1) = Exp(initltvar) z ��+v ��� $H ��$v ���+H� annrate(i, 1, 3) = rate(i, 1, 3)�"quartrate(i, 1, 3) = rate(i, 1, 3) ���$H ���+Z
�!annratvar(i, 1) = Exp(initratvar)�'�� ��� ���Z Generate the uniform random numbers on [0,1] needed to produce the mthly rates and diffs� If (lowdis) Then�6 unifran1(j, 2) = Sheets("LowDisc").Cells(k, i)�: unifran1(j, 1) = Sheets("LowDisc").Cells(k + 1, i)� k = k + 2� Else �$@ ��+N �$@ ��+N�
End If� ���� ��� ��畨E�m Generate the uniform random numbers on [0,1] needed to produce the annual variances of ln(LT) and (ST - LT)� If (lowdis) Then�6 unifran2(j, 2) = Sheets("LowDisc").Cells(k, i)�: unifran2(j, 1) = Sheets("LowDisc").Cells(k + 1, i)� k = k + 2� Else �$@ ��+R �$@ ��+R�
End If� ����averagerate20 = rate(i, 1, 9)�averagerate1 = rate(i, 1, 3) �'� �'� z'| �'�� ��� ���O Formulas to calculate the variance of ln(LT) and of the difference of ST - LT ��$R 8%:'T T�K�)u@
�G�K�)u@'Tj T�K�)u@ �G�K�)u@'Tj ��333333@�h戫|?5�? ��醶瓽徕? T'��# annltvar(i, k + 1) = Exp(ltvar) T't ��$R 8%:'T T�K�)u@
�G�K�)u@'Tj1M T�K�)u@ �G�K�)u@'Tjtur ���(\徛�@�蛞MbX�? ��{瓽醶�? � t� ����? T'� �G �'�j�% annratvar(i, k + 1) = Exp(ratvar) �'� �'�� 6�� ��� �� 6'��7 Formulas to calculate the ln(LT) and the diff of ST-LTpr ��$N 8%:'T T�K�)u@
�G�K�)u@'Tj T�K�)u@ �G�K�)u@'Tj� ��a2U0*﹕? ��鳶悭浤�?$8�醶瓽崾? |�/�$亝? ��$< T'€ €$< � ��� +H�t澳 T't� If use_T Then�& If unifran1(cc, 1) < 0.5 Then�D randnorm = -Application.TInv(unifran1(cc, 1), DegFreedom)�
Else�I randnorm = Application.TInv((1 - unifran1(cc, 1)), DegFreedom)� End If�� Else�+ ��$N 8%:'T� End If T�K�)u@
�G�K�)u@'Tj+ T�K�)u@ �G�K�)u@'Tj�+ |�/�$仴? |�/�$亝?�iUMu/? ��鳶悭浤�?$8 ��$< � t� ����? T'~ ~ � ��+v � ��$v � ��� $H � ���+H � ���$H�褚Mbp? �Mo � ��� $H��? � ���+Henar�& ST_Too_Low = ST_Too_Low + 1prevk��P�If Mode = 1 Thenri�P If (l <> 12) Then averagerate20 = averagerate20 + 2 * rate(i, cc + 1, 9)��N If (l <> 12) Then averagerate1 = averagerate1 + 2 * rate(i, cc + 1, 3)��K If (l = 12) Then averagerate20 = averagerate20 + rate(i, cc + 1, 9)���I If (l = 12) Then averagerate1 = averagerate1 + rate(i, cc + 1, 3)�End Ifcena €'� ~'|� 6��n inpu�J Calculate the "appropriate" monthly, quarterly, and annual rate using the�- arithmetic average and the "trapezoid" rule.9) r�If Mode = 1 Then r�, annrate(i, k + 1, 9) = averagerate20 / 24���% averagerate20 = rate(i, cc + 1, 9)��+ annrate(i, k + 1, 3) = averagerate1 / 24�$ averagerate1 = rate(i, cc + 1, 3)���End If��J Use regression equations to fill in the rest of the (annual) yield curve� ��� ���� ���
�lect m � �� $H � ��� $H� � �� +Zni � ��$H � ���$H� � ��+Zfs�3 use regression equations to find 3 Mos Coupon Rate����$@M-垓? � ��$Z�u剥蟖拘? � �� $Z��?
弐? � ��+ZN � ��$Z�褚Mb`? �G��? � ��$Z � ��+Zjra�G Use function to derive yield curve based on interpolated forward rates [�% � � ��$Z � �� $Z� � � � � � � � � D AD%"� ����
��� �$�� '> D�G � � � �� �� �$�� ��$�� �$��$F�j��� �$� � � �+Z'� ����� ���渱� Select Case Mode� Case 2�0 For j = 4 * (k - 1) + 2 To 4 * (k - 1) + 5 � For n = 1 To 10an�� quartrate(i, j, n) = (monrate(i, 3 * (j - 2) + 2, n) + monrate(i, 3 * (j - 2) + 3, n) + monrate(i, 3 * (j - 2) + 4, n)) / 333� Next n�� Next j'�� Case 1� For n = 1 To 105 C�! annrate(i, k + 1, n) = 0#� For m = 1 To 12$�[ annrate(i, k + 1, n) = annrate(i, k + 1, n) + monrate(i, 12 * (k - 1) + m + 1, n)� Next m�'�8 annrate(i, k + 1, n) = annrate(i, k + 1, n) / 12 P� Next n C� End Select� ���nged v� ���me fro�=Extend the last monthly rate to the end of the 50-year period the� ���4���4� ��� ��� �� �� ����3��� ����� calcu � � �LT) �� � ��$Z �� � �+4d��� �� ���$Z �� � �+4k��p� ����?$8� ����醶� ���/�$佄 ���3�8�<� ��\��'^�'� � �� b't� �+\�RCalc. fractional-year adj. factor if on calendar year basis and proj. month not 12 F� D� ���h� ���� D��)u@ �$\� � ��$Z��� �+\5 C� ���ficati�'^� ���� D�n ^�� ��$Z���'^� ����i ^�� D�'^��� �$\�� D�� N P� D� �+\�k���
� ����2��6Calc. one-year rates for discouting end-of-year values � � �+8� $ F� D� ��+� �����'v
� �$8� �� � � D$4��� � �+8$H� ������d���� ����� � �$8� �� � ��$4��� � �+8� ���culatek��@ � �$8� � �+8 annua� ���ng the ��'�ti����� ���2�:ru� ���3�<8� ���2�>` � ��@€� ��� ��X�� �$\ ��+<�'� �� ��$"�bon e �� ��$" � �+:�0Read in the surplus values �'H � �$<� � �$8� N P � ��+<� � �$: � ��$< � �+>$H ��'�����@
��$> �+@� ��� H�� %Find minimum present value of surplus� � �$> �$@ �G � �$> �+@j� ����� �$@ L �+@� ���$Z� ��X�� ��T�� ��� ��ive yi � �+Xd �$@ �+Tard � ���� ��� ����'Rank the scenarios by their C-3 Factors�� �� �� �� �$T �$T
� �$X'Z �$X �+XG Z �+X �$T'J �$T �+T$� J �+T�k��� ����$�� ���+Z� ��V�� ��� ����� �+V�� ��� B��K�KT��?�$X+V *��?�$X+V��KT�{瓽醶�?�$X+V �$�{瓽醶�?�$X+V ��呺Q府?�$X+V+\�{瓽醶�?�$X+V�殭櫃櫃�?� $X+V��呺Q妇?�
$X+VJ�{瓽醶�?�$X+V����呺Q妇?�$X+V �殭櫃櫃�?�
$X+V��{瓽醶�?�$X+V舚��呺Q府?�$X+V ���{瓽醶�?�$X+Vsio�{瓽醶�?�$X+V En����C3Factor$>B@H P��+" - Add� ����2��@Display the one-year rates for scen. 1 for illustration purposes� �$8�� �+"� ��� , ^��+"�$�RDisplay the C-3 Factors and the weights used to calculate the aggregate C-3 Factor� ����2�%X�� ��+"�� ��+"� ���o numb� ��� ��V
� �$@� ��+"ri �$V� ��+"sc� ���er. � ����
��!Z��� �+" B��'� ��$X�� �+"��k��@� ���� ��Sheets("Assumptions").Select$��Range("S6:S206").ClearContents$��C3Factor$>B@H�%Application.Calculation = xlAutomaticnd r�!Application.ScreenUpdating = True� 8(:'J V we on|��H�@� 8(:�� V�� Handle Esc or Ctrl-Break 0!j��G|j�Error: n 0!pAlo������������2�Attribute VB_Name = "CalcC3"
Option Explicit
' Constants needed for random number generatorD
Z m1�259200, iBa7141c54773, "r&0.038@580247B2�B134456B1
812B28d41rmB7�4373YB3咟43^B
€&!�
5€.9rCS MOW Modifica�- I €�xto make minimaHl ms €this routine.歁erely enough�keep the� running givTen�or�-e�(workboo€k. Furcleanup €=left as an exercise僈e i$ntFst€creDad@k;-)A=Shub 儈(�胢IndexOffstet€N0�厁es one-ye猘羳t€iC/s�8man�"A
Sc鉆6缐 us� €,%K@壡c瀠lC[of C-3 fa
c€憇EpDebugOn�"FalsB
Dim bs@� As Lo渘g�2�()A€Double,@C俷ltvar�
Punif来1Kbnb�C� 2� A胣╫rm
v€膅伵he201��m俹P,quart2∧
Exte@mdI$Month_3�6IY@9_�, "2n ���5�7.1��O�3HprevA+�
tf�/`N€#.:`ut���
�, sq,, l.MA
r>t�9a釯�`峮i轻`�cor,�j'N
�#!Y)
#!g)��Du€嘟s佀)RegIntn�3Mo20Y阧零Guess`�?ba�a�#Coup犖�Forw竌rd��啾eI1�nos悿�, 0comp+鄁pt翀, noyr苨�cprj�d[�'s蕫亹i�iUhj�kGlGc俢gDegFr 嚯F渁聥��‖s`PerCo� cV纄rSpac佁f 1饣Fix��Er纑orFilBcNewEBoo亮f, Badt!廳語v晠s:\餦郖ial�res擻iP'e僜eQ`s.tmp爣lxowd衛�
癱_頣�q饒_t3ST_Too_Low�Outp`utShePm�W崰ts�昪OneAI侂&Surplu 啖@�牏�3�) Th€恳pA^'�e'�
a2:es1638�4`
��`�.Ch�Pn嗵拌惿f�`�4凷cptnUpd�5戆�=@7R�'I∈U儒�6M@誥lbp`�?耦�=〃0y?镢�= 蓄a剣= UBopund(w$€#'飖髨(r鋚*j�,P�}t>qD��鰘=& �[
= (Trub�'!CO穹utputSheet = WorksXs("Scenarios")
If Debug€On ThenTErrorFilBezFree(�`\New6\� Open lName For O�� As #a榣se;ApSd;nd If
E
' In餾 to generate the inte爎est �s~€
noyrs€n30@' number of yea€&project over
prjmo抎�12' � fymonthl辻1'€0�4*V lowdi>Fac€�$' s€詣equal乨"Tr€ue" if \ arlo be唖d using
€ +crep€ancy po?俿€use_T"鼺 ��9�CNT�tributDio匘eg俤4om@6�,� dejg绹sMf�plar€繻 丆const_var{��8 D$�"€i3e�(ST - LT) 繬as`sumedAI€Ba Bant
ReDim unifran1(1Au, 2@�
2(�fI翀@s@�,� + 1, 10爬'annK 倯� @prt
* 4?��缷R
€槕ltEG)��7diff�1
U�'Du@�>s(�RegIDnt,3Mo�20Yr�Coup�>I@僿ard$M`T 鈝BvAp€npriAxCorrelaAP FactDorZ
c�a�!�0.1`Q' � betwe€憀n�.罠罤LT�a喯�H�% 刵cbL�?繪��@&燯0.�35�� �瘼ln(!V
�颶慳W' S乽p剹iti@乀reasury Yie€ld Curv`т'M峗3�絸�Ap�%阑.Cells(2, 4?�6�3�Y�4_1�4�fRa€nge("In�3��")�1)`.ValuAB25i�6�5<*7�7�8�10暭9�2�10�玢!�)s(`m)蕾4= 貯1M�
i`rt� Log�(�)3'駙tC(log�420-r�萿�4��1镳Zi�71cP`�4U罳��-6.�9253�
���7638#��0!0.0038091� ^餫a=�)癵N-p<:@segs?"y昻p丮鉌聡po嬼KPMg€q:
豒B)�0.25I2獵:311Y4�2536Uz77981�0)9!2*``�
�30!bs`Q`aC`�
�`�acR
-!4356324��992758975@
5�11�3575����€3158578��0.86813624��199�85376`P�
�0�*� 649029�� �.62�614391��4820�7�儌41544��.552208529��14p0884
b�0p0267�'�.40932979���62310=€92
b �32p0452#� �3€2122330�嬕 �6�218�$�1102374C��3069<14����60�73��� �'H%�?��C �c)P€45a4H%�b346`05147��42�'�Guess藧b90�22Pb�1
pp'419`$0
�� 898�0406�*
裣i`1 To n&oa�Dsep�= "br+ v�(iM唉)
`恖ic.StatusB虿"Abo剈t儻gin �@ " & i啸I€ndexFix=纎Event"��俓ize褖iables -- Sub (prefeC涎Wlong-培]m, sQ 4聊Yshort�q
qZ", RExp�(5f垾砆/2秅除Ot眏p 敓�S矡QQH�R0
羐汪=_
�釨龥+0牙礡0�
��3p'
O
��i&�a崂�1!p
k�&`Fo-�r j = 1 To numb
' Generate the uniform random爀rs on [0,1] needed to€ producj mthlyftes p diffs
� If (lowdis�) Then|lh1(j, 2)淪heets("LowDisc").Cell€s(k, i)8B18 + 1 5.36�4418C儮嶥
%鉩
�< -�F�*`)�-- 2.4_0.347 *鄻�3A++ 0.5�9@c鄅�!>囜釭Exp(���`
�!�e��%�1�%啜�%")�%�/�aP@��- 3.�12�%271�%dQ &64`(cor�!(�)a喃(1�峄^ (,)��!圔const_飥FAd"fa��1���1��
#�4€����ai�5A瞝�鈏prjmod┄胏cA2Ak�q A+ lc
g=!' 鱪h�mCl-LTq �%@yG1(cc�徼�*�縨�6q07��:�?7�誑���0.0048�YLog@!0655D))0#0.21&(�!H"0105��&7 /�$*0G�頴a!p�9羴s���q0��騴�羆use_T瓔a嵎Ns� <馛� �:- TXRE, D恊gFr@唎m�
齰 S婘j^�7� �)�0厜�,��(m橿5y��a�(��_溃)�))�)�st�$=鈄�r-�04�<�&�*0�2襇�#-饞+�%�%�罯D)盤€.a�@,�礟�縋btP�
獬W,�!,�.u.3Aa
i�+�'t�0'����P1,p:T, p��37�`0<5�ST郷Too_P�0�� :��"
M郬@蠿�(l <>� 1€胊� a<汒�+ �M聸D
�)/nac焌�10,� 釣V43
�/
eb�-
� x�� �� �5W�-= ".��2�= �'宜0o� C("ap@醦衅te " monQ�, quarterly,b荰杀 us8ingq缌`蕋h鄊etic��!r"谐pezoid€" rule.褄n'�!0nu職,� B`��:41 n#w�dtnm27h1?ai_�M�#Use regresrs@� e@汛R籪纈ll in蝙t羵Q(�) yield curv▕劐�*(k径 - 1) + 2 To 12 * (k�13
monrate(i, j,€ 9) = (@+ xH) /t 2~3
~?3)?�
' use regression equats to find 3 Mos Coup=R���= €1.17851zq€H- 0.26,16亪�+004531-If (/<2) 燭hen =.5�<�(wUwfunc乹qderive yield cur€based vinterpol€yd f@orward偵s�'all I!ViaF(D6uo罳,N)M9)q€v, _��Rg€, �3€c!20Yr�
Gu€uB�� �2s,DebugOn, Erro纑File)C-�
� ii腊1偧0�28Bad�Ds(餴i) €rF 纙
NA@滵脃Pr€b "#, i@譏n@dexFix衖姥�-�傓 \T餴me(/€[K拋'=E=+*Next堾9
j
�Select C��蔰e�
cM纔'�9� j� 4�T鐏b凨5���>n€�*� C
€urt宝�, n聙�3a
辥 @f鄳"+)R�34牁&�!⺪��#@cb#爖¦anf<1�z#f �m"咖+"��� l磎�;��m�
g/ �1'" �% � E`]證H罥Bk&i!�Exte�the last�7thc e€d(nosce@y�5” +`�
�+_鎥C僟0|5鱠磥.k 2�e{俲 }noyrsby績 I�y�1j€0巏醂萗, 3衤 Els僶���螩€!0`0If'�5?b@傗�6sOnleY��1€�F€ractAdj�?pAv@T�
Do Wh繴 (㱮��!*�fPU饂
'pic. f!phal3!adj傽`or ifQnxcal�#�"2#纎i坰 a�pro�伬th not,� (P�Bas�=@庱ZMon桨<�髖�:"(P�- D�1��mP�1P� k1!�) ^ (2�12胯��4��, "V�� �q��� `K鐝 � � tePg
閻/ - )駆�E$跻(!(B�%0or盃R- Ta
xq
)餬Dsct€Loadingr�i酜%1ABr5�0v�(one#(駄s駭 discout€ (-of�valp�4�;㳠A��(�(�(��/驩K& =�疜�`*�7.0x�N*1��*疞
4眃�
��
SG�3�
皳d鼻&*P夵+ �0
七4��
�pBQ_Y�&Cb繰a!N褱@Loopo肣Surplu簊wS0�=�*F2L#�gUPVS_m 麮3;�a2VAm賜� 兺@�5�/�aWZCell@甈 32些q甬> ""�0��
唳O)�'Read insC -2Num�� D��|1u�}�!潰Cr#螦腁ca�u{
* /倖a�1b �3 ��侻$Q�1獬��'Fq雖inimu坢 p犿ent#~ �4�@D�饐<選"€r姣�3k�I1�龀ors(i) = -C3Fact�/ BegStatResv
Next i
ReDim MaxIndex(noscen)�.Sorted扐
€VpThen�*DT纄mpInt€/坸�厗j€畢"��€&�+6€
��
g�
€@= A!�E`nd If�B巎O怶eights_�rCE
�0GSelect Case Set�B1, 3�罫�芅2)良0.53��2�5��0 6 4X7 �6 8 8 9 21�10�11毳�1+1z E+��401�.��.}€�1�.€乆CL翞S(hee燯"厫").�Cells(2NaJDsctLoading
e娐�50AQ 'D ispla鈵 one-year €rates f坤
a�. 恆illust`ion p€urposesC9�3郳枹pOne鶼` (@Eo(鬎r兰R�
��H�, a`x!鉻 used to c`alcul�猹a鄃greg�g�夐32�, 2!�""Q3E�6�鼴
iD
嬆�-��'�閽�1剣�17,� 16嗍b惻崃銕y捆2 k�A�4/暮叆�B�'匨As爏umpt`?s鐼≮ge("S6:怱206 Cl�>€Content燙xU
'Appl萯ca�
.C�9�%= xlAuto
m�c|Scre enUpd�ng佇True
�Q眰usB�,=`uls�Cl�* #E€rrorFil
ExitP Sub`"a@d�:1 �� �a' Hp*le Esc �3Ctrl�-Break���.Number锧182 Q0l MsgBox$("�
:"0*vb0CrLf€!De餾cri�P扐������<���鵶'|[H璽f鑭�o�FRo彝nC馧剠� �|噮������������xRo彝nC馧剠� �|噮鵶'|[H璽f鑭�o��ME�����������������������������������������������������������������������������������������������������������������������������������������������(SL����S����S����6"������N0{00020819-0000-0000-C000-000000000046}�����€�������(����������%����H����@凗�������h��������������%偁���������������������%����X��������������������������������������������p@@������������������������0���@ABCDEFGHI���KLMNOP���RSTUVWXYZ[\]^_`a���cdefghijklmnopqrstu���w���y���{|}~€ v�$��// v�$��/* v�$��''�i��H�� j��G 4���^Invalid instance of DelimitedDataReader class. Call Initialize prior to calling other routines 0B2jo������������D�Attribute VB_Name = "DelimitedDataReader�"
˙as�0{FCFB3D2A-A0FA-1068-A738-08002B€3371B5}
|@Global轘pacIFals"edCre€blPredecl2aId�CExposeTemplateDeriv�Customiza
EOption 0licit
' Yes a mechanism for €ddinHg d� dm fil(i.e@., numCc
�)&�'Usage:� Dim ddr As �, v�Var(ianH'�Se倀�= New!F
Call�
.Initializ€e("c:\t@J \some�,.csv"�(&o WBh3 Tru€q'[v€e,.A慛ex%�If IsEmpty(v ) The罵it Do# ' @Proces@TrrayFLoop€
P@nA@p m_nF NumbeHInt爀ger,@sB薃�NS@糿g�臥嚶�
LineLongAyPub罖| Sub I�9脠al哱H@F",慉Q O€>rr€墍GoTo Fa�1d}�7 6= F榬ee�3�?Op@MGF€Input AcM乚 Sh廇華喪H�m_sg �=�d�&= �C"nH#= 0�
蘀x�7�"
H�2dErr.Raise(vbOb0ject + �1,搻�Co�羒羴Q '" +�`"'.Av��� �
���? ,"#$%&'()*+���@./012;456789:-<=>���QAFCDE���GPIJKLMNOBR���STU���������������������������������������������������������������������������������������������������������������������������������������������������������������������������bCr4Lf�(� .D escriw+ �").�/End�9x!&郍ignor@scomment繭€blank Bl€Bs --`zt urns cty� wXe�of聑 isched胉JCFFunc倖�I羇()
v |s癟his�+aS(B0�*�� cl<>� 0�7Cl`尰`q+��訳y鄿罈Rd& O��avivatr豲utN憊-`媚vsass_p" Pz@�FW|GT鄀rmin�c�'縝�€��U
sJ�Boo�na�霶�Q1OF(�+�� &'a#tehrs y`a�ab eginnQiwith //, /�* 餷`�%�
K_?鈆xjp
gC�"") Or (Le刦t�, 2)��//�€�*���1�'卶���+}"�<�(�+1<邁r' >衺@BIn郕id€ instan0�pt祲埲 鹁ss.Co�' pri�to c�Aothp|�,��#��8#1�
p#绑��€���������L���3護D�=p9�*=鸂h�8+3q�r洘c诰嘕赌�%臕�������������xr洘c诰嘕赌�%臕��3護D�=p9��ME�������������������������������������������������������������������������������������������������������������������������������������������PS����S����S����<��z6"����<��<��<������N0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}����0b€n�<�����@��������,凗�������X��������������%r�`������������
������i������������€Set i僼��������������€(,\€`������������
(�� ""#�i凗��������������� `剉����������xt�� ��������xmpty%,!��h������������
���$E�i凗��������������� ,,!Z@h������������
��(I�i凗��������������� �€`������������
��������, N���`������������
��������0W� �`������������
��������4\�,~``������������
@��8`�i凗��������������� 7,��`������������
���<�f�I僾�����������€i凗��������������� |���� `������������
��������@ j�€�������H�� ��������%b€jx4����@��������b€l8����@��������b€p����@����@���������������������€`x���������������������P�@`�€����������
`����P �������������� ����������������0PD������������������������<� Dim ddr As DelimitedDataReader, dds As DelimitedReaderSetF� For Each ddr in dds.Items()�� �.�
m����x �!�'�m������ �$�.Xm����h��.���.�
o��`����.�o��H����@����徊Attribute VB_Name = "DelimitedReaderSet"D
as�0{FCFB3D2A-A0FA-1068-A738-08002B3@371B5}
|G lobal躍pacIFalsedCreatablPredecdlaId�CE xposeTemplateDeriv�CustomizEOption 0licit
' Provides a collec�€Qss for working with m`ultipo喎D€w児 insta0nces+�,Usage: Dim ddr A詓 �,€
s�
嗕�% F€EEach�!in�.It`ems()2�PD€F m_�C�3GG�Pub€A Sub Clea2r� @幯= 怤oth繟
�坋w �End��&GAdD�(sFXile偘�'S€祅萭, CialFI侺驝伜,"<漇�*乗@/@&P]A3CallU.Initi燼lize&,G!譈蟈.�5(@� m�='n@鎟妭杣猻亾<翓e纒>僿� 禖$= ]per€ty Get DG?!N)6c&�`-�
a% ;�Count()�Longw�&AR
.��(郔ndexe�4;aYA���5
S�cass_C�C$?O#�d#Qud.Te餽min`z焥僺(OrU€€€
���
�����a
@8 )������������I�W��W�0 0`00x0�0h(0�88(rU€€€ ��������D$`����������,A`!�����������),0�,�h%��������������=i(�h)��������������(0h -���������������(3
$A`0��������$�`4��������n__SRP_d����J�DelimitedString ������������!�Sheet4����"����Q
Module1&����b���������Gp#炁��#��������������������������x��ME���������������������������������������������������������������������������������������������������������������������������������������������(SL����S����S����<������N0{00020820-0000-0000-C000-000000000046}����@€�������(����������%����H����@������������������������������������������������������������������������������������0Delimiter found, extract the substring between the delimiters. � � � �$�X �+� � �
���Increase array size if needed.� �� �釦�pk��X�$Move to end of last delimiter found.� � t'��Search for the next delimiter.x � � t�'������ � ���Extract last substring. ��'� � �$�X �+��k��h�!Resize the array to correct size. ��
�� �酅���d���'�k���Return the array. �'�i������������獯Attribute VB_Name = "Del€imitedS� ng"
楤as�0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}
|Global!諷pacIFalsedCreatablPre declaId�CExposeTemplat@eDeriv�C€ustomizE€Option 0licit
P€"€& m_s羺焤 As 儭�' A small helperB _ss uQfor working with Rd吜 s聅�1u俠€7 Func�?HGet�5()�6 婥=
End儐"Sub S�駪2)
N� ��' Default�3r is ", " -- override€@�=J) met鴋odV=B咢m狮(ParamArray vInp纔tArgs�F€VariantI@Dim lbNL鄌ng, �?€l�i�sReturnSBc7 IfMY"" The鴑 CAy�3�<@N罭= LBound(�*耉!= Uk�AF@媔紷T"o-- 1� 臙*=F+ C�,
@(i)) +L� € Next i��,€E颣
' Splits 俛N[ into�vC4 a�8of 詃o@?e _PL@B
D鄡( press乹fm, 胹al 8ByV�餼�",`2'lockSize�<@ 100釫dG!,FPos1Q�, l�2�I膁x�Cnt�頛 D腖e
v'L�
�'Initial酇the �$啖�"� l�= 0歪1��Re!�
�(1 繢B%k�'Search А恆厪r.�l�9郪en�.釻 = 腎n(1,立�2�,€鉻rB
繢o Whi@�#�>���+%Z'�7fAf, `TracDt !sub悖 `betwe+�sY !A)`$C€Dbl(MidH�9��-�:1)�匑}(�Mod ()�= 0"~� �5.c �洌Xs�6if( ne勒d� 妹3`豷erv`:�?�4%c47�
笽Rf�'M� @ie銧焕glas '$aEc+ )(v�$M!n盇�! �/�b�m皠�Loofp禨� <>%'鳨xt���U�/r�"���1' p5衈�/!c#{�RE値�d
�(E餸pty1�g��vO`縑20820- C$0046}
|Global!腟pac扚alsedCreatablPre declaId玊ru
BExposeTemplateDeriv$払ustomizD2Option /licit
澇€0*� pH�d�RbcC3Scn�,@
Z=
n stdol爀
h%^*\G{0002`0430-C
0046}#2.0#0#C:\WINDOWS\system32\e2.tlb#OLE Automation�`俽�p#倂Calc€ScenG€Ca€LcS€On�2��€H�1們`.��
,Q�7鰓!�+�倕ButtonClicksGQ€Year_2�Year_3�Year_5�Year_7�Year_10�Year_20Year_30蓤prevrandV diff蚦 annratvar€�initdiffz�prevdiff梒stdiff�?ltrat觓initrt20喘 initltvar
initratvar]�corrat�corvar4 prevltvar�8ltvar5w
prevratvar圕ratvar\� prevltratS# Durations}RegIntReg3Mosy�Reg20YrGuessInt. Guess3Mos Guess20Yr>Coupons�Forwards嗪mode frequency䝼
bWriteToExcel@l
nXLSpacerRows�sCSVFilec�nCSVFileNum蕎vHeaderInfop2rTargetRange@%Range�bWriteBondReturnsyBondReturns晿bWriteMultipleCSVs痺sFolderA�sHeaderLine
vFileNamesC�naYieldFileNums�,naBondFileNumsw1ddr�DelimitedDataReader &dds�DelimitedReaderSet}�bpMzbpB0V�bpKzbpB1W�bpSigmaB�noscen檌compscen rendpt蝭noyrs鼗prjmode[numbseed€�i`ii玗jakbpgcc荺
DegFreedomH�mdneScensPerCol獚
VerSpacing謭IndexFix*
ErrorFile[�NewFileX
BadForwardx�
ErrorFileName梢lowdis8�use_T@| const_var/�
ST_Too_Low1YOutputSheet顈 Worksheet窿nScenarioCountvkThisWorkbook|�Activate梶Failed�0EnableCancelKey牦xlErrorHandler忉Cells� AddReader潽
Worksheets鉴
ClearContents{��(OpenOutputStream�1Trim@�Right
Erro�Raise�
vbObjectError
��(TransposeArray瀉Logd� StatusBar蕼ExpK�Sheets
�(UniformNumGen5WTInv峥�(InterpViaForward�ZTime dRateLastWdCumulativeRet孾dRet讚dCurrentRate橏vNormals�nOutFreq^�nPeriod�nCurrentScenario\Item讂
LineNumber^�ReadNext0HSqr(��(CreateHeaderArrayhzWriteScenarioToExcel�WriteScenarioToCSV僆WriteScenarioToMatrixFilesD�Beep�Number�-MsgBox桼vbCrLfDescription� ShortCpn�LongCpn藥LongCpnIndx�$Coef0T CoefShort)-CoefLong2�Guess0G�
GuessShort*V GuessLong}�forward┾coupon9Beps&�columnsp9flong芎d[vmsjaXdvdf�dsdf龢dadf�8dcdfmCiSeed嫛riIX1悹IX2憼IX3挔init\[oldSeedI�UniformNumGen_Error2UniformNumGen_Done�*�(annirate覂rates�,trial�5seedNum�+
projLenYrs,wyrp_vHeaderArray骼rateData壔rTemp棄nRowso�Resize@4Offset瑾fileNum�#Round�fileNumbers3* nElements蕯ButtonClicks�
�(Generate12佁
�(Generate50��(GenerateCustom:*HelperRoutines莫a1k\a2l\a3m\a4n\a5o\a6p\b1怽b2慭b3抃b4揬b5擻c1礬c2禱c3穃c4竆c5筡c6篭d1赲d2踈d3躙d4輁p_low� p_highqWqhvSourcevTarget獥nCols縑�(OpenInputStreame sFileName椵�(SendArrayToRange�)Sheet3��(InitC3�Style舙
vbYesNoCancel鑡
vbExclamation吶vbDefaultButton2戳MsgQ�Title騸 Response蘟�� ��*\G{000204EF-0000-0000-C000-000000000046}#4.0#9#C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\VBE6.DLL#Visual Basic For Applications*\G{00020813-0000-0000-C000-000000000046}#1.6#0#C:\Program Files\Microsoft Office\Office12\EXCEL.EXE#Microsoft Excel 12.0 Object Library�*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINDOWS\system32\stdole2.tlb#OLE Automation
������B�:亓���������€ny�`Z €�AsD€�elseH€�endifO€�exitQ��fR€�falseT€�For_€�if�€�then�€�ToExcel€+VBA麾Win16羱Win32Mac巢VBA6�#RbcC3Scn葰stdole揱CalcScen鷶 _Evaluate�m1'^ia1=�ic1嚌rm1�m2(^ia2>�ic2垵rm2�m3)^ia3?�ic3墲YieldPointsG�
BondPoints寝g_nCSVPrecisionI
UseOldNormals障
GetNormalDraw�uldNormalDraw書Application�*NormSInv袴
�(InverseNormal闉�(GenerateScenarios)T
vScenarioList胂IndexOffset�DebugOn&�bseed,�ratek
annrate�6annltvarR2unifran1荌bbunifran2菼randnorm沥
averagerate20厯averagerate1�monrate�: quartrate玅
vInitialCurve䅟Month_3k�Month_6n�Year_1�1x�vbNo�%vbOKOnly醪 Response2y�vbYesa?Run_��(CalcC3
monrateExtendedr8lcOneYearx�Surplus�8DsctFactors6�PVS着 C3FactorsY5ScenSet屜 ProjMonth�# ProjBasis�(
NumSurplusr�TempR�BegStatResv贘TaxRategDsctLoading�ProjDate蜦SortedC3Factors煆WeightsMaxIndex1!TempIntDFractAdj�@€�"���胀諟.摋+,0DHPX`hp
x�Program SettingsYieldCurvesAssumptions
Scenarios C3FactorBondNormalsBondOutFolderCSVBondFileNamesCSVFilesByMaturityCSVIncludeHeaderCSVOutputStyle
CSVPrecision
CSVTargetCustomScenariosCustomStartExcelSpacerRows
FrequencyGenerateBondIndicesInitialTreasuryCurve
OutputTargetStd12Std50Worksheets
Named Ranges�
���� �F&Microsoft Office Excel 2003 WorksheetBiff8Excel.Sheet.8�9瞦