MySQLにレート情報を格納する
笑えないほどに、FXの洗礼を受けたばかりですが・・・ 懲りずにシストレに利用するツールを紹介します。
Metatrader4もそうですが、シストレを実現するには過去のレート情報は必須だと思います。過去データをもとに自分なりの取引手法をのせたプログラムを作って運用しているはずです。下記は、clickclientを利用してMySQLにデータを入れるサンプルプログラムです。※実際の実行には、MySQLのDB・テーブル作成が必要です。
下記は、GBPUSDのテーブル作成例です。
mysql> create table GBPUSD( id bigint NOT NULL AUTO_INCREMENT PRIMARY KEY, access_date datetime not null, create_date timestamp not null, bid float(6,2) unsigned, ask float(6,2) unsigned);
サンプルでは、USDJPY・EURJPY・GBPJPY・EURUSD・GBPUSDを登録しております。
#!/usr/bin/ruby require "rubygems" require "clickclient" require "mysql" require "date" require "syslog" def daemon return yield if $DEBUG Process.fork{ Process.setsid Dir.chdir "/" Signal.trap(:INT){ exit! 0 } Signal.trap(:TERM){ exit! 0 } Signal.trap(:HUP){ exit! 0 } File.open("/dev/null", "r+"){|f| STDIN.reopen f STDOUT.reopen f STDERR.reopen f } yield } exit! 0 end Syslog.open("clickdaemon") Syslog.log(Syslog::LOG_INFO, "clickdaemon start") Syslog.close class Cclick attr_accessor :list def initialize @client = ClickClient::Client.new @client.host_name = "https://fx-demo.click-sec.com" @USER = 'XXXXX' @PASS = 'XXXXX' end def insertdb @client.fx_session(@USER,@PASS){|fx| @list = fx.list_rates # レートを取得 @dtime = DateTime.now @object = Mysql::new('localhost', 'username', 'password', 'dbname') @list.each() { |k,info| if k == 1 access_date = @dtime.strftime("%Y-%m-%d %H:%M:%S") @object.query("insert into USDJPY(access_date,bid,ask) values ('#{access_date}','#{info.bid}','#{info.ask}');") elsif k == 2 access_date = @dtime.strftime("%Y-%m-%d %H:%M:%S") @object.query("insert into EURJPY(access_date,bid,ask) values ('#{access_date}','#{info.bid}','#{info.ask}');") elsif k == 3 access_date = @dtime.strftime("%Y-%m-%d %H:%M:%S") @object.query("insert into GBPJPY(access_date,bid,ask) values ('#{access_date}','#{info.bid}','#{info.ask}');") elsif k == 9 access_date = @dtime.strftime("%Y-%m-%d %H:%M:%S") @object.query("insert into EURUSD(access_date,bid,ask) values ('#{access_date}','#{info.bid}','#{info.ask}');") elsif k == 10 access_date = @dtime.strftime("%Y-%m-%d %H:%M:%S") @object.query("insert into GBPUSD(access_date,bid,ask) values ('#{access_date}','#{info.bid}','#{info.ask}');") end } @object.close } end end daemon { begin # 通常処理 insdb = Cclick.new while 1 rdone = insdb.insertdb sleep 1 end rescue => exc system("/etc/init.d/clickd restart") Syslog.open("clickdaemon") Syslog.log(Syslog::LOG_WARNING, "%s", exc) Syslog.close end }