설명
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