Code covered by the BSD License  

Highlights from
Review of Discrete and Continuous Processes in Finance

image thumbnail
from Review of Discrete and Continuous Processes in Finance by Attilio Meucci
discrete-time and continuous-time processes for finance, theory and empirical examples

AnalyzeVarianceAggregation(Dates,Data,AggregationVariance,Annualize_Lag,NumSimulations,Name)
function AnalyzeVarianceAggregation(Dates,Data,AggregationVariance,Annualize_Lag,NumSimulations,Name)

Keep=[]; 
PivotSeries=Data(1:Annualize_Lag:end); PivotChanges=PivotSeries(2:end)-PivotSeries(1:end-1);
s_2=PivotChanges'*PivotChanges/length(PivotChanges)/Annualize_Lag;
for n=1:length(AggregationVariance)
    
    Series_Changes(n).Lag=AggregationVariance(n);
    Means=[]; Stdvs=[]; SecMoms=[];
    Drop=1;
    for s=1:AggregationVariance(n)
        Sparse=Data(s:AggregationVariance(n):end);
        Changes=(Sparse(2:end)-Sparse(1:end-1));
        
        if (length(Changes)>20)  % analysis only if data is sufficient
            Drop=Drop*0;    
            Means=[Means mean(Changes)];
            Stdvs=[Stdvs std(Changes)];
            SecMoms=[SecMoms var(Changes)];
        end
    end
    
    if ~Drop
        Keep=[Keep n];
        Series_Changes(n).Mean=mean(Means);
        Series_Changes(n).Sd=mean(Stdvs);
        Series_Changes(n).SecMom=mean(SecMoms);
        
    end
end

% generate simulated AR(1) normal shocks processes
T=length(Dates); 
Phi=0; 
Shocks=sqrt(s_2)*normrnd(0,1,T,NumSimulations); 
Dc=Shocks; 
for t=1:T-2   
   Dc(t+1,:)=Phi*Dc(t,:)+Shocks(t+1,:); 
end    
SimulProcess=cumsum(Dc);

AggregationVariance=AggregationVariance(Keep);
PickAnnualize_Lag=find(AggregationVariance==Annualize_Lag);
Means_Empirical=[];
StDevs_Empirical=[];
SecMom_Empirical=[];
SimulSecMoms=[];
for n=1:length(Keep)
    Means_Empirical=[Means_Empirical Series_Changes(Keep(n)).Mean];
    StDevs_Empirical=[StDevs_Empirical Series_Changes(Keep(n)).Sd];
    SecMom_Empirical=[SecMom_Empirical Series_Changes(Keep(n)).SecMom];
    SimulSparse=SimulProcess(1:AggregationVariance(Keep(n)):end,:);
    SimulChanges=(SimulSparse(2:end,:)-SimulSparse(1:end-1,:));
    
    SimulSecMoms=[SimulSecMoms % analyze second moment of generated process
        var(SimulChanges)];
    
    
end
StDevs_Annualized=StDevs_Empirical(PickAnnualize_Lag)/sqrt(Annualize_Lag)*sqrt(AggregationVariance);
SecMom_Annualized=SecMom_Empirical(PickAnnualize_Lag)/Annualize_Lag*AggregationVariance;

% estimate Hurst coefficient
yyy=log(SecMom_Empirical(1:50)');
XXX=[ones(50,1) log(AggregationVariance(1:50)')];
b = regress(yyy,XXX);
H=b(2)/2;

PlotAggregationVariance(AggregationVariance,SimulSecMoms,SecMom_Empirical,...
    SecMom_Annualized,NumSimulations,b,s_2,Name)

Contact us at files@mathworks.com