2015年05月08日
MATLABによるMYSQLデータベースへのアクセス
Pan Active Market DatabaseはWindows環境でしか利用できない。最終的にはLinux環境でのシステム運用を想定しているので、Pan Active Market DatabaseのデータをMySQLデータベースへ格納する。Pan Active Market Databaseからデータを引き出してSQL文でデータベースへ格納するだけなので、Rubyでやってしまってもいいのだが、ここではMATLABで行う方法を検討してみる。
まずコマンドラインからMySQLにログインする。
1つの証券データは、日付、始値、高値、安値、終値、出来高からなる。これらをデータベースに格納するために以下の様なテーブルを作成する。日付にあたるカラム”dayindex”は本来日付を格納したいが、MATLABで不明点があるため、今のところは1, 2, 3, ...という数値で与えることにする。
CREATE TABLE 8604test (
dayindex int(6)
open int(6)
high int(6)
low int(6)
close int(6)
volume int(12)
);
テーブルを作成しておく。
以下のリンク先を参考にMATLABのスクリプト"activedatabase.m"を作成する。
https://web.stanford.edu/group/farmshare/cgi-bin/wiki/index.php/MatlabMysql
http://www.mathworks.com/help/database/ug/datainsert.html
"activedatabase.m"
dayinfo = actxserver('ActiveMarket.Calendar');
prices = actxserver('ActiveMarket.Prices');
%
code = 8604; %野村證券
prices.Read(num2str(code))
price_begin = prices.Begin;
price_end = prices.End;
%
open_price = [];
high_price = [];
low_price = [];
close_price = [];
volume_price = [];
%date_price = [];
%
day_index = prices.Begin:prices.End;
for i = day_index
if prices.IsClosed(i) == 0;
% date_price = [date_price dayinfo.Date(i)];
open_price = [open_price prices.Open(i)];
high_price = [high_price prices.High(i)];
low_price = [low_price prices.Low(i)];
close_price = [close_price prices.Close(i)];
volume_price = [volume_price prices.Volume(i)];
else
continue
end
end
% Database Server
host = 'IP address';
% Database Username/Password
user = 'User name';
password = 'Password';
% Database Name
dbName = 'pan_active_market';
% JDBC Parameters
jdbcString = sprintf('jdbc:mysql://%s/%s', host, dbName);
jdbcDriver = 'com.mysql.jdbc.Driver';
% Set this to the path to your MySQL Connector/J JAR
%javaaddpath('C:\Program Files\MySQL\MySQL Connector J\mysql-connector-java-5.1.27-bin.jar')
% Create the database connection object
dbConn = database(dbName, user , password, jdbcDriver, jdbcString);
% Check to make sure that we successfully connected
if isconnection(dbConn)
colnames = {'dayindex','open','high','low','close','volume'}
for i = 1:ndata
uidata = [i, open_price(i), high_price(i), low_price(i), close_price(i), volume_price(i)]
tablename = '8604test';
datainsert(dbConn, tablename, colnames, uidata);
end
else
% If the connection failed, print the error message
disp(sprintf('Connection failed: %s', dbConn.Message));
end
% Close the connection so we don't run out of MySQL threads
close(dbConn);
MATLABの処理が終わったらMySQLのテーブルを確認すると、
COURSERAのコースで学んだ、配列に要素を付け加えていく方法が早速役に立った。
https://fanblogs.jp/systemtradelab/archive/15/0
date_priceの要素に日付が入れられれば完成なのだが、上の赤字のコードのようにすると日付を構成する文字が1文字ずつ配列に格納されしまい、日付の文字列データを要素として含む配列にならない。証券コードをループで変化させるようにすれば、原理的にはPan Active Market Databaseの全データをMySQLデータベースに格納することが可能なはずだ。
[課題]
まずコマンドラインからMySQLにログインする。
1つの証券データは、日付、始値、高値、安値、終値、出来高からなる。これらをデータベースに格納するために以下の様なテーブルを作成する。日付にあたるカラム”dayindex”は本来日付を格納したいが、MATLABで不明点があるため、今のところは1, 2, 3, ...という数値で与えることにする。
CREATE TABLE 8604test (
dayindex int(6)
open int(6)
high int(6)
low int(6)
close int(6)
volume int(12)
);
テーブルを作成しておく。
以下のリンク先を参考にMATLABのスクリプト"activedatabase.m"を作成する。
https://web.stanford.edu/group/farmshare/cgi-bin/wiki/index.php/MatlabMysql
http://www.mathworks.com/help/database/ug/datainsert.html
"activedatabase.m"
dayinfo = actxserver('ActiveMarket.Calendar');
prices = actxserver('ActiveMarket.Prices');
%
code = 8604; %野村證券
prices.Read(num2str(code))
price_begin = prices.Begin;
price_end = prices.End;
%
open_price = [];
high_price = [];
low_price = [];
close_price = [];
volume_price = [];
%date_price = [];
%
day_index = prices.Begin:prices.End;
for i = day_index
if prices.IsClosed(i) == 0;
% date_price = [date_price dayinfo.Date(i)];
open_price = [open_price prices.Open(i)];
high_price = [high_price prices.High(i)];
low_price = [low_price prices.Low(i)];
close_price = [close_price prices.Close(i)];
volume_price = [volume_price prices.Volume(i)];
else
continue
end
end
% Database Server
host = 'IP address';
% Database Username/Password
user = 'User name';
password = 'Password';
% Database Name
dbName = 'pan_active_market';
% JDBC Parameters
jdbcString = sprintf('jdbc:mysql://%s/%s', host, dbName);
jdbcDriver = 'com.mysql.jdbc.Driver';
% Set this to the path to your MySQL Connector/J JAR
%javaaddpath('C:\Program Files\MySQL\MySQL Connector J\mysql-connector-java-5.1.27-bin.jar')
% Create the database connection object
dbConn = database(dbName, user , password, jdbcDriver, jdbcString);
% Check to make sure that we successfully connected
if isconnection(dbConn)
colnames = {'dayindex','open','high','low','close','volume'}
for i = 1:ndata
uidata = [i, open_price(i), high_price(i), low_price(i), close_price(i), volume_price(i)]
tablename = '8604test';
datainsert(dbConn, tablename, colnames, uidata);
end
else
% If the connection failed, print the error message
disp(sprintf('Connection failed: %s', dbConn.Message));
end
% Close the connection so we don't run out of MySQL threads
close(dbConn);
MATLABの処理が終わったらMySQLのテーブルを確認すると、
COURSERAのコースで学んだ、配列に要素を付け加えていく方法が早速役に立った。
https://fanblogs.jp/systemtradelab/archive/15/0
date_priceの要素に日付が入れられれば完成なのだが、上の赤字のコードのようにすると日付を構成する文字が1文字ずつ配列に格納されしまい、日付の文字列データを要素として含む配列にならない。証券コードをループで変化させるようにすれば、原理的にはPan Active Market Databaseの全データをMySQLデータベースに格納することが可能なはずだ。
[課題]
- 配列への文字列要素の逐次追加
- 全証券銘柄のデータ取得スクリプトへの拡張
【このカテゴリーの最新記事】
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/3637417
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック