MeanVarShort : 공매도를 허용하는 평균-분산 모델

설명

MeanVarShort.gms: 공매도를 허용하는 평균-분산 모델.
콘실리오, 닐슨, 제니오스.
실제 재무 최적화: 슬롯 사이트 모델 라이브러리, 섹션 3.2.2
최종 수정 날짜: 2008년 4월.

카테고리 : 슬롯 사이트 FIN 라이브러리


메인파일 : MeanVarShort.gms 포함: 추정.gdx

$title 공매도가 가능한 평균-분산 모델

* MeanVarShort.gms: 공매도를 허용하는 평균-분산 모델.
* Consiglio, Nielsen 및 Zenios.
* 실제 재무 최적화: 슬롯 사이트 모델 라이브러리, 섹션 3.2.2
* 최종 수정일: 2008년 4월.

SET 자산;

ALIAS(자산,i,j);

매개변수
         무위험비율
         기대수익률(i) 기대수익률
         VarCov(i,j) 분산-공분산 행렬 ;

* Estimate.gdx에서 평균-분산 모델을 실행하는 데 필요한 데이터를 읽습니다.

$gdxIn 추정치
$load Assets=하위 집합 RiskFreeRate=MeanRiskFreeReturn VarCov 예상 수익
$gdxIn

스칼라
   람다 위험 태도;

* 공매도 허용:

변수
   x(i) 자산 보유;

* 각 개별 자산은 최대 20\%까지 공매도 가능합니다.

x.LO(i) = -0.2;

긍정적인 변수
   Short(i) 쇼트 금액;

변수
   PortVariance 포트폴리오 분산
   PortReturn 포트폴리오 반환
   z 목적 함수 값;

방정식
    포트폴리오 수익을 정의하는 ReturnDef 방정식
    포트폴리오 차이를 정의하는 VarDef 방정식
    정규화 제약 조건을 정의하는 NormalCon 방정식
    ShortDef(i) 매도할 금액을 정의하는 방정식
    ShortLimit 방정식은 총 숏 금액을 정의합니다.
    ObjDef 목적 함수 정의;

ReturnDef .. PortReturn =E= SUM(i, ExpectedReturns(i)*x(i));

VarDef .. PortVariance =E= SUM((i,j), x(i)*VarCov(i,j)*x(j));

NormalCon .. SUM(i, x(i)) =E= 1;

ShortDef(i).. Short(i) =G= -x(i);

* 공매도는 총 50%까지 허용됩니다.

ShortLimit.. SUM(i, Short(i)) =L= 0.5;

ObjDef .. z =E= (1-람다) * PortReturn - 람다 * PortVariance;

모델 MeanVarShort /ReturnDef, VarDef, NormalCon, ShortDef, ShortLimit, ObjDef/;

파일 FrontierHandle /"MeanVarianceShortFrontier.csv"/;

FrontierHandle.pc = 5;
FrontierHandle.pw = 1048;

PUT 프론티어핸들;

PUT "람다","z","분산","ExpReturn";

LOOP(i, PUT i.tl);

놓다 /;

FOR(람다 = 0 TO 1 BY 0.1,

   nlp를 사용하여 z를 최대화하는 MeanVarShort 해결;

   PUT 람다:6:5, z.l:6:5, PortVariance.l:6:5, PortReturn.l:6:5;

   LOOP(i, PUT x.l(i):6:5 );

   넣어 /;
)

닫아라;

* GDX 유틸리티를 통해 Excel 파일로 직접 출력

SET 프론티어포인트 / PP_0 * PP_10 /

ALIAS(프론티어포인트,p);

매개변수
         RiskWeight(p) 투자자의 위험 태도 매개변수
         MinimumVariance(p) 포트폴리오 분산의 최적 수준
         포트폴리오반환(p) 포트폴리오반환
         OptimalAllocation(p,i) 최적의 자산 배분
         SolverStatus(p,*) 솔버 상태
         SummaryReport(*,*) 요약 보고서;

* 위험 가중치 람다는 [0,1] 구간 내에 있어야 합니다.

위험가중치(p) = (ORD(p)-1)/(CARD(p)-1);

DISPLAY 위험가중;

루프(p,
   람다 = 위험가중치(p);
   NLP를 사용하여 z를 최대화하는 MeanVarShort를 해결합니다.
   MeanVarShort.SOLPRINT = 2;
   최소 차이(p)= PortVariance.l;
   PortfolioReturn(p) = PortReturn.l;
   OptimalAllocation(p,i) = x.l(i);
   SolverStatus(p,'solvestat') = MeanVarShort.solvestat;
   SolverStatus(p,'modelstat') = MeanVarShort.modelstat;
   SolverStatus(p,'objective') = MeanVarShort.objval
);

* 결과를 행별로 저장

SummaryReport(i,p) = OptimalAllocation(p,i);
SummaryReport('Variance',p) = 최소Variance(p);
SummaryReport('Return',p) = PortfolioReturn(p);
SummaryReport('Lambda',p) = RiskWeight(p);

DISPLAY 요약보고서, 솔버상태;

* 요약 보고서를 Excel 파일에 작성

임베디드 코드 연결:
- 슬롯 사이트리더:
    기호: [  이름: 요약 보고서  ]
- 엑셀작성기:
    파일: MeanVarianceShortFrontier.xlsx
    기호: [  이름: SummaryReport, 범위: Sheet!A1  ]
endEmbeddedCode