マルチンゲール戦略を試してみる
30分プログラム、その553。資金管理(ピラミッド法) - komamitsu.logがおもしろかったので、ボクも試してみた。
ボクが試した戦略は、マルチンゲール戦略というやつで
- 1万円掛ける
- 勝ったら、やめる
- 負けたら、掛金を倍にして、再チェレンジ
というもので、(資金が無限にあれば)必ず1万円儲かるという戦略。たしか、中学生のころに算数でホラー (パラドックス事件簿)で読んだ気がする。
必ず儲かる戦略なので、儲けるのに必要な金額を計算してみた。
使い方
*Main> play 3 *Main> play 1 *Main> play 1 *Main> play 1
あれ、意外と少ない資金で儲かるなぁ。たぶん、勝率が5割なのが原因だろう。
ソースコード
import System.Random import Control.Monad.State type Money = Int gamble :: RandomGen g => State g Bool gamble = do g <- get (x,g') <- return $ random g put g' return x martingale :: RandomGen g => Money -> Money -> State g Money martingale bet used = do let used' = used + bet win <- gamble if win then return used' else martingale (2*bet) used' play = do g <- newStdGen return $ fst $ runState (martingale 1 0) g