So, maybe you used the Python Yahoo! data importer script I posted; or, maybe, you have your own price data. And, perhaps you want to run a script to see what the correlation is among the stocks in your database. This code will do just that.
You need to download the MySQL JDBC connector and go through the hassle of adding the .jar file to your Matlab java path. It's worth the struggle, though.
Here's the code with some comments to hopefully help you along (and remind me what I did later):
%test variables to limit matrix sizes...
num_stocks = 500;
num_close_values = 20;
num_log_values = 19;
%connect to the database
conn = database('stocks','root','*****','com.mysql.jdbc.Driver','jdbc:mysql://localhost:3306/stocks');
%query the symbols in the database
str_query_symbols = 'SELECT distinct symbol FROM stock_prices_day';
symbol_cell = fetch(conn, str_query_symbols);
%create matrices to prevent matrix resizing when inserting cell values..
mat_log_change = zeros(num_log_values,num_stocks);
mat_values_adj_close = zeros(num_close_values,num_stocks);
%grab adj_close info for a each symbol; then cell2mat it into a larger
%matrix
for i = 1:num_stocks
symbol = cell2mat(symbol_cell(i));
str_query_adj_close = ['SELECT adj_close FROM stock_prices_day WHERE symbol = ''' symbol ''' and date > ''2012-06-01'''];
mat_values_adj_close(:,i) = cell2mat(fetch(conn, str_query_adj_close));
%use this to calculate natrual log changes as you move along
for j = 1: num_log_values
%mat_values_adj_close(j,i)
mat_log_change(j,i) = log((mat_values_adj_close(j,i))/(mat_values_adj_close((j+1),i)));
end
end
%next calculate correlation coefficients among the various columns
mat_correlations = zeros(num_stocks,num_stocks);
for i = 1:num_stocks
for j = 1:num_stocks
A = mat_log_change(:,i);
B = mat_log_change(:,j);
R = corrcoef(A,B);
mat_correlations(i,j) = R(2);
end
end
mat_correlations
(If you've enjoyed this article, consider signing up for the Gödel's Market Newsletter.)
But you do not take the date, why?
ReplyDeleteYou could change date information in the query. This matlab script is a very basic example...
ReplyDelete