更新をサボっていたところ、突如クリック証券APIサービスが中止となりました。非常に残念です。日足を利用したトレードにするか、代替となるサービスを探したいと思います。
テーマ:株自動売買ソフト開発 - ジャンル:株式・投資・マネー
株のアルゴリズム開発に時間を費やしていたため、更新が遅れてしまいました。
突然ですが、今回は、リアルタイム株価の取得方法に関して考えて見ます。
もともとは0日から最大2日程度保有するスイングトレードを想定していましたが、
デイトレードもバリエーションに加えようと考え、場中のリアルタイムな株価を取得する必要性を感じました。そこで、今回その方法を構築してみました。
リアルタイム株価取得について
リアルタイム株価を取得する方法として「タワー」という有料のリアルタイム株価データベースサービスを利用する方法があります。しかし、ちょっと敷居が高そうなので、今回は、楽天証券のRSS(リアルタイムスプレッドシート)を利用することにしました。
今回の方法はまだ構築段階にあり、完全に検証を行っているわけではないので、
ご利用に当たっては自己責任でお願いします。
リアルタイム株価取得といっても、完全なリアルタイムではなく、1分間隔の現在値をデータベースに取り込んでいくことをターゲットとしています。計画では次の株価取得までの1分間にシステムで売買サインを出力することとしています。
データ格納までの流れ
今回の流れは下記のようになります。非常に単純ですね。
1・楽天証券RSSを利用し、Excel上のセルに最新情報を取得
2・エクセル上のセルに反映された株価情報をODBC経由でMySQLデータベースに格納
上記を行うために準備が必要です。以下では必要な準備に関してコメントします。
大前提として、楽天証券の口座を開設し、RSSを利用可能な条件を確保しておいてください。
データベースの準備
株価を保存するテーブルを用意します。
テーブルは下記の4項目の属性を保持します。
コード
日付
時間
株価
ExcelシートにRSS用記述の準備
RSSではセルに下記のように記述することにより、データを取得することができます。
まずは、データ取得用のシートにRSSのコードを準備してください。
コード : =RSS|'1515.T'!銘柄コード
日付 : =RSS|'1515.T'!現在日付
現在の株価 : =RSS|'1515.T'!現在値
株価更新時刻 : =RSS|'1515.T'!更新時刻
今回は上記のシートを作成するマクロを用意しましたので、簡単に準備することができます。
RSSシート作成マクロ
RSSシート作成マクロを利用してRSSシートを作成します。
1・まず、code_listというシートをExcel上に新規作成(挿入)してください。
2・そのシートのA列に今回リアルタイム株価取得対象とするコードを記載してください
(最大で300個まで記載可能です。これはRSSの制限が最大300銘柄までとなっているためです。)
3・dataというシートを新規作成(挿入)してください
4・下記のマクロを実行してください。
[RSSシート作成マクロ]
----------------------------------------------------------
Sub create_rss_sheet()
Dim i, j As Long
Sheets("code_list").Select
For i = 1 To Cells(Rows.Count, 1).End(xlUp).row
code = Worksheets("code_list").Range("A" & i).Value
j = i + 1
Worksheets("data").Range("A" & j).Value = code
Worksheets("data").Range("B" & j).Value = "=RSS|'" & code & ".T'!現在日付"
Worksheets("data").Range("C" & j).Value = "=RSS|'" & code & ".T'!更新時刻"
Worksheets("data").Range("D" & j).Value = "=RSS|'" & code & ".T'!現在値"
Next i
End Sub
-----------------------------------------------------------
次回は、データベースに登録する部分に関して記述する予定です。
テーマ:株自動売買ソフト開発 - ジャンル:株式・投資・マネー
はじめに
さて、試行錯誤の結果、ログイン処理に関して実装できましたので方法を公開したいと思います。
クリック証券APIのログイン処理はシーケンス1から5までといくつかのフェーズを実行する必要があり、結構大変です。今回はまずフェーズ1に関して記述します。
シーケンス1の実装
APIのマニュアルを見ると、要求URL、要求HEADER、要求BODYを送ればよいように見えますが、
簡単に考えればそれだけです。今回は、PEARの
HTTP_Request
を利用してHTTPリクエストを発行することにします。
PEAR環境の準備
まず、PEAR環境を準備します。PEARのインストールはいろいろありますが、今回は下記のとおり単純に実施しました。
1・スクリプトの取得
http://pear.php.net/go-pearを ファイル「go-pear.php」に保存してください。
2・次のコマンドを実行してください。
# php go-pear.php
# pear install HTTP_Request
実際のプログラムの最初に、下記の記述を追加すれば利用できると思います。
require_once("HTTP/Request.php");
シーケンス1詳細
HTTP_Request()オブジェクト(下記サンプルの$this->req)に対して、
addPostDataメソッドでユーザIDをセットして、リクエストを発行し、
getResponseHeaderメソッドでサーバーから応答を取得します。
取得したサーバの応答は「基底URL」としてシーケンス2以降の処理で利用します。
応答HEADERの内容は、XML_Unserializer()を利用して要素の分解し、必要な値を取得します。
詳細は次回記述予定です。
サンプルコード
動作を理解するためのサンプルコードとなっています。
function doSequence1($aurl,$user,&$url){
$this->req->setURL($aurl);
$this->req->setMethod(HTTP_REQUEST_METHOD_POST);
$this->req->addPostData("u", $user);
if (!PEAR::isError($this->req->sendRequest())) {
$header = $this->req->getResponseHeader();
$body = $this->req->getResponseBody();
//リダイレクト先取得
$url=$this->get_redirect_url($header);
if($url==""){
return 1;
}
}else{
return 1;
}
//基底URLを取得・保存
$this->dname=dirname($url);
return 0;
}
テーマ:株自動売買ソフト開発 - ジャンル:株式・投資・マネー
システムの全体像
ここでは想定するシステムの全体像を書いてみました。
要するに、クライアントPCから直接注文を出すのではなく、
Webサーバ上にカスタムのローカルなWebサイトを立ち上げ、
そのサイトのページから注文などを実行する形式を想定しています。
-------------
クリック証券
-------------
|
|(Webサービス)
|
―――――――――――――――――――――――――――――(自宅LAN#1)
| | | | |
| ---------- ---------- ---------- ----------
| Web/AP DB シグナル検出 発注
| サーバ サーバ サーバ サーバ
| ---------- ---------- ---------- ----------
|
|
―――――――――――――――――――――――――――――(自宅LAN#2)
| |
| |
------------- -------------
クライアントPC リアルタイム
(管理用) 株価取得PC
------------- -------------
#完全自動化に向け構想をバージョンUPしました
#実際にはサーバは1台〜2台で実装する予定です。
クリック証券
今回のターゲットとなる証券会社です。Webサービスを公開しており、
先進的であり、また、信用取引の手数料がきわめて安くイチオシの証券会社です。
Web/APサーバ
HTMLベースのページを用意し、各種の情報を表示したり、シグナルに応じて発注をかける処理を起動したりします。
本システムの中核となるシステムです。
今回Webサービスを利用するにあたり、もっとも問題となるのが、Webサービスを呼び出したり、
その結果を解釈したりするところだと思います。その部分を効率的に行うために、
PEARのパッケージを活用していきます。HTTPリクエストを行ったり、結果のXMLデータを理解したりするところで利用します。
Webサーバ:Apache
開発言語:PHP with PEAR
DBサーバ
今回の「Webサービス」を使うという点においては不要な要素ですが、
自動発注のためのシグナルを検出するシステムにおいて活用します。
株価のデータを保存し、各種のシグナル情報を格納するために利用します。
データベース:MySQL
テーマ:株自動売買ソフト開発 - ジャンル:株式・投資・マネー
開発にあたり
確か1、2年ほど前ですが、クリック証券がまだGMO証券という名前だったころ、株取引のAPIが公開されました。これだ!と思い、自動売買システムの開発を決意しましたが、投資環境が悪化し、投資意欲が薄れてしまったため、今まで手をつけることなく時間が過ぎてしまいました(前回の株に関するコメント以来時が止まっていました)。
しかし、最近久しぶりに株価も持ち直しの気配が見えてきており、ついに重い腰をあげるときがきました。今後少しずつですがWebサービスを使ったシステムの開発に関して報告していきたいと思います。ではご期待ください。
検討内容
今回の開発には大きく2つのポイントがあるかと思います。
1・Webサービスの利用
2・システムトレードのアルゴリズム
両方に興味があり、同時並行で作業は進めていきますが、本ページではまずは前者を中心に話を進めていきたいと考えています。
後者に関しては、前回のコメントのとおり、ある程度形はできているのですが、まだ実績がないため、ある程度実績が伴った段階で公開したいと思います。
テーマ:株自動売買ソフト開発 - ジャンル:株式・投資・マネー