예제 #1
0
 /// <summary>
 /// 填充概率和返回率
 /// </summary>
 /// <param name="model"></param>
 private void FillOdds1x2History(Odds1x2History model)
 {
     model.returnrate = 1 / ((1 / model.home) + (1 / model.draw) + (1 / model.away));
     model.homep      = 100 / (model.home / model.returnrate);
     model.drawp      = 100 / (model.draw / model.returnrate);
     model.awayp      = 100 / (model.away / model.returnrate);
 }
예제 #2
0
 private void FillOdds1x2Kelly(Odds1x2History model, string tcompanyid)
 {
     if (string.IsNullOrEmpty(tcompanyid))
     {
         ds          = dal.GetAvgNumber(model.scheduleid, model.time);
         model.homek = model.home * (float.Parse(ds.Tables[0].Rows[0]["avghomep"].ToString()));
         model.drawk = model.draw * (float.Parse(ds.Tables[0].Rows[0]["avgdrawp"].ToString()));
         model.awayk = model.away * (float.Parse(ds.Tables[0].Rows[0]["avgawayp"].ToString()));
     }
     else
     {
         ds = dal.GetCompanyLastOdds(model.scheduleid, int.Parse(tcompanyid), model.time);
         if (ds.Tables[0].Rows.Count == 1)
         {
             DataRow dr = ds.Tables[0].Rows[0];
             model.homek = model.home * float.Parse(dr["homep"].ToString());
             model.drawk = model.draw * float.Parse(dr["drawp"].ToString());
             model.awayk = model.away * float.Parse(dr["awayp"].ToString());
         }
         else
         {
             ds          = dal.GetAvgNumber(model.scheduleid, model.time);
             model.homek = model.home * (float.Parse(ds.Tables[0].Rows[0]["avghomep"].ToString()));
             model.drawk = model.draw * (float.Parse(ds.Tables[0].Rows[0]["avgdrawp"].ToString()));
             model.awayk = model.away * (float.Parse(ds.Tables[0].Rows[0]["avgawayp"].ToString()));
         }
     }
 }
예제 #3
0
        /// <summary>
        /// 增加一条数据
        /// </summary>
        public string Add(string scheduleID, string companyids, string historyids, DateTime time)
        {
            WebClientBLL bll = new WebClientBLL();

            string[] companyidArr = companyids.Split(',');
            string[] historyidArr = historyids.Split(',');
            int      count        = 0;

            if (companyidArr.Length == historyidArr.Length)
            {
                dal.Delete(scheduleID);
                for (int i = 0; i < companyidArr.Length; i++)
                {
                    string s = bll.GetOddsHistoryContent(historyidArr[i]);

                    Lexer    lexer     = new Lexer(s);
                    Parser   parser    = new Parser(lexer);
                    NodeList bodyNodes = parser.Parse(new TagNameFilter("HTML"))[0].Children.ExtractAllNodesThatMatch(new TagNameFilter("BODY"))[0].Children;
                    ITag     table     = bodyNodes.SearchFor(typeof(Winista.Text.HtmlParser.Tags.TableTag))[0] as ITag;

                    NodeList tableRows = table.Children.SearchFor(typeof(Winista.Text.HtmlParser.Tags.TableRow));

                    for (int f = 0; f < tableRows.Count; f++)
                    {
                        ITag row = tableRows[f] as ITag;
                        if (row.Attributes["ALIGN"].Equals("center") && row.Attributes["BGCOLOR"].Equals("#FFFFFF"))
                        {
                            Odds1x2History model = new Odds1x2History();
                            model.companyid  = int.Parse(companyidArr[i]);
                            model.scheduleid = int.Parse(scheduleID);
                            model.home       = float.Parse(row.Children[0].ToPlainTextString());
                            model.draw       = float.Parse(row.Children[1].ToPlainTextString());
                            model.away       = float.Parse(row.Children[2].ToPlainTextString());
                            this.FillOdds1x2History(model);
                            string[] t2 = row.Children[3].ToPlainTextString().Replace("showtime(", "").Replace(")", "").Split(',');
                            int      yy = int.Parse(t2[0]);
                            int      mm = int.Parse(t2[1].Remove(2));
                            int      dd = int.Parse(t2[2]);
                            int      hh = int.Parse(t2[3]);
                            int      mi = int.Parse(t2[4]);
                            int      ss = int.Parse(t2[5]);
                            model.time = new DateTime(yy, mm, dd, hh, mi, ss, DateTimeKind.Utc).AddHours(8d);
                            if (model.time > time)
                            {
                                continue;
                            }
                            dal.Add(model);
                            count++;
                        }
                    }
                }
            }
            JSONHelper json = new JSONHelper();

            json.success     = true;
            json.totlalCount = count;
            return(json.ToString());
        }
