はじめに

はじめに

このブログは株価をデータベースに取り込んで、SQL(Structured Query Language)を駆使し、何らかの法則を発見していくことをテーマにします。

スポンサーリンク

使用するデータベースはPostgresSQLです。無料で使える上に、分析関数、表関数、マテリアライズドビューなど便利機能が揃っています。その分、速さはいまいちのようですが。

そして、テーブル構造としては、最低限、以下のような2つのテーブルがあれば事足りそうです。

(*が主キー)

CREATE TABLE 銘柄
(*コード character(4) NOT NULL,
銘柄名 character varying(100) NOT NULL,
上場市場 character varying(10) NOT NULL)
CREATE TABLE 時系列
(*コード character(4) NOT NULL,
*日付 date NOT NULL,
始値 numeric(8,1) NOT NULL,
高値 numeric(8,1) NOT NULL,
安値 numeric(8,1) NOT NULL,
終値 numeric(8,1) NOT NULL,
出来高 integer NOT NULL,
前日比騰落率 numeric(4,2) NOT NULL, --※
ギャップ率 numeric(4,2) NOT NULL,
5日移動平均 numeric(8,1),
25日移動平均 numeric(8,1),
75日移動平均 numeric(8,1))

騰落率や移動平均はビューで取得することもできますが、そこそこ時間がかかるし、マテリアライズドビューにすることもできますが、時系列テーブルと同じ値を持ってデータ量が増えるので、登録時についでに計算して持っておくことにします。※ギャップ率というのは当日始値÷前日終値を保持し、始値がギャップアップすればプラス、ギャップダウンすればマイナスとなります。

そして、以下のようにマテリアライズドビューを定義して、何営業日前というのを数値指定して得られるようにします。コード:1001は日経平均ですね。このコードはいつのデータでも必ず存在します。

CREATE MATERIALIZED VIEW 営業日
AS
SELECT 日付,
RANK() OVER (ORDER BY 日付) AS 日数
FROM 時系列
WHERE コード = '1001'

早速、分析関数使いました。

この結果は以下のようになります。

日付日数
2019/1/41
2019/1/72
2019/1/83
2019/1/94
2019/1/105
2019/1/116
2019/1/157
2019/1/168
2019/1/179
2019/1/1810

土日祝日を挟んでいても営業日を連番で取れるので便利になりました。

それでは日々の更新で株価の法則を分析しているのでご覧ください。

コメント