PutCall : 슬롯 머신/Call 효율적인 프론티어 모델.

설명

MAD.gms: 슬롯 머신/Call 효율적인 프론티어 모델.
콘실리오, 닐슨, 제니오스.
실제 재무 최적화: GAMS 모델 라이브러리, 섹션 5.7
최종 수정 날짜: 2008년 4월.

카테고리 : 슬롯 머신 FIN 라이브러리


메인파일 : PutCall.gms 포함: Corporate.inc WorldIndices.inc Index.inc

$title 슬롯 머신/Call 효율적인 프론티어 모델

* MAD.gms: 슬롯 머신/Call 효율적인 프론티어 모델.
* Consiglio, Nielsen 및 Zenios.
* 실제 재무 최적화: GAMS 모델 라이브러리, 섹션 5.7
* 최종 수정일: 2008년 4월.

$설정하지 않은 경우 $설정 PutCallModel 설정

$include "WorldIndices.inc"

옵션 LIMROW=0,LIMCOL=0,SOLVELINK=2;

스칼라
   예산 명목 투자예산
   예상 부족분에 대한 Omega Bound;

예산 = 100.0;

매개변수
   pr(l) 시나리오 확률
   P(i,l) 최종 값
   EP(i) 최종 예상 값;

pr(l) = 1.0 / 카드(l);

P(i,l) = 1 + 자산 반환(i,l);

EP(i) = SUM(l, pr(l) * P(i,l));

매개변수
   TargetIndex(l) 목표 인덱스 반환;

* 시장 지수로 모델을 테스트하려면 다음 두 줄의 주석 처리를 제거하세요.
* 이 색인은 WorldIndexes.inc를 사용할 때만 일관성이 있습니다.

$include "Index.inc"

TargetIndex(l) = Index(l);

* UnConstrained 슬롯 머신/Call 모델의 원초

매개변수
   하한(i)
   상한(i);

긍정적인 변수
   yPos(l) 양의 편차
   yNeg(l) 음의 편차;

변수
   x(i) 화폐 단위(비율 아님)로 자산 보유
   z 목적 함수 값;

방정식
   예산 제약을 정의하는 BudgetCon 방정식
   ObjDef MAD에 대한 목적 함수 정의
   TargetDevDef(l) 양수 및 음수 편차를 정의하는 방정식
   음수 편차의 예상 값을 제한하는 PutCon 제약 조건;

BudgetCon .. SUM(i, x(i)) =E= 예산;

PutCon .. SUM(l, pr(l) * yNeg(l) ) =L= 오메가;

TargetDevDef(l).. SUM(i, ( P(i,l) - TargetIndex(l) ) * x(i) ) =E= yPos(l) - yNeg(l);

ObjDef .. z =E= SUM(l, pr(l) * yPos(l));

MODEL UnConPutCallModel '모델 PFO 5.7.1' / PutCon, TargetDevDef, ObjDef /;

* 허용되는 하락(위험)의 평균 수준을 설정합니다.

오메가 = 0.1;

LP를 사용하여 z를 최대화하는 UnConPutCallModel 해결;

* UnConstrained 슬롯 머신/Call 모델의 이중

긍정적인 변수
   파이(l)
   파이오메가;

방정식
   DualObjDef
   이중 추적 정의(i)
   MeasureDef(l);

DualObjDef .. z =E= 오메가 * PiOmega;

DualTrackingDef(i).. SUM(l, (P(i,l) - TargetIndex(l)) * Pi(l)) =E= 0.0;

MeasureDef(l)..pr(l) * PiOmega - Pi(l) =G= 0;

Pi.LO(l) = pr(l);

MODEL UnConDualPutCallModel '모델 PFO 5.7.2' / DualObjDef, DualTrackingDef, MeasureDef /;

LP 사용을 최소화하는 UnConDualPutCallModel 해결;

* PiOmega.l과 Pi.l을 표시하고 각각 동일한지 확인합니다.
* TargetDevDef.m 및 PutCon.m으로
* GAMS에서는 이중 가격을 직접 제공하므로,
* 이중 모델을 명시적으로 구축하는 데 실제로 필요합니다.

PARAMETER PrimalDual(l,*) 원초 영혼과 이중 영혼을 비교합니다.

PrimalDual(l,'pi.l') = - pi.l(l);
PrimalDual(l,'TargetDevDef.m') = TargetDevDef.m(l);
PrimalDual(l,'차이') = TargetDevDef.m(l)+pi.l(l);

DISPLAY z.l,PiOmega.l,PutCon.m,PrimalDual;

* 우리는 다음을 사용하여 프론티어를 구축하는 대안적인 방법을 제안합니다.
* 루프문. 이러한 구조는 다음과 같은 용도에 적합합니다.
* GDX 유틸리티(자세한 내용은 doc 폴더에 포함된 gdxutility.pdf 참조)

옵션 SOLPRINT = 꺼짐;

세트
   프론티어포인트 /P_1 * P_50/;

* 프론티어의 포인트 수

별칭(프론티어포인트, j);

매개변수
   프론티어 포트폴리오(j,i) 프론티어 포트폴리오
   CallValues(j,*) 호출 값
   DualPrices(j,*) 이중 가격
   PutCall(j,*) 슬롯 머신 및 Call 값
   OmegaLevels(j) 위험 수준(Omega);

FILE 임시 파일 핸들 / temp.txt /;

* 각 포인트에 위험 수준 Omega를 할당합니다.

OmegaLevels('P_1') = 0.01;

루프(j$(ORD(j) > 1),

    오메가레벨(j) = 오메가레벨(j-1) + (0.01)$(ORD(j) <= 10) + (0.025)$(ORD(j) > 10)
);

Dualprices(j,'Omega') = OmegaLevels(j);

CallValues(j,'Omega') = OmegaLevels(j);

* 일부 유동성 제약 설정

x.LO(i) = -100.0;
x.UP(i) = 100.0;

루프(j,

   오메가 = Omega레벨(j);

   LP를 사용하여 z를 최대화하는 UnConPutCallModel 해결;

   프론티어포트폴리오(j,i) = x.L(i);

   CallValues(j,'Mild Constraint') = z.L;

   Dualprices(j,'Mild Constraint') = PutCon.M

);

임베디드 코드 연결:
- GAMS리더:
    기호: [  이름: FrontierPortfolios  ]
- 엑셀작성기:
    파일: %out%.xlsx
    기호: [  이름: FrontierPortfolios, 범위: MildPortfolios!A1  ]
endEmbeddedCode

* 엄격한 유동성 제약 설정

x.LO(i) = -20.0;
x.UP(i) = 20.0;

루프(j,

   오메가 = Omega레벨(j);

   LP를 사용하여 z를 최대화하는 UnConPutCallModel 해결;

   프론티어포트폴리오(j,i) = x.L(i);

   CallValues(j,'Tight Constraint') = z.L;

   Dualprices(j,'Tight Constraint') = PutCon.M

);

임베디드 코드 연결:
- GAMS리더:
    기호: [  이름: DualPrices ,  이름: CallValues ,  이름: FrontierPortfolios  ]
- 엑셀작성기:
    파일: %out%.xlsx
    기호:
      -  이름: DualPrices, 범위: DualPrices!A1 
      -  이름: CallValues, 범위: CallValues!A1 
      -  이름: FrontierPortfolios, 범위: TightPortfolios!A1