本文出處:http://www.cnblogs.com/wy123/p/6970721.html 免責聲明: 本文僅供娛樂,從足彩的勝平負觀點出發來分析如何投註來實現收益的“最穩妥”,^O^ 本文不對任何足彩勝平負實際投資組合有任何指導建議,不對任何投資有任何責任。 勝平負的介紹以及組合方案押註 閱 ...
本文出處:http://www.cnblogs.com/wy123/p/6970721.html
免責聲明:
本文僅供娛樂,從足彩的勝平負觀點出發來分析如何投註來實現收益的“最穩妥”,^O^
本文不對任何足彩勝平負實際投資組合有任何指導建議,不對任何投資有任何責任。
勝平負的介紹以及組合方案押註
閱讀本位需要一點最基本的足球知識。^O^
勝平負的特點是基於單場比賽的結果來說的,以(在自己家門口作戰的)主隊來說的勝,平,負,特點是區別於組合N場比賽的結果的合集
本文著重說明“單場比賽的投資組合”,也就是說有三個前提,
第一,單場比賽,
第二,投資金額固定
第三,有大於一種備選方案的情況
滿足這個三個條件的情況下,如何根據賠率實現收益的最大化。
舉個實際的例子,
參考下圖,2018年世界盃預選賽歐洲賽區2017-06-09 06-10 02:45的瑞典主場對陣法國的比賽。
主隊的獲勝的賠率是5.25,平局的賠率是3.50,主隊負的賠率是1.53。
對於當前這場比賽來說,比如說準備拿出來50塊錢押註在這場比賽上,
就滿足上面的第一個條件,單場比賽,同時滿足條件二,固定投資金額
比如這裡看好法國隊,為了穩妥起見,對於該場比賽可以押註為平局或者主隊(瑞典)負兩種情況,也即押註為法國隊不敗(平或者勝)。
這裡所說的押註方案就滿足條件三,大於一種投資方案。
在假定賠率不變的情況下,備選的兩種方案,準備用50塊錢投資的時候,怎麼根據賠率,來算出來最大化的收集
比如方案1是平局押30主隊負押20,方案2是平局押30主隊負押20。
如果最終的結果是主隊勝,正常來說,這種可能性最小,押註的兩種情況全錯,收益為0,
如果最終的結果是兩隊平,這種可能性一般,方案1的收益為3.50*20 = 70,方案2收益為3.50*30 = 105
如果最終的結果是主隊負,這種可能性較高,方案1的收益為1.53*20 = 30.60,方案2收益為1.53*30 = 45.90
可見超過一種押註方案的情況下,不同的組合方案,在面對不同結果的時候的收益是不同的。
高收益必然要面對高風險,比如直接去押註瑞典戰勝法國,收益的可能性很高,但是押中的概率較低。
這裡如果需要穩妥的話,必然要損失潛在的收益,最穩妥的就是不管賺多少,押中賺錢即可,
那麼在所選的情況當中,如何分配押註金額,才能做到相對上的“最穩妥”,也就是說儘可能的保證去賺錢,而不算賺多少
T-SQL實現最穩妥的投資組合
簡單用T-SQL實現一下
如下圖,藉助cte的遞歸功能,這裡投資本場比賽的金額為50元,計算出來所有可能存在的投資組合
如下就是在當前條件下,如果選擇主隊平或者主隊負的情況下,所有投資組合的可能性
在上述結果的基礎上,如下是不同投資組合在對應的賠率的基礎之上的收益情況,
對於所選的結果,兩者是互斥的,非此即彼,不同組合的風險與潛在收益都是不同的,
比如第1種組合,壓平局的為0元,押主隊負的為50元,最差的結果是兩隊平,此時收益為0,虧損50塊錢
比如第2種組合,壓平局的為2元,押主隊負的為48元,最差的結果是兩隊平,此時收益為7,虧損43塊錢
隨著押註平局的金額增大,押註主隊負的金額減少,最差的結果將會變為壓平局的為50元,押主隊負的為0元,主隊負,收益為0,虧損50元。
但是會有一種比較理想的情況,壓平局的為16元,押主隊負的為34元,此時不管發生平局或者是主隊負,都“有利可圖”。
在以上所有投資組合中的收益的大小以及風險是不同的,
這裡所說的“最穩妥”僅僅是保證盈利而不是收益最大化,
如何合理分配不同方案之間的押註金額?就是首選要保證盈利,確保盡最大的可能性,獲利金額超過總的投資
如下可以查詢得到最穩妥的收益組合。
然後來看另外一場世界盃預選賽的法羅群島對陣瑞士的比賽,勝平負的賠率分別是16.5,6.6,1.09
按照上述計算方法,這裡依舊選擇主隊平或者主隊負的兩種方案,發現並沒有上述所謂的“最穩妥的方案”,
也就意味著,沒有一種方案,可以確保在平局或者主隊負的情況下都盈利。
如果還是想買這場比賽,怎麼辦?如果是在力求穩妥的前提下,上述演算法還是可以計算出來相對穩妥的方案
這場比賽,主隊負是一個非常大的可能性,
首先可以選擇主隊負盈利的方案,然後儘可能少地押註兩隊平局的情況,確保萬一爆一個比較小的冷們的情況下,輓回一些損失
也即兩種方案中,首先確保主隊負的盈利,在此前提下,平局和主隊負收益兩者收益差距最小的方案。
其實也不難理解,上述選擇的考慮因素如下
1,首先確保主隊負的盈利,因為主隊負是一個大概率事件,
2,平局和主隊負收益兩者收益差距最小,確保在平局爆冷的情況下,儘可能減少損失。
這是拋出感情因素,根據理性計算出來的一個結果,雖然收益情況看起來不怎麼樣。
最後附上本位的測試腳本。
--兩隊平的賠率 declare @deuce_odds decimal(5,3) = 6.60 --主隊負的賠率 declare @lose_odds decimal(5,3) = 1.09 ;with portfolio AS ( select 0 as share union ALL select share+2 as share from portfolio where share<50 ) select --押註兩隊平的金額 a.share as '押註兩隊平的金額', --押註主隊負的金額 b.share as '押註主隊負的金額', --預估的押註兩隊平的對應的收益 a.share*@deuce_odds as '預估的押註兩隊平的對應的收益', --預估的主隊負的對應的收益 b.share*@lose_odds as '預估的主隊負的對應的收益' --收益差值的絕對值 --abs(a.share*@deuce_odds-b.share*@lose_odds) as total from portfolio a CROSS join portfolio b where a.share+b.share=50 --總金額為50元 /*這裡就確保,分配一定的金額,確保不管哪種情況,首先保證盈利,獲利金額超過總的投資*/ --and a.share*@deuce_odds>50 --確保押註兩隊平局的金額收益大於總投資 --and b.share*@lose_odds>50 --確保押註兩隊平局的金額收益大於總投資 order by a.share,b.share
再次強調,本文僅供娛樂,不對任何精彩有任何指導建議。
封裝成一個存儲過程,方面調用
create proc get_optimum_portfolio ( --投資金額 @investment_amount int, --主隊勝的賠率 @win_odds decimal(10,3), --兩隊平的賠率 @deuce_odds decimal(10,3), --主隊負的賠率 @lose_odds decimal(10,3), --投資組合方案 @portfolio INT --31,30,10,31分別代表主隊不敗,30代表分出勝負,10代表客隊不敗 ) as begin if(@investment_amount<=0) begin ;throw 50000,'@investment_amount must be greater than 0',1 end if(@investment_amount%2<>0) begin ;throw 50000,'@investment_amount can not be odd number',1 end if(@portfolio<>30 and @portfolio<>31 and @portfolio<>10) begin ;throw 50000,'@portfolio must be one of 31,30,10',1 end /* declare @investment_amount int --主隊勝的賠率 declare @win_odds decimal(5,3) = 6.60 --兩隊平的賠率 declare @deuce_odds decimal(5,3) = 6.60 --主隊負的賠率 declare @lose_odds decimal(5,3) = 1.09 */ ;with portfolio AS ( select 0 as share union ALL select share+2 as share from portfolio where share < @investment_amount ) select * into #portfolio from portfolio; if exists ( select 1 from #portfolio a CROSS join #portfolio b where a.share+b.share = @investment_amount --總金額 /*這裡就確保,分配一定的金額,確保不管哪種情況,首先保證盈利,獲利金額超過總的投資*/ and a.share*@deuce_odds>@investment_amount --確保押註兩隊平局的金額收益大於總投資 and b.share*@lose_odds>@investment_amount --確保押註兩隊平局的金額收益大於總投資 --order by a.share,b.share ) begin select --押註兩隊平的金額 a.share as N'押註兩隊平的金額', --押註主隊負的金額 b.share as N'押註主隊負的金額', --預估的押註兩隊平的對應的收益 a.share*@deuce_odds as N'預估的押註兩隊平的對應的收益', --預估的主隊負的對應的收益 b.share*@lose_odds as N'預估的主隊負的對應的收益' --收益差值的絕對值 --abs(a.share*@deuce_odds-b.share*@lose_odds) as total from #portfolio a CROSS join #portfolio b where a.share+b.share = @investment_amount --總金額 /*這裡就確保,分配一定的金額,確保不管哪種情況,首先保證盈利,獲利金額超過總的投資*/ and a.share*@deuce_odds>@investment_amount --確保押註兩隊平局的金額收益大於總投資 and b.share*@lose_odds>@investment_amount --確保押註兩隊平局的金額收益大於總投資 order by a.share,b.share end else begin select top 1 * from ( select --押註兩隊平的金額 a.share as N'押註兩隊平的金額', --押註主隊負的金額 b.share as N'押註主隊負的金額', --預估的押註兩隊平的對應的收益 a.share*@deuce_odds as N'預估的押註兩隊平的對應的收益', --預估的主隊負的對應的收益 b.share*@lose_odds as N'預估的主隊負的對應的收益', --收益差值的絕對值 abs(a.share*@deuce_odds-b.share*@lose_odds) as difference_val from #portfolio a CROSS join #portfolio b where a.share+b.share = @investment_amount --總金額 /*這裡就確保,分配一定的金額,確保不管哪種情況,首先保證盈利,獲利金額超過總的投資*/ and (a.share*@deuce_odds >= @investment_amount or b.share*@lose_odds >= @investment_amount) )t order by difference_val asc end end
調用的示例