ケリー基準(3)


前のページの結果をまとめておきます。

【問題】

ある株を1単位売買した場合、1回ごとの結果には、k 通りのシナリオが起こりうる。
i 番目のシナリオが起こる確率は Pi であり、その場合、 Xi 円の損益が生じる。
少なくとも1つの Xi が負(つまり損失)であることを仮定する。
この株に買いシグナルが発生した。1単位買うのには、A円が必要。あなたの資金は S円である。
ケリー基準に従うものとして、何単位買うべきか?
【注】 「少なくとも1つの Xi が負」 という仮定が成り立たない場合は、必ず儲かるのだから、「買えるだけ買う」 ことになります。


なお、「1単位」 というのは、先物なら 1 枚、株式なら 1 株と解釈しておいて下さい。この点については、後で詳しく考えることにします。


前のページの内容と同じなので、結果だけ書きます。

【解答】

W を最大損失額とします。つまり、Xi のうち最も小さい値(つまり、マイナスの方向に最も大きいもの) の符号を変えたものです。
仮に、X1 が最大の損を表すなら、W = -X1 です。

Ri = Xi/W とみなして、ケリー基準を適用します。
g(f) は次の式で与えられます。

0 ≦ f ≦ 1 の範囲で、g(f) を最大にする f を f* とします(f* はコンピュータで求めます)。
f* は、最適 f 値(Optimal f)と呼ばれることがあります。

f$ を次の式で定義します。
f$ = W/f*
このとき、S/f$ 単位を買うのが最適となります。


S/f$ に端数がある場合は、端数を切り下げる方向で丸めるのが賢明です。
また、以上の計算で、A が全く関係していませんが、

A > f$
なら、実際に所定の株数を買うのは不可能になります。要するに、差金決済が認められていない関係でケリー基準が実践できないのですね。
その場合は、「可能な範囲でできるだけ多く買う」 しかありません。

あと、1単位あたりの期待値、
が正でないならやるだけ無駄です。その場合、自動的に f* = 0 になるのですが、実際には、まず最初に 「期待値 > 0」 を確認すべきでしょう。


g(f) を最大にするような f* を求めるには、コンピュータが必要です。
その際の求め方を説明します。プログラムを組める人なら簡単に求められますし、エクセルなどを使って手動で計算してもたいした手間ではないと思われます。

まず、g(f) のグラフは、1単位あたりの期待値が正か負によって、次の2つのパターンに分かれます。

横軸が f で、範囲は 0 ≦ f ≦ 1 、縦軸は g(f) です。g(0) = 1 、g(1) = 0 が成り立ちます。

期待値<0 の場合、g(f) が最大になるのは、f = 0 のときです。期待値<0 なら、何も賭けないのが最善ということで、これは当然です。

さて、期待値>0 の場合です。グラフは、初めは増加して、* 印のところでピークになり、そこからあとは単調に減少していきます。必ずこのパターンになります。

