ともだちはすくないです

30代既婚男子。子供2人。日経先物トレードとかプログラミングとか英語とか

pythonで日経先物分析をするために、データを格納するmysqlを作成する①

pythonで日経先物のデータ分析をするためにはデータが必要です。普通の日経平均だとyahoo等のサイトから取ってこれるのですが、日経先物のデータを取ってこれるサイトは現状中々ありません。いくつかサイトはあるのですが、そのサイトが無くなったらオシマイ!って状況は避けたいので、自分用にmysqlを使って日経先物のデータを保存することにしました。ちなみに保存しようかなあと考えてるのは5分足、15分足、30分足、1時間足、日足くらいです。ということでデータベース構築を以下の手順でやりましたのでメモ。

ちなみにこの先の展望としては、「スクレイピング先物データ自動取得→データベースに格納」「そのデータを使ってpythonで分析」ってところでしょうか。しかし、まだ日経先物データのpythonでの分析はサイトがあまりないですね。素人がどれだけやってもしれてると思うけど楽しいし頑張ろうっと。正直、rubyよりも楽しいです。



mysqlのインストール

$ brew install mysql


mysqlのスタート

$ mysql.server start


パスワードの設定。いくつか質問でてきますが、全部YESでよいはずです。

$ mysql_secure_installation


mysqlを使用。このコマンド入れるとパスワード入力されるよう求められるので先程設定したパスワードを入力。これでmysqlのコマンドが入力できるようになります。

$ mysql -uroot -p


データベースを作成します。テーブル名は「nikkei」。これでデータベースが作成されました。確認は「Sequel Pro」を使ってます。」

mysql> CREATE DATABASE nikkei;

Sequel Pro




「nikkei」を選択します。

mysql> USE nikkei


データベースにテーブルを作成して項目を追加します。まずは日足(日中とナイトで分割)のテーブル(テーブル名:day)を作成します。必要な項目は「年月日」「日中・ナイト区分」「始値」「高値」「安値」「終値」「出来高」「売買代金」でしょうか。とりあえず年月日のみデータベースにカラムを作ってみます。(レコードのユニークキーになるidも指定します。)

mysql> CREATE TABLE day(
    -> id INTEGER     NOT NULL AUTO_INCREMENT,
    -> date DATE      NOT NULL,
    -> PRIMARY KEY(id)
    -> );


dayテーブルにカラムが出来ていることを確認します。

mysql>DESCRIBE day;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
| date  | date    | NO   |     | NULL    |                |
+-------+---------+------+-----+---------+----------------+


データベースにまず始値カラム名:start)のカラムを追加します。

ALTER TABLE day ADD start INTEGER;


カラムが追加されていることを確認します。
(startのNULLがYESでいいのかは疑問だけど)

mysql> DESCRIBE day;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
| date  | date    | NO   |     | NULL    |                |
| start | int(11) | YES  |     | NULL    |                |
+-------+---------+------+-----+---------+----------------+


全項目追加したらこんな感じ。

mysql> DESCRIBE day;
+-----------+---------+------+-----+---------+----------------+
| Field     | Type    | Null | Key | Default | Extra          |
+-----------+---------+------+-----+---------+----------------+
| id        | int(11) | NO   | PRI | NULL    | auto_increment |
| date      | date    | NO   |     | NULL    |                |
| day_night | int(1)  | YES  |     | NULL    |                |
| start     | int(11) | YES  |     | NULL    |                |
| high      | int(11) | YES  |     | NULL    |                |
| low       | int(11) | YES  |     | NULL    |                |
| end       | int(11) | YES  |     | NULL    |                |
| volume    | int(11) | YES  |     | NULL    |                |
| value     | int(11) | YES  |     | NULL    |                |
+-----------+---------+------+-----+---------+----------------+

ちなみに「日中・ナイト区分(day_night)」は、カラム追加するの忘れていたので、後から追加しました。そのときのコマンドはこちら。dateカラムの後に1桁で追加してます。

mysql> ALTER TABLE day ADD day_night INTEGER(1) after date;


「Sequel Pro」で見るとこんな感じ。「nikkei」データベースの「day」テーブルに各項目が出来てるのが確認できます。
f:id:trade-and-develop:20170220213959p:plain





次は日中足のテーブルを作成してみようと思います。以下は15分足。日足に時間だけ追加してます。それ以外はまったく同じ。同じように5分足、30分足、1時間足のテーブルも作成します。

mysql> CREATE TABLE minute_15(
    -> id INTEGER     NOT NULL AUTO_INCREMENT,
    -> date DATE      NOT NULL,
    -> time TIME      NOT NULL,
    -> day_night INTEGER,
    -> start INTEGER,
    -> high INTEGER,
    -> low INTEGER,
    -> end INTEGER,
    -> volume INTEGER,
    -> value INTEGER,
    -> PRIMARY KEY(id)
    -> );

テーブル名の変更は以下。

mysql> alter table salestable rename to salestable_back;