설명
BondIndexGDX.gms: 국제 채권 지수 추적 - GDX 입력. 콘실리오, 닐슨, 제니오스. 실제 재무 최적화: 슬롯 사이트 모델 라이브러리, 섹션 8.2 최종 수정 날짜: 2008년 4월.
카테고리 : 슬롯 사이트 FIN 라이브러리
메인파일 : BondIndex.gms 다음을 포함합니다: BondIndexData.gdx
$title 국제 채권 지수 추적 - GDX 입력
* BondIndexGDX.gms: 국제채권지수 추적 - GDX 입력.
* Consiglio, Nielsen 및 Zenios.
* 실제 재무 최적화: 슬롯 사이트 모델 라이브러리, 섹션 8.2
* 최종 수정일: 2008년 4월.
$eolCom #
세트
통화 통화 세트
채권 채권 세트
시나리오 시나리오 세트
ALIAS(통화,j);
ALIAS(채권,i);
ALIAS(시나리오,l,SS);
세트
JxI(j,i) 통화별 채권;
매개변수
ExchangeRates0(j) 결제 시 환율(XXX 대비 USD)
ExchangeRates1(j,l) 첫 번째 단계 종료 시 환율 시나리오(XXX 대비 USD)
가격0(i) 오늘의 가격(액면가 단위)
Price1(i,l) 1단계 종료시 가격(액면가 단위)
초기 보유(i) 초기 채권 보유
발생0(i) 채권 최초 발생
발생액1(i,l) 첫 번째 단계에 대한 발생액(액면가 단위)
뛰어난(i,l) 첫 무대에서 뛰어난 얼굴
ReinvestmentRate(l) USD에 대한 재투자율 시나리오(+1)
IndexReturns(l) 각 시나리오에서 Salomon 지수의 반환
pr(l) 시나리오 확률;
$gdxIn BondIndexData # GDX 컨테이너 열기
$load 채권 통화 시나리오 JxI ExchangeRates0 ExchangeRates1 # 데이터 추출
$load Price0 Price1 초기 보유액 Accruals0 Accruals1 # 데이터 추출
$load 뛰어난 재투자율 IndexReturns pr # 데이터 추출
$gdxIn # GDX 컨테이너 닫기
SCALARS TrnCstB 구매 거래 비용 /0.0025/
TrnCstS 매도거래비용 /0.0015/
CashInfusion 사용 가능한 예산 투입 /100000/
Eps공차 공차 /0.10/
UpprBnd 채권당 최대 보유 비율 /0.1/
CHFtrade 스위스 채권에 허용되는 최대 거래 가치(CHF) /15000000/
HoldVal 초기 보유 가치
InitAccrCash 초기 보유로 인해 발생한 미지급 현금
InitVal 초기 포트폴리오 가치;
* 초기 포트폴리오 가치 계산
HoldVal = SUM(JxI(j,i), ExchangeRates0(j)*초기 보유(i)*Price0(i));
InitAccrCash = SUM(JxI(j,i), ExchangeRates0(j)*InitialHoldings(i)*Accruals0(i));
InitVal = CashInfusion + InitAccrCash + HoldVal;
긍정적인 변수
X0(*) 오늘 매입한 액면가입니다.
Y0(*) 액면가가 오늘 매도되었습니다.
Z0(*) 다음 기간 동안 액면가를 오늘 보유합니다.
현금 금일 거래(매도 및 구매)로 발생한 현금 금액입니다.
FinalCash(l) 포트폴리오 청산으로 인한 현금 금액;
자유변수
z 목적 함수 값;
* 보유자산의 상한선을 설정
loop(JxI(j,i), Z0.UP(i) = InitVal/ExchangeRates0(j)/Price0(i)*UpprBnd );
* 거래 한도 설정(판매 또는 구매)
* 유동성상의 이유로 CHF 채권
X0.UP(i)$JxI('CHF',i) = CHFtrade / Price0(i);
Y0.UP(i)$JxI('CHF',i) = CHFtrade / Price0(i);
방정식
ObjDef 목적 함수 정의(예상 반환)
CashInventoryCon 오늘의 현금 잔액 방정식.
FinalCashCon(l) 첫 번째 단계 종료 시 현금 잔액 방정식.
InventoryCon(i) 자산 재고 잔액을 정의하는 제약 조건
MADCon(l) MAD 제약;
ObjDef .. z =E= 1000*SUM(l, pr(l)*(FinalCash(l)/InitVal - 1 ) );
캐시인벤토리콘 .. 캐시인퓨전
+ SUM(JxI(j,i), ExchangeRates0(j)*Y0(i)*Price0(i)*(1-TrnCstS) )
=E= SUM(JxI(j,i), ExchangeRates0(j)*X0(i)*Price0(i)*(1+TrnCstB) )
+ 현금;
FinalCashCon(l) .. SUM(JxI(j,i), ExchangeRates1(j,l)*Accruals1(i,l)*Z0(i) )
+ 재투자율(l)*현금
+ SUM(JxI(j,i), 환율1(j,l)*Z0(i)*미결제(i,l)*가격1(i,l)*(1-TrnCstS) )
=E= 최종현금(l);
InventoryCon(i) .. 초기 보유(i) + X0(i) =E= Y0(i) + Z0(i);
MADCon(l) .. ( FinalCash(l)/InitVal - 1 ) - IndexReturns(l) =G= - EpsTolerance;
MODEL BondIndex 'PSO 7.4.4' / 전체 /;
옵션 LIMROW=0,LIMCOL=0,SOLPRINT=해제; # '행 및 열 목록 끄기'
* 실행 가능한 EpsTolerance 찾기
SCALAR low 하한 이등분 값
높은 상부 이분법 값;
높음 = -INF; 낮음 = 0; EpsTolerance = .01;
반복
LP MAXIMIZING z를 사용하여 BondIndex를 해결합니다.
IF(BondIndex.MODELSTAT <= 2,
높음 := EpsTolerance
그 외
EpsTolerance = 2*EpsTolerance)
최고 > 0이 될 때까지;
* 이등분을 통해 실행 가능한 작은 EpsTolerance를 찾습니다.
반복
EpsTolerance = (낮음+높음)/2;
LP MAXIMIZING z를 사용하여 BondIndex를 해결합니다.
IF(BondIndex.MODELSTAT <=2,
높음 = EpsTolerance
그 외
낮음 = EpsTolerance );
UNTIL(고-저) < 0.005 AND BondIndex.MODELSTAT <= 2;
매개변수
CurrentValue(i) 보유 자산(USD);
CurrentValue(i) = SUM(JxI(j,i), ExchangeRates0(j))*Price0(i)*Z0.L(i);
SET ColHeaders 열 헤더 / '액면가','USD 값','퍼센트'/
PARAMETER 요약보고서(*,ColHeaders);
SummaryReport(i,'액면가') = Z0.l(i);
SummaryReport(i,'USD Value') = currentValue(i);
SummaryReport(i,'Percent') = currentValue(i)/InitVal*100;
SummaryReport('Total',ColHeaders) = SUM(i, SummaryReport(i,ColHeaders));
DISPLAY SummaryReport,EpsTolerance,z.l,InitVal;
파일 결과 핸들 /"BondIndex.csv"/;
ResultHandle.pc = 5; ResultHandle.pw = 1048;
PUT ResultHandle "목적 함수", z.L:12:8 /;
PUT "최종 엡실론", EpsTolerance:12:8/;
PUT "초기 포트폴리오 가치(USD)",InitVal:0:0/;
놓다 /;
PUT "채권 번호", "CUSIP 코드", "액면가 단위 보유 보유량", "USD 보유 보유량", "포트폴리오 가치의 백분율";
LOOP(i$Z0.L(i),
PUT / i.TL:0:0,i.TE(i):0:0,Z0.L(i)::3;
PUT currentValue(i)::2,((currentValue(i)/InitVal)*100)::2
);
PUTCLOSE / "미국 달러 현금",Cash.L::2,((Cash.L/InitVal)*100)::3;