最近FXを始めた、値動きが激しくて面白い。やってみてわかったことの一つに値段がブローカーによって微妙に異なるということ、つまりは取引している会社のデーターをもってきて分析しないといけない。
私は、
GMOクリック証券を使っているのだがこの会社は1分単位の時系列データを過去まで公開してくれているのでバックテストには助かる。データーをくれない会社は何か怪しい。
データーのダウンロードは マイページ→ヒストリカルデータ をたどっていけば下のページになる。
1か月分のアーカイブの中には1日単位でファイルがあり、1分足となっている。
ダウンロードしたデータを見ると、項目のヘッダが日本語になっているのと日付が数字の連続になっているためそのままでは使えない。
変換プログラムを書いた。取引量(volume)のところは一律で10000000をいれている。適当な数字でも入れておかないと、売買シミューレーション時に売買してくれないのだ。
適宜使ってほしい。
#/usr/bin/python
import sys
import csv
def GMOdataConvert(fname):
try:
f=open(fname,'r')
f.readline() #ignore japanese shift jis column define
reader = csv.reader(f)
for row in reader:
dt=row[0]
y=dt[0:4]
m=dt[4:6]
d=dt[6:8]
H=dt[8:10]
i=dt[10:12]
s=dt[12:14]
print("%s-%s-%s %s:%s:%s,%s,%s,%s,%s,10000000" % (y,m,d,H,i,s,row[1],row[2],row[3],row[4]))
except IOError:
print ("File ["+fname+"] open error \n")
return
else:
f.close()
if __name__ == '__main__':
if(len(sys.argv)<2):
print("Usage:\nGmoFxdta.py inputfile1 inputfile2 ...\n")
exit(1)
print "Date Time,Open,High,Low,Close,Volume"
for fname in sys.argv[1:]:
GMOdataConvert(fname)
ついでと言っては何だが、csvだと簡単にmysqlに読み込ませることができる。いったん読み込ませれば任意の期間をcsvで書き出すことができるので便利だ
ついでに分足から、時足、日足、月足、週足も作ってしまおう
解説はしないので、読み込むファイル名等適宜変更して使ってほしい
CREATE TABLE `minute_data` (
`dt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`st` float DEFAULT NULL,
`hi` float DEFAULT NULL,
`lo` float DEFAULT NULL,
`en` float DEFAULT NULL,
PRIMARY KEY (`dt`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `hourly_data` (
`dt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`st` float DEFAULT NULL,
`hi` float DEFAULT NULL,
`lo` float DEFAULT NULL,
`en` float DEFAULT NULL,
PRIMARY KEY (`dt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `daily_data` (
`dt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`st` float DEFAULT NULL,
`hi` float DEFAULT NULL,
`lo` float DEFAULT NULL,
`en` float DEFAULT NULL,
PRIMARY KEY (`dt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `monthly_data` (
`dt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`st` float DEFAULT NULL,
`hi` float DEFAULT NULL,
`lo` float DEFAULT NULL,
`en` float DEFAULT NULL,
PRIMARY KEY (`dt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `weekly_data` (
`dt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`st` float DEFAULT NULL,
`hi` float DEFAULT NULL,
`lo` float DEFAULT NULL,
`en` float DEFAULT NULL,
PRIMARY KEY (`dt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
load data infile '/home/GMO/USDJPY2015data.csv' into table minute_data fields terminated by ',' ignore 1 lines;
insert into hourly_data
select date_format(dt,'%Y-%m-%d %H:%i:%s') dt
,substring_index(group_concat(st),',',1) st
,max(hi) hi
,min(lo) lo
,substring_index(group_concat(en),',',-1) en
from minute_data group by date_format(dt,'%Y-%m-%d %H');
insert into daily_data
select date_format(dt,'%Y-%m-%d %H:%i:%s') dt
,substring_index(group_concat(st),',',1) st
,max(hi) hi
,min(lo) lo
,substring_index(group_concat(en),',',-1) en
from hourly_data group by date_format(dt,'%Y-%m-%d');
insert into weekly_data
select date_format(dt,'%Y-%m-%d %H:%i:%s') dt
,substring_index(group_concat(st),',',1) st
,max(hi) hi
,min(lo) lo
,substring_index(group_concat(en),',',-1) en
from daily_data group by date_format(dt,'%U');
insert into monthly_data
select date_format(dt,'%Y-%m-%d %H:%i:%s') dt
,substring_index(group_concat(st),',',1) st
,max(hi) hi
,min(lo) lo
,substring_index(group_concat(en),',',-1) en
from daily_data group by date_format(dt,'%Y-%m');