「株式トレード 基本と原則」というマーク・ミネルヴィニ著作の3章に、特定の利益率・勝率において10回トレードをしたときの ROI 計算表が出てくる。 最初はどういう計算かわからなかったが、以下のように計算していることがわかったのでメモしておく。
def 取引後の資産(勝率, 回数, 利益率, 損失率) 資産 = 1 (勝率 * 回数).to_i.times do 資産 *= 1 + 利益率 end ((1 - 勝率) * 回数).to_i.times do 資産 *= 1 - 損失率 end 資産 end
利益率 | 損失率 | ペイオフレシオ | 資産(勝率0.3) | 資産(勝率0.4) | 資産(勝率0.5) |
---|---|---|---|---|---|
0.04 | 0.02 | 2 | 0.977 | 1.036 | 1.1 |
0.06 | 0.03 | 2 | 0.962 | 1.052 | 1.149 |
0.08 | 0.04 | 2 | 0.947 | 1.065 | 1.198 |
0.1 | 0.05 | 2 | 0.929 | 1.076 | 1.246 |
0.12 | 0.06 | 2 | 0.911 | 1.086 | 1.293 |
0.14 | 0.07 | 2 | 0.891 | 1.093 | 1.339 |
0.16 | 0.08 | 2 | 0.871 | 1.098 | 1.384 |
0.2 | 0.1 | 2 | 0.826 | 1.102 | 1.469 |
0.24 | 0.12 | 2 | 0.779 | 1.098 | 1.547 |
0.3 | 0.15 | 2 | 0.704 | 1.077 | 1.647 |
0.36 | 0.18 | 2 | 0.627 | 1.04 | 1.725 |
0.42 | 0.21 | 2 | 0.55 | 0.988 | 1.777 |
0.48 | 0.24 | 2 | 0.475 | 0.925 | 1.8 |
0.54 | 0.27 | 2 | 0.403 | 0.851 | 1.796 |
0.6 | 0.3 | 2 | 0.337 | 0.771 | 1.762 |
0.7 | 0.35 | 2 | 0.241 | 0.63 | 1.647 |
0.8 | 0.4 | 2 | 0.163 | 0.49 | 1.469 |
0.9 | 0.45 | 2 | 0.104 | 0.361 | 1.246 |
1 | 0.5 | 2 | 0.063 | 0.25 | 1.0 |
10回のトレードのなかに、きれいに 勝率 * 10回
の勝ちが現れることになっている簡素な計算だ。
この先の話は本の内容とは直接関係ないが、もやっとするのでもう少し一般化してみる。 同様の利益率・損失率・勝率の組み合わせにおいて、1回の取引での期待値は次のようになる。
利益率 | 損失率 | ペイオフレシオ | 期待値(勝率0.3) | 期待値(勝率0.4) | 期待値(勝率0.5) |
---|---|---|---|---|---|
0.04 | 0.02 | 2 | -0.002 | 0.004 | 0.01 |
0.06 | 0.03 | 2 | -0.003 | 0.006 | 0.015 |
0.08 | 0.04 | 2 | -0.004 | 0.008 | 0.02 |
0.1 | 0.05 | 2 | -0.005 | 0.01 | 0.025 |
0.12 | 0.06 | 2 | -0.006 | 0.012 | 0.03 |
0.14 | 0.07 | 2 | -0.007 | 0.014 | 0.035 |
0.16 | 0.08 | 2 | -0.008 | 0.016 | 0.04 |
0.2 | 0.1 | 2 | -0.01 | 0.02 | 0.05 |
0.24 | 0.12 | 2 | -0.012 | 0.024 | 0.06 |
0.3 | 0.15 | 2 | -0.015 | 0.03 | 0.075 |
0.36 | 0.18 | 2 | -0.018 | 0.036 | 0.09 |
0.42 | 0.21 | 2 | -0.021 | 0.042 | 0.105 |
0.48 | 0.24 | 2 | -0.024 | 0.048 | 0.12 |
0.54 | 0.27 | 2 | -0.027 | 0.054 | 0.135 |
0.6 | 0.3 | 2 | -0.03 | 0.06 | 0.15 |
0.7 | 0.35 | 2 | -0.035 | 0.07 | 0.175 |
0.8 | 0.4 | 2 | -0.04 | 0.08 | 0.2 |
0.9 | 0.45 | 2 | -0.045 | 0.09 | 0.225 |
1 | 0.5 | 2 | -0.05 | 0.1 | 0.25 |
n回の取引後の資産は、元本 * (1 + 期待値) ^ n
である。10回のトレード後の ROI は以下のようになる。
利益率 | 損失率 | ペイオフレシオ | 資産(勝率0.3) | 資産(勝率0.4) | 資産(勝率0.5) |
---|---|---|---|---|---|
0.04 | 0.02 | 2 | 0.9802 | 1.0407 | 1.1046 |
0.06 | 0.03 | 2 | 0.9704 | 1.0616 | 1.1605 |
0.08 | 0.04 | 2 | 0.9607 | 1.0829 | 1.219 |
0.1 | 0.05 | 2 | 0.9511 | 1.1046 | 1.2801 |
0.12 | 0.06 | 2 | 0.9416 | 1.1267 | 1.3439 |
0.14 | 0.07 | 2 | 0.9322 | 1.1492 | 1.4106 |
0.16 | 0.08 | 2 | 0.9228 | 1.172 | 1.4802 |
0.2 | 0.1 | 2 | 0.9044 | 1.219 | 1.6289 |
0.24 | 0.12 | 2 | 0.8863 | 1.2677 | 1.7908 |
0.3 | 0.15 | 2 | 0.8597 | 1.3439 | 2.061 |
0.36 | 0.18 | 2 | 0.8339 | 1.4243 | 2.3674 |
0.42 | 0.21 | 2 | 0.8088 | 1.509 | 2.7141 |
0.48 | 0.24 | 2 | 0.7843 | 1.5981 | 3.1058 |
0.54 | 0.27 | 2 | 0.7606 | 1.692 | 3.5478 |
0.6 | 0.3 | 2 | 0.7374 | 1.7908 | 4.0456 |
0.7 | 0.35 | 2 | 0.7003 | 1.9672 | 5.0162 |
0.8 | 0.4 | 2 | 0.6648 | 2.1589 | 6.1917 |
0.9 | 0.45 | 2 | 0.631 | 2.3674 | 7.6096 |
1 | 0.5 | 2 | 0.5987 | 2.5937 | 9.3132 |
例えば1年間で資産を2倍にしたいとき、必要な取引回数nを計算できる。(負の数になっている箇所は、達成不可能ということなので無視されたい)
利益率 | 損失率 | ペイオフレシオ | 回数(勝率0.3) | 回数(勝率0.4) | 回数(勝率0.5) |
---|---|---|---|---|---|
0.04 | 0.02 | 2 | -346 | 174 | 70 |
0.06 | 0.03 | 2 | -230 | 116 | 47 |
0.08 | 0.04 | 2 | -172 | 87 | 36 |
0.1 | 0.05 | 2 | -138 | 70 | 29 |
0.12 | 0.06 | 2 | -115 | 59 | 24 |
0.14 | 0.07 | 2 | -98 | 50 | 21 |
0.16 | 0.08 | 2 | -86 | 44 | 18 |
0.2 | 0.1 | 2 | -68 | 36 | 15 |
0.24 | 0.12 | 2 | -57 | 30 | 12 |
0.3 | 0.15 | 2 | -45 | 24 | 10 |
0.36 | 0.18 | 2 | -38 | 20 | 9 |
0.42 | 0.21 | 2 | -32 | 17 | 7 |
0.48 | 0.24 | 2 | -28 | 15 | 7 |
0.54 | 0.27 | 2 | -25 | 14 | 6 |
0.6 | 0.3 | 2 | -22 | 12 | 5 |
0.7 | 0.35 | 2 | -19 | 11 | 5 |
0.8 | 0.4 | 2 | -16 | 10 | 4 |
0.9 | 0.45 | 2 | -15 | 9 | 4 |
1 | 0.5 | 2 | -13 | 8 | 4 |
平均利益率0.2、平均損失率0.1、勝率0.4のトレードができるとしたら、年36回のトレードで資産2倍が期待できる。
▼code
def 取引後の資産(勝率, 回数, 利益率, 損失率) 資産 = 1 (勝率 * 回数).to_i.times do 資産 *= 1 + 利益率 end ((1 - 勝率) * 回数).to_i.times do 資産 *= 1 - 損失率 end 資産 end def 期待値(勝率, 利益率, 損失率) 勝率 * 利益率 - (1 - 勝率) * 損失率 end def 将来の資産(勝率, 利益率, 損失率, 回数) (1 + 期待値(勝率, 利益率, 損失率)) ** 回数 end def 資産が2倍になる回数(勝率, 利益率, 損失率) (Math.log(2) / Math.log(1 + 期待値(勝率, 利益率, 損失率))).ceil end benefits = [0.04, 0.06, 0.08, 0.10, 0.12, 0.14, 0.16, 0.20, 0.24, 0.3, 0.36, 0.42, 0.48, 0.54, 0.6, 0.7, 0.8, 0.9, 1] puts "利益率,損失率,ペイオフレシオ,資産(勝率0.3),資産(勝率0.4),資産(勝率0.5)" benefits.each do |利益率| ペイオフレシオ = 2.0 損失率 = 利益率 / ペイオフレシオ 回数 = 10 puts "#{利益率},#{損失率},#{(利益率 / 損失率).to_i},#{取引後の資産(0.3, 回数, 利益率, 損失率).round(3)},#{取引後の資産(0.4, 回数, 利益率, 損失率).round(3)},#{取引後の資産(0.5, 回数, 利益率, 損失率).round(3)}" end puts "利益率,損失率,ペイオフレシオ,期待値(勝率0.3),期待値(勝率0.4),期待値(勝率0.5)" benefits.each do |利益率| ペイオフレシオ = 2.0 損失率 = 利益率 / ペイオフレシオ puts "#{利益率},#{損失率},#{(利益率 / 損失率).to_i},#{期待値(0.3, 利益率, 損失率).round(4)},#{期待値(0.4, 利益率, 損失率).round(4)},#{期待値(0.5, 利益率, 損失率).round(4)}" end puts "利益率,損失率,ペイオフレシオ,資産(勝率0.3),資産(勝率0.4),資産(勝率0.5)" benefits.each do |利益率| ペイオフレシオ = 2.0 損失率 = 利益率 / ペイオフレシオ 回数 = 10 puts "#{利益率},#{損失率},#{(利益率 / 損失率).to_i},#{将来の資産(0.3, 利益率, 損失率, 回数).round(4)},#{将来の資産(0.4, 利益率, 損失率, 回数).round(4)},#{将来の資産(0.5, 利益率, 損失率, 回数).round(4)}" end puts "利益率,損失率,ペイオフレシオ,回数(勝率0.3),回数(勝率0.4),回数(勝率0.5)" benefits.each do |利益率| ペイオフレシオ = 2.0 損失率 = 利益率 / ペイオフレシオ puts "#{利益率},#{損失率},#{(利益率 / 損失率).to_i},#{資産が2倍になる回数(0.3, 利益率, 損失率)},#{資産が2倍になる回数(0.4, 利益率, 損失率)},#{資産が2倍になる回数(0.5, 利益率, 損失率)}" end