예제 #4
0
        public string GetOdds1x2ChartsData(string scheduleID, string[] companyids, double time)
        {
            DataSet  dsStart = dal.GetCompanyStartPoint(scheduleID, companyids);
            DataSet  dsEnd   = dal.GetCompanyEndPoint(scheduleID, companyids);
            DateTime firsttime;
            DateTime lasttime = DateTime.Parse(dsEnd.Tables[0].Rows[0][0].ToString());

            if (time == 0)
            {
                firsttime = DateTime.Parse(dsStart.Tables[0].Rows[0][0].ToString());
            }
            else
            {
                firsttime = lasttime.AddSeconds(0 - time);
            }

            if (firsttime < DateTime.Parse(dsStart.Tables[0].Rows[0][0].ToString()))
            {
                firsttime = DateTime.Parse(dsStart.Tables[0].Rows[0][0].ToString());
            }

            double         timespace  = (lasttime - firsttime).TotalSeconds / 30;
            int            index      = 0;
            Odds1x2History firthmodel = new Odds1x2History();
            JArray         data       = new JArray();

            while (firsttime < lasttime)
            {
                ds = dal.GetAveNumByCompanys(scheduleID, string.Join(",", companyids), firsttime);
                if (ds.Tables[0].Rows.Count == 1)
                {
                    JObject        item  = new JObject();
                    DataRow        dr    = ds.Tables[0].Rows[0];
                    Odds1x2History model = new Odds1x2History();
                    model.home = float.Parse(dr["avghome"].ToString());
                    model.draw = float.Parse(dr["avgdraw"].ToString());
                    model.away = float.Parse(dr["avgaway"].ToString());
                    if (index == 0)
                    {
                        firthmodel = model;
                    }
                    item.Add("home", (model.home - firthmodel.home) * 100);
                    item.Add("draw", (model.draw - firthmodel.draw) * 100);
                    item.Add("away", (model.away - firthmodel.away) * 100);
                    item.Add("time", firsttime.ToString());
                    data.Add(item);
                    firsttime = firsttime.AddSeconds(timespace);
                    index++;
                }
            }
            JObject result = new JObject();

            result.Add(new JProperty("totlalCount", data.Count));
            result.Add(new JProperty("data", data));
            return(result.ToString());
        }