たとえば、右図のように、山が2つできることはありません(理由はあとで示します

したがって、g(f) の f に 0 から始めて少しずつ大きな値を入れていき、g(f) が直前の値より小さくなった瞬間に、直前の f が最適 f 値であると結論できます。

たとえば、0.01 刻みでやるならこうなります。

まず、期待値>0 を確認しておく。
f = 0 から始めて、0.01 刻みに g(f) を求める。
はじめは、
g(0) < g(0.01) < g(0.02) < g(0.03) < g(0.04) < …
となっているはず。

【注】 いきなり g(0) > g(0.01) となったら、最適値は、0 と 0.01 の間にある。その場合は、刻み方を小さくする。

やがて、g(f) が小さくなる瞬間がくる。たとえば、0.35 でそうなったとする。
… < g(0.32) < g(0.33) < g(0.34) g(0.35)
ならば、最適 f 値は、0.34 である。厳密には、0.33 と 0.35 の間のどこかである。
さらに正確に求めたいなら、0.33 から始めて、0.0001 刻みで同じことをやればよい。
芸のない方法ですが、現在のコンピュータは処理速度が速いので、これで十分です。
ラルフ・ビンスの本でも、この方法が使われています。しかし、これから説明するような別法も考えられます。
【注】 なお、ビンスの本には、parabolic interpolation という手法も紹介されています。これは、速いけれど少し複雑な方法です。

以下、おもに Ri を使います。 Ri = Xi/W ですね。
そして、R、X を確率変数とし、1〜k のシナリオごとに、R1〜Rk、X1〜Xk の値を取るものとします。当然、R = X/W です。
R、X の期待値は E[R]、E[X] という具合に表します。
g(f) の式を再掲しておきます。

G(f) = log g(f) と定義します。最適 f 値とは、G(f) を最大にする f でもあります。
G(f) をあらわに書くと、
ですが、これは、log(1+Rf) の期待値なので、E[log(1+Rf)] と書けます。

さて、G(f) を f で微分します。
E[log(1+Rf)] の形のまま、E[…] の中身を微分すればよく、次のようになります。
1番目の式で、f = 0 とおき、次式が成立。
つまり、G'(0) の符号は、1単位あたりの期待値の符号と一致します。

また、2番目の式より、G''(f) < 0 です。つまり、G(f) のグラフは上に凸

G(0) = 0 は明らか。そして、G(1) = -∞ です(Ri の少なくとも1つが -1 だから)。
【注】 G(1) とは、f を左から 1 に近づけたときの極限という意味。
これらのことから、G(f) のグラフが、期待値の符号によって、次の2つのパターンになることがわかりますね。


ここでちょっと脱線して、g(f) についても同様の性質を示しておきます。興味のない方は読み飛ばして下さい。

次の4つが成り立ちます。

(1) g(0) = 1
(2) g(1) = 0
(3) g'(0) = E[X]/W
(4) g(f) のグラフは上に凸
(1) と (2) は明らか。

(3) は、g = eG だから(面倒なので変数の f は省略します)、これを微分して、 g' = G'*eG としてから、f = 0 とすればいい。

問題は、(4) の理由です。
確率変数 Z を次の式で定義します。
このとき、先ほどの式から、
・ G'(f) = E[Z]
・ G''(f) = -E[Z2]
となっています。g = eG を 2 回微分することで、
となります。ところが、E[Z2] - (E[Z])2 は、Z の分散を表すので正です。
よって、g'' < 0 が言えて、上に凸であることがわかります。
【注】 計算したら妙に上手いこと g''< 0 が示せたんですが、なんか不思議です。上に凸になることには、もっと簡単な理由があるのでしょうね。
以上のことから、g(f) のグラフに山が2つできることはないなど、グラフの概形がわかります。


話を元に戻しましょう。以下、期待値>0 の話に限定します。

最適 f 値を求めるには、G(f) のただ一つの極値与える f を求めればいいので、

G'(f) = 0
を解けばいいわけです。

期待値>0 なので、G'(0)>0 です。G''(f)< 0 より、G'(f) のグラフは単調減少。
そして、G'(1) = -∞ もわかると思います。

これらのことより、G'(f) のグラフは、下図のようになります。
ということは、G'(a)> 0 なら、f* は、a の右側(つまり、a < f*)にあることになります。
逆に、G'(b)< 0 なら、f* は、b の左側(つまり、f* < b)です。 この原理を使えば、f* の存在範囲を絞り込むのは簡単です。
いま、f* が、a と b の間にあることを、[a, b] と書くことにします。
次のような手順を繰り返します。
まず、[0, 1] は当然ですね。この区間の中点は、0.5 です。

そこで、G'(0.5) の値を調べます。仮に G'(0.5)> 0 としましょう。
f* は、0.5 の右側ですから、[0.5, 1] です。この区間の中点は、0.75 ですね。

こんどは、G'(0.75) の値を調べます。仮に G'(0.75)<0 としましょう。
f* は、0.75 の左側ですから、[0.5, 0.75] です。この区間の中点は、0.625 です。

つぎは、G'(0.625) の値を調べ …
要領はわかると思います。1回調べることに、区間が半分になっていくので、10回ほどこのプロセスを繰り返せば、f* の値が小数点以下3桁くらいまでは決まります。

G'(f) の式をはっきり書いておきますね。次の式です。
最後の項は、Ri = Xi/W を使って、Xi と W で表しました。
この式を使い、上の手順で f* の範囲を絞り込むわけです。

単純だし速いし、私はこの方法を使っているのですが…。もっと優れた方法もあるのでしょうね。
【注】 数学的な間違いはないはずですが、ラルフ・ビンスがこの方法を使っていないのは、ちょっと気になります。彼はプログラマーですからね。数値計算の際、桁落ちなどの具合で、この方法には問題があるのでしょうか? そういうことまでは、私にはわかりませんです。

最適 f 値の近似公式を示しておきます。これは、f* が非常に小さいときに有効です。一般に、f* は、有利な賭ほど大きくなります。したがって、この近似法が有効なのは、優位性がごくわずかしかないような場合です。ブラックジャックなどのギャンブルについては、当てはまるらしいです。

まず、f* は、次の方程式の解です。

いま、f が非常に小さいとして、E[…] の中身を f について級数展開します。
最初の2項のみ取れば、先ほどの方程式は、
となります(ここから先は、すべて近似式です)。これより、最適 f 値は、
と求まります。

ギャンブルでは、最大損失が賭け金没収です。だから、単位金額を賭けた場合で考えると、W = 1 であり、R は損益そのものを表します。
その場合の損益の期待値を m、分散を σ2 とおけば、
なので、
ですね。

さらに、σ2 に比べて m2 がきわめて小さいなら(そうなる場合が多いそうです)、
となります。


前のページ目次に戻る次のページ