T-SQL實現足彩單場勝平負競猜組合最穩妥方案的計算

来源:http://www.cnblogs.com/wy123/archive/2017/06/09/6970721.html
-Advertisement-
Play Games

本文出處: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

調用的示例

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文出處:http://www.cnblogs.com/wy123/p/6979499.html show profile 命令用於跟蹤執行過的sql語句的資源消耗信息,可以幫助查看sql語句的執行情況,可以在做性能分析或者問題診斷的時候作為參考。 在MySQL5.7中, show profile ...
  • 最大感受,無論從設計還是源碼,Redis都儘量做到簡單,其中運用到的原理也通俗易懂。特別是源碼,簡潔易讀,真正做到clean and clear, 這篇文章以unstable分支的源碼為基準,先從大體上整理Redis的對象類型以及底層編碼。 當我們在本文中提到Redis的“數據結構”,可能是在兩個不 ...
  • 1 首先需要安裝gcc,把下載(http://redis.io/download)好的redis-3.0.0-rc2.tar.gz 放到linux /usr/local文件夾下 2 進行解壓 tar -zxvf redis-3.0.0-rc2.tar.gz 3 進入到redis-3.0.0目錄下,進 ...
  • 預處理的特點:1.效率高,執行速度快 2.安全性高,可以防止sql註入 $mysqli 中的函數 $stmt=$mysqli->prepare($sql); 預備一條sql語句,接下來要執行 綁定參數 給參數賦值 $stmt ->bind_param("類型對應",參數列表); $bool= $st ...
  • 1.系統信息函數 1.會話信息函數 ...
  • 目錄 一、視圖 二、觸發器 三、函數 四、存儲過程 五、事務 一、視圖 視圖是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的數據集,併為其命名】,用戶使用時只需使用【名稱】即可獲取結果集,並可以將其當作表來使用。 SELECT * FROM ( SELECT nid, NAME FRO ...
  • 在資料庫伺服器異常斷電重啟後,資料庫會進行實例恢復,那麼實例恢復的過程中Oracle做了什麼操作呢?參考官網在這裡做一下解釋,菜鳥水平有限,歡迎勘正。 首先說下實例恢復的定義: Instance recovery is the process of applying records in the o ...
  • 知識重點: 1.extract(day from schedule01::timestamp)=13 Extract 屬於 SQL 的 DML(即資料庫管理語言)函數,同樣,InterBase 也支持 Extract,它主要用於從一個日期或時間型的欄位內抽取年、月、日、時、分、秒數據,因此,它支持其 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...