累積ではない四半期決算の一覧を作るの続きです。
データベースに累積ではない四半期決算のデータが作成出来ましたので、後はこれらの前期比を算出するSQLを作るだけです。
相当に難しいです。とりあえず貼ります。
比率の項目の単位は全て%です。通期に関しては前期と前々期の通期決算の結果も比率を出すようにしました。継続的な成長が行われているかを評価するためです。
また、以下2ケースのWHERE句の条件を用意しました。
①その日の新高値の証券コードを指定
②株の公式で推奨される決算分析の条件
「株の公式」的には②の条件で上がった銘柄が新高値を付けたら買いです。
とは言え②の条件はものすごく厳しくて、2018年8月現在では10銘柄しか存在しません。「株の公式」でも語られていますが、必ずしも守らなければいけない訳ではないとされています。
折角なのでその10銘柄を上げます。
7717 ブイ・テクノロジー
1431 エスケーホーム
6862 ミナトエレクトロニクス
2146 UTホールディングス
2477 比較.com
5344 MARUWA
6161 エスティック
8035 東京エレクトロン
6044 三機サービス
7713 シグマ光機
自分でも忘れてしまいそうなくらい複雑なSQLなので、ポイントは記しておきます。
決算期は企業によって様々なのでwindow関数を利用する
銘柄毎に直近の最新四半期を並べて利用し無ければなりません。
適当に今年度で決算データを抽出する様な条件付けではメタメタになってしまいます。
例えば、今期の1四半期の決算報告が終わった企業からすれば、1四半期は今期と前期の比率で分析しますが、まだ今年度決算報告をしていない2四半期については、前年度と前々年度の比率で分析しなければなりません。
1銘柄の分析で良ければ決め打ちで条件付けすれば良いですが、決算期というのは企業によって様々ですので、今2四半期中の企業もあれば1四半期中の企業もあります。
これらをすべて同列にして分析しなければなりません。
これは、単純な結合や抽出では解決できない問題です。ここはwindows関数の出番です。
select distinct
d1.証券コード
, d1.連結個別
, d1.決算期間
, first_value(d1.期首) over (partition by d1.証券コード, d1.連結個別, d1.決算期間) “0期”
, nth_value(d1.期首, 2) over (partition by d1.証券コード, d1.連結個別, d1.決算期間) “-1期”
, nth_value(d1.期首, 3) over (partition by d1.証券コード, d1.連結個別, d1.決算期間) “-2期”
from
(
select distinct
dd.証券コード
, dd.連結個別
, dd.期首
, dd.決算期間
from
決算F dd
order by
dd.証券コード
, dd.連結個別
, dd.決算期間
, dd.期首 desc
) d1
partition by 以降で指定した列でグループ化し、first_valueはその一番目を、nth_valueは指定したn番目を取得することが出来ます。
企業ごとに、各四半期の直近とその前期、その2期前の「期首」を取ってきて、この検索を中間表として結合する事で、通期および四半期の比率の分析を可能とします。
また、直近の四半期決算を注視したいので、その情報を付加するのにもfirst_valueを活用しました。
select distinct
証券コード
, 連結個別
, first_value(期末) over (partition by 証券コード, 連結個別 order by 期末 desc) “最新決算月”
, first_value(決算期間) over (partition by 証券コード, 連結個別 order by 期末 desc) “最新決算期”
, first_value(情報公開日) over (partition by 証券コード, 連結個別 order by 期末 desc) “最新情報公開日”
from
決算F
比率の分析方法について
単純に、
$$売上高成長率=\frac{当期売上高}{前期売上高}$$みたいな計算を行うと、2つの問題にぶち当たります。
ゼロ除算
一つはゼロ除算の問題です。前期売上高の数字が0だとエラーが発生して検索できません。
売上高が0の企業とかどうでも良いんですが、検索上はクリアしなければ先に進めません。
悩んだ挙句、0は1と置き換えました。これは全く数学的な手法ではありませんがやむをえません。
マイナス業績
前期売上高がマイナスから今期売上高がプラスに転じた場合、業績が伸びているのにマイナス成長したかのような結果になってしまいます。
マイナスから更に悪化したマイナスになった場合も業績が伸びたかのようなプラス成長の結果となります。
これは以下の計算式で比率を算出する事でクリアします。
$${売上高成長率}=\frac{{当期売上高}-{前期売上高}}{|前期売上高|}$$こちらも全く数学的な手段ではありません。
とりあえず数字は出して、実際に分析する際は決算の実際の数字を見て判断をする他無いです。
WITH句
SELECT文中にVIEWを定義することができます。
WITH句内で当期、前期、前々期の数字と比率を結合するSELECT文を記述し、メインのSELECT文内はWITH句内の検索を通期、各四半期の条件で抽出して結合することで、期毎に横に並べることを実現しています。
今後の展望
大半の人には理解できないものになってしまったので、結果だけを公開する仕組みを作りたいです。