readdata.gms : .inc, .xlsx, .accdb 및 .csv 파일에서 데이터 읽기

설명

이 모델은 다양한 소스에서 데이터를 읽습니다. 와...
--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;