8 nov 2014

Gráficos con fechas en Matlab


Como poner fechas en el eje x, en Matlab

Un problema que suele surgir al trabajar con Matlab, es el de querer colocar el tiempo en el eje x del gráfico de linea. En este documento se muestran dos formas de obtener estos gráficos en Matlab. (La segunda alternativa es mucho mas fácil y general) En la siguiente rutina se muestra como hacerlo, utilizando datos financieros que el fichero descarga automáticamente de Yahoo finance.

Alternativa 1
*----------------------------------------------------------------------------------------

%% Grafico de serie de tiempo
%Cargando bases
clear
conect = yahoo;
   activos={'SPY','GDX'};
   fromdate = '1/01/2011';
   todate = floor(now);
 dates = builduniverse(conect,activos,fromdate,todate);
 [f,c]=size(dates)

%% Grafica de serie de tiempo
ts=dates(:,2:end)
ts1 = timeseries(ts,1:f);

ts1.Name = 'Daily Count';
ts1.TimeInfo.Units = 'days';
ts1.TimeInfo.StartDate =  '01-Jan-2011';     % Set start date.
ts1.TimeInfo.Format = 'yyyy';                % Set format for display on x-axis.
ts1.Time = ts1.Time - ts1.Time(1);           % Express time relative to the start date.

plot(ts1,'-'); legend(activos, 'Location','NorthWest'); grid on;
    title('Grafico 1. Cotizaciones diarias de SPY y GDX'); ylabel('cotizaciones');
 
%%

tstool

Alternativa 2
*----------------------------------------------------------------------------------------
El comando  datetick permite hacer gráficos con fechas de forma mucho mas natural. En el siguiente ejemplo se muestra como usarlo. la único a resaltar es que x es una matriz de fechas importadas desde Excel, esas fechas deben tener formato general. Es decir, cambiarle el formato de fecha a general en el Excel (quedan como números).

  plot(x, serie,'Color',[1 0.1 0.2])
    datetick('x','mmm-yy','keepticks'), xlim([x(1) x(end)])
                         
Matlab también permite gráficar dos series con unidades sumamente diferente, como es precios y rentabilidades. En el siguiente ejemplo, X representa una matirz de fechas (importadas desde Excel, en excel es necesario cambiar el formato de fecha a formato general). returns representa una matriz de rentabilidades  y tipos es una matriz de tipos de cambio (por eso se indica que vaya desde la segunda columna (2:end) para que coincidan las dimensiones, porque las rentabilidades pierden la primera observación.

       [hAx,hLine1,hLine2] = plotyy(x(2:end),returns(:,i),x(2:end),tipos(2:end,i),'plot');
           ylabel(hAx(1),'Rentabilidades') % left y-axis
             datetick(hAx(1), 'x','mmm-yy','keepticks')
             hLine2.LineStyle = '-.';
           ylabel(hAx(2),'Tipo de Cambio') % right y-axis
             datetick(hAx(2), 'x','mmm-yy','keepticks')
             title({['Tipo de cambio: ',num2str(nomvar{i})]}), grid off

1 nov 2014

Cartera de Mínima Varianza para n Activos en Matlab


%% Modelo Unifactoriales
 % Master en Banca y Finanzas Cuantitativas
 % Nerys Ramirez

%% Cartera minima varianza para n activos
             c = yahoo;
      fromdate = '1/01/2010';
        todate = floor(now);
       activos = {'SPY','GDX','GLD'};
         dates = builduniverse(c,activos,fromdate,todate);
 
   %Calculando rentabilidades
         returns = diff(log(dates(:,2:end))).*100;
            plot(returns(:,1))
     
   %Buscando los ponderadores de la cartera
    matrix_cov = cov(returns);
             I = ones(size(matrix_cov,1),1);
W_cart_min_var = (inv(matrix_cov)*I)/(I'*inv(matrix_cov)*I)

 
%% Versión 1/Nov/2007

Creando variables por grupos en dplyr (group_by + mutate)

  Simulemos una base de hogares, donde se identifica el hogar, el sexo (1 mujer) y provincia y edad para cada miembro.   # Definir la lista ...