Market、Handicap BetType and Odds Type ======================== ###### tags: `SBK` https://wenku.baidu.com/view/5117b2ebf8c75fbfc77db214.html?sxts=1563157632315 https://wenku.baidu.com/view/1bbc3b2fcfc789eb172dc8c7.html http://sb.vcbapi.com/SportsRules/OddsTypes?lang=zh_Hans https://www.pinnacle.com/zh-cn/betting-articles/Betting-Strategy/staking-one-method-to-improve-your-betting/2962VHE9W3JPJ7X7 https://www.pinnacle.com/zh-cn/betting-resources/category/betting-strategy http://bbs.aibovip.com/forum.php?mod=viewthread&tid=115482 https://www.slideshare.net/DusaneInfotech/house-edge-for-casino-sports-betting-and-lottery https://wizardofodds.com/games/sports-betting/ https://sports.qq.com/a/20120604/000476.htm https://www.jianshu.com/p/f775886446ca https://baike.baidu.com/item/%E8%BF%94%E8%BF%98%E7%8E%87 https://baike.baidu.com/item/%E5%8D%9A%E5%BD%A9%E4%B8%9A/9422069 https://baike.baidu.com/item/%E6%AC%A7%E8%B5%94%E6%A0%B8%E5%BF%83%E6%80%9D%E7%BB%B4 https://baike.baidu.com/item/%E4%BA%9A%E7%9B%98%E5%88%86%E6%9E%90%E6%B3%95/10037540 http://op1.win007.com/ https://www.pinnacle.com/en/betting-resources/betting-tools/margin-calculator https://blog.ch-wind.com/%E8%8F%A0%E8%8F%9C%E4%B8%8E%E6%A6%82%E7%8E%87/ http://www.sohu.com/a/288893958_460558 https://kknews.cc/zh-tw/finance/j8ve8zp.html https://bac88.net/?cat=43 https://www.55555365.com/Home/Article/detail/id/485.html http://sportsfunbet.pixnet.net/blog/post/86926172-%E7%AC%AC%E4%B8%80%E6%AC%A1%E7%8E%A9%E5%8D%9A%E5%BD%A9%E5%B0%B1%E4%B8%8A%E6%89%8B%EF%BC%9A%E6%AC%A7%E8%B5%94%E3%80%81%E9%A6%99%E6%B8%AF%E8%B5%94%E7%8E%87%E3%80%81%E5%8D%B0%E5%BA%A6 http://bc.cc5.cc/bocaizhinan/201302/776.html https://yibets.com/what-do-you-know-about-different-types-of-odds/ https://wenku.baidu.com/view/8e7db40dcf84b9d528ea7aae.html?re=view https://baike.baidu.com/item/%E4%BA%9A%E6%B4%B2%E7%9B%98%E5%8F%A3 http://sportsfunbet.pixnet.net/blog/post/86832500 ![](https://i.imgur.com/oIGcrXh.png) ![](https://i.imgur.com/1E4eb4x.png) # 歐賠 各大家娛樂網的分析結果 * 歷史紀錄的統計 * 人氣形勢 * 歷史淵源 * 戰意、球隊凝聚力 * 主客場戰績 * 近況 * 過往戰績 * 核心球員受傷、心理、生理等狀況 * 聯賽特性 * 排名 * 突發事件 [Poisson線上計算](https://sinceawin.com/data/tools/poisson) 根據上面各家自己算出來的主勝、客勝、和局的機率。 ![](https://i.imgur.com/Np1BdHt.png) 再把各機率取倒數, 得到賠率(期望值) 主勝賠率: 1/0.5198 = 1.92 客勝賠率: 1/0.2339 = 4.2753 和局賠率: 1/0.2462 = 4.0617 但這跟圖上的會不同,因為同上的會有margin做細微調整. # 毛利 margin / 抽水(house edge) 其中 100 / 93.57% = 106.861 則margin = 6.861% 上面的各選項機率 * 106.861 會得到 0.5198 * 106.861 = 55.546% 0.2339 * 106.861 = 24.994% 0.2462 * 106.861 = 26.309% 主勝賠率 : 1 / 55.546% = 1.80 和賠率 : 1 / 24.99% = 4.00 客勝賠率 : 1 / 26.309% = 3.80 **得到跟Bet360一樣的賠率了** 用機率表示的原因? 因為 賠率(期望值)的倒數應該是和對應的投注成正比的. 因為表示發生的機會越高. 玩家勝出的機會也是越高的. 應該會有很多人來投注該選項, 對應的投注量也就很大. 表示莊家要賠錢的風險也越高. Margin = 106.86% 其中的1是本金, 莊家要返還給玩家的, 剩下的才是莊家要賺的部份. 所以 1 / 106.86% = 93.57% 就是一場比賽的理論返還率. [top 100 bookmakers ranking](https://www.top100bookmakers.com/profit-margin/) [margin calculator](https://www.pinnacle.com/en/betting-resources/betting-tools/margin-calculator) #### 操盤 同盤口的margin鮮少會在期間作異動, 因為賠率代表著風險, 也代表著銷量. 所以大的莊家幾乎margin不會改變, 變得是該盤的賠率. # 凱利指數 公式?(各莊家的平均勝率*陪率 來計算) 怎來的? 不重要! 目的在於體現 冷門出現的可能性 凱利指數越低的, 莊家覺得越容易出現 ; 越高的表示月不容易開出 換言之 > 1 都不容易開出 # Handicap / Spread (讓分盤) 盤口 = 讓球 把假設的入球數字加給比較不被看好的隊伍上 ; 換句話說就是被看好的隊伍最後分數扣掉該數字. 只開出一個讓球盤, 俗稱單票 多個讓球盤, 俗稱套票 ![](https://i.imgur.com/9YqYGnS.png) 8種讓分的盤口 ![](https://i.imgur.com/CX1W3oK.png) 2種讓分的盤口 [亞洲盤](https://zh.wikipedia.org/wiki/%E4%BA%9E%E6%B4%B2%E7%9B%A4) 讓分有分成 * 讓半顆跟整數顆的讓分盤 * 目的 -> 沒有平手 ; 平手要去別的玩法(ex 1x2, double chance) * 平手則投注作廢, 退回本金 * 讓0 : 賭輸贏 * 讓半球 : 讓球方以任何分數勝出, 就算贏(1:0) ; 平手,輸掉都算輸(1:1) * 讓一球 : 讓球方以兩球以上勝出, 就算贏(3:1) ; 讓球方分數-1而平手, 退回本金(2:1) ; 其餘都是輸(1:1/0:1) * 讓0.25跟0.75顆的亞洲讓分盤 * 0.25 : 平手退回本金/2 (基本不影響球隊輸贏) * 0.75 : 讓球隊伍分數-1, 為平手退回本金/2 * 輸半: 只拿回本金/2 * 贏半: 賠率/2 * 本金 舉例 : 讓分盤口|比賽結果|主隊盤口贏|客隊盤口贏 ------ |------|--------|--------- 0(平手盤)| 1:0 | 主贏 | 客輸 0| 1:1 | **refund(走盤)** | **refund** 0| 0:1 | 主輸 | 客贏 -0.25(平手/半球) | 1:0(淨勝 >= 1) | 主贏 | 客輸 -0.25 | 1:1 | **贏半** | **輸半** -0.25 | 0:1 | 主輸 | 客贏 -0.5(半球) | 1:0(淨勝 >= 1) | 主贏 | 客輸 -0.5 | 1:1 | 主輸 | 客贏 -0.5 | 0:1 | 主輸 | 客贏 -0.75(半球/1球) | 2:0(淨勝 >= 2) | 主贏 | 客輸 -0.75 | 1:0(淨勝 = 1) | **贏半** | **輸半** -0.75 | 1:1 | 主輸 | 客贏 -0.75 | 0:1 | 主輸 | 客贏 -1(1球) | 2:0(淨勝 >= 2) | 主贏 | 客輸 -1 | 1:0(淨勝 = 1) | **refund** | **refund** -1 | 0:0 | 主輸 | 客贏 -1 | 0:1 | 主輸 | 客贏 -1.5(球半)| | | -2 (2球) | | | # 亞洲盤 透過讓球盤, 讓兩個相差懸殊的球隊, 有機會在一個相對公平的平台上較勁, 從而拉平了雙方客觀上的實力差距. 主要是基於歐洲賠率為基礎開發出來的玩法. 早期由澳門博彩公司開發出來的, 後來印尼為主的沙巴體育, 菲律賓的明升, 歐洲的BET365、立博等陸續開出了讓分盤, 而為了拓展亞洲市場所以稱為亞洲盤. ### 上盤/下盤 * 上盤 : 讓球的一方 (主場球隊/比較被看好的球隊) * 下盤 : 受讓的一方 ### 升盤/降盤 * 升盤 : 該場從讓1.5變成 讓1.5/2, 上升了一個盤口 * 降盤 : 該場從最初的1.5變成了1/1.5, 下降了一個盤口 盤口來回震盪, 表示兩邊投注金額變化很大 盤口幾乎沒震盪, 表示兩邊payoff是平衡的. 最常發生在快開踢前, 表示場外較量異常激烈. ### 水位 雙方的獲勝賠率, 一組比例數據, 莊家獲取利潤的手段 雙方水位和 正常都< 2, 大概在1.8-1.9之間, 這距離1-2的差額就是莊家的直觀利潤. 舉例要是水位和=1.9; 兩邊賠率一樣 兩邊各被下注1000萬, 則最後比賽結束時, 莊家能收入100萬元. # 初盤 一開始在早盤所開出的1x2和odds 最能體現兩隊之間的實力差距; 或是莊家對於兩隊的態度 # 即時 開踢前的1x2其賠率走勢 ![](https://i.imgur.com/Pn3vNPR.png) # 終賠(最終賠率) 就賽果反應在賠率上囉 也是最終人會買的時刻, 因為幾乎可以胸有成竹的去投注. 但也可能提早關盤. 終盤幾乎各家都會對齊, 只差在水位策略的細微調整. # 賠率種類 * HongKong Odds [0, 100] * \> 0 的正數, 不包含本金 * HK -> ML * \> 1 : -1 / (odds) * <= 1 : odds * HK -> DEC * odds + 1 * HK -> INDO * \> 1 : odds * <= 1 : -1 * (1/odds) * HK -> American * < 1 : -1 * (100 / odds) * \>= 1 : 100 * odds * MalaY Odds : [-1, 1]玩弱隊 * 負數(輸少) : 從餘額扣除 期望金額*(-1*賠率)的錢, 贏就是贏回跟期望金額一樣的錢 ; 換句話說, 我如果想要贏得期望金額這樣的金錢, 我需要投注 期望金額*(-1*賠率), 如果贏了, 返回期望金額 * 正數(贏少) : 跟HK一樣 返還投注金額*賠率 * ML -> HK : * 負數 : 1 / (-1 * odds) * 正數 : -1 * 1/odds-1_ Stake|Odds|Win|Lose |Draw -----|----|---|-----|---- 100 | 0.8 | 80 | -100 | 0 100 | -0.71| 100 | -71 | 0 * Decimal Odds (歐洲賠率) [1, 100] *> 1 的正數, 包含本金 * DEC -> HK * odds -1 * Indo Odds : 玩強隊 [-100, -1] , [1, 100] * \>= 1 (贏多) : 投注100$, 贏了, 返還金額 = 投注金額*賠率 ; 輸了賠100\$ * * < -1 (輸多) : 賠率-1.25 , 期望金額100$, 要從餘額扣除100*1.25 = 125\$, 這樣贏了才能獲得 100\$的期望金額; 輸掉就賠125\$, 125 > 100\$, 所以叫輸多 * Fractional Odds * American Odds * < 1 : 賠率113, 想淨勝100$, 要投入113\$ * [Myanmar Odds](https://onlinebettingservicemyanmar.blog/2019/05/30/how-to-bet-myanmar-odds-betting-lines/) * +60 * -50 #### [Odds Converter](https://www.sportsbookreview.com/picks/tools/odds-converter/) # Settle ------------------ 專有名詞 https://yibets.com/betting-english-chinese-ultimate-glossary/ https://www.sporttery.cn/football/jcjq/2014/0109/89509.html https://baike.baidu.com/item/%E5%8D%9A%E5%BD%A9%E4%B8%9A/9422069 https://bti-io.gitlab.io/betting-rules/zh/ ------------------------ -------亂寫的東西------------- mongo bson ## sport sport : { _id : objectId src_code : string src_id : int src_nm : string ps_id : int ps_name : string created : timestamp modified : timestamp } ## country country { _id : objectId src_code : string src_id : int //todo code: string // ESP nm : string //Spain ps_id : int ps_name : string created : timestamp modified : timestamp } ## league league: { _id : objectId src_code : string src_id : int src_sport_id : int src_sport_nm : string src_country_nm : string src_country_code : string src_nm : string ps_id : int created : timestamp modified : timestamp } ## competitor competitor: { _id : objectId src_code : string src_id : int src_sport_id : int src_sport_nm : string src_nm : string ps_id : int created : timestamp modified : timestamp } ## player player: { _id : objectId src_code : string src_id : int src_sport_id : int src_sport_nm : string src_nm : string ps_id : int created : timestamp modified : timestamp } ## venue venue: { _id : objectId src_code : string src_id : int src_nm : string ps_id : int created : timestamp modified : timestamp } ## round round: { _id : objectId src_code : string src_nm : string src_sport_id : int src_sport_nm : string ps_id : int created : timestamp modified : timestamp } ## match match: { _id : objectId src_code : string src_id : int src_sport_id : int src_sport_nm : string src_tournament_id : int src_tournament_name : string src_competitor_home_id: int src_competitor_home_nm: string src_competitor_away_id: int src_competitor_away_nm: string src_nm : string src_scheduled_time: dateTime neutral : bool // todo:是否中立場 預設 false ps_id : int ps_name: string created : timestamp modified : timestamp } ## odds list odds_list :{ _id : objectId src_code : string src_market_id : int src_market_name : string src_match_id : int ps_match_id : int ps_market_id : int handicap : string // 讓分盤: 主隊(受)讓球數 大小:球頭 timestamp : timestamp odds : [ { selection_id : int selection_nm : string // 高於低於 , 波膽:1:0 odds : double active : bool } ] } ## alias list alias_list :{ _id : objectId type : string locale : string alias : string ps_name : string ps_id : int } ## protobuf ```json { type : string sendTime : uint64 amount: uint16 data: bytes } ``` --- launch cli -> 砍黨 league 打完寫黨 team打完血黨 player打完血黨 --- GROUP A "" 3. HNL: South ``` message Match { int64 src_id=1; string nm=2; // outright name int64 src_sport_id = 3; string src_sport_name = 4; int64 src_league_id=5; string src_league_name = 6; int64 src_home_id =7; string src_home_name =8; int64 src_away_id=9; string src_away_name=10; int64 src_venue_id=11; int64 src_round_id=12; int64 src_round=13; int64 src_group_id=13; string src_group = 14; int64 schedule_time=15; // UTC int64 schedule_end; // UTC for outright bool neutral=16; enum type =17; // match, outright, virtual int status = 18; // not-started, started, completed, cancel, delay, live enum has_live ; //not available, available string info ; // additional information, free text, delayed info, cancel reason } ``` ``` syntax = "proto3"; package broker; // import "common.proto"; option go_package="build"; message Matches { repeated Match matches = 1; // repeated Common.data data = 1; } message Match { int64 src_id=1; string name = 2; MatchTypes type =3; MatchStatus status=4; int64 src_sport_id=5; string src_sport_name=6; int64 src_league_id =7; string src_league_name=8; int64 src_home_id=9; string src_home_name=10; int64 src_away_id=11; string src_away_name=12; bool neutral=13; bool has_live=14; int64 schedule_time=15; int64 schedule_end=16; int64 src_venue_id=17; int64 src_round_id=18; string src_round=19; string src_group=20; string info=21; } enum MatchTypes { match=0; outright=1; virtual=2; } enum MatchStatus { not_started=0; started=1; live=2; finish=3; cancel=4; delay=5; } ``` ``` - match : { "id": bigint, "name": "string", "matchType": uint8 enum, // 0 : match ; 1: outright:1 ; 2 : virtual "sport_id": int, "sport_name": "string", "country_id": int, "country_name": "string", "league_id": int, "league_name": "string", "kickoff_time": "date time", "season" : season, "round" : round, "competitors" : competitor array, "has_live": boolean, "status": int enum , // 0 : not_started; 1: started, 2: live; 3: finish; 4: cancel ; 5: delay "market_set": market array, "is_neutral" : boolean, "matchStats": { }, "timeInfo" : { }, } - season : { "id" : uint, "name": string } - competitor : { "competitor" : team, "home_away": uint8, // 0 : home ; 1: away "type" : uint8 // 0 : team, 1 : person; 2 : doublesPartnership } - team : { "id" : bigint, // an immutable identifier for a teams "name" : string, } - market_type : { "id": uint, "name": string, } - market : { "id": bigint, // an immutable identifier for a market "market_type": market_type, "match_id": bigint, "sequence": int, // sequence number for the same market "trading_status": int, // 0 : open ; 1 :suspend ; 2 : closed "handicap": decimal , // hdp, ou, total, "specifier": string , // for other sports or player name or ??? "is_live": boolean, "selections: selection array, "timestamp" : bigint } - selection : { "outcome": outcome, "trading_status": int, // 0 : open ; 1 :suspend ; 2 : closed "odds": decimal, // original price for 100% margin } - outcome: { "id" : int, // an immutable identifier for the outcome "name" : string, } ```