ウィナーズ投資法のシミュレーション(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法に似ている。だが、数列の消え方が異なる。2in1法やモンテカルロ法は、勝った時に、負けていた2回分の損失を取り返す手法なので、勝った時は数列の数字を2つ消すが、ウィナーズ投資法は1つしか消さない。

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

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

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

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

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

ウィナーズ投資法の検証

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

言語はC++で作った

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

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

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

 

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

マーチンゲール法(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/ lose win0-lose2 勝敗差-2 手持ちのお金は998.000000
3回目 賭け金は2.000000 数列:1/1/ win win1-lose2 勝敗差-1 手持ちのお金は1000.000000
4回目 賭け金は2.000000 数列:1/ lose win1-lose3 勝敗差-2 手持ちのお金は998.000000
5回目 賭け金は2.000000 数列:1/2/ win win2-lose3 勝敗差-1 手持ちのお金は1000.000000
6回目 賭け金は2.000000 数列:2/ win win3-lose3 勝敗差0 手持ちのお金は1002.000000 数列リセット
7回目 賭け金は1.000000 数列: win win1-lose0 勝敗差1 手持ちのお金は1003.000000 数列リセット
(省略)
217回目 賭け金は128.000000 数列:64/64/64/64/64/64/64/64/64/64/64/128/128/128/128/128/128/128/128/128/128/128/ lose win67-lose90 勝敗差-13
手持ちのお金は192.000000
218回目 賭け金は128.000000 数列:64/64/64/64/64/64/64/64/64/64/64/128/128/128/128/128/128/128/128/128/128/128/128/ lose win67-lose91 勝敗差-14
手持ちのお金は64.000000
次の勝負に必要な金額は128.000000です。218回目でゲームを終了します

※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)は303.447940
破たんする直前で持っているお金の期待値(m_exp)は702.792100
破たんした時の勝負差の期待値は-0.098800

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

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

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

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

まとめ

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

関連記事

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

無料体験レッスンあり。マンツーマン形式で初心者向け。
  • このエントリーをはてなブックマークに追加

スポンサーリンク

コメント

コメントを残す

*

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