Python

【Python】必勝法 マーチンゲール法で稼げるか検証してみた

ギャンブルにおけるマーチンゲール法って、皆さんご存じですか?理論上負けないとも、必勝法とも言われている有名な手法です。

 

マーチンゲール法を使ったら儲かるのか?気になったので、Pythonでコードを書き、シミュレートしてみました。

 

マーチンゲール法とは?

マーチンゲール法とはギャンブルの資金管理術の1つで、たとえ何連敗していても、1回勝てば、連敗した時の損失をすべて取り返せるというものです。

 

マーチンゲール法の手順

  1. 勝ってる間は掛け金を変えない
  2. 負けたら掛け金を2倍にする
  3. 連敗中に勝ったら掛け金をリセットする

 

 

マーチンゲール法の条件設定とPythonの環境

マーチンゲール法の条件設定

勝率: 47.5%
資金: 1000
掛け金: 1

 

Pythonの実行環境

Pythonの実行環境

OS: Windows10 64bit
Python: 3.9.6
matplotlib: 3.4.3

以上の条件でマーチンゲール法を使った場合、どの位稼げるのか検証してきます。

 

 

マーチンゲール法をPythonで記述したコード

ソースコードがずれて表示されていますが、コピペには問題ありません。

from random import randint
import matplotlib.pyplot as plt # グラフを書くライブラリ
import matplotlib.ticker as ticker

def martingale(balance, times, initial_bet=1, lose_cut_times=None):
    """
    martingale(残高, 回数, 掛け金, 損切りする回数を設定)
    """
    serial_loss = 0 # 連敗数
    bet = initial_bet
    
    global bankrupcy
    
    x = []
    y = []
    
    for i in range(1, times+1):
        if balance < bet: # 破産
            # グラフの数値を追加
            x.append(i)
            y.append(balance)
            bankrupcy += 1
            break

            
        balance -= bet
        result = randint(0, 10000)

        if result >= 5250:# 勝ち
            balance += (bet*2)
            bet = initial_bet
            serial_loss = 0

        else:# 負け
            serial_loss += 1 
            bet *= 2
            
            # 一定回数の連敗でリセット
            if lose_cut_times and serial_loss == lose_cut_times:
                bet = initial_bet
                
#         グラフの数値を追加
        x.append(i)
        y.append(balance)

#   グラフの出力
    plt.plot(x, y)
    plt.xlabel("times")# x軸の名前
#     # X軸の数字をオフセット表示を無効化
    plt.gca().get_yaxis().get_major_formatter().set_useOffset(False)
    plt.ylabel("balance")# y軸の名前
    plt.show()
    

if __name__ == "__main__":
    bankrupcy = 0
    trials = 1
    for j in range(trials):
        martingale(10000, 1000)
        
    print(f'{trials}回中、破産{bankrupcy}回')

今回はFreeBitcoinのハイローでマーチンゲール法を使った時を想定してプログラムを記述しました。

 

FreeBitcoin(フリービットコイン)とは、ビットコインが無料でもらえるフォーセットサイトです。
1時間に1回ルーレットを回すと最大200ドル分のビットコインを受け取れます。

>>【完全無料】1時間に1回ビットコインを稼ぐ!~FreeBitcoin(フリービットコイン)~

 

0から10,000の中からランダムで数字を生成し、数字が5250以上の時を勝ちとします。

balance -= bet
result = randint(0, 10000) # 0から10,000の中からランダムに生成

if result >= 5250:# 勝ち
    bet = initial_bet # 掛け金のリセット
    serial_loss = 0

else:# 負け
    bet *= 2 # 掛け金を2倍

 

処理の最後に資金の増減確認のため、matplotlibというグラフ描画ライブラリを使ってグラフを出力します。

import matplotlib.pyplot as plt # グラフを書くライブラリ
import matplotlib.ticker as ticker

 

Pythonでマーチンゲール法をシミュレートしてみた結果

試行回数100回

[1回目]

1000の資金でマーチンゲール法を100回した結果、1050まで増えた

 

試行回数1,000回

[2回目]

1000の資金でマーチンゲール法を1,000回した結果1,500にまで増えた

 

試行回数10,000回

[3回目]

1000の資金でマーチンゲール法を10,000回した結果、破産

 

実行してみると試行回数が多ければ多いほど、順調に資金が多くなっていきますね。
途中で負けがあっても掛け金を増やすことで見事に損失を取り戻しており、マーチンゲール法の良さがでています。

しかし3度目のシミュレーションでは、途中の連敗に耐えきれなくなり破産してしまいました。

 

 

マーチンゲール法の危険性

必勝法なんて言われているマーチンゲール法ですが、確かに破産する人はいます。

なぜ破産するのか、それは上で破産したシミュレーションの通り、連敗の途中で資金が耐えきれなくなるかです。
ベット数が倍々で増えていくこの手法の性質上、連敗が続くほど掛け金は膨れ上がっていきます

 

 

