Beispiel #1
0
        public static void SaveCCScoresToDb(DateTime nowDate, CandidateParameter cp, ParameterdCandidateStrategy pcs)
        {
            string tableName = string.Format("{0}_CCSCORE_{1}", cp.MainSymbol, cp.DealInfoLastMinutes / (7 * 24 * 12 * 5));
            long   nowTime   = WekaUtils.GetTimeFromDate(nowDate);

            try
            {
                Feng.Data.DbHelper.Instance.ExecuteNonQuery(string.Format("SELECT TOP 1 * FROM {0} WHERE TIME = -1", tableName));
            }
            catch (Exception)
            {
                string sqlCreate = string.Format(@"CREATE TABLE {0}(
	[Time] [bigint] NOT NULL,
	[scores] [varbinary](max) NOT NULL,
	[nda] [varbinary](max) NOT NULL,
	[nds] [varbinary](max) NOT NULL,
 CONSTRAINT [PK_{0}] PRIMARY KEY CLUSTERED 
(
	[Time] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]", tableName);
                Feng.Data.DbHelper.Instance.ExecuteNonQuery(sqlCreate);
            }

            long[, ,] ndas        = new long[Parameters.AllDealTypes.Length, cp.BatchTps.Length, cp.BatchSls.Length];
            long[, ,] ndss        = new long[Parameters.AllDealTypes.Length, cp.BatchTps.Length, cp.BatchSls.Length];
            double[, ,] nowScores = new double[Parameters.AllDealTypes.Length, cp.BatchTps.Length, cp.BatchSls.Length];

            pcs.IterateClassifierInfos((k, ii, jj, h) =>
            {
                nowScores[k, ii, jj] = pcs.m_classifierInfoIdxs[k, ii, jj, h].Deals.NowScore;
                ndas[k, ii, jj]      = pcs.m_classifierInfoIdxs[k, ii, jj, h].Deals.DealLastTimeAvg;
                ndss[k, ii, jj]      = pcs.m_classifierInfoIdxs[k, ii, jj, h].Deals.DealLastTimeStd;
            });

            string sql = string.Format("INSERT INTO [{0}] ([Time],[scores],[nda],[nds]) VALUES (@Time, @score, @nda, @nds)", tableName);
            var    cmd = new System.Data.SqlClient.SqlCommand(sql);

            cmd.Parameters.AddWithValue("@Time", nowTime);
            cmd.Parameters.AddWithValue("@score", CCScoreData.SerializeScores(nowScores));
            cmd.Parameters.AddWithValue("@nda", CCScoreData.SerializeScoreTimes(ndas));
            cmd.Parameters.AddWithValue("@nds", CCScoreData.SerializeScoreTimes(ndss));

            try
            {
                Feng.Data.DbHelper.Instance.ExecuteNonQuery(string.Format("DELETE FROM {0} WHERE TIME = '{1}'", tableName, WekaUtils.GetTimeFromDate(nowDate)));

                Feng.Data.DbHelper.Instance.ExecuteNonQuery(cmd);
            }
            catch (Exception)
            {
            }
        }
Beispiel #2
0
        public List <CandidateClassifier> GetBestClassifierInfo(ParameterdCandidateStrategy parent)
        {
            double[] sum    = new double[Parameters.AllDealTypes.Length];
            double[] oscsum = new double[Parameters.AllDealTypes.Length];

            for (int k = 0; k < Parameters.AllDealTypes.Length; ++k)
            {
                sum[k]    = 0;
                oscsum[k] = 0;
            }
            parent.IterateClassifierInfos2((cc) =>
            {
                sum[WekaUtils.GetDealTypeIdx(cc.DealType)] += cc.Deals.NowScore;
            });

            int oscCnt = 0;

            parent.IterateClassifierInfos((k, i, j, h) =>
            {
                if (TestParameters.EnablePerhourTrain)
                {
                    if (h != parent.CurrentTestHour)
                    {
                        return(true);
                    }
                }
                if (k > 0)
                {
                    return(true);
                }

                if (parent.m_classifierInfoIdxs[0, i, j, h].Deals.NowScore <= 0 && parent.m_classifierInfoIdxs[1, i, j, h].Deals.NowScore <= 0)
                {
                    oscsum[0] += parent.m_classifierInfoIdxs[0, i, j, h].Deals.NowScore;
                    oscsum[1] += parent.m_classifierInfoIdxs[1, i, j, h].Deals.NowScore;
                    oscCnt++;
                }
                return(true);
            });

            //for (int k = 0; k < Parameters.AllDealTypes.Length; ++k)
            //{
            //    sum[k] -= oscsum[k];
            //}
            //double oscsums = oscsum[0] + oscsum[1];

            int selectedDeal = -1;

            if (sum[0] < sum[1] && sum[0] < 0)
            {
                selectedDeal = 0;
            }
            else if (sum[1] < sum[0] && sum[1] < 0)
            {
                selectedDeal = 1;
            }
            if (selectedDeal == -1)
            {
                return(null);
            }

            if (oscCnt > 400)
            {
                return(null);
            }

            //selectedDeal = 1 - selectedDeal;

            List <CandidateClassifier> ret = new List <CandidateClassifier>();

            parent.IterateClassifierInfos((k, i, j, h) =>
            {
                if (k != selectedDeal)
                {
                    return;
                }

                if (TestParameters.EnablePerhourTrain)
                {
                    if (h != parent.CurrentTestHour)
                    {
                        return;
                    }
                }

                switch (m_choiceType)
                {
                case 0:
                    //if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore < 0)// && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                    {
                        ret.Add(parent.m_classifierInfoIdxs[k, i, j, h]);
                    }
                    break;
                //case 1:
                //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore > 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                //    {
                //        ret.Add(parent.m_classifierInfoIdxs[k, i, j, h]);
                //    }
                //    break;
                //case 2:
                //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore < 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                //    {
                //        ret.Add(parent.m_classifierInfoIdxs[k, i, j, h]);
                //    }
                //    break;
                //case 3:
                //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore > 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore < 0)
                //    {
                //        ret.Add(parent.m_classifierInfoIdxs[k, i, j, h]);
                //    }
                //    break;

                case 4:
                    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore < 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                    {
                        ret.Add(parent.m_classifierInfoIdxs[1 - k, i, j, h]);
                    }
                    break;
                    //case 5:
                    //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore > 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                    //    {
                    //        ret.Add(parent.m_classifierInfoIdxs[1 - k, i, j, h]);
                    //    }
                    //    break;
                    //case 6:
                    //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore < 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                    //    {
                    //        ret.Add(parent.m_classifierInfoIdxs[1 - k, i, j, h]);
                    //    }
                    //    break;
                    //case 7:
                    //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore > 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore < 0)
                    //    {
                    //        ret.Add(parent.m_classifierInfoIdxs[1 - k, i, j, h]);
                    //    }
                    //    break;
                }
            });
            return(ret);
        }