예제 #5
0
        /// <summary>
        /// 返回某场比赛某时间前所选公司的赔率
        /// </summary>
        /// <param name="schedule"></param>
        /// <param name="time"></param>
        /// <returns></returns>
        public List <Odds1x2History> GetLastListByCompanys(int scheduleid, string companyids, DateTime time)
        {
            StringBuilder strSql = new StringBuilder();

            //select AVG(home) avghome, AVG(draw) avgdraw, AVG(away) avgaway,AVG(homep) avghomep, AVG(drawp) avgdrawp, AVG(awayp) avgawayp from odds1x2history a where ID=(select min(ID) from odds1x2history where companyid=a.companyid and (time <= '2010/9/12 14:58:00') AND (scheduleid = '376366') and companyid IN (474,499,517,18,545,81,659,676,660,594,601,582,531,456,466,436,124,64,658,32,33))

            strSql.Append("SELECT  a.id, a.scheduleid, a.companyid, a.home, a.draw, a.away, a.homep, a.drawp, a.awayp, a.returnrate, a.time");
            strSql.Append(" FROM odds1x2history a where ID=(select min(ID) from odds1x2history");
            strSql.Append(" WHERE (time <= @time) AND (scheduleid = @scheduleid) AND companyid IN (" + companyids + ") AND companyid=a.companyid)");
            SqlParameter[] parameters =
            {
                new SqlParameter("@time",       SqlDbType.DateTime),
                new SqlParameter("@scheduleid", SqlDbType.Int)
            };
            parameters[0].Value = time;
            parameters[1].Value = scheduleid;

            List <Odds1x2History> list = new List <Odds1x2History>();

            DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);

            if (ds.Tables[0].Rows.Count > 0)
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    Odds1x2History model = new Odds1x2History();
                    model.id         = (int)dr["id"];
                    model.scheduleid = (int)dr["scheduleid"];
                    model.companyid  = (int)dr["companyid"];
                    model.home       = float.Parse(dr["home"].ToString());
                    model.draw       = float.Parse(dr["draw"].ToString());
                    model.away       = float.Parse(dr["away"].ToString());
                    model.homep      = float.Parse(dr["homep"].ToString());
                    model.drawp      = float.Parse(dr["drawp"].ToString());
                    model.awayp      = float.Parse(dr["awayp"].ToString());
                    model.returnrate = float.Parse(dr["returnrate"].ToString());
                    model.time       = (DateTime)dr["time"];
                    list.Add(model);
                }
            }
            return(list);
        }
예제 #6
0
        /// <summary>
        /// 返回某场比赛某公司的赔率变化列表
        /// </summary>
        public List <Odds1x2History> GetList(string scheduleid, string companyid)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("SELECT id, scheduleid, companyid, home, draw, away, homep, drawp, awayp, returnrate, time FROM      odds1x2history");
            strSql.Append(" WHERE (companyid = @companyid) AND (scheduleid = @scheduleid) ORDER BY time DESC");
            SqlParameter[] parameters =
            {
                new SqlParameter("@scheduleid", SqlDbType.Int),
                new SqlParameter("@companyid",  SqlDbType.Int)
            };
            parameters[0].Value = scheduleid;
            parameters[1].Value = companyid;
            DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);
            List <Odds1x2History> list = new List <Odds1x2History>();

            if (ds.Tables[0].Rows.Count > 0)
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    Odds1x2History model = new Odds1x2History();
                    model.id         = (int)dr["id"];
                    model.scheduleid = (int)dr["scheduleid"];
                    model.companyid  = (int)dr["companyid"];
                    model.home       = float.Parse(dr["home"].ToString());
                    model.draw       = float.Parse(dr["draw"].ToString());
                    model.away       = float.Parse(dr["away"].ToString());
                    model.homep      = float.Parse(dr["homep"].ToString());
                    model.drawp      = float.Parse(dr["drawp"].ToString());
                    model.awayp      = float.Parse(dr["awayp"].ToString());
                    model.returnrate = float.Parse(dr["returnrate"].ToString());
                    model.time       = (DateTime)dr["time"];
                    list.Add(model);
                }
                return(list);
            }
            else
            {
                return(null);
            }
        }
예제 #7
0
        /// <summary>
        /// 返回某场比赛某时间前所选公司的赔率
        /// </summary>
        /// <param name="schedule"></param>
        /// <param name="time"></param>
        /// <returns></returns>
        public List <Odds1x2History> GetLastListByCompanys(int scheduleid, string companyids, DateTime time)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("SELECT  a.id, a.scheduleid, a.companyid, a.home, a.draw, a.away, a.homep, a.drawp, a.awayp, a.returnrate, a.time FROM odds1x2history AS a INNER JOIN (SELECT   companyid, MAX(time) AS time FROM odds1x2history");
            strSql.Append(" WHERE (time <= @time) AND (scheduleid = @scheduleid) GROUP BY companyid) AS b ON a.companyid = b.companyid AND a.companyid IN (" + companyids + ") AND a.time = b.time AND a.scheduleid = @scheduleid");
            SqlParameter[] parameters =
            {
                new SqlParameter("@time",       SqlDbType.DateTime),
                new SqlParameter("@scheduleid", SqlDbType.Int)
            };
            parameters[0].Value = time;
            parameters[1].Value = scheduleid;

            List <Odds1x2History> list = new List <Odds1x2History>();

            DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);

            if (ds.Tables[0].Rows.Count > 0)
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    Odds1x2History model = new Odds1x2History();
                    model.id         = (int)dr["id"];
                    model.scheduleid = (int)dr["scheduleid"];
                    model.companyid  = (int)dr["companyid"];
                    model.home       = float.Parse(dr["home"].ToString());
                    model.draw       = float.Parse(dr["draw"].ToString());
                    model.away       = float.Parse(dr["away"].ToString());
                    model.homep      = float.Parse(dr["homep"].ToString());
                    model.drawp      = float.Parse(dr["drawp"].ToString());
                    model.awayp      = float.Parse(dr["awayp"].ToString());
                    model.returnrate = float.Parse(dr["returnrate"].ToString());
                    model.time       = (DateTime)dr["time"];
                    list.Add(model);
                }
            }
            return(list);
        }
