ウィナーズ投資法のシミュレーション(c++)

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

スポンサーリンク

※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~

目次

はじめに

※目次用の記事:ギャンブルの賭け方の種類をまとめてみた

この記事では、ウィナーズ投資法の紹介と、そのシミュレーション結果を示す

ウィナーズ投資法とは

最小の賭け金額(例えば1)を自分で設定しておく
負けた時に賭けた金額を覚えておくための数列を用意する
※最初は、勝負が始まっていないので数列の中身は空と考える。数列:{}

勝負の最初の賭け金額は1とする

負けた場合

1回目負けた場合、数列の右側に数字の1を加える。数列:{1}

2回目の勝負のかけ金額も1とする
2回目も負けた場合(2連敗)、数列の右側に数字の1を加える。数列:{1,1}

3回目以降の賭け金額は(数列の左端)×2を使う。
負けた場合は、数列の右側に、賭けた金額を加える。
例えば、3回目も負けた場合、数列:{1,1,2}

勝った場合:
数列の左端の数字を1つ消す。
賭け金額は、負けた時と同様で、(数列の左端)×2を使う

数列の数字が全部なくなった場合は、再び、賭け金額を1からスタートする。

ウィナーズ投資法の具体例

ルールだけ、説明してもイメージがつかめないと思うので、具体例を挙げる。

勝負 数列(前) 賭け金 勝敗 数列(後) 収支
1 {空} 1 × 1 -1
2 1 1 × 1,1 -2
3 1,1 2 × 1,1,2 -4
4 1,1,2 2 × 1,1,2,2 -6
5 1,1,2,2 2 1,1,2,2 -4
6 1,2,2 2 1,2,2 -2
7 2,2 4 2,2 2
8 2 4 × 2,4 -2
9 2,4 4 2,4 2
10 4 8 × 4,8 -6
11 4,8 8 4,8 2
12 8 16 8 18
  合計賭け金額 54      

 

ウィナーズ投資法の特徴

  • 負けの数と勝ちの数が等しくなる時、数列がなくなる

数列を使うという観点で、2in1法やモンテカルロ法に似ている。だが、数列の消え方が異なる。2in1法やモンテカルロ法は、勝った時に、負けていた2回分の損失を取り返す手法なので、勝った時は数列の数字を2つ消すが、ウィナーズ投資法は1つしか消さない。

モンテカルロや2in1と比べて、数列の消え方が緩やかなので、いつまでたっても決着がつかず、ズルズルと賭ける金額が膨らむ危険性が高い。

左端の2倍の数字を賭けているということは、勝った時は、以前負けた時の2倍のお金が手元に入るということ。

  • (賭けで得た金額)=(賭けで失った金額)×2

※数列がリセットされた直後に勝った場合や、数列がリセットされた直後一度負けてすぐに勝った場合は、この式が当てはまらない。すぐ勝った場合は収支:+1。一度負けてすぐに勝った場合は、±0。

※具体例からもこの式を理解することができる。(賭けで得た金額)+(賭けで失った金額)に対応する、賭けた金額の合計が54。(賭けで得た金額)-(賭けで失った金額)に対応する、最終的な収支が+18。54が18のピッタリ3倍になることから、この式が正しいことがわかる。

ウィナーズ投資法の検証

以下では2種類のプログラムを紹介する。

言語はC++で作った

※C言語としてコンパイルしても動かない

※このプログラムを組んだ人間は、大学時代に少しプログラムをかじった程度の戦闘能力しかない

※2017年10月追記

以下のプログラムを見返したら、ミスがあることおに気づきました。

勝った時のm_betの値を変更するという処理がすっかり抜けている。

時間がある時に修正する予定(修正完了)

ウィナーズ投資法の個別シミュレーション

 

プログラムで使用している変数の説明

マーチンゲール法(2倍賭け)の破綻までのシミュレーションで紹介したプログラムと同じ変数の置き方をしている

