Skip to content

calculations.matches_1_odds

Captures the earliest non-null decimal odd for each 1×2 market (home / draw / away), regardless of whether the sample was collected before kick-off or during in-play. Many matches (especially live-only events) have no pre-match samples at all, so taking the first non-null observation per market guarantees a usable price for every event with at least one odd recorded. Each market is filtered independently because home / draw / away can become available at different times within the same event. One row per event.

flowchart LR
od[/sources.odds/] --> me[/calculations.matches_1_odds/]
me --> m11[/matches_11_probability/]
me --> m15[/matches_15_strat_expected_value/]
me --> m16[/matches_16_strat_kelly_criterion/]
me --> m17[/matches_17_strat_predicted/]
me --> m18[/matches_18_strat_bet/]
me --> mart[/mart.matches/]
click od "/sources/odds/" "Open"
click m11 "/calculations/matches_11_probability/" "Open"
click m15 "/calculations/matches_15_strat_expected_value/" "Open"
click m16 "/calculations/matches_16_strat_kelly_criterion/" "Open"
click m17 "/calculations/matches_17_strat_predicted/" "Open"
click m18 "/calculations/matches_18_strat_bet/" "Open"
click mart "/mart/matches/" "Open"
ColumnDescriptionFormula
event_idBet365 event identifier.passthrough
event_dateEvent date.passthrough
event_partition_keyClickHouse partition key.passthrough
odds_homeEarliest captured non-null home odd (pre-match or in-play).argMinIf(home_odd, odd_add_time, home_odd is not null)
odds_drawEarliest captured non-null draw odd (pre-match or in-play).argMinIf(draw_odd, odd_add_time, draw_odd is not null)
odds_awayEarliest captured non-null away odd (pre-match or in-play).argMinIf(away_odd, odd_add_time, away_odd is not null)

No pre-match / in-play filter is applied. Each market picks the value of its odd at the smallest odd_add_time among rows where that odd is non-null, so the three columns may originate from different snapshots of the same event.