示例#1
0
        public QuinielaResult GetBet(float probability)
        {
            /*
             * VOID     = 0,
             * ONE  = 1,
             * X        = 2,
             * TWO  = 4,
             * ONEX     = 3,
             * TWOX     = 6,
             * ONEXTWO = 7
             */

            QuinielaResult res = QuinielaResult.VOID;

            float y1, yX, y2;

            _getMemberships(probability, out y1, out yX, out y2);

            if (y1 > 0.0)
            {
                res = ( QuinielaResult )(( int )res + ( int )QuinielaResult.ONE);
            }

            if (yX > 0.0)
            {
                res = (QuinielaResult )(( int )res + ( int )QuinielaResult.X);
            }

            if (y2 > 0)
            {
                res = ( QuinielaResult )(( int )res + ( int )QuinielaResult.TWO);
            }

            return(res);
        }
示例#2
0
        static void Main(string[] args)
        {
            InitializeLog4net();

            // Cargamos la configuracion
            Log.Info("Cargando configuracion");
            Configuration configuration = JsonConvert.DeserializeObject <Configuration>(File.ReadAllText(@"./Configuration.json"));

            // Cargamos nombres de equipos
            Log.Info("Cargando nombres de equipos de 'TeamsNames.json'");
            var jObject = JObject.Parse(File.ReadAllText(@"./TeamsNames.json"));
            var jToken  = jObject.GetValue("TeamsNames");

            Teams.TeamsNames = (Dictionary <string, List <string> >)jToken.ToObject(typeof(Dictionary <string, List <string> >));
            Log.Info($"Se han cargado {Teams.TeamsNames.Values.Sum(x => x.Count) } nombres de equipos");

            QuinEagleCalculator qc = new QuinEagleCalculator()
            {
                configuration = configuration
            };

            qc.Configure();

            // Cargamos los emparejamientos
            Log.Info("Cargando Emparejamientos");

            FixtureRequester fr = new FixtureRequester()
            {
                QuinielaFixtureURL = configuration.QuinielaFixtureURL
            };

            fr.LoadFixtures();
            var fixtures = fr.GetFixtures();

            fr.PrintFixtures();

            List <Fixture> predictions = new List <Fixture>();

            fixtures.ForEach(a =>
            {
                QuinielaResult qr = QuinielaResult.VOID;
                Fixture f         = new Fixture()
                {
                    AwayTeam = a.AwayTeam, HomeTeam = a.HomeTeam
                };
                f.Probability = qc.GetResult(a, out qr);
                f.Result      = qr;
                predictions.Add(f);
            });

            qc.SetMaxDoubleBets(ref predictions);

            predictions.ForEach(a => Log.Info(a.ToString()));

            Log.Info($"Media calculada = {predictions.Select( a => a.Probability ).Average()}%");

            Console.ReadKey();
        }
示例#3
0
        public float GetResult(Fixture fixture, out QuinielaResult result)
        {
            //Fixture res = new Fixture() { HomeTeam = fixture.HomeTeam, AwayTeam = fixture.AwayTeam };
            List <Nomio> formula = new List <Nomio>();

            _statistics.ForEach(a => formula.Add(new Nomio()
            {
                Variable = a.GetStatistic(fixture), Weight = a.Weight
            }));

            //res.Probability = formula.Sum(n => n.Variable * n.Weight);
            //res.Result = _fuzzy.GetBet(res.Probability);
            float probability = formula.Sum(n => n.Variable * n.Weight);

            result = _fuzzy.GetBet(probability);

            return(probability);
        }
示例#4
0
        private static char _parseResult(QuinielaResult res)
        {
            char r;

            if (res == QuinielaResult.ONE)
            {
                r = '1';
            }
            else if (res == QuinielaResult.X)
            {
                r = 'X';
            }
            else if (res == QuinielaResult.TWO)
            {
                r = '2';
            }
            else
            {
                r = 'E';
            }

            return(r);
        }