勝率50%で10連敗したときの掛け金と起こる確率

連敗数

掛け金

合計損失

起こる確率

1連敗

¥100

¥100

50.00%

2連敗

¥200

¥300

25.00%

3連敗

¥400

¥700

12.50%

4連敗

¥800

¥1,500

6.25%

5連敗

¥1,600

¥3,100

3.13%

6連敗

¥3,200

¥6,300

1.56%

7連敗

¥6,400

¥12,700

0.78%

8連敗

¥12,800

¥25,500

0.39%

9連敗

¥25,600

¥51,100

0.20%

10連敗

¥51,200

¥102,300

0.10%

仮に10万円の資金掛け金100円マーチンゲール法を行ったとき、10連敗、合計:102,300円の損失で破産しゲームが続行できなくなります。

 

10連敗は確率上では0.1%ですが油断してはいけません。
実際に、1913年にモナコのカジノでルーレットの「黒」が26連続出たという記録があります。

この時、掛け金100円で26連敗したとして計算すると、なんと67億円の損失にものぼります。確率は6660万分の1こんな低い確率でも実際に起こり得るのです。

 

 

破産のリスクを減らすために検証してみる

  • 所持金を増やす
  • 一定回数でリセット

 

ここからはどうしたらマーチンゲール法の破産のリスクを減らせるのか、検証していきます。
簡単に行える方法として、上の2つの方法を試していきます。

 

検証で得られた結果はあくまで確率で起こったこと。この条件でやった場合に同じ結果になるわけではないことに注意してください。
あくまで目安として捉えてください。

 

破産のリスクの比較は各シミュレーションを100セットを行い、100セット中に破産した回数で判断していきます。

ちなみに上の条件(試行回数1,000回)でやった時は100回中、52回破産になりました。

 

資金を増やしてみる

資金を増やしたらどうなるか?
単純に考えると多ければ多いほど破産しにくくなるはずですが。どうなるでしょうか。

資金を先ほど試したときより10倍と100倍多くした、1万10万で検証していきます。

 

1万の資金で検証した場合

10,000の資金でマーチンゲール法を1000回 

10,000の資金でマーチンゲール法を1000回

1万:1,000回  100回中8回破産

 

 

10万の資金で検証した場合

100000の資金でマーチンゲール法を1000回

100,000の資金でマーチンゲール法を1000回

10万:1,000回  100回中1回破産

 

結果は予想通り、資金は多ければ多くなるほど如実に破産する回数が減っています。

 

一定回数でリセットしてみる

負けが一定回数続いた時に、損切り、つまり掛け金のリセットを行い、破産のリスクを減らせるか検証していきます。
途中で損切りをすることで損失を抑え、より長く生き残れるようにするというわけです。

損切りは、8回連続(0.39%の確率)で負けたときに行います。普通に考えて0.39%を引くのは相当運が悪いということですから、8連敗したら潔く諦めるといった感じです。

 

1万の資金、損切りありで検証した場合

10000の資金損切りありで1000回

10000の資金損切りありで1000回

1万:損切りあり1,000回 100回中0回破産

 

10万の資金、損切りありで検証した場合

100,000の資金損切りありで1000回

100,000の資金損切りありで1000回

10万損切りあり:1,000回  100回中0回破産

グラフで見ると連敗が続いた時に損切りを行っており、うまく破産させずに最後まで完走できてるようですが、損切りが続いた結果、元の資金より減った状態で終わるようにもなっていますね。

 

 

検証のまとめ

 

100回中破産した回数

100回

1,000回

10,000回

通常(所持金1000)

14

52

94

1万に増やす

1

8

69

10万に増やす

0

1

12

8連敗でリセット
(所持金1万)

0

0

3

8連敗でリセット
(所持金10万)

0

0

1

 

検証の結果、所持金が多い且つ、損切りをすると一気に破産リスクが低くなりました。
ただ、損切りを行うと破産リスクは一気に下がりますが、その分、資金マイナスになってしまうという欠点も出てきました。

 

 

まとめ:Pythonでマーチンゲール法で稼げるか検証してみた

まとめ

  • 資金が少ない状態でマーチンゲール法をやると破産のリスクが高い
  • 資金:掛け金 の比がを10,000:1になると破産のする確率がぐっと低くなる
  • 損切りを行うと資金がマイナスになることがあるが、生き残りやすくなる

今回は必勝法といわれているマーチンゲール法Pythonでシミュレートしました。

このマーチンゲール法は「一度でも勝てば損失をチャラにできる」というとても魅力ある手法ですが検証の結果、そのままこの手法をやると破産する危険性が高いとわかりました。

 

スポンサーリンク

  • この記事を書いた人

Harumachi

現在絶賛引きこもりニートのハルマチです。 家から一歩出ずに暮らしていきたいと思っている。 引きこもりながら稼ぐ方法や生活の質を高める情報を投稿予定。 よろしくお願いします!

-Python
-

Copyright © ハルマチのブログ All Rights Reserved.