private void btnExport_Click(object sender, System.EventArgs e)
        {
            DBDataManager ddm = new DBDataManager();

            try
            {
                int      DateIndex   = 0;
                int      TickerIndex = -1;
                string[] ssHeader;
                string   DateFormat;
                GetFormatInfo(ref DateIndex, ref TickerIndex, out ssHeader, out DateFormat);

                CommonDataProvider cdp = (CommonDataProvider)ddm[tbSymbol.Text];
                StringBuilder      sb  = new StringBuilder();
                if (cbHasHeader.Checked)
                {
                    sb.Append(ddlFormat.SelectedItem.Text + "\r\n");
                }
                char r = GetSeperator();
                for (int i = 0; i < cdp.Count; i++)
                {
                    for (int j = 0; j < ssHeader.Length; j++)
                    {
                        if (j == DateIndex)
                        {
                            sb.Append(DateTime.FromOADate(cdp["DATE"][i]).ToString(DateFormat, DateTimeFormatInfo.InvariantInfo));
                        }
                        else if (j == TickerIndex)
                        {
                            sb.Append(cdp.GetStringData("Code"));
                        }
                        else
                        {
                            try
                            {
                                double[] dd = cdp[ssHeader[j]];
                                if (dd != null)
                                {
                                    sb.Append(dd[i].ToString("f2"));
                                }
                            }
                            catch
                            {
                            }
                        }
                        sb.Append(r);
                    }
                    sb.Remove(sb.Length - 1, 1);
                    sb.Append("\r\n");
                }
                tbCSVData.Text = sb.ToString();
            }
            catch (Exception ex)
            {
                lMsg.Text = ex.Message;
            }
        }
 private void btnClear_Click(object sender, System.EventArgs e)
 {
     try
     {
         string Filename = DBDataManager.GetHisDataFile(tbSymbol.Text);
         File.Delete(Filename);
     }
     catch (Exception ex)
     {
         lMsg.Text = ex.Message;
     }
 }
        private void ShowObjectFile(string FileName)
        {
            DataManagerBase dmb = new DBDataManager();
            FormulaChart    fc  = ObjectManager.ShowObjectOnChart("MSFT", FileName, dmb, true);

            if (fc != null)
            {
                int Width  = 800;
                int Height = 600;
                if (fc.Rect != Rectangle.Empty)
                {
                    Width  = fc.Rect.Width;
                    Height = fc.Rect.Height;
                }
                ibChart.ImageUrl = fc.SaveToWeb(Width, Height);
            }
        }
        private void btnDraw_Click(object sender, System.EventArgs e)
        {
            IDataManager idm = new DBDataManager();
            FormulaChart fc  = FormulaChart.CreateChart(idm["MSFT"]);

            fc.EndTime   = new DateTime(2004, 1, 9);
            fc.StartTime = fc.EndTime.AddMonths(-8);

            ObjectManager om = ObjectManager.FromChart(fc);

            if (cbPriceLabel.Checked)
            {
                LabelObject lo = new LabelObject();
                lo.InitPriceDateLabel();
                lo.ControlPoints[0] = GetObjectPoint(tbPriceDate.Text, tbLablePrice.Text);
                om.AddObject(lo);
            }
            ;

            if (cbArrowLine.Checked)
            {
                LineObject lo = new LineObject();
                lo.LinePen.Width     = 5;
                lo.LinePen.Color     = Color.Red;
                lo.LinePen.Alpha     = 100;
                lo.LinePen.DashStyle = DashStyle.DashDotDot;
                lo.InitArrowCap();
                lo.ControlPoints[0] = GetObjectPoint(tbArrowStartDate.Text, tbArrowStartPrice.Text);
                lo.ControlPoints[1] = GetObjectPoint(tbArrowStopDate.Text, tbArrowStopPrice.Text);
                om.AddObject(lo);
            }

            if (cbRegression.Checked)
            {
                LinearRegressionObject lro = new LinearRegressionObject();
                lro.InitChannel();
                lro.ControlPoints[0] = GetObjectPoint(tbRegStartDate.Text, "10");
                lro.ControlPoints[1] = GetObjectPoint(tbRegStopDate.Text, "10");
                lro.ShowAuxLine      = true;
                om.AddObject(lro);
            }
            ibChart.ImageUrl = fc.SaveToWeb(800, 600);
        }
        private void btnDelete_Click(object sender, System.EventArgs e)
        {
            DBDataManager ddm = new DBDataManager();

            try
            {
                CommonDataProvider cdp = (CommonDataProvider)ddm[tbSymbol.Text];
                lMsg.Text = "Original data count :" + cdp.Count + "<br>";
                cdp.DeleteData(dpStart.Date, dpEnd.Date);
                lMsg.Text += "New data count : " + cdp.Count;
                string Filename = DBDataManager.GetHisDataFile(tbSymbol.Text);
                if (File.Exists(Filename))
                {
                    File.Delete(Filename);
                }
                Utils.UpdateRealtime(tbSymbol.Text, cdp);
                cdp.SaveBinary(Filename);
            }
            catch (Exception ex)
            {
                lMsg.Text = ex.Message;
            }
        }
        private void btnMerge_Click(object sender, System.EventArgs e)
        {
            string[] Keys = { "OPEN", "HIGH", "LOW", "CLOSE", "VOLUME", "DATE", "ADJCLOSE" };
            string[] ss   = tbCSVData.Text.Trim().Split('\n');

            int DateIndex   = 0;
            int TickerIndex = -1;

            string[] ssHeader;
            string   DateFormat;

            GetFormatInfo(ref DateIndex, ref TickerIndex, out ssHeader, out DateFormat);

            SortedList slAllSymbol = new SortedList(Comparer.Default);
            SortedList slOneSymbol;

            char r = GetSeperator();

            for (int i = cbHasHeader.Checked?1:0; i < ss.Length; i++)
            {
                string[] sss = ss[i].Trim().Split(r);
                try
                {
                    string Ticker = tbSymbol.Text;
                    if (TickerIndex >= 0)
                    {
                        Ticker = sss[TickerIndex];
                    }
                    slOneSymbol = (SortedList)slAllSymbol[Ticker];
                    if (Ticker == "")
                    {
                        throw new Exception("Symbol can't be empty!");
                    }
                    if (slOneSymbol == null)
                    {
                        slOneSymbol         = new SortedList(Comparer.Default);
                        slAllSymbol[Ticker] = slOneSymbol;
                    }

                    slOneSymbol[DateTime.ParseExact(sss[DateIndex].Trim(),
                                                    DateFormat,
                                                    DateTimeFormatInfo.InvariantInfo)
                    ] = sss;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message + ";" + sss[DateIndex] + ";" + DateFormat);
                }
            }

            lMsg.Text = "";
            DBDataManager ddm = new DBDataManager();

            try
            {
                foreach (string s in slAllSymbol.Keys)
                {
                    slOneSymbol = (SortedList)slAllSymbol[s];
                    double[][] ds = new double[7][];
                    for (int i = 0; i < ds.Length; i++)
                    {
                        ds[i] = new double[slOneSymbol.Count];
                        for (int j = 0; j < ds[i].Length; j++)
                        {
                            ds[i][j] = double.NaN;
                        }
                    }

                    for (int i = 0; i < slOneSymbol.Count; i++)
                    {
                        ds[5][i] = ((DateTime)slOneSymbol.GetKey(i)).ToOADate();
                        for (int j = 0; j < ssHeader.Length; j++)
                        {
                            if (j != DateIndex && j != TickerIndex)
                            {
                                int k = Array.IndexOf(Keys, ssHeader[j].ToUpper());
                                if (k >= 0)
                                {
                                    string[] sss = (string[])slOneSymbol.GetByIndex(i);
                                    ds[k][i] = double.Parse(sss[j]);
                                }
                            }
                        }
                        for (int j = 0; j < ds.Length; j++)
                        {
                            if (double.IsNaN(ds[j][i]))
                            {
                                ds[j][i] = ds[3][i];
                            }
                        }
                    }

                    CommonDataProvider cdp      = (CommonDataProvider)ddm[s];
                    CommonDataProvider cdpDelta = new CommonDataProvider(null);
                    cdpDelta.LoadBinary(ds);

                    lMsg.Text += "Symbol:" + s + "; Original data count :" + cdp.Count + "; Merge data count : " + cdpDelta.Count + "; ";
                    cdp.Merge(cdpDelta);
                    lMsg.Text += "New data count : " + cdp.Count + "<br>";
                    Impersonate.ChangeToAdmin();
                    Utils.UpdateRealtime(s, cdp);
                    cdp.SaveBinary(DBDataManager.GetHisDataFile(s));
                }
            }
            catch (Exception ex)
            {
                lMsg.Text = ex.Message;
            }
        }
Exemple #7
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");
                DataManagerBase dmb = Utils.GetDefaultDataManager();
                DataTable       dt  = dmb.GetSymbolList();
                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;
            }
        }