설명
MeanVarMip.gms: 다양화 제약이 있는 평균-분산 모델. 콘실리오, 닐슨, 제니오스. 실제 재무 최적화: 크레이지 슬롯 모델 라이브러리, 섹션 3.4 최종 수정 날짜: 2008년 4월.
카테고리 : 크레이지 슬롯 FIN 라이브러리
메인파일 : MeanVarMip.gms 포함: 추정.gdx
$title 다양화 제약이 있는 평균-분산 모델
* MeanVarMip.gms: 다양화 제약이 있는 평균-분산 모델.
* Consiglio, Nielsen 및 Zenios.
* 실제 재무 최적화: GAMS 모델 라이브러리, 섹션 3.4
* 최종 수정일: 2008년 4월.
SET 자산;
ALIAS(자산,i,j);
매개변수
무위험비율
기대수익률(i) 기대수익률
VarCov(i,j) 분산-공분산 행렬 ;
* Estimate.gdx에서 평균-분산 모델을 실행하는 데 필요한 데이터를 읽습니다.
$gdxIn 추정치
$load Assets=하위 집합 RiskFreeRate=MeanRiskFreeReturn VarCov 예상 수익
$gdxIn
* 위험 태도: 0은 위험 중립, 1은 매우 위험 회피입니다.
스칼라
StockMax 최대 주식수 /3/
람다 위험 태도;
변수
x(i) 자산 보유;
매개변수
xlow(i) 활성 변수의 하한 ;
* 공매도가 허용되는 경우 이러한 한도를 올바르게 설정해야 합니다.
xlow(i) = 0.0;
x.UP(i) = 1.0;
바이너리 변수
Y(i) 포트폴리오에 포함된 자산에 대한 지표변수;
변수
PortVariance 포트폴리오 분산
PortReturn 포트폴리오 반환
z 목적 함수 값;
방정식
포트폴리오 수익을 정의하는 ReturnDef 방정식
포트폴리오 차이를 정의하는 VarDef 방정식
정규화 제약 조건을 정의하는 NormalCon 방정식
허용되는 최대 자산 수를 정의하는 LimitCon 제약 조건
UpBounds(i) 각 변수의 상한
LoBounds(i) 각 변수의 하한
ObjDef 목적 함수 정의;
ReturnDef .. PortReturn =E= SUM(i, ExpectedReturns(i)*x(i));
VarDef .. PortVariance =E= SUM((i,j), x(i)*VarCov(i,j)*x(j));
LimitCon .. SUM(i, Y(i)) =L= StockMax;
UpBounds(i).. x(i) =L= x.UP(i)* Y(i);
LoBounds(i).. x(i) =G= xlow(i)* Y(i);
NormalCon .. SUM(i, x(i)) =E= 1;
ObjDef .. z =E= (1-람다) * PortReturn - 람다 * PortVariance;
모델 MeanVarMip /ReturnDef, VarDef, LimitCon, UpBounds, LoBounds, NormalCon, ObjDef/;
OPTION MINLP = SBB, optcr = 0;
파일 FrontierHandle /"MeanVarianceMIP.csv"/;
FrontierHandle.pc = 5;
FrontierHandle.pw = 1048;
PUT 프론티어핸들;
PUT "람다","z","분산","ExpReturn";
LOOP(i, PUT i.tl);
놓다 /;
FOR(람다 = 0 TO 1 BY 0.1,
MINLP를 사용하여 z를 최대화하는 MeanVarMip을 해결합니다.
PUT 람다:6:5, z.l:6:5, PortVariance.l:6:5, PortReturn.l:6:5;
LOOP(i, PUT x.l(i):6:5 );
넣어 /;
)
닫아라;
***** 거래 비용 *****
* 이 섹션에서는 트랜잭션을 부과하여 크레이지 슬롯gms 모델을 수정합니다.
* 비용. 고정비와 비례비로 보다 현실적인 설정을 고려합니다.
스칼라
FlatCost 고정 거래 비용 / 0.001 /
PropCost 비례 거래 비용 / 0.005 /;
긍정적인 변수
x_0(i) 정액 비용 체제에 대한 보유
x_1(i) 선형 비용 체제에 대한 보유;
* 정액요금으로 거래가 가능한 금액입니다.
x_0.UP(i) = 0.1;
방정식
HoldingCon(i) 보유 자산을 정의하는 제약
비용으로 포트폴리오 수익을 정의하는 ReturnDefWithCost 방정식
FlatCostBounds(i) 정액 거래 수수료의 상한
LinCostBounds(i) 선형 거래 수수료에 대한 상위 채권;
HoldingCon(i).. x(i) =e= x_0(i) + x_1(i);
ReturnDefWithCost.. PortReturn =e= SUM(i, ( ExpectedReturns(i)*x_0(i) - FlatCost*Y(i) ) ) +
SUM(i, (ExpectedReturns(i) - PropCost)*x_1(i));
FlatCostBounds(i).. x_0(i) =l= x_0.UP(i) * Y(i);
LinCostBounds(i).. x_1(i) =l= Y(i);
모델 MeanVarWithCost /ReturnDefWithCost, VarDef,HoldingCon, NormalCon, FlatCostBounds, LinCostBounds, ObjDef/;
OPTION MINLP = SBB, optcr = 0;
파일 FrontierHandleTwo /"MeanVarianceWithCost.csv"/;
FrontierHandleTwo.pc = 5;
FrontierHandleTwo.pw = 1048;
PUT FrontierHandleTwo;
PUT "람다","z","분산","ExpReturn";
LOOP(i, PUT i.tl);
LOOP(i, PUT i.tl);
놓다 /;
FOR(람다 = 0 TO 1 BY 0.1,
MINLP를 사용하여 z를 최대화하는 MeanVarWithCost를 해결합니다.
PUT 람다:6:5, z.l:6:5, PortVariance.l:6:5, PortReturn.l:6:5;
LOOP(i, PUT x_0.l(i):6:5 );
LOOP(i, PUT x_1.l(i):6:5 );
넣어 /;
)
닫아라;
***** 포트폴리오 개정 *****
* 이 섹션에서는 크레이지 슬롯gms 모델이 0 또는 범위를 적용하여 수정되었습니다.
* 포트폴리오 개정에 대응하기 위한 변수입니다.
SET 바운드/하한, 상한/;
매개변수
BuyLimits(바운드,i)
SellLimits(바운드,i)
InitHold(i) 현재 보유량;
* 현재 보유를 최적의 제약 없는 평균-분산 포트폴리오로 설정했습니다.
* 람다 = 0.5
InitHold('Cash_EU') = 0.3686;
InitHold('YRS_1_3') = 0.3597;
InitHold('EMU') = 0.0;
InitHold('EU_EX')= 0.0;
InitHold('태평양')= 0.0;
InitHold('EMERGT') = 0.0591;
InitHold('NOR_AM') = 0.2126;
InitHold('ITMHIST') = 0.0;
BuyLimits('Lower',i) = InitHold(i) * 0.9;
BuyLimits('Upper',i) = InitHold(i) * 1.10;
SellLimits('Lower',i) = InitHold(i) * 0.75;
SellLimits('Upper',i) = InitHold(i) * 1.25;
긍정적인 변수
buy(i) 구매할 금액
판매(i) 판매할 금액;
바이너리 변수
Yb(i) 구매할 자산에 대한 지시변수
Ys(i) 매각할 자산에 대한 표시변수;
방정식
구매회전율
LoBuyLimits(i)
UpBuyLimits(i)
UpSellLimits(i)
LoSellLimits(i)
BinBuyLimits(i)
BinSellLimits(i)
InventoryCon(i) 재고 제약;
InventoryCon(i).. x(i) - 구매(i) + 판매(i) =e= InitHold(i);
UpBuyLimits(i).. InitHold(i) + buy(i) =l= BuyLimits('Upper',i);
LoBuyLimits(i).. InitHold(i) + buy(i) =g= BuyLimits('Lower',i);
UpSellLimits(i).. InitHold(i) - Sell(i) =l= SellLimits('Upper',i);
LoSellLimits(i).. InitHold(i) - Sell(i) =g= SellLimits('Lower',i);
BinBuyLimits(i).. buy(i) =l= Yb(i);
BinSellLimits(i).. Sell(i) =l= Ys(i);
BuyTurnover.. SUM(i, buy(i) ) =l= 0.05;
모델 MeanVarRevision /NormalCon, HoldingCon, InventoryCon, ReturnDef,
UpBuyLimits, LoBuyLimits, UpSellLimits, LoSellLimits,
BinBuyLimits, BinSellLimits, BuyTurnover,
VarDef, ObjDef/;
OPTION MINLP = SBB, optcr = 0;
파일 FrontierHandleThree /"MeanVarianceRevision.csv"/;
FrontierHandleThree.pc = 5;
FrontierHandleThree.pw = 1048;
PUT FrontierHandleThree;
PUT "모델 상태","람다","z","분산","ExpReturn";
LOOP(i, PUT i.tl);
LOOP(i, PUT i.tl);
LOOP(i, PUT i.tl);
놓다 /;
FOR(람다 = 0 TO 1 BY 0.1,
MINLP를 사용하여 z를 최대화하는 MeanVarRevision을 해결합니다.
PUT MeanVarRevision.modelstat:0:0,lambda:6:5, z.l:6:5, PortVariance.l:6:5, PortReturn.l:6:5;
LOOP(i, PUT x.l(i):6:5 );
LOOP(i, PUT buy.l(i):6:5 );
LOOP(i, PUT Sell.l(i):6:5 );
넣어 /;
)
PUTCLOSE;