アフィリエイト広告を利用しています

広告

posted by fanblog

2015年05月16日

MATLABによるMYSQLデータベースへのアクセス5

MATLABによりPan Active Market Databaseの全証券データをMySQLへ格納することを試みている。書籍”Rubyではじめるシステムトレード”にあるように、"AdjustExRights"を”true”に設定することで株式分割が考慮された修正株価が取得できる。これを以下のコードの赤字の部分のようにMATLABにも適用してみると、Rubyと同じように修正株価が取得できる。そしてそれらのデータをMySQLへ一気に格納する。

clear all;clc;
% 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')

% Pan Active Market Database
dayinfo = actxserver('ActiveMarket.Calendar');
prices = actxserver('ActiveMarket.Prices');
prices.AdjustExRights = true;
%
prices.Read('1001') % Nikkei index
last_price = prices.End;

for code = 1000:9999
try
prices.Read(num2str(code))
price_begin = prices.Begin;
price_end = prices.End;
catch exeption
continue
end
%
if price_end ~= last_price;
continue
end

%
code
open_price = [];
high_price = [];
low_price = [];
close_price = [];
volume_price = [];
date_price = {};
%
day_index = prices.Begin:prices.End;
ndata = 0;
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)];
ndata = ndata + 1;
else
continue
end
end

% Database Server*
host = 'IP Address';

% Database Username/Password
user = 'User name';
password = 'Password';

% Database Name
dbName = 'pan_active_market_adjust';

% JDBC Parameters
jdbcString = sprintf('jdbc:mysql://%s/%s', host, dbName);
jdbcDriver = 'com.mysql.jdbc.Driver';

% Create the database connection object
dbConn = database(dbName,user,password,jdbcDriver,jdbcString);
tablename = sprintf('code%d',code);
sqls = sprintf('CREATE TABLE %s(date char(10), open int(6), high int(6), low int(6), close int(6), volume int(12));', tablename);
exec(dbConn,sqls);
% Check to make sure that we successfully connected
if isconnection(dbConn)
colnames = {'date','open','high','low','close','volume'};
for i = 1:ndata
uidata = [date_price(i), open_price(i), high_price(i), low_price(i), close_price(i), volume_price(i)];
datainsert(dbConn, tablename, colnames, uidata);
end
else
% If the connection failed, print the error message
disp(sprintf('Connection failed: %s', dbConn.Message));
end

end

% Close the connection so we don't run out of MySQL threads
close(dbConn);

Pan Active Market Databaseにある証券で2015年5月1日現在、取引可能なものは3823個あると思われる。これらを全部MySQLへ格納するにはおよそ26時間を要した…

試しに最近の株式分割が行われた銘柄で株価をチェックをしてみる。2015年4月27日にアイ・ケイ・ケイ(2198)が株式分割(1:2)を行っている。MATLABのコマンドウィンドウからAdjustExRightsをtrueまたはfalseにして終値をそれぞれ調べる。

> prices.AdjustExRights = false
> prices.Read('2198')
> dayinfo.DatePosition('2015/3/27')
> prices.Close(8167)
ans = 1286

また、
> prices.AdjustExRights = true
> prices.Read('2198)
> dayinfo.DatePosition('2015/3/27')
> prices.Close(8167)
ans = 643

となり、正しく株式分割が考慮されていることがわかる。

将来的にPanrolling社の相場アプリケーションを購入して最新の株価データにアップデートできるようになると、このコードを修正して、今あるデータとの差分だけをMySQLへ格納するように改良する必要がある。
posted by itot at 00:10| Comment(0) | TrackBack(0) | MATLAB
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/3665911
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
ファン
検索
<< 2016年09月 >>
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
最新記事
写真ギャラリー
最新コメント
タグクラウド
カテゴリアーカイブ
月別アーカイブ
プロフィール
日別アーカイブ
×

この広告は30日以上新しい記事の更新がないブログに表示されております。