%Skript zur Modellierung einer Renditezeitreihe anhand eines
%GARCH(1,1)-Modells

%Einlesen der Daten
mDaten = xlsread('DeutschlandSample','Tabelle1','B1:AUR678');
vRendite = mDaten(:,1);

%Löschen von Renditen, die exakt 0 sind und Entfernen der fehlenden
%Einträge
vRendite(vRendite == 0) = NaN;
vRendite = rmmissing(vRendite,1,'MinNumMissing',1);

%Testen, ob Datenreihe für Modellierung geeignet ist
    %Dickey-Fuller-Test auf Stationarität
        %Auswählen welches Testmodell verwendet werden soll (siehe
        %Funktion)
     Test = 1;
        %Funktionsaufruf
     fDFTest(vRendite,Test);

    %Engles ARCH-Test auf Heteroskedastizität
        %Berechnen der Residuen
    vResiduen = vRendite - nanmean(vRendite);
        %Einsetzen in Matlab-Funktion. Wenn h=1 ist, sind die Daten
        %geeignet
    h = archtest(vResiduen);
    if h==0
        error('Daten sind nicht geeignet für die Modellierung mittels GARCH-Modell');
    end

%Aufsetzen und schätzen des GARCH(1,1)-Modells
    %Konstante des Erwartungswertmodells
vX = ones(length(vRendite),1);
    %Funktionsaufruf
Result = fGARCH(vRendite,vX);

%Berechnen der bedingten Varianzen
%Anlegen der Ergebnistabelle
vResidVar = zeros(length(vRendite),1);
    %Startwert soll die unbedingte Varianz der KQ-Schätzung sein
        %Regression, um Koeffizienten zu berechnen
b = regress(vRendite,vX);
vResid= vRendite - vX * b;
vResidsquare = vResid .^2;
vResidVar(1) = var(vResid);

    %Berechnen der weiteren zeitabhängigen Varianzen
for t=2:length(vRendite)
    vResidVar(t) = Result.dOmega + Result.dGamma * vResidVar(t-1) + ...
        Result.dPhi * vResidsquare(t-1);
end