Beispiel #3
0
        public List<CandidateClassifier> GetBestClassifierInfo(ParameterdCandidateStrategy parent)
        {
            double[] sum = new double[Parameters.AllDealTypes.Length];
            double[] oscsum = new double[Parameters.AllDealTypes.Length];

            for (int k = 0; k < Parameters.AllDealTypes.Length; ++k)
            {
                sum[k] = 0;
                oscsum[k] = 0;
            }
            parent.IterateClassifierInfos2( (cc) =>
            {
                sum[WekaUtils.GetDealTypeIdx(cc.DealType)] += cc.Deals.NowScore;
            });

            int oscCnt = 0;

            parent.IterateClassifierInfos((k, i, j, h) =>
            {
                if (TestParameters.EnablePerhourTrain)
                {
                    if (h != parent.CurrentTestHour)
                        return true;
                }
                if (k > 0)
                    return true;

                if (parent.m_classifierInfoIdxs[0, i, j, h].Deals.NowScore <= 0 && parent.m_classifierInfoIdxs[1, i, j, h].Deals.NowScore <= 0)
                {
                    oscsum[0] += parent.m_classifierInfoIdxs[0, i, j, h].Deals.NowScore;
                    oscsum[1] += parent.m_classifierInfoIdxs[1, i, j, h].Deals.NowScore;
                    oscCnt++;
                }
                return true;
            });

            //for (int k = 0; k < Parameters.AllDealTypes.Length; ++k)
            //{
            //    sum[k] -= oscsum[k];
            //}
            //double oscsums = oscsum[0] + oscsum[1];

            int selectedDeal = -1;
            if (sum[0] < sum[1] && sum[0] < 0)
            {
                selectedDeal = 0;
            }
            else if (sum[1] < sum[0] && sum[1] < 0)
            {
                selectedDeal = 1;
            }
            if (selectedDeal == -1)
                return null;

            if (oscCnt > 400)
                return null;

            //selectedDeal = 1 - selectedDeal;

            List<CandidateClassifier> ret = new List<CandidateClassifier>();
            parent.IterateClassifierInfos((k, i, j, h) =>
            {
                if (k != selectedDeal)
                    return;

                if (TestParameters.EnablePerhourTrain)
                {
                    if (h != parent.CurrentTestHour)
                        return;
                }

                switch (m_choiceType)
                {
                    case 0:
                        //if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore < 0)// && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                        {
                            ret.Add(parent.m_classifierInfoIdxs[k, i, j, h]);
                        }
                        break;
                    //case 1:
                    //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore > 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                    //    {
                    //        ret.Add(parent.m_classifierInfoIdxs[k, i, j, h]);
                    //    }
                    //    break;
                    //case 2:
                    //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore < 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                    //    {
                    //        ret.Add(parent.m_classifierInfoIdxs[k, i, j, h]);
                    //    }
                    //    break;
                    //case 3:
                    //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore > 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore < 0)
                    //    {
                    //        ret.Add(parent.m_classifierInfoIdxs[k, i, j, h]);
                    //    }
                    //    break;

                    case 4:
                        if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore < 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                        {
                            ret.Add(parent.m_classifierInfoIdxs[1 - k, i, j, h]);
                        }
                        break;
                    //case 5:
                    //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore > 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                    //    {
                    //        ret.Add(parent.m_classifierInfoIdxs[1 - k, i, j, h]);
                    //    }
                    //    break;
                    //case 6:
                    //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore < 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                    //    {
                    //        ret.Add(parent.m_classifierInfoIdxs[1 - k, i, j, h]);
                    //    }
                    //    break;
                    //case 7:
                    //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore > 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore < 0)
                    //    {
                    //        ret.Add(parent.m_classifierInfoIdxs[1 - k, i, j, h]);
                    //    }
                    //    break;
                }
            });
            return ret;
        }