예제 #8
0
        public string GetOddsPointChartsData(string scheduleID, string[] companyids)
        {
            JSONHelper json = new JSONHelper();

            json.success = true;
            DataSet dsAllTime = dal.GetChangeTimesByCompanys(scheduleID, string.Join(",", companyids));

            List <float> avehomeklist  = new List <float>();
            List <float> avedrawklist  = new List <float>();
            List <float> aveawayklist  = new List <float>();
            List <float> avehomevlist  = new List <float>();
            List <float> avedrawvlist  = new List <float>();
            List <float> aveawayvlist  = new List <float>();
            List <float> avereratelist = new List <float>();

            Odds1x2History lastmodel = new Odds1x2History();

            foreach (DataRow dr in dsAllTime.Tables[0].Rows)
            {
                ds = dal.GetAvgNumber(int.Parse(scheduleID), DateTime.Parse(dr[0].ToString()));
                List <Odds1x2History> oddsList   = dal.GetLastListByCompanys(int.Parse(scheduleID), string.Join(",", companyids), DateTime.Parse(dr["time"].ToString()));
                List <float>          homeklist  = new List <float>();
                List <float>          drawklist  = new List <float>();
                List <float>          awayklist  = new List <float>();
                List <float>          reratelist = new List <float>();
                foreach (Odds1x2History item in oddsList)
                {
                    homeklist.Add(item.home * float.Parse(ds.Tables[0].Rows[0]["avghomep"].ToString()));
                    drawklist.Add(item.draw * float.Parse(ds.Tables[0].Rows[0]["avgdrawp"].ToString()));
                    awayklist.Add(item.away * float.Parse(ds.Tables[0].Rows[0]["avgawayp"].ToString()));
                    reratelist.Add(item.returnrate * 100);
                }
                avehomeklist.Add(homeklist.Average());
                avedrawklist.Add(drawklist.Average());
                aveawayklist.Add(awayklist.Average());
                avehomevlist.Add(this.CalculationVariance(homeklist));
                avedrawvlist.Add(this.CalculationVariance(drawklist));
                aveawayvlist.Add(this.CalculationVariance(awayklist));
                avereratelist.Add(reratelist.Average());
            }
            int h = 0, d = 0, a = 0;
            int hh = 0, dd = 0, aa = 0;

            for (int i = 1; i < avehomeklist.Count; i++)
            {
                if (avehomeklist[i] < avehomeklist[i - 1])
                {
                    h++;
                }
                else if (avehomeklist[i] > avehomeklist[i - 1])
                {
                    h--;
                }
                if (avedrawklist[i] < avedrawklist[i - 1])
                {
                    d++;
                }
                else if (avedrawklist[i] > avedrawklist[i - 1])
                {
                    d--;
                }
                if (aveawayklist[i] < aveawayklist[i - 1])
                {
                    a++;
                }
                else if (aveawayklist[i] > aveawayklist[i - 1])
                {
                    a--;
                }
                if (avehomevlist[i] <= avehomevlist[i - 1])
                {
                    if (avehomeklist[i] < avehomeklist[i - 1])
                    {
                        hh++;
                    }
                    else if (avehomeklist[i] > avehomeklist[i - 1])
                    {
                        hh--;
                    }
                }
                if (avedrawvlist[i] <= avedrawvlist[i - 1])
                {
                    if (avedrawklist[i] < avedrawklist[i - 1])
                    {
                        dd++;
                    }
                    else if (avedrawklist[i] > avedrawklist[i - 1])
                    {
                        dd--;
                    }
                }
                if (aveawayvlist[i] <= aveawayvlist[i - 1])
                {
                    if (aveawayklist[i] < aveawayklist[i - 1])
                    {
                        aa++;
                    }
                    else if (aveawayklist[i] > aveawayklist[i - 1])
                    {
                        aa--;
                    }
                }
            }
            json.AddItem("name", "主胜");
            json.AddItem("point", h.ToString());
            json.AddItem("xpoint", hh.ToString());
            json.ItemOk();
            json.AddItem("name", "平局");
            json.AddItem("point", d.ToString());
            json.AddItem("xpoint", dd.ToString());
            json.ItemOk();
            json.AddItem("name", "客胜");
            json.AddItem("point", a.ToString());
            json.AddItem("xpoint", aa.ToString());
            json.ItemOk();


            json.totlalCount = 3;
            return(json.ToString());
        }
