Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Datenmodelle

Alle Modelle in src/models/. Jedes Modul hat eigene Datei.

NeobetMatch / NeobetLeague

NeobetLeague { country, league, first_match_time?, match_count? }
NeobetMatch  { country, league, home_team, away_team, kickoff_time?, date }

Quelle: Neobet Scraper. Verwendet fuer Liga-Matching.

FlashscoreMatch / FlashscoreLeague

FlashscoreMatch {
    match_id, home_team, away_team,
    home_team_id, away_team_id,       // fuer URL-Konstruktion
    kickoff_time?, date,
    country, league, h2h_url,
    final_score?                       // nur bei beendeten Spielen
}
FlashscoreLeague { country, league, league_id? }
MatchScore { home, away }             // Methods: total_goals(), is_over(), is_btts()

AnalyzedMatch (Hauptstruktur)

Das zentrale Datenobjekt nach H2H-Analyse. Wird fuer Scoring + Export verwendet.

AnalyzedMatch {
    h2h_url, kickoff_time, match_name, country, league,

    // Durchschnitte (venue-specific)
    home_avg_scored?, home_avg_conceded?,
    away_avg_scored?, away_avg_conceded?,
    sum_conceded?, sum_scored?,

    // Backtesting
    backtesting_result?,               // "2:1" bei beendeten Spielen

    // Spiele seit letztem Event
    games_since_o15_home?, games_since_o15_away?,
    games_since_o25_home?, games_since_o25_away?,
    games_since_zero_home?, games_since_zero_away?,

    // Intervall-Daten (venue + overall)
    intervals: MatchIntervals,

    // Quoten (alle Maerkte)
    odds?: MatchOdds,
}

MatchIntervals

32 Felder: 16 venue-specific + 16 overall. Jedes Feld ist Option<IntervalData>.

Venue-specific: o15_home/away, o25_home/away, o35_home/away, o45_home/away, u05_home/away, u15_home/away, bts_home/away, ots_home/away

Overall: gleiche 8 Typen mit _overall Suffix.

IntervalData {
    intervals: Vec<u32>,     // Spiele zwischen Events [3,1,2,5]
    current_streak: u32,     // Spiele seit letztem Event
    raw: String,             // "3,1,2,5 (2)" fuer CSV
}
// Methods: parse(s), average(), max(), min()

MatchOdds

MatchOdds {
    ou_full_time:   Vec<OverUnderOdds>,    // pro Schwellwert (0.5-4.5)
    ou_first_half:  Vec<OverUnderOdds>,
    ou_second_half: Vec<OverUnderOdds>,
    btts?:          BttsOdds,
    one_x_two?:     OneXTwoOdds,
    double_chance?: DoubleChanceOdds,
    draw_no_bet?:   DrawNoBetOdds,
}
// Lookup: ou_ft(2.5), ou_1h(1.5), ou_2h(1.5)

Quoten-Typen:

TypFelder
OverUnderOddsthreshold, over, under, bookmaker_count
OneXTwoOddshome, draw, away, bookmaker_count
BttsOddsyes, no, bookmaker_count
DoubleChanceOddshome_draw, home_away, draw_away, bookmaker_count
DrawNoBetOddshome, away, bookmaker_count

Scoring-Modelle

ScoringResult { date, total_matches, over_picks, under_picks, over_criteria_count=7, under_criteria_count=5 }
Pick { match_name, kickoff_time, country, league, score, max_score, criteria: Vec<ScoringCriterion> }
ScoringCriterion { name, value, rank }

Export-Modelle

ExportConfig { directory="../exports", csv=true, excel=true, filename_prefix="match_data" }
ExportResult { date, match_count, csv_path?, excel_path?, exported_at, scoring? }