i_max:勝負の回数
w:賭けたお金の戻る倍率を指定。ここでは2倍を指定
p:勝率を指定。ここでは1/2の確率なので50を指定。

m_min:かけ金を指定
m_ini:最初の資金を指定

※ここではm_min=1でm_ini=1000と、最小の賭け金の1000倍を所持していると考えている。

例えば、最小の賭け金が1000円(千円)だとするなら、手元の軍資金は、1000000円(百万円)。割と現実的な設定だと思われる。

r:乱数(0~100の乱数)

※乱数rが勝率pより下の数で収まるなら勝ちの判定がでる。

そして、勝負を続けていくうちに、負け続けることもあるだろう。
そしてついに、賭けしようにも手持ちのお金が足りなくなるかもしれない。
この場合、これ以上勝負ができなくなり、プログラムは終了する。(破綻判定)

つまり、借金はNG

c:トータルの勝ち負けの差がどのくらいあるか調べる用

実際にプログラムを走らせると以下のような結果となる
勝負回数i_maxは100000(10万回)までとする

#倍率は2.000000              勝率は50.000000              最小の賭け金は1.000000  手持ちのお金は1000.000000
1回目    賭け金は1.000000            数列:    lose        win0-lose1           勝敗差-1              手持ちのお金は999.000000
2回目    賭け金は1.000000            数列:1/ win        win1-lose1           勝敗差0 手持ちのお金は1000.000000
3回目    賭け金は1.000000            数列:    win        数列リセッ           win0-lose0           勝敗差1 手持ちのお金は1001.000000
(省略)
180回目 賭け金は64.000000 数列:64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/
win win65-lose90 勝敗差-20 手持ちのお金は480.000000
181回目 賭け金は64.000000 数列:64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/
lose win65-lose91 勝敗差-21 手持ちのお金は416.000000
182回目 賭け金は128.000000 数列:64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/
lose win65-lose92 勝敗差-22 手持ちのお金は288.000000
183回目 賭け金は128.000000 数列:64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/128/ lose win65-lose93 勝敗差-23 手持ちのお金は160.000000
184回目 賭け金は128.000000 数列:64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/64/128/128/ lose win65-lose94 勝敗差-24 手持ちのお金は32.000000
次の勝負に必要な金額は128.000000です。184回目でゲームを終了します

※srand((unsigned)time(NULL));の部分で時間を参照した上で乱数を発生させている。そのため、実行するタイミングで結果が変化する。

ウィナーズ投資法の期待値シミュレーション

 

プログラムで使用している変数の説明

b_pro:破綻率
※ここでいう破綻率とは手持ちのお金が、賭けに耐えられない状況を意味する。借金してお金を用意することはできないとする。

i_exp: 破綻するまで何回勝負ができるかの期待値
m_exp: 勝負が終わった段階で持っているお金の期待値
k_max:試行回数。
※k_maxを大きくすればするほど、正確な期待値が求まる。

c_exp:勝敗差の期待値

以下では、k_max=100000、i_max=100000で指定。
試行回数10万回、勝負回数10万回。

結果は以下のようになった

勝負回数は100000
試行回数は100000
破たん回数は100000
破たん率は100.000000%
破たんするまでに行える勝負回数の期待値(i_exp)は208.805930
破たんする直前で持っているお金の期待値(m_exp)は745.977420
破たんした時の勝負差の期待値は-0.109150

破綻率が100%で、破たんするまでに行える勝負回数の期待値(i_exp)は208回。かなり早いスピードで資金が枯渇している。マーチンゲール法(2倍)よりも早い。

ウィナーズ投資法と同じくらいで破たんする手法は、マーチンゲール法(3倍)である。今までの負けを帳消しした上で、負ければ負けた分だけ、利益を出そうとする観点では似ている。

また、最初にあったお金である1000から700程度まで減っている。つまり損する可能性がある。

この理由ははっきりわかっていないが、おそらく数列の数字の増え方はそこまで激しくないので、徐々に資金が削られていくからだろう。

