凱利法則 (Kelly Criterion)
凱利法則 (Kelly Criterion)
http://www.herrold.com/brokerage/kelly.pdf
上面這些過程,都在追尋一件事….
找 優 勢 !!
2017/04 3
何謂優勢?
•丟一枚銅板,人頭贏,數字輸
•勝率50%
•贏了賺2倍,輸了賠光!
•50%*2 + (100%-50%)*(-1) = 0.5 > 0
2017/04 4
“優勢”越大越好嗎?勝率50%,贏了賺2倍,輸了賠光!
勝率50%,贏了賺3倍,輸了賠光!
2017/04 5
關鍵在你的部位!
勝率50%,贏了賺2倍
•每次押總資金的25%勝率50%,贏了賺3倍
•每次押總資金的70%
2017/04 6
凱利法則 --- 50年前的智能交易•凱利(John Larry Kelly, Jr.)無意間發現:
•給定勝率(p)、給定賺賠比 (b) ➔唯一決定最佳下注比例• 凱利公式:[p(1+b)-1]/b
•索普的故事—決戰21點• 1960年代,賭場只提供一副牌
• 舉例來說,當剩餘牌很多10和A,玩家勝算將達到52:48
• 凱利建議下4%比例的資金
2017/04 7
尋找優勢: 賭場(30萬) v.s.
•最好把這方面的技巧用到其他”賭場”• 沒有下注金額限制的賭場
• 玩家擁有更高勝算的賭場
• 莊家態度更文明,樂於接受重大損失
• 賭場不是由黑道份子主持
•選擇權市場• Black-Schole
2017/04 8
尋找優勢: 賭場(30萬) v.s. 金融市場(600萬)
優勢消失
•川普發表了『擊敗莊家』
•世界各地21點賭徒開始效仿
•賭場調整遊戲規則• 增加多副牌
• 透過監視器緊盯可疑玩家
2017/04 9
交易策略失效
未來
過去
找到優勢只是第 1步,更重要的是…
資金管理2017/04 10
做個賭徒模擬實驗就知道….
•勝率50%,賠率為2• 1. 玩40次下注多少比例f會最好?
• 不同下注比例10%,20%,…,60%
• 2. 玩很多次下注多少比例f會最好?• 玩100次、500次、1000次、5000次
•用R語言模擬一下~
• Input:勝率、賠率、下注比例
• Output: 資金成長曲線!
2017/08 11
考慮勝率50%,賠率為2的賭局
2017/08
資金100元
100元
12
考慮勝率50%,賠率為2的賭局
2017/08
資金100元,如果下注20元
80元
20元
13
考慮勝率50%,賠率為2的賭局
2017/08
資金100元,如果下注20元
贏:100*(1+2*20%) 80元
20元
20元
20元
14
考慮勝率50%,賠率為2的賭局
2017/08
資金100元,如果下注20元
贏:100*(1+2*20%) 100元
20元
20元
140元
20元
15
考慮勝率50%,賠率為2的賭局
2017/08
資金100元,如果下注20元
贏:100*(1+2*20%)輸:100*(1-20%)
100元
20元
80元
16
模擬銅板賭局
•勝率50%、賠率2
•dice=sample(c(-1,2),1)
2017/04 17
模擬銅板賭局
• init=1 #初始資金
• pwin=0.5 #勝率
• odds=2 #賠率
• f=0.1 #下注比例
• nbet=100 #賭局次數
• cap=c(init, rep(0,nbet)) #累計資金
2017/04 18
模擬銅板賭局
• for (k in 2:(nbet+1)){
• dice=sample(c(-1,odds),1)
• cap[k]=cap[k-1]*(1+dice*f)
• }
•如果贏: cap[k]=cap[k-1]*(1+odds*f)
•如果輸: cap[k]=cap[k-1]*(1+(-1)*f)
2017/04 19
劃出累計損益圖
• plot(cap,type="l",lwd=2,col="blue",main = paste0("Bid ",f*100,"% ;"
• ," WinRate ",pwin*100,"%;“
• ," Odds ",odds))
• abline(h=1,col="green",lty=2)
2017/04 20
課堂練習:哪個下注比例最好?
•模擬100次、1000次、100000次?
•人工2分法判斷?
2017/04 21
設定機率賠率
• pwin=0.4 #機率
• odds=2 #賠率
• dice=sample(c(-1,odds),prob=c(1-pwin,pwin),1)
2017/04 22
課堂練習
•試判斷勝率43%,賠率1.7的最佳下注比例?
2017/04 23
定義問題!!
•勝率50%,賠率2的賭局
•初始資金100元,玩無限多次•假設人生可以天長地久
•每次決定下注比例f (0% < f < 100%)•假設資金可以無限分割
•問題:f選多少可讓資金成長最快速!2017/08 24
凱利公式推導•勝率為50%,賠率為2的賭局
• 賭1元,輸了賠光,贏了拿回3(=1+2)元。
•假設每次下注為f比例• 如果贏: At= At-1(1+2f)
• 如果輸:At= At-1 (1-f)
•假設在T次的賭局中,一共贏了W次,輸了L次 (W+L=T)• 結論:AT= A1(1+bf)W(1-f)L
• 我們想要最大化AT
• 如果玩無限多次會怎樣?
2017/08 25
求 f 使得 AT= A1(1+bf)W(1-f)L 最大 ?
• Rearranging: 1
𝑇log
𝐴𝑇
𝐴1=
𝑊
𝑇log(1 + 𝑏𝑓) +
𝐿
𝑇log(1 − 𝑓)
• As 𝑇 → ∞, we have 𝑝 log(1 + 𝑏𝑓) + (1 − 𝑝) log(1 − 𝑓)
𝒇 =𝒑 𝟏 + 𝒃 − 𝟏
𝒃• 什麼時候 f=1? (Showhand!)
• 勝率99%,賠率10000的賭局,要你全壓,你賭不賭?
2017/08 26
2017/08 27
設定勝率、賠率、回合數
• #計算最佳下物比例
• pwin=0.5 ##勝率
• b=2 ##贏錢,賭1塊錢淨賺的
• nbet=1 ##回合數
• (Exp=pwin*b1+(1-pwin)*b2) ##計算期望淨利
2017/08 28
計算凱利賭徒損益
• Bid=setNames(seq(0,1,0.01),seq(0,1,0.01))
• for (f in Bid){
• Bid[[as.character(f)]]=((1+f*b)^(pwin*nbet))*((1-f)^((1-pwin)*nbet))
• }
• (OptF=as.numeric(names(Bid)[which(Bid==max(Bid))]))
2017/08 29
畫圖
• plot(Bid,type="l",lwd=2,col="red",xaxt = "n"
• ,xlab="Bidding",ylab="Return",font=2
• ,main=paste0("OptF: ",OptF*100,"%",", WinRate: ",pwin*100,"%",", WinOdd: ",b))
• axis(1,1:length(seq(0,1,0.01)),seq(0,1,0.01),col="black",lwd=2,font=2)
• abline(h=1,lty=2,col="green",lwd=2)
• abline(v=order(Bid)[length(Bid)],lty=2,col="blue",lwd=2)
2017/08 30
“勝率50%,賠率為2” 的賭局
2017/08 31
請注意賠率為2代表最大虧損是100%
如果輸不是賠全部?
•贏:淨賺賭注的0.2倍 ➔賺的賠率 0.2
•輸:竟賠賭注的0.1倍➔輸的賠率 -0.1
• pwin=0.5
• nbet=1
• b1=0.2 ##贏錢,賭1塊錢淨賺的
• b2=-0.1 ##輸錢,賭1塊錢淨賠的
• leverage=abs(1/b2) ##1塊錢的槓桿
2017/08 32
課堂練習:修改後續程式碼劃出凱利損益
• for (f in Bid){
• Bid[[as.character(f)]]=
((1+f*b1)^(pwin*nbet))*((1-f*b2)^((1-pwin)*nbet))
• }
2017/08 33
什麼時候可以用槓桿?賠掉100%OptF=25%
賠掉10%OptF=250%
2017/08 34
賠掉1%OptF=2500%
借錢無罪,融資有理??
•設定好你的停損
•股票10%停損•期貨固定點數停損•期貨資金比例停損
2017/08 35