Edited at

Python3ではじめるシステムトレード:リスクマネジメントって何?

システムトレードで成功した人たちが必ず口にするのがリスクマネジメント(資金管理)の重要性です。マネーマネジメントとも呼ばれます。これはどんなにバックテストを繰り返したトレード手法でも、必ずリスクがあるということです。どんなに慎重に検討した戦略でも実践ではもうまくいくとは限らず、そのために損失に関する厳密な管理が必要だということです。しかし、口で言うのは簡単ですが、実際に行うとなると結構大変です。実は利益を得ることよりも、リスク管理のほうがよっぽど難しいのだということはあまり知られていません。そこで今回はリスクマネジメントについて考えてみます。

リスク管理を大きく分けると、損失の管理、資金の配分、そしてリバランスという3つの行為になります。最後のリバランスの重要性はあまり認識されていません。

では過去のデータでいろいろ分析して工夫した戦略がなぜうまく機能しない事態になるのでしょうか?その原因はいろいろ考えられますが、簡単に言うと過去と現在とは同じものではないということです。世界は不確実です。しかし、そこでよく語られるのは本質的な部分は変わらないということです。さて、この本質的な部分というのは本当にあるのでしょうか?あるとしましょう。しかし、その本質的な部分だけでも調べつくすのは大変なのだということを忘れないでください。

もう一つ一生懸命に工夫した戦略がうまくいかない理由があります。それは"うまくトレードして利益を得たい"という"願望"です。多くの人は価格の動きを見ると勝手に利益を与えてくれるものだと考えてしまうのです。したがって、過去のデータを分析したり、現状を把握するときに自分の都合の良いようにデータを理解してしまうのです。

したがって、リスクマネジメントの観点からは価格はランダムに動くのだと仮定します。ランダムウォークという言葉を耳にしたことがあると思います。


損失の管理:

損失の管理には2つあります。1つは実現損失の管理ともう一つは未実現損失の管理です。実現損失とはポジションと閉じたときの取引の結果が損失となったということです。実現損益の履歴を損失と利益とに分けて管理する必要があります。未実現損失はまだ取引が終了せずにポジションが取られている状態の損失です。こちらも実現損益と同様に未実現損益に関しても損失と利益に分けて管理が必要です。この2つの損失の関連性と癖を見ることが必要です。


大きな誤解 - ストップ戦略は必須

ストップ戦略は、損が大きくなる前に、一度損を限定して、また別の機会にポジションを取りましょうという考え方です。世界的に有名な成功したトレーダーたちが何度も何度も口を酸っぱくして繰り返すシステムトレーダーにとって中核となる戦略です。確かに損失確定の技術はシステムトレードの骨格の1つです。しかし、ストップの連続はただ単に損失を累積し、取引費用がかさむだけになる可能性があります。ストップの使用を極力抑えるのもまた、リスク管理の重要な要素なのです。

ここで強調したい点は、よく損切が未熟な戦略の欠点を補ってくれると考えてしまうことです。上述のように、そのような場合には意味もなく損切を繰り返してしまうことになるので注意が必要です。損切は投資のタイミングを熟知したものが行う時だけに効果を発揮するのです。


トレーディング戦略のテストには必ず暴落時を含めよ

過去のチャートを見ると、市場が暴落しているときは、すぐに取引をやめられると思いがちです。しかし、決してそんなことはありません。価格が暴落しているときは値動きが荒く、急激に価格が回復することもあるために、暴落が続くとは考え憎くなってしまうのです。これが大きな落とし穴で、このようなときに不適切な取引を繰り返すと、大きな損失につながります。ですからバックテストには暴落時を必ず含んでいなければなりません。


シナリオ分析

シナリオ分析とは将来の市場の状態を予測することです。ここでは簡単に株価が上がる、下がるの確率で考えてみます。上下同じ比率で価格は動くと考えます。上下同確率の50%とします。

赤で色付けされた行が損失のレベルです。価格がこの水準に来たらポジションを閉じます。肌色のセルは-2ですから-2価値が下落したら運用停止ということを示しています。その横のグリーンのセルはそのに到達する確率です。この場合は0.25ですから25%の確率です。

image.png

薄緑のセルはそのセルに来る道が2つあることを示しています。ひとつは低い価格から上昇してくる場合です。もう一方は高い価格から下落して来る場合です。右方向の動きが時間の経過を示しています。濃い水色のセルを見てみましょう。数値は0.5です。これはこのセルに来る確率が0.5であることを示しています。これは一番左のピンクのセル0から始まった損益が1に上昇した時の確率です。その下の黄色いセルは損益が-1になる確率です。

このようなモデルを2項モデルといいます。同じ幅(価格差)で株価が上がる、下がると仮定することは変だと思う人もいるかもしれません。しかし、よく考えてみてください。証券会社の取引ツールを見てみると売買画面にはどの価格でどの程度売りたい人がいる、買いたい人がいるという情報を得ることができます。そのときの価格ですが、価格の幅はある一定の値に定まっています。それをきざみと呼びます。つまり株価というのは2項モデルのようにある一定の決まった幅で動くのです。

