Rankia España Rankia Argentina Rankia Brasil Rankia Chile Rankia Colombia Rankia Czechia Rankia Deutschland Rankia France Rankia Indonesia Rankia Italia Rankia Magyarország Rankia México Rankia Netherlands Rankia Perú Rankia Polska Rankia Portugal Rankia Romania Rankia Türkiye Rankia United Kingdom Rankia USA
Acceder
Blog Ahorro responsable e inversión a largo plazo
Blog Ahorro responsable e inversión a largo plazo
Blog Ahorro responsable e inversión a largo plazo

Tiempo real gratis utilizando Matlab

Llevo mucho tiempo sin escribir nada porque no tenía nada interesante que comentar, pero hoy si.

Si te gustaría tener una plataforma con la que investigar algoritmos de trading intradía, o simplemente te gustaría poder cotillear la cotización al instante, hay una forma de hacerlo sin que te gastes dinero. Esto es lo que yo hago. Además es útil aunque solo hagas un par de compras al año, a veces te metes en la web de tu broker y hay que hacer un acto de fé para creerse la cotización que te da.

La web de Nasdaq (http://www.nasdaq.com) ofrece la posibilidad de leer el precio de una acción en tiempo real, por ejemplo en http://www.nasdaq.com/symbol/spy/real-time vemos la cotización en tiempo real del SPY. Pero estar todo el día dándole a Crtl+R para actualizarlo no es que sea muy productivo.

Y Matlab (www.mathworks.com) tiene una función muy útil de lectura de urls. Lee el código fuente de una url para poder utilizaro. Matlab, para aquel que no lo conozca es un software de cálculo numérico y programación sobre todo orientado a ingeniería y al ámbito científico.

Gratis entre comillas, porque Matlab no es gratis. Pero en todas las universidades hay licencias de Matlab, por ejemplo. No es difícil de encontrar. Y aún así tampoco es caro como para que no podamos comprarlo si realmente nos interesa.

Esas dos piezas son las únicas que necesitamos. Un proveedor de datos (Nasdaq) y un entorno de programación que pueda leer los datos (Matlab). Además Matlab te permite desarrollar tus propios algoritmos con los que hacer trading automático. Para ello lo único que necesitarías es una forma de enlazar Matlab con el software que uses para comprar y vender, tan fácil como comunicarse a través de ficheros con un mini script que te permita progrmar tu broker en python o en lo que sea.

Y, ¿cómo se programa? Pues aquí tienes una función que he programado para graficar en tiempo real la cotización de una acción:

function plot_real_time(ticker)
close all
if ~exist('ticker','var')
    ticker = 'spy' ;
end
max_N = 5000 ;
sale = [] ;
time = [] ;
h = plot(time,sale) ;
set(h,'YDataSource','time')
set(h,'XDataSource','scale')
while true
    [s,t] = get_real_time(ticker) ;
    if isempty(time)
        sale = s ;
        time = t ;
    elseif length(time)==max_N && time(end)~=t
        sale = [sale(2:end),s] ;
        time = [time(2:end),t] ;
    elseif length(time)<max_N && time(end)~=t
        sale(end+1) = s ; %#ok<AGROW>
        time(end+1) = t ; %#ok<AGROW>
    end
    if length(time)>2
        h = plot(time,sale,'LineWidth',1) ;
        title([upper(ticker),' - Last sale: ',num2str(sale(end),'%1.2f'),' at ',datestr(time(end),'HH:MM:SS'),' '],'FontSize',15)
        grid on
        datetick('x')
        refreshdata(h) ;
        drawnow
        pause(1)
        save DATA.mat time sale
    end
end
function [last_sale,time] = get_real_time(ticker)
if ~exist('ticker','var')
    ticker = 'spy' ;
end
url = ['http://www.nasdaq.com/symbol/',ticker,'/real-time'] ;
while true
    try
        str = urlread(url) ;
        str_last_sale = '<div id="qwidget_lastsale" class="qwidget-dollar">' ;
        str_time = '<span id="qwidget_markettime">' ;
        index = strfind(str,str_last_sale) + length(str_last_sale) ;
        i = index ;
        while str(index)~='<'
            index = index+1 ;
        end
        last_sale = str2double(str(i+1:index-1)) ;
        index = strfind(str,str_time) + length(str_time) ;
        i = index ;
        while str(index)~='<'
            index = index+1 ;
        end
        try
            time = datenum(str(i:index-1),'mm/dd/yyyy HH:MM:SS AM') ;
        catch
            error('The market is closed.')
        end
        break
    catch err
        disp(sprintf('Error catched at %s # %s',datestr(now,'HH:MM:SS'),err.message)) %#ok<DSPS>
        pause(1)
    end
end
Y te va dibujando una gráfica como esta que he sacado de la última media hora de hoy para el SPY:
 
Espero que a alguien le sea útil. Un saludo.
¿Te ha gustado mi artículo?
Si quieres saber más y estar al día de mis reflexiones, suscríbete a mi blog y sé el primero en recibir las nuevas publicaciones en tu correo electrónico
Accede a Rankia
¡Sé el primero en comentar!
Te puede interesar...
  1. Principios de Benjamin Graham.
  2. Regla 2: Aprende a gastar cada día menos
  3. Presentación
  4. El fabuloso mundo del dinero y la bolsa – André Kostoloany
  5. Regla 4: Nunca pierdas dinero.
  1. Regla 1: Ahorra el 50% de todos tus ingresos netos
  2. Principios de Benjamin Graham.
  3. Lista de 49 empresas para analizar en 2013.
  4. Las trampas del interés compuesto
  5. El fabuloso mundo del dinero y la bolsa – André Kostoloany