※この記事の文章は、元々自分用に書いていたメモになります。変な箇所などあればご指摘ください。
→ 「平均利益と平均損失の大きさが異なる場合」に一般化した内容の記事を書きました。
はじめに
『データ駆動型ファイナンス』という本を読んでいたところ、下の画像のような計算を見つけました。
確率統計をあまりやったことがなくて、調べながらで自分も自信はないんですが…笑
— サンセット (@Sunset_Yuhi) October 22, 2023
『データ駆動型ファイナンス』の中で正解率(勝率)pからシャープレシオSを計算する例が載ってまして、自分はそちらから期待値や分散を求めていました。この分散から上側5%なども考えられないかなと。 pic.twitter.com/EaU2aog692
要するに、「勝率$p$で(平均)利益$r$を得て、敗率$(1-p)$で(平均)損失$-r$を被る戦略」があった時、「その戦略のシャープレシオ$S$は、勝率$p$と取引回数$N$の関数で表せる」という話でした。
画像の式(3.5)では、勝率$p$や取引回数$N$が大きいほど、シャープレシオ$S$も大きくなるという関係になっています。これを読んだ時、「じゃあその関係式を使えば、自分が望むシャープレシオを実現したい時に、どのくらいの勝率や取引回数を目指せばいいかも逆算できるのでは」と思いました。
それ以降は単純に、「シャープレシオを大きくするには勝率と取引回数をとにかく大きくすればいい」と思っていたのですが、オプショントレーダーである藍崎さんの記事や、下のポストのような情報を見る内に、結構奥が深い話だということが分かってきました。
システム最適化の目的関数として便利な悲観的リターンレシオ(PRR)について
— 藍崎@システムトレーダー (@FX180507) July 18, 2023
ランダムな取引を図1のように定義すると「ランダムな取引のPFのだいたいの範囲」が求まります
(サンプルサイズに応じて決定する)
ランダムの上振れ値をどれくらい上回っているかを示す評価指標PRRが利用できます(図2) pic.twitter.com/NgscHYY4S4
これは要するに、「勝率50%の(優位性がない)戦略でも、それなりに良い結果が偶然出ることがある」ので、「偶然で説明できる上振れよりも大きなプロフィットファクター(期待利得)を出すことが求められる」という話のようでした。
例えば、沢山のコインから表が出やすいコインを探すために、「コイン投げを100回やって表が出た回数を数える」調査を繰り返し行う、という作業を考えてみましょう。この時、「表が55回出る」くらいなら偶然でも起きうると思うのですが、その時に「このコインは表が出やすいコインだ!」と判断するのは、危険だと想像できるのではと思います(実際に計算すると、公平なコインでも55回以上表が出る確率は、15%程度あります)。
これはトレードのシステム開発で言うと、「沢山の戦略を考えてトレードしたら勝率55%のシステムが見つかった」という時に、「本当にそのシステムは勝率55%の実力があるのか? 偶然で説明できるのでは?」と疑うことに繋がるように思います。
そして次に出てきた疑問は、「評価指標はどのくらいの値が出れば偶然とは言えないのか?」ということでした。この辺りについては、最初のポストのように藍崎さんと議論する機会がありました。しかし、『データ駆動型ファイナンス』が期待利得やシャープレシオを中心に考察していた一方、藍崎さんは二項分布やプロフィットファクターを中心に考察していたこともあり、話を上手く噛み合わせられずに終わってしまいました。
ただ、システム開発などをする上で、「トレードの評価指標はどのくらいの値が出ていれば良いか」を把握することは重要に思ったので、期待利得やプロフィットファクターなどの式から「勝率の目標値(KPI)の設定方法」などを検討してみました。よろしくどうぞ。
期待利得、分散、シャープレシオ
まずは、『データ駆動型ファイナンス』に載っている内容のおさらいです。ある予測モデルを使って売買すると、勝率$p$で利益$r$を得て、敗率$(1-p)$で損失$-r$を被るとします。この時、利得の期待値$E$は次のように書けます。
\begin{align}
E &= rp -r(1-p) = r(2p -1)
\end{align}
利得の分散$V$は、取り得る分散と確率を掛けたものを、全て足せば計算できます。ここでは、共通項を括りだして式の簡略化もしています。
\begin{align}
V &= [r -r(2p -1)]^2 p +[-r -r(2p -1)]^2 (1-p) \nonumber
\\
&= (2r -2rp)^2 p +(-2rp)^2 (1-p) \nonumber
\\
&= 4 r^2(1 -p)^2 p +4r^2 p^2 (1-p) \nonumber
\\
&= 4 r^2 p(1 -p) [(1-p) +p] \nonumber
\\
&= 4 r^2 p(1 -p)
\end{align}
$N$[回]売買した場合、期待値は$E_{N}=Nr(2p -1)$、分散は$V_{N}=4N r^2 p(1 -p)$となり、この時にシャープレシオ$S$は次のように計算できます。
\begin{align}
S &= \frac{Nr(2p -1)}{\sqrt{4N r^2 p(1 -p)}} = \frac{2p -1}{2 \sqrt{p(1-p)}} \sqrt{N}
\end{align}
シャープレシオから逆算した勝率の目標値
ここからは、『データ駆動型ファイナンス』に載っていない発展の内容です。シャープレシオ$S$の計算式を、勝率$p$について解くことを考えます。まず、両辺を2乗して分母を払うと、
\begin{align}
S &= \frac{2p -1}{2 \sqrt{p(1-p)}} \sqrt{N} \nonumber
\\
S^2 &= \frac{4p^2 -4p +1}{4p(1-p)} N \nonumber
\\
4S^2 p -4S^2 p^2 &= 4N p^2 -4N p +N \nonumber
\end{align}
pの多項式としてまとめると、
\begin{align}
(4N +4S^2) p^2 -(4N +4S^2)p +N &= 0 \nonumber
\\
p^2 -p +\frac{N}{4(N +S^2)} &= 0 \nonumber
\end{align}
2次方程式の解の公式より、
\begin{align}
\therefore p = \frac{1 +\sqrt{1 -\frac{N}{N +S^2}}}{2} = \frac{1 +\frac{S}{\sqrt{N +S^2}}}{2} = \frac{1}{2} +\frac{S}{2 \sqrt{N +S^2}}
\end{align}
具体的な数値を代入して$p$を求めてみましょう。日本株などを日次で売買する場合、1年間の最大売買回数は$N=240$[回]程度となります。また、シャープレシオが例えば$S=2.0$あれば、損する確率を約$2.275$%程度に抑えられると考えられます(リターンが2、リスクが1とした時、$2\sigma$より大きく下振れると損するが、$2\sigma$の片側に出る確率が約$2.275$%のため)。そこで、年間$240$[回]売買してシャープレシオが2.0となるための$p$を計算すると、次のようになります。
\begin{align}
\frac{1}{2} +\frac{2.0}{2 \sqrt{240 +2.0^2}} \sim 0.564
\end{align}
つまり、モデルの勝率は56.4[%]程度が必要、と言えるのではと思います。
取引回数の目標値
$N$[回]売買した時の期待利得$E_{N}=r(2p -1)N$も、ある程度大きくなければ売買する意味がないように思います。例えばある戦略で、年率のシャープレシオが10あったとしても、年率のリターンが1%しかないような場合、運用するメリットがないかもしれません。そこで次式から、年間の取引回数$N$を求めることを考えます。
\begin{align}
N &= \frac{E_{N}}{r(2p -1)}
\end{align}
年率10[%]のリターンが欲しいとします。勝率56.4[%]の予測モデルを使い、1回当たりのリターン(絶対値)を$r=0.008$とした時、$N$は次のように計算されます。
\begin{align}
\frac{0.10}{0.008(2 \times 0.564 -1)} \sim 97.66 \nonumber
\end{align}
この場合、年間で約98[回]売買する必要がある、と解釈できると思います。
ランダムなトレードの上振れを考慮した勝率の目標値
次に、藍崎さんの記事に関連した話をしていきます。勝率$p=1/2$で$N$[回]売買した時の期待利得と分散は、次のように計算できます。
\begin{align}
E_{N} &= Nr(2p -1) = Nr \left(2 \frac{1}{2} -1 \right) = 0 \nonumber
\\
V_{N} &= 4N r^2 p(1 -p) = 4N r^2 \frac{1}{2} \left(1 -\frac{1}{2} \right) = N r^2 \nonumber
\end{align}
標準偏差は$\sigma = \sqrt{N}r$となります。この分布は試行(売買)1回につき$r$または$-r$変動するランダムウォークの分布で、正規分布$\mathcal{N}(0, N r^2)$に従います。なお、$V_{N}$について標準化をした$\frac{V_{N}}{N r^2}$は、標準正規分布に従います。
さて、ランダムなトレードでも試行回数を繰り返せば、期待利得はある程度まで上振れる可能性があります。よく$2 \sigma$や$3 \sigma$と言われるような、標準偏差の正の実数倍で表される閾値を$\sigma_{th}$として、期待利得が満たすべき式を考えてみます。偶然で説明できる期待利得の最大
値$\sigma_{th} \sqrt{N}r$より、実際の期待利得$Nr(2p -1)$の方が大きい必要があるので、次のように書けるかと思います。
\begin{align}
\sigma_{th} \sqrt{N}r &\leq Nr(2p -1) \nonumber
\\
\frac{\sigma_{th}}{\sqrt{N}} &\leq 2p -1 \nonumber
\\
\frac{\sigma_{th}}{\sqrt{N}} +1 &\leq 2p \nonumber
\end{align}
\begin{align}
\therefore p &\geq \frac{1}{2} +\frac{\sigma_{th}}{2\sqrt{N}} = \frac{\sqrt{N} +\sigma_{th}}{2\sqrt{N}} = \frac{N +\sigma_{th}\sqrt{N}}{2N}
\end{align}
ここで例えば、取引回数を$N=100$[回]、上振れの閾値を$\sigma_{th}=2$とすると、$p$が満たすべき条件は次のように計算できます。
\begin{align}
\therefore p &\geq \frac{1}{2} +\frac{2}{2\sqrt{100}} = 0.6
\end{align}
この場合は、勝率が0.6以上でないと、偶然で説明できてしまうことになります。ただし、取引回数$N$が大きくなるほど、要求される勝率は小さくても済みます。
プロフィットファクター
プロフィットファクター$PF$は、平均損失の大きさに対する平均利益の大きさを表します。
\begin{align}
PF &= \frac{rp}{r(1-p)} = \frac{p}{1-p} \geq 0
\end{align}
利益が出るためには最低でも$1<PF$である必要があります。しかし、ランダムなトレードでも試行回数を繰り返せば、$PF$はある程度まで上振れる可能性があります。ランダムなトレードの勝率のおおよその上限は$p = \frac{N +\sigma_{th}\sqrt{N}}{2N}$となり、同時に敗率の下限は$1-p = \frac{N -\sigma_{th}\sqrt{N}}{2N}$となるので、プロフィットファクターが満たすべき条件は、次のように書けます。
\begin{align}
PF &\geq \frac{\frac{N +\sigma_{th}\sqrt{N}}{2N}}{\frac{N -\sigma_{th}\sqrt{N}}{2N}} = \frac{N +\sigma_{th}\sqrt{N}}{N -\sigma_{th}\sqrt{N}}
\end{align}
上式を満たすような勝率$p$を求めるには、$PF=\frac{p}{1-p}$を代入して$p$について解けばよいです。ただ、求められる値は結局のところ、前節で求めた$p \geq \frac{1}{2} +\frac{\sigma_{th}}{2\sqrt{N}}$と同じになるようでした。
おわりに
シャープレシオやプロフィットファクターを(偶然で説明できないレベルまで)大きくしようとした時、勝率や取引回数をどのくらい大きくすればよいかを考えてきました。その上で、トレードで収益を上げていそうな方を観察していると、上の考察に関連したいくつかの考え方を見出せるように思いました。
まず1つ目として、「勝率が低いモデルでもよいので、取引回数を増やす」という考え方があるかと思います。例えば、$p \geq \frac{1}{2} +\frac{\sigma_{th}}{2\sqrt{N}}$という式から考えると、$\sigma_{th}=2$とした時に$N=10000$[回]の取引を行って勝率51%以上だったなら、偶然で説明できない意味のあるモデルが作れたと言えそうなので、そのようなモデルを作って取引するという立場です。
そして2つ目として、「取引回数が少なくても良いので、勝ちやすい時に取引して勝率を上げる」という考え方もあるかと思います。相場には収益を上げやすい時期とそうでない時期があるという前提で、常に何かしらのポジションを取る(取引回数を増やす)よりも、勝つ可能性がなるべく高い時だけ取引して勝率を上げるという立場です。
この2つの考え方は、互いに矛盾するようでもありますが、どちらもよく聞くように思いますし、どちらも正当化できるのではと思いました。この2つの考え方を意識することは、恐らく裁量で取引する場合にも参考になるのではないでしょうか。
ただし、この記事では「平均利益と平均損失の大きさが同じ」という前提で話を進めてきました。実際にはそうでないことが多く、例えば日経平均は上昇時よりも下落時の方が変化率が大きいです。その日経平均を買いで入る場合に、期待利得をプラスにしようと思うと、より大きな勝率を目指す必要があります。利益と損失の大きさが非対称な場合の計算は結構面倒ですが、これも機会があれば公開したいと思います(需要がよく分からないので、見たい方がいれば声をかけてください)。
また先日、2クラス分類問題におけるKPI設定などを考察した記事をUKIさんが書かれていたのですが、自分も混同行列などから面白い考察が色々できるのではと思っていました。ただ、まだ検討中の話も多いので、その辺りはまた別の機会に書きたいと思います。