brassiere blog

本ブログに記載した内容はただの感想文であり、投資行動を推奨するものではありません。

株式トレードにおけるペイオフレシオと勝率とROI

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