FXボーグ | テクニカル実験室

テクニカル分析を使った自動売買プログラムの開発に挑戦!

スポンサーリンク

AutoSSAでトレンドの自動抽出。

前回はキャタピラーSSAというソフトを試してみたのですが、この方法では分析者の判断が必要となる為、もっと自動的にできる方法がないかと調べていると「Welcome to AutoSSA!」というサイトが見つかりました。

著者のセオドア・アレクサンドロフ(Theodore Alexandrov)さんは、EMBL(欧州分子生物学研究所)の博士でメタボロミクス・チームのヘッドを務めているそうです。

https://www.embl.de/research/units/scb/alexandrov/

サイトからは「AutoSSA」というWindowsソフトとMATLABパッケージが入手できるのですが、こちらはトレンドと周期成分を自動的に抽出するソフトのようです。今回は「トレンドの抽出」を試してみました。
http://www.pdmi.ras.ru/~theo/autossa/english/soft.htm(只今、リンク切れの模様)

トレンドの自動抽出

SSAでトレンド成分を探す際は以下のようなスペクトル成分の中からゆっくりと変化しているラインを抽出するのですが、

f:id:fxborg:20170919210944p:plain

AutoSSAを使用すると以下の成分を抽出することができます。 

f:id:fxborg:20170919212131p:plain

実際のデータ上にトレンドラインを乗せるとこんな感じです。

▼AutoSSA(MATLAB版)データはUSDJPY4H

f:id:fxborg:20170919212921p:plain下段の棒グラフでしきい値(赤ライン)を上回っているものがトレンド成分として抽出された成分です。

以下のスライドを読むと「トレンド=ゆっくり変化する時系列成分」と考えて、全ての特異ベクトルUに対してフーリエ分解を行い、低い周波数が支配的な成分を見つける。というようなしくみのようです。(詳しくは以下のスライドを参照)

f:id:fxborg:20170919231005p:plain

(13 Jul 2006) Alexandrov, Golyandina, Automatic trend extraction and forecasting for a family of time series(slide) より引用) 

リンクURL: http://www.pdmi.ras.ru/~theo/autossa/files/isf06-slides--Alexandrov.pdf

MATLABコード

MATLABのコードを読むと以下のファイルが関係してそうです。

trend.mーfunction [trend, trend_ETs] = trend(ts, L, omega0, C0, maxET)
LF_identify.m-function [trend_ETs, C0_values] = LF_identify(M, omega0, C0, maxET, C0fig)
LFvalue_vect.m-function LF_value = LFvalue_vect(M, omega0, ET)
Periodogram.mーfunction [Pi,c_k,s_k] = Periodogram(F,k)

最後に

今回はAutoSSAのMATLAB版でトレンドの自動抽出を試してみました。このアルゴリズムを使うことで、人間の判断を介さずにSSAの高度なトレンドラインを表示することが可能になります。また、AutoSSAには周期成分の抽出機能もあるようですが、まずは、ここまでの内容を実装してみようと思います。