---
# System prepended metadata

title: Market、Handicap BetType and Odds Type
tags: [SBK]

---

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, 
	}
```