示例#5
0
        public void GetBet(ref List <Fixture> fixtures)
        {
            if (IsSet)
            {
                foreach (var f in fixtures)
                {
                    f.Result = GetBet(f.Probability);
                }

                // Ahora recorremos la lista otra vez y cogemos las apuestas dobles
                // Eliminamos las que esten en los extremos hasta tener solo el numero de doblrd que queremos
                List <Fixture> dobles = fixtures.Where(a => a.Result == QuinielaResult.ONEX || a.Result == QuinielaResult.TWOX).ToList();
                if (dobles.Count() > MaxMultipleBets)
                {
                    for (int i = 0; i < dobles.Count - MaxMultipleBets; i++)
                    {
                        float y1, yX, y2;

                        Fixture        candidata     = null;
                        float          minimo        = float.MaxValue;
                        QuinielaResult valor_destino = QuinielaResult.VOID;

                        dobles.ForEach(a =>
                        {
                            _getMemberships(a.Probability, out y1, out yX, out y2);

                            if (a.Result == QuinielaResult.ONEX)
                            {
                                if (Math.Min(y1, yX) < minimo)
                                {
                                    minimo    = Math.Min(y1, yX);
                                    candidata = a;
                                    if (y1 <= yX)
                                    {
                                        valor_destino = QuinielaResult.X;
                                    }
                                    else if (yX < y1)
                                    {
                                        valor_destino = QuinielaResult.ONE;
                                    }
                                }
                            }
                            else if (a.Result == QuinielaResult.TWOX)
                            {
                                if (Math.Min(y2, yX) < minimo)
                                {
                                    minimo    = Math.Min(y2, yX);
                                    candidata = a;
                                    if (y2 <= yX)
                                    {
                                        valor_destino = QuinielaResult.X;
                                    }
                                    else if (yX < y2)
                                    {
                                        valor_destino = QuinielaResult.TWO;
                                    }
                                }
                            }
                        });
                        candidata.Result = valor_destino;
                    }
                }
            }
            else
            {
                Log.Warn("Valores difusos no establecidos");
            }
        }
