qmeanvar.gms : 재무 최적화: MIQCP를 사용한 위험 관리

설명

최소 및 최대 무역 제약이 표준에 추가되었습니다.
평균-분산 무료 슬롯 게임. 이 범위 내에서 거래하는 것이 수익성이 없는 경우
범위에서는 거래가 이루어져서는 안됩니다. 회전율 제약이 추가됩니다.
데이터의 작은 변화에 대한 솔루션의 안정성을 향상시킵니다. 는
결과 무료 슬롯 게임은 이제 MIQCP로 표현되며 프론티어는 다음과 같습니다.
계산되었습니다.

Dahl, H, Meeraus, A 및 Zenios, S A, 일부 재무 최적화
무료 슬롯 게임: 위험 관리. Zenios, S A, Ed, 재무 최적화.
캠브리지 대학 출판부, 뉴욕, 뉴욕, 1993.

키워드: 혼합 정수 2차 제약 조건 프로그래밍, 재무 최적화,
          위험 관리, 재무

소형 무료 슬롯 게임 유형 :MIQCP


카테고리 : 무료 슬롯 게임 모델 라이브러리


메인 파일 : qmeanvar.gms

$title 재무 최적화: MIQCP를 사용한 위험 관리(QMEANVAR,SEQ=291)

$onText
최소 및 최대 무역 제한 사항이 표준에 추가되었습니다.
평균-분산 모델. 이 범위 내에서 거래하는 것이 수익성이 없는 경우
범위에서는 거래가 이루어져서는 안됩니다. 회전율 제약이 추가됩니다.
데이터의 작은 변화에 대한 솔루션의 안정성을 향상시킵니다. 는
결과 모델은 이제 MIQCP로 표현되며 프론티어는 다음과 같습니다.
계산되었습니다.

Dahl, H, Meeraus, A 및 Zenios, S A, 일부 재무 최적화
모델: 위험 관리. Zenios, S A, Ed, 재무 최적화.
캠브리지 대학 출판부, 뉴욕, 뉴욕, 1993.

키워드: 혼합 정수 2차 제약 조건 프로그래밍, 재무 최적화,
          리스크 관리, 금융
$offText

$eolCom //

i '증권'을 설정합니다. / cn, fr, gr, jp, sw, uk, us /;

별칭(i,j);

매개변수 mu(i) '예상 증권 반환' / cn 0.1287, fr 0.1096
                                                gr 0.0501, jp 0.1524
                                                SW 0.0763, 영국 0.1854
                                                미국 0.0620 /;

테이블 q(i,j) '공분산 행렬'
          cn fr gr jp sw 영국 우리
   CN 42.18
   fr 20.18 70.89
   gr 10.88 21.58 25.51
   일본 5.30 15.41 9.60 22.33
   남 12.32 23.24 22.63 10.32 30.01
   영국 23.84 23.80 13.22 10.46 16.36 42.23
   미국 17.41 12.62 4.70 1.00 7.20 9.90 16.42;

* 우리는 계속해서 q-행렬의 아래쪽 삼각형만 사용할 것입니다.
* 올바른 결과를 얻으려면 대각선 항목을 조정하십시오.

q(i,j) = 2*q(j,i);
q(i,i) = q(i,i)/2;

스칼라 타우 '현재 보유 자산 회전율에 대한 경계 매개변수' / 0.3 /;

pd '포트폴리오 데이터 라벨' 설정
       / 이전 '포트폴리오의 현재 보유 비율'
         umin '증권 보유분의 최소 증가 i'
         umax '증권 i의 보유 지분 최대 증가'
         lmin '증권 i의 보유 지분의 최소 감소'
         lmax '증권 i의 보유 지분 최대 감소' /

테이블 bdata(i,pd) '포트폴리오 데이터 및 거래 제한'
* - 증가 - - 감소 -
       오래된 umin umax lmin lmax
   CN 0.2 0.03 0.11 0.02 0.30
   프르 0.2 0.04 0.10 0.02 0.15
   gr 0.0 0.04 0.07 0.04 0.10
   일본 0.0 0.03 0.11 0.04 0.10
   남서 0.2 0.03 0.20 0.04 0.10
   영국 0.2 0.03 0.10 0.04 0.15
   미국 0.2 0.03 0.10 0.04 0.30;

bdata(i,'lmax') = min(bdata(i,'old'),bdata(i,'lmax')); // 바운드를 조이세요

abort$(abs(sum(i, bdata(i,'old')) - 1) >= 1e5) 'bdata에 오류가 있습니다', bdata;