したがって、2項モデルの考え方は一日に何度も取引を実行したい、日計りのトレーダーにとっては必須の考え方になります。彼はまさにこの世界にいるのです。

また、一方で長期の投資に興味のある人はこのような2項モデルによる分析は不要です。それよりも現金と株式等の危険資産との間の資金の配分、シナリオ分析が重要となります。


資金の配分

資金の配分は2つの部分で構成されています。まず、手元資金は単に現金と株式に投資することを考えます。これが最初の配分です。つぎに株式に配分した資金をいろいろな株式に配分する必要があります。これが2つ目の配分です。そして、資金をいろいろな資産に投資することを分散投資といいます。いろいろな資産に投資しておけば、どれかが損をだしたとしても、別の資産が利益を上げてくれるかもしれません。これはよく卵を一つの皿に盛るなというように表現されます。もし、皿を落としてしまったら、すべての卵が割れてしまいます。複数のさらに盛っておけばそのようなリスクは減るでしょう。

このような分散投資の典型が株式のインデックス投資です。日経平均株価は日本の主要な225銘柄の株式に投資する株価指数です。このような指数に投資をしておけば分散投資によって、ある程度のリスクを軽減することができます。

このような管理をポートフォリオマネジメント呼びます。代表的なモデルは平均分散アプローチです。一連のこの理論はノーベル経済学賞を受賞しました。しかし、この方法では厄介な最適化の手法が必要です。ですので、一般には最小分散アプローチ、または資産均等アプローチが用いられます。わざわざ複雑な方法を使う必要はないのです。


最小分散アプローチ

資産への配分を分散をもとに行います。方法にはいくつかありますが、ここではもっとも単純なものを紹介します。それぞれの銘柄の分散の逆数に応じて資金を割り当てます。リスクの高い資産には少なく投資し、リスクの低い資産に多く投資する結果になります。

ナイキとビザの株価をヤフーUSからダウンロードして投資比率を計算してみましょう。

import pandas_datareader.data as web

import numpy as np
import pandas as pd

PORT=['NKE','V']
m=[]#それぞれの株価の年率換算平均のデータを保存
v=[]#それぞれの株価の分散
for i in range(len(PORT)):
tsd=web.DataReader(PORT[i], "yahoo",'2009/1/1')#株価データのダウンロード
lntsd=np.log(tsd.iloc[:,5])#データの自然対数を取る
m.append((lntsd.diff().dropna().mean()+1)**250-1)
v.append(lntsd.diff().dropna().var())
print('{0: 03d}'.format(i+1),'{0:7s}'.format(PORT[i]),'平均{0:5.2f}'.format(m[i]),
'分散 {0:5.5f}'.format(v[i]),'m/v {0:5.2f}'.format(m[i]/v[i]),
' データ数{0:10d}'.format(len(tsd)))
v_m=pd.DataFrame({'v':v,'m':m})
sum_var=(1/v_m.v).sum()
print('分散の逆数の和',sum_var)

print('投資比率',1/v_m.v/sum_var)
#---------------------------------------------------------------------------
01 NKE 平均 0.21 分散 0.00025 m/v 856.75 データ数 2645
02 V 平均 0.31 分散 0.00026 m/v 1168.99 データ数 2645
分散の逆数の和 7818.017555390696
投資比率 0 0.509909
1 0.490091
Name: v, dtype: float64

どちらの分散も0.00025と0.00026なのでほとんど変わりません。そのために投資比率も51% と49%になりました。


資産均等アプローチ

どの資産にも均等に資金を割り振る方法です。ナイキとビザの例でいえば、2資産からなるポートフォリオなので、1/2づつ配分すればよいということになります。

このように、ポートフォリオの管理といっても、別に難しく考える必要ありません。しかし、この方法は損切戦略と同じような問題点を抱えています。それは銘柄を選択する適切な能力がなければ、分散の効果は出ないということです。もしかすると、分散投資した銘柄すべてが同時に下落するかもしれないのです。


リバランス

リバランスとは価格が変動することで、当初予定していた配分比率から投資ポートフォリオの配分比率がずれてしまったときに元に戻す行為をいいます。これはある状況では小さいですが、利益を確実に上げる戦術になります。

参考文献・サイト

「Python3ではじめるシステムトレード」(パンローリング)

ザ・タートルー投資家たちの士官学校(日経BP)

タートル流投資の魔術(徳間書店)

FinTech プログラミング(日経BP)

日経ソフトウェア連載 金融データをPythonで分析してみよう.2018年7月、9月、11月号

「Yahoo Finance USから株価をダウンロードしてみた」https://qiita.com/innovation1005/items/5be026cf7e1d459e9562

「Python3ではじめるシステムトレード:システムトレードってなに?」https://qiita.com/innovation1005/items/2b5a291b98ebf39dfd8b

「Python3ではじめるシステムトレード: 予測について」 https://qiita.com/innovation1005/items/76d8a93c261e7d357ab8

-- この記事は学習目的に書かれていることに注意をしてください。投資は自己責任です。--