示例#6
0
        private void ConvertNoceToFixture(HtmlNode node)
        {
            var fx = new Fixture();

            var equipos = node.SelectSingleNode("td[ @class='col-match cell text-match' ]/div").InnerHtml
                          .Replace(" - ", "-").Replace("<br>", "-")
                          .Split('-');

            var hometeam = equipos[0].RemoveDiacritics().ToUpper();
            var awayteam = equipos[1].RemoveDiacritics().ToUpper();

            fx.HomeTeam = Teams.GetKeyfromName(hometeam);
            fx.AwayTeam = Teams.GetKeyfromName(awayteam);

            // Miramos si es un emparejamiento clasico (1,x,2) o de los nuevos (0,1,2,M)
            var div = node.SelectSingleNode("td[ @class='cell results results-centered' ]/div");

            if (div.SelectSingleNode("div[@class='rx']") != null)
            {
                var r1 = div.SelectSingleNode("div[@class='r1']");
                var rx = div.SelectSingleNode("div[@class='rx']");
                var r2 = div.SelectSingleNode("div[@class='r2']");

                if (r1.ChildNodes[0].Attributes[0].Value == "result-box active")
                {
                    fx.Result = QuinielaResult.ONE;
                }
                else if (r2.ChildNodes[0].Attributes[0].Value == "result-box active")
                {
                    fx.Result = QuinielaResult.TWO;
                }
                else if (rx.ChildNodes[0].Attributes[0].Value == "result-box active")
                {
                    fx.Result = QuinielaResult.X;
                }
                else
                {
                    fx.Result = QuinielaResult.VOID;
                }
            }
            else
            {
                /*
                 * <div class="results-boxes clearfix"  style="float: right;">
                 * <div class="r0"><span class="result-box ">&nbsp;</span></div>
                 * <div class="r1"><span class="result-box ">&nbsp;</span></div>
                 * <div class="r2"><span class="result-box active">&nbsp;</span></div>
                 * <div class="rM"><span class="result-box ">&nbsp;</span></div>
                 * <br>
                 * <div class="r0" style="margin-top: 1px !important;"><span class="result-box ">&nbsp;</span></div>
                 * <div class="r1" style="margin-top: 1px !important;"><span class="result-box ">&nbsp;</span></div>
                 * <div class="r2" style="margin-top: 1px !important;"><span class="result-box active">&nbsp;</span></div>
                 * <div class="rM" style="margin-top: 1px !important;"><span class="result-box ">&nbsp;</span></div>
                 * </div>
                 */
                var r0s = div.ChildNodes.Where(a => a.Attributes.Count > 0 && a.Attributes[0].Value == "r0").ToList();
                var r1s = div.ChildNodes.Where(a => a.Attributes.Count > 0 && a.Attributes[0].Value == "r1").ToList();
                var r2s = div.ChildNodes.Where(a => a.Attributes.Count > 0 && a.Attributes[0].Value == "r2").ToList();
                var rMs = div.ChildNodes.Where(a => a.Attributes.Count > 0 && a.Attributes[0].Value == "rM").ToList();

                int local  = -1;
                int visita = -1;

                // tratamos de convertir una apuesta del tipo (0,1,2,M) en (1,x,2)
                if (r0s[0].ChildNodes[0].Attributes[0].Value == "result-box active")
                {
                    local = 0;
                }

                if (r0s[1].ChildNodes[0].Attributes[0].Value == "result-box active")
                {
                    visita = 0;
                }

                if (r1s[0].ChildNodes[0].Attributes[0].Value == "result-box active")
                {
                    local = 1;
                }

                if (r1s[1].ChildNodes[0].Attributes[0].Value == "result-box active")
                {
                    visita = 1;
                }

                if (r2s[0].ChildNodes[0].Attributes[0].Value == "result-box active")
                {
                    local = 2;
                }

                if (r2s[1].ChildNodes[0].Attributes[0].Value == "result-box active")
                {
                    visita = 2;
                }

                if (rMs[0].ChildNodes[0].Attributes[0].Value == "result-box active")
                {
                    local = 3;
                }

                if (rMs[1].ChildNodes[0].Attributes[0].Value == "result-box active")
                {
                    visita = 3;
                }

                QuinielaResult r = QuinielaResult.VOID;

                if (local > -1 && visita > -1)
                {
                    if (local == visita)
                    {
                        r = QuinielaResult.X;
                    }
                    else if (local > visita)
                    {
                        r = QuinielaResult.ONE;
                    }
                    else if (local < visita)
                    {
                        r = QuinielaResult.TWO;
                    }
                }

                fx.Result = r;
            }

            _Fixtures.Add(fx);
        }
