我最愛的 "數學公式" 肯定是Ralph Vince提出的最佳化比例(Optimal F)了....
姑且不論她到底適不適合用於金融交易,但在賭局上,她是無庸置疑的"最佳"選擇。最近看了一本書:【"下重注的本事", THE DHANDHO INVESTOR】。其實也是在講這個道理。不管用在金融交易,商業投資..,道理都一樣:尋找低風險,高報酬 的投資方案。是的,低風險跟高報酬並不衝突。21點也是類似概念。
事實上我們在研發交易策略,某種程度就是在把損益向量弄得跟賭局損益"類似",簡單的說就是勝率(WinRate)賠率(Odds)夠穩定,不亂跳! 這樣我們就有辦法把"理論"的最佳化套用在"實務"上。
事實上我們在研發交易策略,某種程度就是在把損益向量弄得跟賭局損益"類似",簡單的說就是勝率(WinRate)賠率(Odds)夠穩定,不亂跳! 這樣我們就有辦法把"理論"的最佳化套用在"實務"上。
至於如何計算最佳化比例? 最近常被朋友問到這個問題,所以我想還是用R來示範好了,很簡單,當然你可以搜尋我過去的文章自行練習撰寫。
Optimal F的概念是,如果你有一組損益向量,例如銅板賭局的(-1,+2),這意味著有50%的機會賠光(-1),有50%的機會賺2倍(+2),假設未來的損益都是從這個向量去取樣(sample)的話,那你的最佳下注比例為何?
有沒有覺得這跟過去大家常在討論的Kelly Criterion很像? 是的,Kelly本來就是Optimal f的一個special case。下面是我關於optimal F的R code。
首先我們一定要有一個損益向量,程式碼裡面用一開始的PL,代表著profit & loss。
if (sum(PL >= 0) == length(PL)) {
OptF = sign(sum(PL))
## 如果全勝(沒賠),則全壓(f=100%)
}else{
BidF = seq(0, 1, 0.01) ##賭0%到100%
TWR = setNames(BidF, BidF) ##設定TWR向量
for (f in BidF){
TWR[[as.character(f)]] =
(prod(1+f*-PL/min(PL)))^(1/length(PL))
}
##上面部分為計算TWR的關鍵,請參考Vince著作
OptF=as.numeric(names(which.max(TWR)))
##取出Optimal f
}
if (OptF!=1){ ##如果不是全壓,畫下面的圖
plot(TWR, type="l", col="red", lwd=2
, main=paste("Optimal f is", OptF*100, "%"))
abline(h=1, col="green", lwd=2)
##各下注比例底下的TWR
}else{ paste("Optimal f is 100%") }
##如果是全壓,show出最佳下注比例為何
我們來看一下最熟悉的銅板賭局:勝率50%,人頭出現賺2倍,數字出現賠光(odds=2)
輸入PL =c(-1,2),得到Optimal F為 25%
再來看更有利可圖的賭局,例如賽馬賭局好了,損益向量為PL=c(-1, -1, 2, 2, 3)
則Optimal f 為43%
如果是一個負期望值德賭局呢? 例如 PL = c(-1, 1, -2)。那Optimal f是 0%,也就是不要賭,因為無利可圖!
上面的 R code,寫給大家玩看看~ 若你對理論有興趣,延伸閱讀~!
http://www.bituzi.com/2015/02/Vince-Optimal-f.html
0 意見:
張貼留言