最適レバレッジ

レバレッジは高いほどいいのか

FXはレバレッジを使えば少ない資金で大きな利益を挙げられる、との宣伝文句を見かけることがある。だが正確には、大きな損失を蒙ることもある、と付け加えるべきだ。宣伝する側は都合のいい面しか強調しないが、それを真に受けてレバレッジは高いほどよいと考える人も時々いるから困ったものである。

日本国内では規制があって、レバレッジは25倍までとなっている。そこで、規制を受けない国外の業者はレバレッジの高さを売りにして日本から顧客を集めようとしたりする。だが、日本の規制を超えるレバレッジなど本当に必要なのだろうか。

要は勝てばいいのだ、負けたときのことなど考える必要はない、という人も中にはいるかもしれない。確かに勝率が100%なら負けたときのことを考える必要はないし、レバレッジも「多々益々弁ず」だが、果たしてそのようなことが可能なのだろうか。勝つこともあれば負けることもあるが、長期的には利益を積み上げている、というのが現実的だ。

では、負けることがあるトレードにおいても本当にレバレッジは高いほどよいのだろうか。負けることがあっても長期的に利益を挙げられる戦略ならやはりレバレッジは高いほどよいのではないか。答えは「否」だが、レバレッジは高いほどよいわけではないという認識がどうも常識とまではなっていないように思われる。

そこで、レバレッジをどのくらいにすれば利益を最大化できるか、ということをこれから見ていくこととする。

レバレッジ1倍で運用した場合の資産曲線

ここに1年当たり100トレード、1トレード当たりの期待利益が0.1%、リスクが0.5%の戦略があるとする。単純化して考えると、1年当たりの期待利益は0.1% * 100 = 10.0%、リスクは√Tルールに基づけば0.5% * sqrt(100) = 5.0%となる。したがって、シャープレシオは10.0 / 5.0 = 2.0となり、戦略としてはまずまずである。

この戦略に基づいて100回トレードを行うシミュレーションをやってみる。乱数を使っているので、結果は毎回違う。シミュレーション結果の利益、リスクも必ずしも指定した数値にはならない。試行回数を増やせば指定した数値に近づくが、100回程度の試行ではかなりの乖離がある。

それはさて、先ずはレバレッジ1倍で運用した場合の資産曲線を見てみる。

初期資産は1.0から開始し、そこから何%増減したかを見る。グラフによると最終資産はおよそ1.1となっているので、10%の利益であったことが分かる。

最適レバレッジの計算

グラフに「Kelly = 41.2146523106」とあるが、これはケリー基準による最適レバレッジである。

ケリー基準の計算には本来の計算式と簡易式とがあるが、ここでは

最適レバレッジ = 期待利益 / (リスク * リスク)

という簡易式を用いる。

期待利益が0.1%、リスクが0.5%である場合は

0.001 / (0.005 * 0.005) = 40.0

でレバレッジ40倍が最適レバレッジとなる。だが、シミュレーションでは乱数を使っており、期待利益、リスクが必ずしも指定した数値にはならないので、レバレッジも上の計算通りにはならない。

レバレッジ別の最終資産

最後にレバレッジ別の最終資産を見てみる。

縦の点線はケリー基準による最適レバレッジの位置である。その付近で利益が最大化していることが分かる。必ずしも一致しないのはこれが簡易式だからである。

利益を最大化した場合、最終資産は約9.0である。800%もの利益があったことになる。レバレッジ1倍のときは10%程度であったのだから、レバレッジの力は偉大である。

だが、最適レバレッジを超えると利益が減っていくことが分かる。赤の水平線は初期資産である1.0の水準だが、レバレッジ60倍を超えた当たりで最終資産が水平線を下回っており、期待利益がプラスであるにもかかわらず、損失を招いていることを示している。

そしてレバレッジ80倍手前で最終資産は0になっている。つまり破産である。

最適レバレッジならよいのか

負けることのあるトレードでは例え利益の期待値がプラスであってもレバレッジは高いほどよいということにはならない。トレードはリスク管理だけで利益を挙げられるわけではないが、それをしっかりやっていないと、利益を挙げられるトレードで損失を蒙る結果となる。

では、最適レバレッジを計算してそれを適用すればよいのか。実はそうではない。シミュレーションでは期待利益はプラスに設定してあり、これは間違いない。それでも乱数を使っていることから生じるぶれがある。まして、実際のトレードでは期待利益が確実にプラスであるなどという根拠はどこにもない。実際のトレードはシミュレーションよりはるかに不確実性が高いものであり、算出した最適レバレッジも大きなぶれがあることを想定しなければならない。

適用するレバレッジが最適レバレッジより小さい場合、利益の最大化はできないが、期待利益がプラスである限り、資産を増やすことはできる。だが、適用するレバレッジが最適レバレッジより大きい場合、利益の最大化ができないばかりか、期待利益がプラスであったとしても資産を減らしたり、最悪、破産したりするのである。だとすれば、実際に使用するレバレッジは最適レバレッジより小さくしたほうが安全である。

「最適レバレッジ」とは言っても、むしろこれは上限と考えるべきなのだ。

サンプルプログラム

①以下のコマンドを「IPython console」にコピー&ペーストして「Enter」キーを2回押す。

import matplotlib.pyplot as plt
import numpy as np

trades = 100
ret = np.random.normal(0.001, 0.005, trades)
equity_curve = np.zeros(trades)
for i in range(trades):
    if i == 0:
        equity_curve[i] = 1.0 * (1.0 + ret[i])
    else:
        equity_curve[i] = equity_curve[i-1] * (1.0 + ret[i])
    if equity_curve[i] < 0.0:
        equity_curve[i] = 0.0
mean = np.mean(ret)
std = np.std(ret)
kelly = mean / (std * std)
ax=plt.subplot()
plt.plot(equity_curve)
plt.xlabel('Trades')
plt.ylabel('Equity curve')
plt.text(0.05, 0.9, 'Kelly = ' + str(kelly), transform=ax.transAxes)
plt.savefig('optimal_leverage1.png', dpi=150)
plt.show()

②以下のコマンドを「IPython console」にコピー&ペーストして「Enter」キーを2回押す。

n = 100
result = np.zeros(n)
for j in range(n):
    leverage = j
    for i in range(trades):
        if i == 0:
            equity_curve[i] = 1.0 * (1.0 + ret[i] * leverage)
        else:
            equity_curve[i] = equity_curve[i-1] * (1.0 + ret[i] * leverage)
        if equity_curve[i] < 0.0:
            equity_curve[i] = 0.0
        result[j] = equity_curve[trades-1]
plt.plot(result)
plt.axhline(y=1.0, color='red')
plt.axvline(x=kelly, color='black', linestyle=':')
plt.xlabel('Leverage')
plt.ylabel('Balance')
plt.savefig('optimal_leverage2.png', dpi=150)
plt.show()
(2017/02/09更新)

コメント

非公開コメント