電子信箱 service [at] bituzi.com
幣圖誌首頁 facebook粉絲團 google plus google plus

交易與賭局的當道投資學: Optimal f 實作!


我最愛的 "數學公式" 肯定是Ralph Vince提出的最佳化比例(Optimal F)了....

姑且不論她到底適不適合用於金融交易,但在賭局上,她是無庸置疑的"最佳"選擇。最近看了一本書:【"下重注的本事", THE DHANDHO INVESTOR】。其實也是在講這個道理。不管用在金融交易,商業投資..,道理都一樣:尋找低風險,高報酬 的投資方案。是的,低風險跟高報酬並不衝突。21點也是類似概念。

事實上我們在研發交易策略,某種程度就是在把損益向量弄得跟賭局損益"類似",簡單的說就是勝率(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。

PL=c(-1,2)                                       ##輸入損益向量

  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 意見: