BondIndex : 국제 채권 지수 추적 - BSI 모델.

설명

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;