まえがき
こんにちは、さつま芋です。
ここ何回かのブログ投稿はランダムのシミュレーションを続けています。
私としては、需給が一切関係しないランダムをFXの基礎とすることは意味があると考えています。
色々と試行して感じることですが、確率を感覚で認識することは常人には至難だと思います。
今回もコイン投げで確率を勉強してみます。
連敗の分布
コインのように50%の事象でも裏が続くことは珍しくありませんが、100万回も投げたら20連敗も起こり得ることは以前に紹介した通りです。
コイン投げのシミュレーション結果による確率の雑談 - さつま芋の勉強日記 (hatenablog.com)
毎日100回のトレードを1年250日で40年間続けたら100万回ですから、仕方ないくらいの不運かもしれません。
そこで、1年250日間 毎日100回のトレードを続けた場合を想定し、25000回のコイン投げの結果を棒グラフにしてみました。
ちなみに、裏を負けとしています。
連敗数 |
回数 |
割合 |
1 |
3100 |
12.40% |
2 |
1569 |
6.28% |
3 |
798 |
3.19% |
4 |
439 |
1.76% |
5 |
188 |
0.75% |
6 |
83 |
0.33% |
7 |
60 |
0.24% |
8 |
21 |
0.08% |
9 |
13 |
0.05% |
10 |
7 |
0.03% |
11 |
4 |
0.02% |
12 |
1 |
0.00% |
補足ですが、表の見方には注意してください。
1連敗が12.40%となっているのは、勝っていた状態から1回負けて次は勝った状態ということ0.5×0.5×0.5=0.125ということだと考えられます。
コード
# ランダム種を指定
set.seed(123)
# シミュレーション回数
n <- 25000
# コインの表が出る確率
p <- 0.5
# コインを投げる関数
coin_toss <- function(n) {
# 連続する裏の数
count <- 0
# 裏が出た回数
tails <- 0
# 表が出た回数
heads <- 0
# 連敗数を記録するリスト
losing_streaks <- integer(n)
# 累積和
cumsum <- numeric(n)
for (i in 1:n) {
# コインを投げる
toss <- sample(c("heads", "tails"), 1, prob = c(p, 1-p))
# 裏が出た場合
if (toss == "tails") {
count <- count + 1
tails <- tails + 1
} else {
# 表が出た場合
if (count > 0) {
# 連敗数を記録
losing_streaks[count] <- losing_streaks[count] + 1
}
count <- 0
heads <- heads + 1
}
# 累積和を更新
if(i == 1) {
cumsum[i] <- ifelse(toss == "heads", 1, -1)
} else {
cumsum[i] <- cumsum[i-1] + ifelse(toss == "heads", 1, -1)
}
}
# 表の割合
heads_rate <- heads / (n / 100)
# 折れ線グラフで表示
plot(cumsum, type = "l", xlab = "Number of Tosses", ylab = "Cumulative Sum",
main = "Cumulative Sum with Heads as +1 and Tails as -1")
# 結果を返す
return(list(heads_rate = heads_rate, losing_streaks = losing_streaks, cumsum = cumsum))
}
# 実行
result <- coin_toss(n)
# 結果を表示
cat(sprintf("コインを%d回投げたとき、表が出る割合は%.2f%%です。\n", n, result$heads_rate))
cat("連敗数とその回数:\n")
for (i in 1:length(result$losing_streaks)) {
if (result$losing_streaks[i] > 0) {
cat(sprintf("%d連敗: %d回\n", i, result$losing_streaks[i]))
}
}
# 連敗の割合を計算
losing_streaks_rate <- result$losing_streaks / n * 100
# 結果を表示
cat("連敗数とその割合:\n")
for (i in 1:length(losing_streaks_rate)) {
if (losing_streaks_rate[i] > 0) {
cat(sprintf("%d連敗: %.2f%%\n", i, losing_streaks_rate[i]))
}
}
barplot(result$losing_streaks[result$losing_streaks > 0],
names.arg = which(result$losing_streaks > 0), xlab = "Number of Consecutive Losses",
ylab = "Number of Occurrences", main = "Consecutive Losses in 250000 Coin Tosses")
あとがき
勝率50%でも意外と連敗することが分かります。
図表からは25000投で10連敗以上が複数回起こることも読み取れます。
値幅次第で勝率は変わる上に、一般的には連敗報告なんてしないので、連敗に対する心構えは盲点になりやすいと思います。
とにかく、背水の陣で臨むようなトレードは避けたいと思います。
以上、さつま芋でした。