號稱「永遠不會輸錢」的馬丁格爾策略
點進來,說明你想贏,那我們直入主題。
所謂「馬丁格爾(Martingale)策略」是在某個賭盤裡,當每次「輸錢」時就以 2 的倍數再增加賭金,直到贏錢為止。
假設在一個公平賭大小的賭盤,開大與開小都是 50% 的概率,所以在任何一個時間點上,我們贏一次的概率是 50%,連贏兩次的概率是 25%,連贏三次的概率 12.5%,連贏四次的概率 6.25%,以此類推。因此,以概率來算,如果連贏四次的概率 6.25%,也就是說連輸四次的概率一樣也只有6.25%。
假設我們有 63 元,按照馬丁格爾策略理論來算的話,63 元的連續虧損如下:
所以只能容許「連續虧損」6 次,概率是:
假如我們玩「押大小」,當我們與莊家對賭 73 次,在某個點「連續虧損 6 次」的概率是 41.7%,演算法為(證明可以跳過不看,不影響閱讀):
同理:
- 當我們押大小 150 次當中有一次會超過「連續虧損 6 次」的概率是 69.2%
- 當我們押大小 250 次當中有一次會超過「連續虧損 6 次」的概率是 85.9%
所以馬丁格爾策略風險相當高,別別別,客官先別走,其實今天介紹的不是馬丁格爾策略,而是「反馬丁格爾策略(Anti-Martingale)」。
「反馬丁格爾(Anti-Martingale)策略」,是在某個賭盤裡,當每次賭金「贏錢」時就以 2 的倍數再增加賭金,若一直贏,就再加倍賭注。(直到某個目標次數,再重新開始)
再假設我們有 63 元,第一次我們都從 1 元開始押注,我們選擇使用「反馬丁格爾策略」,每贏一次賭注都以 2 的倍數遞增。也就是 1,2,4,8,16,32 一直遞增的方式來押注。因此,當我們連押四次都輸錢的概率是 6.25%(前面算過),我們會輸掉 4 元。同樣,同樣的概率下,連贏四次,那我們將會贏得:
所以在「同一個概率點」上,我們會「輸掉 4 元」或「贏得 15 元」,我們看看其他概率點;
- 連贏三次或虧三次的概率是 12.5%,你會「輸掉 3 元」或「贏得 7 元」
- 連贏兩次或虧兩次的概率是 25%,你會「輸掉 2 元」或「贏得 3 元」
是不是有點迷糊,我們一步一步看:
假如目標是連贏四次才會從頭押注(我們稱為一輪),沒到達連贏目標之前輸都算失敗,第一次都從 1 元開始(達到目標前輸掉都會重新從 1 元開始押注)。只贏一次、兩次、三次後輸掉的情況如下:
可以看出:
不管設定贏得目標次數是幾,每次失敗,都是虧損「第一次押注的金額」
繼續以 63 元賭金為例,以「反馬丁格爾策略」的操作方法來操作,你要輸光,就必須讓莊家連開 63 次與你押注相反的盤,這種情況一百萬兆次才會發生一次 ?
有點懵逼?沒關係,我們再通過感性認識去理解一下
想象一下,我們站在一座山丘上,堆了四個雪球(1 元開始押注),我們同一時間將雪球往下推,假設其中三個雪球都在途中被石頭啦、樹木啦撞壞了(此輪失敗),只有一個順利滾到山下(達成目標連贏),那麼它現在已經變得非常的大,可能是當初雪球大小的十倍或百倍大小(獲利)
滾雪球~
有沒有好理解一些?
傳統的「馬丁格爾」以及「反馬丁格爾」策略都是以
為乘積,但是實際上
的遞增操作方式還是風險挺大的,我們可以使
之間,當然在賭場算起來就不方便了 ?
總結一下,這個策略有兩點比較關鍵:
- 趨勢
- 趨勢的長度
分別對應
- 達成目標(連贏)的概率
- 連贏次數的設定
看到這裡是不是有點蠢蠢欲動?筆者也是,所以我用 Python 寫了個小程式
定義一個賭局
引數
-
pocket
:開始玩時兜裡裡的錢 -
pay
:單次賭注
返回:
-
result
:1(贏)或者 0(輸) -
pocket
:玩完一把後兜裡的錢
import random
WIN = 1
LOSE = 0
def gambling_50_percent(pocket, pay):
result = random.randint(0, 1)
if result == WIN:
pocket += pay
else:
pocket -= pay
return result, pocket
註解:贏了會贏押注相同的錢,輸了賭注被莊家收走
定義一輪遊戲
引數解釋:
-
win_time_to_stop
:目標連贏次數 -
pocket
:錢包裡面的錢 -
pay
:單次賭注 -
n
:押注遞增係數
def play_a_round(win_time_to_stop, pocket, pay, n):
money_when_start = pocket
root_pay = pay
for i in xrange(win_time_to_stop):
win_or_lose, pocket = gambling_50_percent(pocket, pay)
if win_or_lose == WIN:
pay *= n
else:
pay = root_pay
break
print pocket, pay
return pocket - money_when_start, pocket > money_when_start
註解:此方法是模擬一輪(win_time_to_stop
次)遊戲,只有兩種結果,即:
- 達到「目標連贏次數」
- 未達到「目標連贏次數」
迴圈中,如果輸一次,那麼直接跳出迴圈,結束此輪;沒輸就繼續玩直到「目標連贏次數」,最終返回金額變動(pocket - money_when_start
)和輸贏結果(pocket > money_when_start
)
玩幾把
兜裡:63 元
首次賭注:1 元
押注遞增係數:2 倍
目標連贏次數:4 次
連輸 10 輪
根據我們前文的分析,每輸一輪,只會虧損「第一次押注的金額」
十個雪球全部滾失敗,損失:
元(這種情況比較常見 ?)
一個雪球滾成功啦
一個雪球滾成功,獲利:
九個雪球滾失敗,損失:
最終結果:
,符合計算結果
兩個雪球,不可思議!
兩個雪球滾成功,獲利:
八個雪球滾失敗,損失:
最終結果:
,符合計算結果
完整原始碼:
https://gist.github.com/tmpbook/957a41aee344789a67a7e8201c4ae617