勝率とリスクリワードレシオの範囲で期待値を計算した表を作ってみました。
期待値の表
期待値が 0%
以下のところを赤くしてみました。
期待値が 20~30%
のところを青くしてみました。
20~30%
にしてみた根拠は、次の「システムトレード基本と原則」の引用の通りです。
期待値
非現実的な期待をすることは勝つことしか考えられないことに匹敵する不幸だ。 両者が重なると感情は混乱する。 例えば、大金を稼ぐことを期待しているのなら、ほぼ間違いなくトレーディングは破綻する。 成功すを続けるために最も重要なことは、控えめな期待をすることだ。 20~30%のリターンは50%以上のリターンよりもはるかに達成しやすく、それを目指すのは難しくない。 ほとんどの人が負けるのは望みが高すぎるからだ。 それは古き良き時代の強欲であり、非現実的な期待だ。
世界の株式市場における収益は、過去20年で年平均8~12%だったようだ。 おそらくあなたはリスク資産でこれ以上のリターンを得たいだろう。 あなたが12カ月先まで時計を動かして結果を振り返ることができるなら、リスク資産に対するリターンが何パーセントなら満足だろうか? 20%か30%だろうか? 私は自分のリスク資産に対して年率20%台のリターンしか望まない。 私にとって、それは無理なく達成できる数字だ。 難しいのは一貫してそれを達成することだ。
システムトレード 基本と原則(ウィザードブックシリーズ) : ブレント・ペンフォールド
期待値がマイナスではいけないですし、非現実的な期待をすることもいけないです。
が、20~30%
っていうような現実的な期待値の範囲はあまり多くはないものだと認識しました。
期待値の%の意味するところは、以前の記事(期待値の計算)にも書きましたが、例えば、期待値が20%だとして、100万円の資金があったとしたら、20万円の利益が期待できるということです。
この表を見ていたら気づいたんですけど、縦の関係は、勝率が10%の場合は、リスクリワードレシオが0.1増えるごとに期待値が1%ずつ増えています。 勝率が20%の場合は、リスクリワードレシオが0.1増えるごとに期待値が2%ずつ増えています。 同じように勝率が90%の場合は、リスクリワードレシオが0.1増えるごとに期待値が9%ずつ増えています。
それから、横の関係は、リスクリワードレシオが0.1の場合は、勝率が10%ずつ上がるごとに期待値が11%ずつ増えています。 リスクリワードレシオが0.2の場合は、勝率が10%ずつ上がるごとに期待値が12%ずつ増えています。 リスクリワードレシオが1の場合は、勝率が10%ずつ上がるごとに期待値が20%ずつ増えています。 リスクリワードレシオが2の場合は、勝率が10%ずつ上がるごとに期待値が30%ずつ増えています。 リスクリワードレシオが3の場合は、勝率が10%ずつ上がるごとに期待値が40%ずつ増えています。 同じようにリスクリワードレシオが10の場合は、勝率が10%ずつ上がるごとに期待値が110%ずつ増えています。
計算式から見たら当然の結果か・・
ソース
ソースはこちらです。
ReactのComponentを3つにしてみましたが、少しまとまりがない感じになってしまいました・・
期待値の計算はconst calculateE
, const P
, const R
, const E
の6行で終わっているのでスッキリできたかなと思っています。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>期待値の表</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.38/browser.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.min.js"></script>
<style>
table, tr, th, td {
border-color: #dddddd;
border-style: solid;
border-width: thin;
}
table {
border-collapse: collapse;
}
th {
text-align: center;
}
td {
text-align: right;
}
</style>
</head>
<body>
<div id="calculation"></div>
<script type="text/babel">
const style = {
table: {
width: "100%"
},
th: {
width: "10%"
},
red: {
backgroundColor: "lightpink"
},
blue: {
backgroundColor: "paleturquoise"
},
small: {
fontSize: "small"
}
};
class Row extends React.Component {
constructor(props) {
super(props);
}
render() {
const nodes = this.props.e.map(v => {
const round = Math.round(v * 100);
const s = (round <= 0) ? style.red : (20 <= round && round <= 30) ? style.blue : {};
return (
<td style={ s }>
{ round }%
</td>
);
});
return (
<tr>
<th>{ this.props.r.toFixed(1) }</th>
{ nodes }
</tr>
);
}
};
class Table extends React.Component {
constructor(props) {
super(props);
}
render() {
const heads = this.props.P.map(v => {
return (
<th style={ style.th }>
{ (v * 100).toFixed(0) }%
</th>
);
});
const nodes = this.props.E.map((currentVaule, index, array) => {
return (
<Row r={ this.props.R.get(index) } e={ currentVaule } />
);
});
return (
<table style={ style.table }>
<caption>期待値</caption>
<thead>
<tr>
<th style={ style.th }>R\P</th>
{ heads }
</tr>
</thead>
<tbody>
{ nodes }
</tbody>
</table>
);
}
};
class Calculation extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<div>
<Table P={ this.props.P } R={ this.props.R } E={ this.props.E } />
<span style={ style.small }>P: 勝率, R: リスクリワードレシオ</span>
</div>
);
}
};
const calculateE = (P, R) => (P * (R) - (1 - P) * (1));
const P = Immutable.Range(0.1, 1, 0.1);
const R = Immutable.Range(0.1, 2, 0.1)
.concat(Immutable.Range(2, 10, 0.5))
.concat(Immutable.Range(10, 55, 5));
const E = R.map(R => P.map(P => calculateE(P, R)));
const mount = ReactDOM.render(
<Calculation P={ P } R={ R } E={ E } />,
document.getElementById('calculation')
);
</script>
</body>
</html>