示例#7
0
        public void LoadFixtures()
        {
            var html = new WebClient().DownloadString(QuinielaFixtureURL);
            var doc  = new HtmlDocument();

            doc.LoadHtml(html);

            var nodes = doc.DocumentNode.SelectNodes("//table[@class='general-table estimate-table upcoming-table']/tr").Skip(3);

            foreach (var node in nodes)
            {
                Fixture fx = new Fixture();

                var equipos = node.SelectSingleNode("td[ @class='col-match cell text-match' ]/div").InnerHtml
                              .Replace(" - ", "-").Replace("<br>", "-")
                              .Split('-');

                fx.HomeTeam = equipos[0];
                fx.AwayTeam = equipos[1];

                // Miramos si es un emparejamiento clasico (1,x,2) o de los nuevos (0,1,2,M)
                var div = node.SelectSingleNode("td[ @class='cell results results-centered' ]/div");

                if (div.SelectSingleNode("div[@class='rx']") != null)
                {
                    var r1 = div.SelectSingleNode("div[@class='r1']");
                    var rx = div.SelectSingleNode("div[@class='rx']");
                    var r2 = div.SelectSingleNode("div[@class='r2']");

                    if (r1.ChildNodes[0].Attributes[0].Value == "result-box active")
                    {
                        fx.Result = QuinielaResult.ONE;
                    }
                    else if (r2.ChildNodes[0].Attributes[0].Value == "result-box active")
                    {
                        fx.Result = QuinielaResult.TWO;
                    }
                    else if (rx.ChildNodes[0].Attributes[0].Value == "result-box active")
                    {
                        fx.Result = QuinielaResult.X;
                    }
                    else
                    {
                        fx.Result = QuinielaResult.VOID;
                    }
                }
                else
                {
                    var r0s = div.SelectNodes("//div[@class='r0']");
                    var r1s = div.SelectNodes("//div[@class='r1']");
                    var r2s = div.SelectNodes("//div[@class='r2']");
                    var rms = div.SelectNodes("//div[@class='rM']");

                    int local  = -1;
                    int visita = -1;

                    // tratamos de convertir una apuesta del tipo (0,1,2,M) en (1,x,2)
                    if (r0s[0].ChildNodes[0].Attributes[0].Value == "result-box active")
                    {
                        local = 0;
                    }
                    if (r0s[1].ChildNodes[0].Attributes[0].Value == "result-box active")
                    {
                        visita = 0;
                    }
                    if (r1s[0].ChildNodes[0].Attributes[0].Value == "result-box active")
                    {
                        local = 1;
                    }
                    if (r1s[1].ChildNodes[0].Attributes[0].Value == "result-box active")
                    {
                        visita = 1;
                    }
                    if (r2s[0].ChildNodes[0].Attributes[0].Value == "result-box active")
                    {
                        local = 2;
                    }
                    if (r2s[1].ChildNodes[0].Attributes[0].Value == "result-box active")
                    {
                        visita = 2;
                    }
                    if (rms[0].ChildNodes[0].Attributes[0].Value == "result-box active")
                    {
                        local = 3;
                    }
                    if (rms[1].ChildNodes[0].Attributes[0].Value == "result-box active")
                    {
                        visita = 3;
                    }

                    QuinielaResult r = QuinielaResult.VOID;

                    if (local > -1 && visita > -1)
                    {
                        if (local == visita)
                        {
                            r = QuinielaResult.X;
                        }
                        else if (local > visita)
                        {
                            r = QuinielaResult.ONE;
                        }
                        else if (local < visita)
                        {
                            r = QuinielaResult.TWO;
                        }
                    }

                    fx.Result = r;
                }

                _Fixtures.Add(fx);
            }
        }
