설명
이 모델은 다양한 소스에서 데이터를 읽습니다. 와... --datainput=슬롯 머신 슬롯 머신 포함 파일이 사용됩니다. --datainput=EXCEL gdxxrw를 사용하여 Excel 파일을 읽습니다. --datainput=ACCESS mdb2gms를 사용하여 액세스 파일을 읽습니다. --datainput=CSV csv2gms를 사용하여 CSV 파일을 읽습니다. 기여자: Michael Bussieck
카테고리 : 슬롯 머신 데이터 유틸리티 라이브러리
메인 파일 : readdata.gms 다음을 포함합니다: readdata.gms stocks.inc 주식.xlsx stocks.accdb stocks.csv
$title .inc, .xlsx, .accdb 및 .csv 파일에서 데이터 읽기
$onText
이 모델은 다양한 소스에서 데이터를 읽습니다. 와...
--datainput=슬롯 머신 슬롯 머신 포함 파일이 사용됩니다.
--datainput=EXCEL gdxxrw를 사용하여 Excel 파일을 읽습니다.
--datainput=ACCESS mdb2gms를 사용하여 액세스 파일을 읽습니다.
--datainput=CSV csv2gms를 사용하여 CSV 파일을 읽습니다.
기여자: Michael Bussieck
$offText
$if %system.filesys% == UNIX $abort.noError '이 모델은 Windows가 아닌 플랫폼에서 실행할 수 없습니다.';
일수를 정하다
주식
상단(주식,주식)
lower(주식,주식);
매개변수 val(주식,일) 종가
valX(일,주식) 종가 순열 지수
return(stocks,days) 일일 수익률 - 파생;
$datainput을 설정하지 않은 경우 $set datainput 슬롯 머신
$ifI %datainput%==슬롯 머신 $goTo datGAMS
$ifI %datainput%==EXCEL $goTo datEXCEL
$ifI %datainput%==액세스 $goTo dataACCESS
$ifI %datainput%==CSV $goTo datCSV
$abort '알려진 데이터 입력 %datainput%이 없습니다.'
$label datGAMS
$include stocks.inc
$go계속하려면
$callTool win32.msappavail Excel
$if errorlevel 1 $abort.noError "사용 가능한 Excel이 없습니다."
$onEcho > gdxxrw.in
i=주식.xlsx
o=stocks.gdx
dset 일수 rng=stockdata!b1 cdim=1
dset 주식 rng=stockdata!a2 rdim=1
par val rng=stockdata!a1 rdim=1 cdim=1
$offEcho
$call gdxxrw @gdxxrw.in 추적=0
$ifE errorLevel<>0 $abort 'Excel에서 읽는 데 문제가 있습니다.'
$goTo gdxinput
$label dataACCESS
$callTool win32.msapp액세스 가능
$if errorlevel 1 $abort.noError "사용 가능한 액세스 없음"
$onEcho > mdb2gms.in
나=stocks.accdb
X=stocks.gdx
Q1=stockdata에서 Stock,StockDate,ClosingValue를 선택합니다.
P1=발
Q2=주식 데이터에서 고유한(StockDate) 선택
S2=일
Q3=주식 데이터에서 고유한(주식)을 선택합니다.
S3=주식
$offEcho
$call mdb2gms @mdb2gms.in > %system.nullfile%
$ifE errorLevel<>0 $abort 'Access에서 읽는 데 문제가 있습니다.'
$goTo gdxinput
$label datCSV
$onEcho > csv2gms.gms
별칭(*,s,d);
매개변수 값(s,d) /
$onDelim 목록 해제
$include stocks.csv
$offDelim 등록 중
/;
주식(들), 일(d)을 설정합니다;
옵션종목<val, days<val;
$offEcho
$call 슬롯 머신 csv2gms lo=%슬롯 머신lo% gdx=주식
$ifE errorLevel<>0 $abort 'CSV 파일을 읽는 데 문제가 있습니다.'
$goTo gdxinput
$라벨 gdxinput
$gdx주식
$load days 재고 가치
$label 계속
별칭(주식,sstocks);
return(주식,일-1) = val(주식,일)-val(주식,일-1);
upper(주식,sstocks) = ord(주식) <= ord(sstocks);
lower(stocks,sstocks) = not upper(stocks,sstocks);
d(days)개의 선택된 날짜를 설정하세요.
s(주식) 선택된 주식
별칭(들,티);
* 주식 및 기간의 하위 집합 선택
d(일) = ord(일) >1 및 ord(일) < 31;
s(주식) = ord(주식) < 51;
모수 평균(주식) 일일 수익률 평균
dev(주식,일) 편차
covar(stocks,sstocks) 수익의 공분산 행렬(상위)
tot평균 총 평균 수익률;
평균(들) = sum(d, return(s,d))/card(d);
dev(s,d) = return(s,d)-평균(s);
* 공분산 계산
* 메모리와 시간을 절약하기 위해 상부 삼각함수만 계산합니다.
* 공분산 행렬이 대칭인 부분
covar(upper(s,t)) = sum(d, dev(s,d)*dev(t,d))/(card(d)-1);
totmean = 합계(들, 평균(들))/(카드(들));
변수 z 목적변수
x(주식) 투자;
양의 변수 x;
방정식 obj 목표
예산
retcon 반환 제약
;
obj.. z =e= sum(upper(s,t), x(s)*covar(s,t)*x(t)) +
sum(lower(s,t), x(s)*covar(t,s)*x(t));
예산.. 합계(s, x(s)) =e= 1.0;
retcon.. sum(s, 평균(들)*x(s)) =g= totmean*1.25;
모델 qp1 /all/;
* 일부 솔버에는 더 많은 메모리가 필요합니다.
qp1.workfactor = 10;
nlp 축소 z를 사용하여 qp1을 해결합니다.
디스플레이 xl;