예제 #9
0
        public string GetOddsCompanyChartsData(string scheduleID, string[] companyids, double time)
        {
            JSONHelper json = new JSONHelper();

            json.success = true;
            DataSet  dsStart = dal.GetCompanyStartPoint(scheduleID, companyids);
            DataSet  dsEnd   = dal.GetCompanyEndPoint(scheduleID, companyids);
            DateTime firsttime;
            DateTime lasttime = DateTime.Parse(dsEnd.Tables[0].Rows[0][0].ToString());

            if (time == 0)
            {
                firsttime = DateTime.Parse(dsStart.Tables[0].Rows[0][0].ToString());
            }
            else
            {
                firsttime = lasttime.AddSeconds(0 - time);
            }

            double timespace = (lasttime - firsttime).TotalSeconds / 60;

            while (firsttime <= lasttime)
            {
                Odds1x2History model = new Odds1x2History();
                ds = dal.GetAvgNumber(int.Parse(scheduleID), firsttime);
                DataRow dr = ds.Tables[0].Rows[0];

                List <Odds1x2History> oddsList = dal.GetLastListByCompanys(int.Parse(scheduleID), string.Join(",", companyids), firsttime);
                int home  = 0;
                int draw  = 0;
                int away  = 0;
                int nhome = 0;
                int ndraw = 0;
                int naway = 0;
                int count = 0;
                foreach (Odds1x2History item in oddsList)
                {
                    item.homek = item.home * float.Parse(dr["avghomep"].ToString());
                    item.drawk = item.draw * float.Parse(dr["avgdrawp"].ToString());
                    item.awayk = item.away * float.Parse(dr["avgawayp"].ToString());
                    if (item.homek < item.returnrate * 100 - 2)
                    {
                        home++;
                    }
                    else if (item.homek >= item.returnrate * 100 + 2)
                    {
                        nhome--;
                    }
                    if (item.drawk < item.returnrate * 100 - 2)
                    {
                        draw++;
                    }
                    else if (item.drawk >= item.returnrate * 100 + 2)
                    {
                        ndraw--;
                    }
                    if (item.awayk < item.returnrate * 100 - 2)
                    {
                        away++;
                    }
                    else if (item.awayk >= item.returnrate * 100 + 2)
                    {
                        naway--;
                    }
                    count++;
                }
                json.AddItem("home", home.ToString());
                json.AddItem("draw", draw.ToString());
                json.AddItem("away", away.ToString());
                json.AddItem("nhome", nhome.ToString());
                json.AddItem("ndraw", ndraw.ToString());
                json.AddItem("naway", naway.ToString());
                json.AddItem("count", count.ToString());
                json.AddItem("time", firsttime.ToString());
                json.ItemOk();
                firsttime = firsttime.AddSeconds(timespace);
            }
            json.totlalCount = ds.Tables[0].Rows.Count;
            return(json.ToString());
        }