まとめ

  • ウィナーズ投資法は、損する危険性がある
  • 勝ちの数と負けの数が等しくなる時、利益を出す

書籍の紹介

ギャンブルの必勝法が本当に儲かるかプログラミングで検証してみた』は以下の疑問にお答えします。

●勝率が50%の場合、利益を生み出す必勝法は存在するか?
●勝率が60%の場合、どのように賭けるのが最適か?

必勝法と思われている手法を15種類紹介します。必勝法には、例えば、マーチンゲール法(負けた時に2倍賭ける手法)などがあります。これらの手法が本当に儲かるかプログラミングを使用して検証します。また、検証するために必要なプログラミングの知識(C#)も紹介しています。

ギャンブルの必勝法が本当に儲かるかプログラミングで検証してみた

関連記事

※目次用の記事:ギャンブルの賭け方の種類をまとめてみた

~プログラミングを勉強してみませんか?~

TechAcademy [テックアカデミー] 無料の体験講座が用意されているので、気軽に体験できます。

※私(サイト主)も無料体験講座を実際に受けてみました(→感想)

     

コメント

  1. Bisc より:

    はじめまして!

    Amazonの書籍とこの記事を拝見して一点質問があるのですが、
    ウィナーズ投資法の試行のうち、破たんする前に最も利益が
    伸びた試行回の勝負回数と最大利益額はいくらになりましたか?

    私もウィナーズ投資法をシミュレーションしたのですが、
    一回だけ勝負回数29,702、最大利益251,146ドルまでいき、
    その後破綻しました。

    ※資金1,000ドル、1ユニット1ドルでやりました。

    100%破綻する投資法とのことですが、破綻する前の最大値が
    気になり質問させて頂きました。

    1. kaen より:

      コメントありがとうございます。

      >破たんする前に最も利益が伸びた試行回の勝負回数と最大利益額はいくらになりましたか?

      問題の設定によって、答えは変わります。

      理論上、無限の試行回数をこなせば、最大利益額も無限に増えていきます。
      有限の試行回数で、有限の勝負回数ならば、最大利益額も有限に落ち着きます。
      勝負回数を一定にして、試行回数を可能な限り大きくした場合、最大利益額は、一定の勝負回数で実現しうる最大利益になります(ウィナーズ投資法の場合、連勝した時が最大利益になるとは限りません)。
      例えば、勝負回数は10回にして、試行回数を10000回にすれば、ほぼ全てのパターンを網羅することができることをイメージしてください。

      1. Bisc より:

        ご返信ありがとうございます。

        この記事のシミュレーション、勝負回数100,000回、
        試行回数100,000回の場合だと、結果としては
        この回数設定で破綻する前に出せる理論上最大の勝負回数・
        利益の近似値が出ましたでしょうか?

        また、記事内にある”勝負回数の期待値”というのはどのような
        計算式で算出していますか?

        例えば下記のような設定の場合、

        勝負回数10,000回
        試行回数   3回

        ■結果
        試行A:破綻直前の勝負回数  20
        試行B:    〃      50
        試行C:    〃     200

        ■平均勝負回数
        (20+50+200)/3=90回

        ↑のような単純な平均回数とは異なる計算式で算出しているのでしょうか。

        長々と申し訳ないのですが、よろしくお願い致します。

        1. kaen より:

          コメントありがとうございます。

          >この記事のシミュレーション、勝負回数100,000回、
          >試行回数100,000回の場合だと、結果としては
          >この回数設定で破綻する前に出せる理論上最大の勝負回数・
          >利益の近似値が出ましたでしょうか?

          申し訳ございませんが、この質問に対する回答は本書のサポートの範囲を超えているので、対応いたしません。
          本書で紹介したプログラムを改造すれば、計算できると思いますので、ご自身でご確認ください。

          >勝負回数の期待値”というのはどのような計算式で算出していますか?
          単純な平均回数で算出しています。
          (記載されている認識で間違いないです。)

Bisc へ返信する コメントをキャンセル

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)