변수
   var '포트폴리오의 변화'
   '포트폴리오 반환'을 ret
   x(i) 'i의 현재 보유 포트폴리오 중 일부'
   xi(i) '포트폴리오 증가 비율'
   xd(i) '포트폴리오 감소 비율'
   y(i) 'i의 전류 보유량을 증가시키기 위한 이진 스위치'
   z(i) 'i의 전류 유지를 감소시키기 위한 이진 스위치';

이진변수 y, z;
양수 변수 x, xi, xd;

방정식
   예산 '예산 제약'
   회전율 '포트폴리오의 최대 회전율 제한'
   maxinc(i) 'i 부분의 최대 로트 증가 한계'
   minnc(i) 'i 부분의 최소 로트 증가 한계'
   maxdec(i) 'i 부분의 최대 로트 감소 한계'
   Mindec(i) 'i 부분의 최소 로트 감소 한계'
   binsum(i) '이진 변수 사용을 제한합니다'
   xdef(i) '최종 포트폴리오 정의'
   retdef '반환 정의'
   vardef '분산 정의';

예산.. sum(i, x(i)) =e= 1;

xdef(i).. x(i) =e= bdata(i,'old') - xd(i) + xi(i);

maxinc(i)..xi(i) =l= bdata(i,'umax')*y(i);

mininc(i)..xi(i) =g= bdata(i,'umin')*y(i);

maxdec(i).. xd(i) =l= bdata(i,'lmax')*z(i);

mindec(i).. xd(i) =g= bdata(i,'lmin')*z(i);

binsum(i)..y(i) + z(i) =l= 1;

매출액.. sum(i, xi(i)) =l= tau;

retdef..ret =e= sum(i, mu(i)*x(i));

vardef.. var =e= sum((i,j), x(i)*q(i,j)*x(j));

모델
   maxret / 예산, xdef, 매출액, maxinc, minnc, maxdec, mindec, binsum, retdef /
   minvar / 예산, xdef, 매출액, maxinc, minnc, maxdec, mindec, binsum, retdef, vardef /;

세트
   p '효율적인 경계점' / oldr, minvar, p1*p4, maxret, oldv /
   pp(p) '효율적인 경계점' / p1*p4 /;

스칼라
   rmin '최소 분산'
   rmax '최대 분산';

매개변수
   Report(p,i,*) '다른 지점의 포트폴리오 세부정보'
   xres(*,p) '다른 지점의 요약 보고서';

옵션 limCol = 0, limRow = 0, solPrint = 끄기, optCr = 0;

loop(p('maxret'),
   mip를 사용하여 maxret max ret을 해결합니다.
   rmax = ret.l;
   xres(i,p) = x.l(i);
   보고서(p,i,'inc') = xi.l(i);
   보고서(p,i,'dec') = xd.l(i);
);

xres(i,'oldr') = bdata(i,'old');
xres(i,'oldv') = bdata(i,'old');

루프(p('minvar'),
   miqcp를 사용하여 minvar min var를 해결합니다.
   rmin = ret.l;
   xres(i,p) = x.l(i);
   보고서(p,i,'inc') = xi.l(i);
   보고서(p,i,'dec') = xd.l(i);
);

루프(p(pp),
   ret.fx = rmin + (rmax - rmin)/(카드(pp) + 1)*ord(pp);
   miqcp를 사용하여 minvar min var를 해결합니다.
   xres(i,p) = x.l(i);
   보고서(p,i,'inc') = xi.l(i);
   보고서(p,i,'dec') = xd.l(i);
);

xres('평균',p) = sum(i, mu(i)*xres(i,p));
xres('var' ,p) = sum((i,j), xres(i,p)*q(i,j)*xres(j,p));
xres 표시, 보고서;

$onText
데이터를 Excel로 '결과' 시트로 출력합니다.
Excel에서 두 개의 플롯을 생성하려면:

플롯 1: 할당 -
     1. C2:I8에서 데이터를 선택하고
           "영역 플롯"(유형: 누적 영역)

플롯 2: 분산 대 평균 수익률 -
     1. XY 산점도를 생성합니다(유형: '선으로 연결된 데이터 포인트가 있는 분산형').
     2. 데이터:
            시리즈 1:
               'X-값': =결과!$C$9:$H$9
               'Y-값': =결과!$C$10:$H$10
            시리즈 2:
               'X-값': =(결과!$B$9,결과!$I$9)
               'Y-값': =(결과!$B$10,결과!$I$10)
$offText

임베디드코드 연결:
- 무료 슬롯 게임리더:
    기호:
      - 이름: xres
- 엑셀작성기:
    파일: 결과.xlsx
    기호:
      - 이름: xres
        범위: 결과!A1
endEmbeddedCode