설명
피망 슬롯gms: 포트폴리오 지평선 수익 모델. 콘실리오, 닐슨, 제니오스. 실제 재무 최적화: GAMS 모델 라이브러리, 섹션 4.3.1 최종 수정 날짜: 2008년 4월.
카테고리 : 피망 슬롯 FIN 라이브러리
메인파일 : 피망 슬롯gms 포함: BondData.inc
$title 포트폴리오 지평선 수익률 모델
* 피망 슬롯gms: 포트폴리오 호라이즌 수익률 모델.
* Consiglio, Nielsen 및 Zenios.
* 실제 재무 최적화: GAMS 모델 라이브러리, 섹션 4.3.1
* 최종 수정일: 2008년 4월.
SET 시간 기간 /2001 * 2011/;
별칭(시간, t, t1, t2);
스칼라
현재 올해
지평선 끝의 지평선;
지금 = 2001;
지평선 = CARD(t)-1;
PARAMETER tau(t) 시간(년).
* 참고: 시간은 0부터 시작됩니다.
타우(t) = ORD(t)-1;
SET 채권 채권 유니버스
/DS-8-06, DS-8-03, DS-7-07,
DS-7-04, DS-6-11, DS-6-09,
DS-6-02, DS-5-05, DS-5-03, DS-4-02
/;
ALIAS(채권, i);
스칼라
스프레드 재투자율에 따른 차입 스프레드
예산 초기예산
매개변수
가격(i) 채권가격
쿠폰(i) 쿠폰
만기(i) 만기
부채(t) 부채의 흐름
rf(t) 재투자율
F(t,i) 현금흐름;
* 채권 데이터. 덴마크 시장의 가격, 쿠폰 및 만기
$include "BondData.inc"
* 데이터 복사/변환. 단위 데이터를 얻기 위해 100으로 나누는 것을 기록하고,
* 만기일에서 "지금"을 뺍니다(타우와 일치함).
가격(i) = BondData(i,"가격")/100;
Coupon(i) = BondData(i,"쿠폰")/100;
Maturity(i) = BondData(i,"Maturity") - 현재;
* t년차 채권 i의 쿠폰 적용 전 현금흐름을 계산합니다.
F(t,i) = 1$(tau(t) = 성숙도(i))
+ 쿠폰(i) $ (tau(t) <= 만기(i) AND tau(t) > 0);
* 단순화를 위해 단기 금리를 각 기간마다 0.03으로 설정했습니다.
rf(t) = 0.04;
스프레드 = 0.02;
* 일치하는 포트폴리오를 구매하기 위한 초기 사용 가능한 예산
예산 = 803021.814;
* 803021.814
*850000
매개변수
부채(t) 부채
/2002 = 80000, 2003 = 100000, 2004 = 110000, 2005 = 120000,
2006 = 140000, 2007 = 120000, 2008 = 90000, 2009 = 50000,
2010 = 75000, 2011 = 150000/;
긍정적인 변수
x(i) 액면가로 구매함
잉여금(t) 재투자된 금액
차입(t) 차입한 금액;
변수
HorizonRet 호라이즌 리턴;
방정식
CashFlowCon(t) 현금흐름 잔액을 정의하는 방정식.
CashFlowCon(t).. SUM(i, F(t,i) * x(i)) +
( 예산 - SUM(i, 가격(i) * x(i)) ) $ (tau(t) = 0) +
빌림(t) $ (tau(t) < 지평선) +
( 1 + rf(t-1) ) * 잉여(t-1) $ (tau(t) > 0) =E=
부채(t) $ (tau(t) > 0) +
잉여(t) $ (tau(t) < 지평선) +
HorizonRet $ (tau(t) = 지평선) +
( 1 + rf(t-1) + 스프레드 ) * 차용(t-1) $ (tau(t) > 0);
모델 HorizonMod 'PFO 모델 4.2.4' /CashFlowCon/;
LP를 사용하여 HorizonRet를 극대화하는 HorizonMod 해결;
DISPLAY HorizonRet.l, Borrow.l, surplus.l, x.l;
* 초기 예산의 다양한 값에 대한 시뮬레이션
파일 HorizonHandle /"HorizonPortfolios.csv"/;
HorizonHandle.pc = 5;
PUT 수평 핸들;
FOR ( 예산 = 778985.948 ~ 818985.948 BY 10000,
LP를 사용하여 HorizonRet를 극대화하는 HorizonMod 해결;
루프(나,
PUT Budget,HorizonRet.l:10:3,i.tl,BondData(i,"만기"),Coupon(i),(x.l(i)*Price(i)):10:3/;
);
루프(티,
surplus.l(t) = HorizonRet.l$(ORD(t) eq CARD(t));
PUT t.tl,borrow.l(t):10:3,surplus.l(t):10:3/;
);
);