「株式トレード 基本と原則」というマーク・ミネルヴィニ著作の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