示例#8
0
        /// <param name="args"></param>
        public static void Main(string[] args)
        {
            // Log4Net
            InitializeLog4net();

            // Cargamos la configuracion
            Log.Info("Cargando configuracion");
            Configuration configuration = JsonConvert.DeserializeObject <Configuration>(File.ReadAllText(@"./Configuration.json"));

            // Cargamos nombres de equipos
            Log.Info("Cargando nombres de equipos de 'TeamsNames.json'");
            var jObject = JObject.Parse(File.ReadAllText(@"./TeamsNames.json"));
            var jToken  = jObject.GetValue("TeamsNames");

            Teams.TeamsNames = (Dictionary <string, List <string> >)jToken.ToObject(typeof(Dictionary <string, List <string> >));
            Log.Info($"Se han cargado {Teams.TeamsNames.Values.Sum(x => x.Count) } nombres de equipos");

            QuinEagleCalculator qc = new QuinEagleCalculator()
            {
                configuration = configuration
            };

            qc.Configure();

            // Cargamos todos los partidos en una lista
            List <Match> matches = _getMatchesStoredDB(qc);

            // Seleccionamos todas las jornadas y años que tenemos partidos
            //List<JourneyDateClassification> journeys = matches.Select(a => new JourneyDateClassification(){ journey = a.Journey, season = a.season })
            //                                                .Distinct(new JourneyDateClassification.DistinctJourneyDateClassificationComparer())
            //                                                .ToList();

            // Cogemos todas las clasificaciones y las almacenamos para estas jornadas de estos años
            //Dictionary<int, Dictionary<LeagueEnum, LeagueTable>> classifications = _getClassifications(journeys, configuration);

            List <Match> predictions = new List <Match>();

            matches.ForEach(m =>
            {
                Match match       = m.Clone();
                QuinielaResult qr = QuinielaResult.VOID;

                match.fixture.Probability = qc.GetResult(m.fixture, out qr);
                match.fixture.Result      = qr;
                predictions.Add(match);
            });

            /*
             * int aciertos = matches.Where(a => predictions.Any(
             *      b => b.fixture.AwayTeam == a.fixture.AwayTeam &&
             *      b.fixture.HomeTeam == a.fixture.HomeTeam &&
             *      b.fixture.Journey == a.fixture.Journey &&
             *      (b.fixture.Result & a.fixture.Result) != QuinielaResult.VOID)).Count();
             */

            var aciertos = predictions.Where(a => matches.Any(
                                                 b => b.fixture.AwayTeam == a.fixture.AwayTeam &&
                                                 b.fixture.HomeTeam == a.fixture.HomeTeam &&
                                                 b.fixture.Journey == a.fixture.Journey &&
                                                 (b.fixture.Result & a.fixture.Result) != QuinielaResult.VOID)).ToList();

            Log.Info("TOTALES");
            Log.Info(matches.Count);
            Log.Info($"1: {matches.Count( a => a.fixture.Result == QuinielaResult.ONE )} || {( float )matches.Count( a => a.fixture.Result == QuinielaResult.ONE ) / ( float )matches.Count * 100f } %");
            Log.Info($"X: {matches.Count( a => a.fixture.Result == QuinielaResult.X )} || {( float )matches.Count( a => a.fixture.Result == QuinielaResult.X ) / ( float )matches.Count * 100f } %");
            Log.Info($"2: {matches.Count( a => a.fixture.Result == QuinielaResult.TWO )} || {( float )matches.Count( a => a.fixture.Result == QuinielaResult.TWO ) / ( float )matches.Count * 100f } %");

            Log.Info("---------------");
            Log.Info("PREDICCIONES");
            Log.Info($"1: {predictions.Count( a => a.fixture.Result == QuinielaResult.ONE )} || {( float )predictions.Count( a => a.fixture.Result == QuinielaResult.ONE ) / ( float )predictions.Count * 100f } %");
            Log.Info($"X: {predictions.Count( a => a.fixture.Result == QuinielaResult.X )} || {( float )predictions.Count( a => a.fixture.Result == QuinielaResult.X ) / ( float )predictions.Count * 100f } %");
            Log.Info($"2: {predictions.Count( a => a.fixture.Result == QuinielaResult.TWO )} || {( float )predictions.Count( a => a.fixture.Result == QuinielaResult.TWO ) / ( float )predictions.Count * 100f } %");

            Log.Info("---------------");
            Log.Info($"Aciertos {aciertos.Count} de {predictions.Count}");
            Log.Info($"Total: {(float)aciertos.Count / (float)predictions.Count * 100f} %");
            Log.Info("Aciertos por prediccion");
            Log.Info($"1: {aciertos.Count( a => a.fixture.Result == QuinielaResult.ONE )} || {( float )aciertos.Count( a => a.fixture.Result == QuinielaResult.ONE ) / ( float )aciertos.Count * 100f } %");
            Log.Info($"X: {aciertos.Count( a => a.fixture.Result == QuinielaResult.X )} || {( float )aciertos.Count( a => a.fixture.Result == QuinielaResult.X ) / ( float )aciertos.Count * 100f } %");
            Log.Info($"2: {aciertos.Count( a => a.fixture.Result == QuinielaResult.TWO )} || {( float )aciertos.Count( a => a.fixture.Result == QuinielaResult.TWO ) / ( float )aciertos.Count * 100f } %");

            Log.Info("---------------");
            Log.Info("Aciertos por predicciones");
            Log.Info($"1: {aciertos.Count( a => a.fixture.Result == QuinielaResult.ONE )} aciertos de {predictions.Count(a => (a.fixture.Result & QuinielaResult.ONE) != QuinielaResult.VOID)} predicciones || {( float )aciertos.Count( a => a.fixture.Result == QuinielaResult.ONE ) / ( float )predictions.Count( a => ( a.fixture.Result & QuinielaResult.ONE ) != QuinielaResult.VOID ) * 100f } %");
            Log.Info($"X: {aciertos.Count( a => a.fixture.Result == QuinielaResult.X )} aciertos de {predictions.Count( a => ( a.fixture.Result & QuinielaResult.X ) != QuinielaResult.VOID )} predicciones || {( float )aciertos.Count( a => a.fixture.Result == QuinielaResult.X ) / ( float )predictions.Count( a => ( a.fixture.Result & QuinielaResult.X ) != QuinielaResult.VOID ) * 100f } %");
            Log.Info($"2: {aciertos.Count( a => a.fixture.Result == QuinielaResult.TWO )} aciertos de {predictions.Count( a => ( a.fixture.Result & QuinielaResult.TWO ) != QuinielaResult.VOID )} predicciones || {( float )aciertos.Count( a => a.fixture.Result == QuinielaResult.TWO ) / ( float )predictions.Count( a => ( a.fixture.Result & QuinielaResult.TWO ) != QuinielaResult.VOID ) * 100f } %");

            Log.Info("---------------");
            Log.Info("Predicciones por resultado real");
            Log.Info($"1: {predictions.Count( a => (a.fixture.Result & QuinielaResult.ONE) != QuinielaResult.VOID)} predicciones de {matches.Count( a => a.fixture.Result == QuinielaResult.ONE )} resultados reales || {( float )predictions.Count( a => a.fixture.Result == QuinielaResult.ONE ) / ( float )matches.Count( a => a.fixture.Result == QuinielaResult.ONE ) * 100f } %");
            Log.Info($"X: {predictions.Count( a => ( a.fixture.Result & QuinielaResult.X ) != QuinielaResult.VOID )} predicciones de {matches.Count( a => a.fixture.Result == QuinielaResult.X )} resultados reales || {( float )predictions.Count( a => a.fixture.Result == QuinielaResult.X ) / ( float )matches.Count( a => a.fixture.Result == QuinielaResult.X ) * 100f } %");
            Log.Info($"2: {predictions.Count( a => ( a.fixture.Result & QuinielaResult.TWO ) != QuinielaResult.VOID )} predicciones de {matches.Count( a => a.fixture.Result == QuinielaResult.TWO )} resultados reales || {( float )predictions.Count( a => a.fixture.Result == QuinielaResult.TWO ) / ( float )matches.Count( a => a.fixture.Result == QuinielaResult.TWO ) * 100f } %");

            Log.Debug("---------------");
            Log.Debug("Valores de 1s");
            var Puntos1 = predictions.Where(a => matches.Any(b => b.fixture.AwayTeam == a.fixture.AwayTeam &&
                                                             b.fixture.HomeTeam == a.fixture.HomeTeam &&
                                                             b.fixture.Journey == a.fixture.Journey &&
                                                             b.fixture.Result == QuinielaResult.ONE)).ToList();;

            Puntos1.ForEach(a => Log.Debug(a.fixture.Probability));

            Log.Debug("---------------");
            Log.Debug("Valores de Xs");
            var PuntosX = predictions.Where(a => matches.Any(b => b.fixture.AwayTeam == a.fixture.AwayTeam &&
                                                             b.fixture.HomeTeam == a.fixture.HomeTeam &&
                                                             b.fixture.Journey == a.fixture.Journey &&
                                                             b.fixture.Result == QuinielaResult.X)).ToList();;

            PuntosX.ForEach(a => Log.Debug(a.fixture.Probability));

            Log.Debug("---------------");
            Log.Debug("Valores de 2s");
            var Puntos2 = predictions.Where(a => matches.Any(b => b.fixture.AwayTeam == a.fixture.AwayTeam &&
                                                             b.fixture.HomeTeam == a.fixture.HomeTeam &&
                                                             b.fixture.Journey == a.fixture.Journey &&
                                                             b.fixture.Result == QuinielaResult.TWO)).ToList();;

            Puntos2.ForEach(a => Log.Debug(a.fixture.Probability));

            Console.ReadKey();
        }