ランダムフォレストを使用したコモディティ先物の投資戦略

概要

  • そんなにパフォーマンス良くないよ
  • モメンタム効果(など)を説明変数としたうえでランダムフォレストによりシグナルを発生
  • パフォーマンスの計測とロングオンリーとの比較

モメンタム効果とは

一言で言うと、「上がってる株は今後も上がる、下がってる株は今後も下がる」という傾向を表すものです。また、この効果は何も株に限定されるものではなく、様々な資産クラスにおいて報告されています(例えば参考[1])

モメンタム効果を表す代理変数としては、「過去X日のリターン」といったものが良く使われますね。
もしくは「今日の株価が過去X日の移動平均よりも高いか低いか」などでしょうか。

このモメンタム効果を駆使することによって俺様投資戦略を開発しメシウマヘブンを狙うのがこの記事の趣旨です。

なぜランダムフォレスト?

どうもランダムフォレスト最強と思ってるマンです。
というよりも別にランダムフォレストじゃなくても良いのですが、参考[2]サイト様に触発されたというのが本音です。このサイトではCARTモデルを用いることで買い・売りシグナルを発生させています。

CARTモデル?よろしいならばこっちはランダムフォレストだというわけです。

もう1つの理由としては、モメンタム効果がいつでも効くというわけではありません。上昇している株価が今後も常に上昇するというわけではなく、いつかは反転します。また、過去X日のリターンと言った変数を使う場合にXの値はいくつにするのが良いのかといった問題もあります。今までは過去20日がシグナルとしてよく機能していたけれど、今後は過去40日かもしれない、過去1年かもしれない、もしくはその両方かもしれないといって可能性が微レ存するわけです。

そういった構造をうまく捉えられないかというのもランダムフォレストを使うもう1つの理由になるのではないかと考えられます。

対象資産

今回はコモディティ先物を使います。
株式でも良いのですが、コモディティの方が長い期間のバックテストができますしね。

具体的には

  • C: Corn
  • W: Wheat
  • S: Soybeans
  • GC: Gold
  • SI: Silver
  • HG: Copper
  • CL: WTI Crude oil
  • NG: Natural gas

の8資産を使います。

戦略内容

上記8資産を用いて、週次で買い・売りシグナルを発生させ、それによるパフォーマンスを計測します。
全て引け値を用いて計算しているので、ポジションを取るのはシグナル計算日の翌日引けとなります。

教師データとして、
非説明変数は1週間リターンがプラスかマイナスか、を表すバイナリ
説明変数としては後述する指標を用います。

また、教師データはいわゆるExpanding windowを用います。
すなわち、t時点で得られる全てのデータを教師データとして用いるという方法です。
なので、時間が経つに連れて教師データは増加し、その分だけ計算時間も上昇していきます(重い)

ランダムフォレストにより、説明変数が与えられた元で、今後上昇する確率( \(Pr \left( u \right) \) )を得ることができますので、\(2 Pr \left( u \right) – 1\)の値を取るポジションとします。
こうすることで上昇する確率100%と判定されれば持っている資金の全額ロング、確率0%なら全額ショート、確率50%なら何もしない(ポジションがゼロ)、となります

なお、取引コストは考慮していません。

Sanity check

何はともあれ、まずは各説明変数と非説明変数の関係を見てみます。下図はCornを見たものです。

C

使っている指標は

  • ma: 過去リターン。moving averageとなっていますがただのリターン平均値です。命名ミス。
  • vol: 過去リターンの標準偏差
  • skew: 過去リターンのスキューネス
  • gk: 過去リターンのGarman-Klass volatility. 詳しくは参考[3]
  • curve: 第一限月と第二限月の価格差

となります。1w, 1m, 3m, 6m, 12mはそれぞれ1週間、1ヶ月、3ヶ月、6ヶ月、12ヶ月です。

まあ見て分かりますように、ほとんど傾向らしい傾向は見て取れませんね。
モメンタム効果が報告されるくらいだからmaに傾向が見られるかなとも思ったのですが微妙ですね…
株式ですとボラティリティや高いときリターンが低くなるといった効果も言われてますので入れてみたという感じです。

他の資産に関してもとくに目立った傾向は見られないので割愛。

まずは各資産にランダムフォレストを適用してみる

Return(青色)がロングオンリー、Strategy(緑色)がランダムフォレストです。
比較しやすいように事後的に年率ボラティリティを5%に調整しています。以下同様。
Retは年率リターン、Riskは年率ボラティリティ、Ret/Riskはリスク調整後リターンです。

C: Corn

2000年以降はまあまあですがそれまでは微妙。
C

W: Wheat

微妙。
W

S: Soybeans

惨敗。
S

GC: Gold

珍しくロングオンリーに勝利
GC

SI: Silver

何もしていない
SI

HG: Copper

ロングオンリーに負けてはいるがまあ他の資産に比べればマシか
HG

CL: WTI Crude oil

惨敗。というか直近の原油価格の下落を捉えていないとは何事か。
CL

NG: Natural gas

微妙…
NG

ポートフォリオを組んでみる

既に雲行きが怪しいですが、とりあえずこれらの資産でポートフォリオを組んだ場合にどうなるかも一応見てみます。
なお、各資産の配分比率はリスク(標準偏差)パリティとします。

Portfolio

というわけでドローダウンこそ均されるもののロングオンリーにさえ勝つことができないというシロモノに。
というか各資産をリスクパリティで持つだけでもそこそこパフォーマンスが良いんですね。まあリーマンショック以降はボラティリティも高く微妙ですが。

ちなみにロングオンリーと戦略間の相関は0.25なので、そこまで買いバイアスがかかっているというわけでもないようです。

感想

ランダムフォレストをチューニングするという手もありますが、何よりも説明変数と非説明変数の関係が弱すぎるというのがボトルネックになっている気がします。

またモメンタムという特性上、資産価格にモメンタムが存在しない間は高いパフォーマンスが期待できないのも今後考えるべき問題ですね。

そしてCrude oilのところにもありましたが、直近、原油価格が減少する傾向が続いているにも関わらずそれを戦略が捉えていないというのも問題かと。コーディングミスも含めて見直す必要がありそうですね…といったところで本日は以上m(__)m

参考

Time Series Momentum
http://openarchive.cbs.dk/bitstream/handle/10398/8862/time_series_momentum_lasse_heje.pdf?sequence=1

Using CART for Stock Market Forecasting « The R Trader
http://www.thertrader.com/2014/02/28/using-cart-for-stock-market-forecasting/

MEASURING HISTORICAL VOLATILITY
http://www.todaysgroep.nl/media/236846/measuring_historic_volatility.pdf