勝つためのボラティリティと的中率の関係

勝つためのボラティリティと的中率は逆相関

勝つためのボラティリティと的中率の関係を調べてみる。初心者の中にはスキャルのほうがトレード機会も多く、儲けやすいと考える人を時折見かける。しかし、必ずしもそうではないということをこれから示そうと思う。

ボラティリティは時間軸の平方根に比例することが経験的に知られている。つまり、時間軸が短いほど、ボラティリティは小さくなる。スキャルは時間軸が非常に短いので、ボラティリティも相当に小さくなる。

さて、単純化のために始値でエントリーし、次の始値でエグジットするようなトレードをしており、ボラティリティが一定であると仮定する。その場合、上がるか下がるかの予測的中率が50%を超えれば利益が得られるように見える。だが、それはコストを考慮しなかったらの話である。

予測が的中した場合はボラティリティ - コストを利益とし、予測が的中しなかった場合はボラティリティ + コストを損失としてシミュレーションを行ってみる。コストは1.0で固定とする。

グラフを見ると、ボラティリティが小さいほど、高い的中率が要求されていることが分かる。ボラティリティが十分に大きい場合、的中率が50%をいくらか超えていれば勝てそうである。一方、ボラティリティが非常に小さい場合、100%近くならないと勝てそうにもない。

サンプルプログラム

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

import matplotlib.pyplot as plt
import numpy as np

cost = 1.0
volatility = np.empty(10)
probability = np.empty(10)

for i in range(10):
    upper_limit = 50.0
    lower_limit = 0.0
    volatility[i] = (upper_limit + lower_limit) / 2
    profit = volatility[i] - cost
    loss = volatility[i] + cost
    probability[i] = (i + 11) * 0.05
    for j in range(100):
        if (profit * probability[i] >= loss * (1 - probability[i])):
            upper_limit = volatility[i]
            volatility[i] = (upper_limit + lower_limit) / 2
            profit = volatility[i] - cost
            loss = volatility[i] + cost
        else:
            lower_limit = volatility[i]
            volatility[i] = (upper_limit + lower_limit) / 2
            profit = volatility[i] - cost
            loss = volatility[i] + cost

plt.plot(volatility, probability, label='Cost=1.0')
plt.title('Volatility and Probability for Win')
plt.xlabel('Volatility')
plt.ylabel('Probability')
plt.legend()
plt.savefig('volatility_and_probability_for_win.png', format='png', dpi=150)
plt.show()
(2017/02/02更新)

コメント

非公開コメント