예제 #10
0
        /// <summary>
        /// 获得平均凯利线性图形
        /// </summary>
        /// <param name="scheduleID"></param>
        /// <param name="companyids"></param>
        /// <param name="time"></param>
        /// <returns></returns>
        public string GetKellyAverageLineChart(string scheduleID, string[] companyids, double time, bool isRefresh)
        {
            string    jsonStr = "";
            BetExpBLL bll     = new BetExpBLL();

            if (bll.Exists(int.Parse(scheduleID)) && !isRefresh)
            {
                BetExp betExp = bll.GetModel(int.Parse(scheduleID));
                jsonStr = betExp.data;
            }
            else
            {
                if (companyids == null || companyids.Length == 0)
                {
                    companyids = dal.getLastCompanyIDs(scheduleID, 1);
                }

                DataSet dsStart = dal.GetCompanyStartPoint(scheduleID, companyids);
                DataSet dsEnd   = dal.GetCompanyEndPoint(scheduleID, companyids);

                DateTime firsttime = DateTime.Parse(dsStart.Tables[0].Rows[0][0].ToString());
                DateTime lasttime  = DateTime.Parse(dsEnd.Tables[0].Rows[0][0].ToString());

                DateTime firsttime1 = lasttime.AddSeconds(-time);

                if (firsttime1 > firsttime)
                {
                    firsttime = firsttime1;
                }
                float inithome = 0;
                float initdraw = 0;
                float initaway = 0;
                float initrate = 0;

                JsonSerializer serializer = GetJsonSerializer();
                double         timespace  = lasttime.Subtract(firsttime).TotalSeconds / 30;
                Odds1x2History firthmodel = new Odds1x2History();
                JArray         data       = new JArray();
                while (firsttime <= lasttime)
                {
                    ds = dal.GetAveNumByCompanys(scheduleID, string.Join(",", companyids), firsttime);
                    if (ds.Tables[0].Rows.Count == 1)
                    {
                        DataRow               dr              = ds.Tables[0].Rows[0];
                        List <float>          homeKelly       = new List <float>();
                        List <float>          drawKelly       = new List <float>();
                        List <float>          awayKelly       = new List <float>();
                        List <float>          returnrateKelly = new List <float>();
                        List <Odds1x2History> oddsList        = dal.GetLastListByCompanys(int.Parse(scheduleID), string.Join(",", companyids), firsttime);
                        foreach (Odds1x2History item in oddsList)
                        {
                            homeKelly.Add(item.home * float.Parse(dr["avghomep"].ToString()));
                            drawKelly.Add(item.draw * float.Parse(dr["avgdrawp"].ToString()));
                            awayKelly.Add(item.away * float.Parse(dr["avgawayp"].ToString()));
                            returnrateKelly.Add(item.returnrate * 100);
                        }

                        JObject result = new JObject();
                        if (data.Count <= 0)
                        {
                            inithome = homeKelly.Average();
                            initdraw = drawKelly.Average();
                            initaway = awayKelly.Average();
                            initrate = returnrateKelly.Average();
                        }

                        result.Add("avehome", (homeKelly.Average() - inithome) * 10);
                        result.Add("avedraw", (drawKelly.Average() - initdraw) * 10);
                        result.Add("aveaway", (awayKelly.Average() - initaway) * 10);
                        result.Add("returnrate", (returnrateKelly.Average() - initrate) * 10);
                        result.Add("varhome", this.CalculationVariance(homeKelly));
                        result.Add("vardraw", this.CalculationVariance(drawKelly));
                        result.Add("varaway", this.CalculationVariance(awayKelly));
                        result.Add("time", JProperty.FromObject(firsttime, serializer));
                        data.Add(result);
                        firsttime = firsttime.AddSeconds(timespace);
                    }
                }
                jsonStr = data.ToString();
                bll.Delete(int.Parse(scheduleID));
                string[] valueArr = new string[data.Count];
                for (int i = 0; i < data.Count; i++)
                {
                    valueArr[i] = bll.GetTrendsValue(JObject.Parse(data[data.Count - (data.Count - i)].ToString()), "");
                }
                bll.Add(new BetExp(int.Parse(scheduleID), jsonStr, string.Join(",", valueArr), "*" + bll.GetChangesValue(data, ""), false));
            }
            return(jsonStr);
        }