さつま芋の勉強日記

投機の勉強記録を中心に発信しています。

MENU

マーチンゲール法による資金推移のシミュレーション

 

まえがき

こんにちは、さつま芋です。

 

FXでも有名なロットコントロールマーチンゲール法です。

 

マーチンゲール法とは、負けたら次に倍を賭ける方法です。

 

今回は、コイン投げのシミュレーションで賭け方を変えたときの資金推移を図示してみます。

 

 

条件説明

資金を100万円とし、初期投資額を0.1万円(1000円)にしています。

 

100人が1000投したコイン投げをシミュレーションしました。

 

まず、掛け金を常に一定額0.1万円(1000円)とした場合をFlatとします。

 

次に、マーチンゲール法(Martingale)は負けたら投資額を2倍に増やし、勝ったら初期投資額に戻します。

 

また、パーレー法(Parlay)は勝ったら投資額を2倍に増やし、負ければ初期投資額に戻します。

 

ちなみに、スプレッドなどの手数料は含んでいません。

 

 

シミュレーション結果

それでは資金推移を図示します。

 

 

バラツキは見えないのですが、100人分の資金推移が重なっています。

 

終結果は次の表です。

 

   最小値  第1四分位数  中央値  平均  第3四分位数  最大値
フラット 94.3 98.5 100.6 100.5 102.2 106.9
マーチン 99.1 148.9 150.1 149.1 150.8 153.4
パーレー 47.40 49.48 50.60 50.55 51.52 55.00

 

 

感想

終結果だけ比較すればマーチンゲール法は有利に見えますが、途中のドローダウンを見ると破産している人もいます。

 

他に注意点を挙げると、スプレッドの影響は想像以上に大きいです。

 

スプレッド0.5pips相当の手数料を加味したコイン投げの一例です。

 

 

 

コード

# 必要なパッケージをインストール
if (!require(ggplot2)) install.packages('ggplot2')
if (!require(reshape2)) install.packages('reshape2')

# ランダム種を設定
set.seed(123)

# 初期設定
n <- 1000  # シミュレーションの回数
m <- 100  # 人数
fee <- 0.00
# 結果を保存するためのベクトルを初期化
resultsFlat <- matrix(nrow = n, ncol = m)
resultsMartingale <- matrix(nrow = n, ncol = m)
resultsParlay <- matrix(nrow = n, ncol = m)

# シミュレーション
for (j in 1:m) {
  A_flat <- 100  # 初期の資金
  A_martingale <- 100
  A_parlay <- 100
  a <- 0.1  # 初期の掛け金
  a_martingale <- a  # マーチンゲール法の掛け金
  a_parlay <- a  # パーレー法の掛け金
  resultsFlat[1, j] <- A_flat
  resultsMartingale[1, j] <- A_martingale
  resultsParlay[1, j] <- A_parlay
  for (i in 2:n) {
    if (runif(1) < 0.5) {  # 50%の確率で勝つ
      A_flat <- A_flat + a * (1-fee)
      A_martingale <- A_martingale + a_martingale * (1-fee)
      a_martingale <- a  # 勝った次の掛け金は初期の掛け金に戻す(マーチンゲール法
      A_parlay <- A_parlay + a_parlay * (1-fee)
      a_parlay <- min(a_parlay * 2, Inf)  # 勝った次の掛け金は2倍にする(パーレー法)
    } else {  # 50%の確率で負ける
      A_flat <- A_flat - a * (1+fee)
      A_martingale <- A_martingale - a_martingale * (1+fee)
      a_martingale <- min(a_martingale * 2, Inf)  # 負けた次の掛け金は2倍にする(マーチンゲール法
      A_parlay <- A_parlay - a_parlay * (1+fee)
      a_parlay <- a  # 負けた次の掛け金は初期の掛け金に戻す(パーレー法)
    }
    resultsFlat[i, j] <- A_flat
    resultsMartingale[i, j] <- A_martingale
    resultsParlay[i, j] <- A_parlay
  }
}

summary(resultsFlat[n, ])
summary(resultsMartingale[n, ])
summary(resultsParlay[n, ])

# データフレームに変換
dfFlat <- as.data.frame(resultsFlat)
names(dfFlat) <- paste0("Person", 1:m)
dfFlat$round <- 1:nrow(dfFlat)
dfFlat$method <- "Flat"

dfMartingale <- as.data.frame(resultsMartingale)
names(dfMartingale) <- paste0("Person", 1:m)
dfMartingale$round <- 1:nrow(dfMartingale)
dfMartingale$method <- "Martingale"

dfParlay <- as.data.frame(resultsParlay)
names(dfParlay) <- paste0("Person", 1:m)
dfParlay$round <- 1:nrow(dfParlay)
dfParlay$method <- "Parlay"

# データを準備
df <- rbind(dfFlat, dfMartingale, dfParlay)
df$method <- factor(df$method, levels = c("Flat", "Martingale", "Parlay"))
df_melt <- reshape2::melt(df, id.vars = c("round", "method"))

# グラフを描画
ggplot(df_melt, aes(x = round, y = value, color = variable)) +
  geom_line() +
  facet_wrap(~ method, ncol = 1) +
  labs(x = "Round", y = "Total Money", color = "Person") +
  theme_minimal() +
  ggtitle("Simulation Results") +
  guides(color = "none")  # 色の凡例を非表示にする

 

 

あとがき

Google Colaboratoryというサービスで、オンライン上のプログラミングをすることができます。

 

無料だと制限付きらしいですが、私は不自由なく使えました。

 

付属するColab AIを上手く使えば、スマホだけでプログラミングできそうです。

 

以上、さつま芋でした。

 

このエントリーをはてなブックマークに追加

ブログランキング・にほんブログ村へ

 

 

ブログランキング・にほんブログ村へ
にほんブログ村