Ejemplo n.º 1
0
        static private FixDataResult TestGood(IDataManager idm, string Symbol, bool OnlyUp2Date)
        {
            IDataProvider idp = idm[Symbol, Config.FixDataTestDays];

            double[]      High = idp["HIGH"];
            double[]      Low  = idp["LOW"];
            double[]      Date = idp["DATE"];
            FixDataResult fdr  = FixDataResult.OK;

            for (int i = Date.Length - 1; i >= 1; i--)
            {
                if (!OnlyUp2Date)
                {
                    double d1    = Low[i] / High[i - 1];             //dd[i]/dd[i-1];
                    double d2    = High[i] / Low[i - 1];
                    double Delta = Config.FixDataDifference / 100.0;
                    if (d2 < (1.0 - Delta) || d1 > (1.0 + Delta))
                    {
                        Tools.Log(Symbol + ":Delta = " + d1 + "," + d2 + ":" + DateTime.FromOADate(Date[i]));
                        fdr = FixDataResult.Others;
                    }

                    if (Date[i] - Date[i - 1] > Config.FixDataGapDays)
                    {
                        Tools.Log(Symbol + ":GapDays:" + DateTime.FromOADate(Date[i]));
                        fdr = FixDataResult.Others;
                    }
                }
                if (i == Date.Length - 1)
                {
                    if ((DateTime.Now.ToOADate() - Date[i]) > Config.FixDataNoDataDays)
                    {
                        Tools.Log(Symbol + ":NoData:" + DateTime.FromOADate(Date[i]));
                        fdr = FixDataResult.NoData;
                    }
                }
            }
            if (Date.Length == 0)
            {
                fdr = fdr = FixDataResult.NoData;
            }
            return(fdr);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Test days : FixData.TestDays
        /// When data increase or decline beyond +/-"FixData.Difference"% , reload data
        /// When data lost for "FixData.GapDays" days, reload data, still no data then delete
        /// When no data for latest "FixData.NoDataDays" days, reload data, still no data then delete
        ///
        /// Result saved in QuoteCode
        /// -1 : Stocks should be deleted
        /// -2 : Network error, Should redownload
        /// -3 : No need to fix again
        /// -4 : Fixed symbols
        /// </summary>
        /// <param name="Sender"></param>
        static public void FixData(object Sender)
        {
            Tools.Log("FixData started");
            try
            {
                DataTable dtSkip = DB.GetDataTable("select QuoteCode from ScanedQuote where ConditionId=-3");
                ArrayList alSkip = new ArrayList();
                foreach (DataRow dr in dtSkip.Rows)
                {
                    alSkip.Add(dr[0].ToString());
                }

                DB.DoCommand("delete from ScanedQuote where ConditionId<0 and ConditionId<>-3");
                DataTable     dt  = DB.GetDataTable("select QuoteCode from stockdata");
                DBDataManager ddm = new DBDataManager();
                FixedCount    = 0;
                FixErrorCount = 0;
                TotalCount    = dt.Rows.Count;
                for (int j = 0; j < dt.Rows.Count; j++)
                {
                    NowIndex = j + 1;
                    DataRow dr     = dt.Rows[j];
                    string  Symbol = dr["QuoteCode"].ToString();
                    try
                    {
                        if (TestGood(ddm, Symbol, false) != FixDataResult.OK)
                        {
                            if (alSkip.IndexOf(Symbol) >= 0)
                            {
                                if (TestGood(ddm, Symbol, true) == FixDataResult.OK)
                                {
                                    continue;
                                }
                                else
                                {
                                    DB.DoCommand("delete from ScanedQuote where ConditionId=-3 and QuoteCode='" + Symbol + "'");
                                }
                            }

                            for (int k = 0; k < 3; k++)
                            {
                                try
                                {
                                    Utils.DownloadYahooHistory(Symbol, true, false);
                                    break;
                                }
                                catch (WebException)
                                {
                                    if (k == 2)
                                    {
                                        throw;
                                    }
                                }
                            }

                            FixDataResult fdr1 = TestGood(ddm, Symbol, false);
                            FixDataResult fdr2 = TestGood(ddm, Symbol, true);
                            if (fdr2 == FixDataResult.NoData)
                            {
                                InsertQuote(-1, Symbol);
                            }
                            else if (fdr1 == FixDataResult.Others && fdr2 == FixDataResult.OK)
                            {
                                InsertQuote(-3, Symbol);
                            }
                            else
                            {
                                InsertQuote(-4, Symbol);
                            }
                            FixedCount++;
                        }
                    }
                    catch (Exception e)
                    {
                        if (e.Message.IndexOf("404") >= 0)
                        {
                            InsertQuote(-1, Symbol);
                        }
                        else
                        {
                            InsertQuote(-2, Symbol);
                        }
                        Tools.Log("FixData:" + Symbol + ";" + e.Message + ";" + e.GetType());
                        FixErrorCount++;
                    }
                    Thread.Sleep(1);
                }
                Tools.Log("FixData finished");
            }
            finally
            {
                FixDataThread = null;
            }
        }