Beispiel #1
0
 public override databases.baseDS.priceDataDataTable GetImportFromCSV(string fileName,string market,OnUpdatePriceData onUpdateDataFunc)
 {
     CultureInfo exchangeCulture = application.AppLibs.GetExchangeCulture(market);
     databases.baseDS.priceDataDataTable priceDataTbl = new databases.baseDS.priceDataDataTable();
     if (!Imports.Libs.CSV_ImportParse(fileName, ',', common.dateTimeLibs.DateTimeFormats.YYMMDD,
                          market, exchangeCulture, priceDataTbl, Libs.DoImportRow, onUpdateDataFunc, null)) return null;
     return priceDataTbl;
 }
Beispiel #2
0
 public static void ReAggregatePriceData(string code,CultureInfo stockCulture)
 {
     //Load main  pricedata
     databases.baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
     databases.DbAccess.LoadData(priceTbl, AppTypes.MainDataTimeScale.Code, DateTime.MinValue, DateTime.MaxValue, code);
     if (priceTbl == null) return;
     //Delete all summ pricedata
     databases.DbAccess.DeletePriceSumData(code);
     databases.AppLibs.AggregatePriceData(priceTbl, stockCulture, null);
 }
Beispiel #3
0
        public override databases.baseDS.priceDataDataTable GetImportFromCSV(string fileName, string market, OnUpdatePriceData onUpdateDataFunc)
        {
            CultureInfo exchangeCulture = application.AppLibs.GetExchangeCulture(market);

            databases.baseDS.priceDataDataTable priceDataTbl = new databases.baseDS.priceDataDataTable();
            if (!Imports.Libs.CSV_ImportParse(fileName, ',', common.dateTimeLibs.DateTimeFormats.YYMMDD,
                                              market, exchangeCulture, priceDataTbl, Libs.DoImportRow, onUpdateDataFunc, null))
            {
                return(null);
            }
            return(priceDataTbl);
        }
Beispiel #4
0
        public static DataBars GetData(databases.baseDS.priceDataDataTable dataTbl, int startIdx)
        {
            DataBars bars = new DataBars();

            for (int idx = startIdx; idx < dataTbl.Count; idx++)
            {
                bars.Add((double)dataTbl[idx].openPrice, (double)dataTbl[idx].highPrice,
                         (double)dataTbl[idx].lowPrice, (double)dataTbl[idx].closePrice,
                         (double)dataTbl[idx].volume, dataTbl[idx].onDate.ToOADate());
            }
            return(bars);
        }
Beispiel #5
0
        /// <summary>
        /// Override method - /// Import stock data of HOSE and HASTC from  http://banggia.ssi.com.vn/AjaxWebService.asmx
        /// </summary>
        /// <param name="updateTime"></param>
        /// <param name="exchangeDetailRow"></param>
        /// <returns></returns>
        public override databases.baseDS.priceDataDataTable GetImportFromWeb(DateTime updateTime, databases.baseDS.exchangeDetailRow exchangeDetailRow)
        {
            databases.importDS.importPriceDataTable importPriceTbl = GetPriceFromWeb(updateTime, exchangeDetailRow);
            if (importPriceTbl == null) return null;

            Imports.Libs.AddNewCode(exchangeDetailRow.marketCode, importPriceTbl, null);
            databases.DbAccess.UpdateData(importPriceTbl);
            databases.baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
            Imports.Libs.AddImportPrice(importPriceTbl, priceTbl);
            databases.DbAccess.UpdateData(priceTbl);
            return priceTbl;
        }
Beispiel #6
0
 public static void ReAggregatePriceData(string code, CultureInfo stockCulture)
 {
     //Load main  pricedata
     databases.baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
     databases.DbAccess.LoadData(priceTbl, AppTypes.MainDataTimeScale.Code, DateTime.MinValue, DateTime.MaxValue, code);
     if (priceTbl == null)
     {
         return;
     }
     //Delete all summ pricedata
     databases.DbAccess.DeletePriceSumData(code);
     databases.AppLibs.AggregatePriceData(priceTbl, stockCulture, null);
 }
Beispiel #7
0
        public virtual bool ImportFromWeb(DateTime updateTime, databases.baseDS.exchangeDetailRow exchangeDetailRow)
        {
            databases.baseDS.priceDataDataTable priceTbl = GetImportFromWeb(updateTime, exchangeDetailRow);
            if (priceTbl == null)
            {
                return(false);
            }

            // Different culture has different start of week, ie in VN culture : start of week is Monday (not Sunday)
            CultureInfo exchangeCulture = application.AppLibs.GetExchangeCulture(exchangeDetailRow.marketCode);

            databases.AppLibs.AggregatePriceData(priceTbl, exchangeCulture, null);
            return(true);
        }
        public override databases.baseDS.priceDataDataTable GetImportFromWeb(DateTime updateTime, databases.baseDS.exchangeDetailRow exchangeDetailRow)
        {
            if (!Get_IDX_HASTC(exchangeDetailRow.address, ref hastcIdx)) return null;
            databases.importDS.importPriceDataTable importPriceTbl = new databases.importDS.importPriceDataTable();
            AddImportRow(updateTime, hastcIdx, true, importPriceTbl);

            Imports.Libs.AddNewCode(exchangeDetailRow.marketCode, importPriceTbl, null);
            databases.DbAccess.UpdateData(importPriceTbl);

            databases.baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
            Imports.Libs.AddImportPrice(importPriceTbl, priceTbl);
            databases.DbAccess.UpdateData(priceTbl);
            return priceTbl;
        }
Beispiel #9
0
        /// <summary>
        /// Override method - /// Import stock data of HOSE and HASTC from  http://banggia.ssi.com.vn/AjaxWebService.asmx
        /// </summary>
        /// <param name="updateTime"></param>
        /// <param name="exchangeDetailRow"></param>
        /// <returns></returns>
        public override databases.baseDS.priceDataDataTable GetImportFromWeb(DateTime updateTime, databases.baseDS.exchangeDetailRow exchangeDetailRow)
        {
            databases.importDS.importPriceDataTable importPriceTbl = GetPriceFromWeb(updateTime, exchangeDetailRow);
            if (importPriceTbl == null)
            {
                return(null);
            }

            Imports.Libs.AddNewCode(exchangeDetailRow.marketCode, importPriceTbl, null);
            databases.DbAccess.UpdateData(importPriceTbl);
            databases.baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
            Imports.Libs.AddImportPrice(importPriceTbl, priceTbl);
            databases.DbAccess.UpdateData(priceTbl);
            return(priceTbl);
        }
Beispiel #10
0
 public static void ReAggregatePriceData(string code, CultureInfo stockCulture, OnAggregateData onAggregateDataFunc)
 {
     //Load main  pricedata
     baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
     DbAccess.LoadData(priceTbl, AppTypes.MainDataTimeScale.Code, DateTime.MinValue, DateTime.MaxValue, code);
     if (priceTbl == null)
     {
         return;
     }
     //Delete all summ pricedata
     DbAccess.DeletePriceSumData(code);
     ClearLastClosePrices();
     AggregatePriceData(priceTbl, stockCulture, onAggregateDataFunc);
     priceTbl.Dispose();
 }
Beispiel #11
0
        private int LoadDataLEFT()
        {
            DateTime toDate = myData.priceDataTbl[0].onDate.AddSeconds(-1);
            DateTime frDate = toDate.AddDays(-10);

            databases.baseDS.priceDataDataTable dataTbl = new databases.baseDS.priceDataDataTable();
            databases.DbAccess.LoadData(dataTbl, cbTimeScale.myValue.Code, frDate, toDate, codeEd.Text.Trim());
            if (dataTbl.Count > 0)
            {
                myData.Add2Top(dataTbl);
                this.pricePane.myGraphObj.SetSeriesX(myData.DateTime.Values, Charts.AxisType.DateAsOrdinal);
                this.volumePanel.myGraphObj.SetSeriesX(myData.DateTime.Values, Charts.AxisType.DateAsOrdinal);
                lineCurve = this.pricePane.myGraphObj.ReDrawCurveLine(lineCurve, myData.Close.Values);
            }
            return(dataTbl.Count);
        }
Beispiel #12
0
 private void bgWorker_webservice_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 {
     try
     {
         wsTestCountLbl.Text = (++testCount).ToString();
         databases.baseDS.lastPriceDataDataTable tbl1 = DataAccess.Libs.myLastDailyClosePrice;
         int idx = common.system.Random(0, stockList.Count - 1);
         databases.baseDS.priceDataDataTable tbl2 = DataAccess.Libs.GetData_ByTimeScale_Code_FrDate("D1", stockList[idx], DateTime.Today.AddDays(-1));
         //Application.DoEvents();
     }
     catch (Exception er)
     {
         this.ShowError(er);
         commonClass.SysLibs.WriteSysLog(common.SysSeverityLevel.Error, "test", er);
     }
 }
Beispiel #13
0
        /// <summary>
        /// Agrregate a data table to hourly,daily data...
        /// </summary>
        /// <param name="priceTbl">source data to be aggregated </param>
        /// <param name="cultureCode"></param>
        /// <param name="isDailyPrice">
        ///  Volume can be accumulated real-time or at the end of the day.
        ///  - If data is collected in realtime,
        ///  updateVolume table is used to culmulated the volume for each day and that will need some more resources.
        ///  - If data is collected at the end of the day, the voulume alredy is the total volume and updateVolume table
        ///  should not be used to save resources.
        /// </param>
        /// <param name="onAggregateDataFunc">function that was triggered after each agrregation</param>
        public static void AggregatePriceData(databases.baseDS.priceDataDataTable priceTbl, CultureInfo cultureInfo,
                                              OnAggregateData onAggregateDataFunc)
        {
            databases.baseDS.priceDataSumDataTable priceSumDataTbl = new databases.baseDS.priceDataSumDataTable();
            AgrregateInfo myAgrregateStat = new AgrregateInfo();

            myAgrregateStat.maxCount = priceTbl.Count;

            decimal changeVolume;
            int     lastYear = int.MinValue;

            for (int idx = 0; idx < priceTbl.Count; idx++)
            {
                myAgrregateStat.count = idx;
                if (onAggregateDataFunc != null)
                {
                    onAggregateDataFunc(myAgrregateStat);
                }
                if (myAgrregateStat.cancel)
                {
                    priceSumDataTbl.Clear();
                    break;
                }
                Application.DoEvents();

                changeVolume = priceTbl[idx].volume;
                foreach (AppTypes.TimeScale timeScale in AppTypes.myTimeScales)
                {
                    if (timeScale.Type == AppTypes.TimeScaleTypes.RealTime)
                    {
                        continue;
                    }
                    AggregatePriceData(priceTbl[idx], changeVolume, timeScale, cultureInfo, priceSumDataTbl);
                }
                //Update and clear cache to speed up the performance
                if (lastYear != priceTbl[idx].onDate.Year)
                {
                    databases.DbAccess.UpdateData(priceSumDataTbl);
                    priceSumDataTbl.Clear();
                    lastYear = priceTbl[idx].onDate.Year;
                }
                //databases.DbAccess.UpdateData(priceDataRow);
            }
            databases.DbAccess.UpdateData(priceSumDataTbl);
            priceSumDataTbl.Dispose();
        }
Beispiel #14
0
 public static void AddNewCode(databases.baseDS.priceDataDataTable tbl, string stockEchangeCode, OnCodeAdded onAddstockCodeFunc)
 {
     databases.baseDS.stockCodeDataTable stockCodeTbl = new databases.baseDS.stockCodeDataTable();
     for (int count = 0; count < tbl.Count; count++)
     {
         if (tbl[count].RowState == DataRowState.Deleted)
         {
             continue;
         }
         if (AddNewCode(tbl[count].stockCode, stockEchangeCode, stockCodeTbl) != null &&
             onAddstockCodeFunc != null)
         {
             onAddstockCodeFunc(tbl[count].stockCode);
         }
     }
     databases.DbAccess.UpdateData(stockCodeTbl);
 }
Beispiel #15
0
        public override databases.baseDS.priceDataDataTable GetImportFromWeb(DateTime updateTime, databases.baseDS.exchangeDetailRow exchangeDetailRow)
        {
            if (!Get_IDX_HASTC(exchangeDetailRow.address, ref hastcIdx))
            {
                return(null);
            }
            databases.importDS.importPriceDataTable importPriceTbl = new databases.importDS.importPriceDataTable();
            AddImportRow(updateTime, hastcIdx, true, importPriceTbl);

            Imports.Libs.AddNewCode(exchangeDetailRow.marketCode, importPriceTbl, null);
            databases.DbAccess.UpdateData(importPriceTbl);

            databases.baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
            Imports.Libs.AddImportPrice(importPriceTbl, priceTbl);
            databases.DbAccess.UpdateData(priceTbl);
            return(priceTbl);
        }
Beispiel #16
0
        public override databases.baseDS.priceDataDataTable GetImportFromWeb(DateTime updateTime, databases.baseDS.exchangeDetailRow exchangeDetailRow)
        {
            if (!GetData(exchangeDetailRow, ref hnIdx, ref hnIdx30))
            {
                return(null);
            }
            databases.importDS.importPriceDataTable importPriceTbl = new databases.importDS.importPriceDataTable();
            AddImportRow(updateTime, hnIdx, true, importPriceTbl);
            //AddImportRow(updateTime, vn30Idx, false, importPriceTbl);

            Imports.Libs.AddNewCode(exchangeDetailRow.marketCode, importPriceTbl, null);
            databases.DbAccess.UpdateData(importPriceTbl);

            databases.baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
            Imports.Libs.AddImportPrice(importPriceTbl, priceTbl);
            databases.DbAccess.UpdateData(priceTbl);
            return(priceTbl);
        }
Beispiel #17
0
        //Testing
        public void Add2Top(databases.baseDS.priceDataDataTable tbl)
        {
            for (int idx = tbl.Count - 1; idx >= 0; idx--)
            {
                databases.baseDS.priceDataRow newRow = priceDataTbl.NewpriceDataRow();
                newRow.ItemArray = tbl[idx].ItemArray;
                priceDataTbl.Rows.InsertAt(newRow, 0);
            }
            //Update OHLCV data series
            double[] tmpData;
            if (this.DateTime.Values != null)
            {
                tmpData = DataLibs.GetDataList(tbl, 0, AppTypes.PriceDataType.DateTime);
                this.DateTime.Add2Top(tmpData);
            }

            if (this.High.Values != null)
            {
                tmpData = DataLibs.GetDataList(tbl, 0, AppTypes.PriceDataType.High);
                this.High.Add2Top(tmpData);
            }
            if (this.Low.Values != null)
            {
                tmpData = DataLibs.GetDataList(tbl, 0, AppTypes.PriceDataType.Low);
                this.Low.Add2Top(tmpData);
            }
            if (this.Open.Values != null)
            {
                tmpData = DataLibs.GetDataList(tbl, 0, AppTypes.PriceDataType.Open);
                this.Open.Add2Top(tmpData);
            }
            if (this.Close.Values != null)
            {
                tmpData = DataLibs.GetDataList(tbl, 0, AppTypes.PriceDataType.Close);
                this.Close.Add2Top(tmpData);
            }
            if (this.Volume.Values != null)
            {
                tmpData = DataLibs.GetDataList(tbl, 0, AppTypes.PriceDataType.Volume);
                this.Volume.Add2Top(tmpData);
            }
            //Remove cached "Bars:
            dataCache.Remove("Bars");
        }
Beispiel #18
0
        public override databases.baseDS.priceDataDataTable GetImportFromWeb(DateTime updateTime, databases.baseDS.exchangeDetailRow exchangeDetailRow)
        {
            try
            {
                databases.importDS.importPriceDataTable importPriceTbl;
                metaStock meta = GetMeta();
                if (meta == null)
                {
                    return(null);
                }

                //try
                //{
                importPriceTbl = GetPriceFromWeb(updateTime, meta, exchangeDetailRow);
                Imports.Libs.AddNewCode(exchangeDetailRow.marketCode, importPriceTbl, null);
                databases.DbAccess.UpdateData(importPriceTbl);
                ////}
                //catch (Exception er)
                //{
                //    commonClass.SysLibs.WriteSysLog(common.SysSeverityLevel.Error, "SRV004 - Import price error", er);
                //    throw er;
                //}

                //try
                //{
                databases.baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
                Imports.Libs.AddImportPrice(importPriceTbl, priceTbl);
                databases.DbAccess.UpdateData(priceTbl);
                return(priceTbl);
                //}
                //catch (Exception er)
                //{
                //    commonClass.SysLibs.WriteSysLog(common.SysSeverityLevel.Error, "SRV004 - Price Data table", er);
                //    throw er;
                //}
            }

            catch (Exception er)
            {
                commonClass.SysLibs.WriteSysLog(common.SysSeverityLevel.Error, "SRV004 - GetImport From Web error", er);
                return(null);
            }
        }
Beispiel #19
0
        /// <summary>
        /// Diagnose price data for abnomal variance in price
        /// </summary>
        /// <param name="priceDataTbl"></param>
        /// <param name="checkVariancePerc"></param>
        /// <param name="checkVariance"></param>
        /// <param name="precision"></param>
        /// <param name="priceDiagnoseTbl"></param>
        public static void DiagnosePrice_CloseAndNextOpen(databases.baseDS.priceDataDataTable priceDataTbl,
                                                          double checkVariancePerc, double checkVariance, byte precision, databases.tmpDS.priceDiagnoseDataTable priceDiagnoseTbl)
        {
            string dataFld1 = priceDataTbl.closePriceColumn.ColumnName;
            string dataFld2 = priceDataTbl.openPriceColumn.ColumnName;

            databases.baseDS.priceDataRow    priceRow1, priceRow2;
            databases.tmpDS.priceDiagnoseRow priceDiagnoseRow;

            DataView myView = new DataView(priceDataTbl);

            myView.Sort = priceDataTbl.onDateColumn.ColumnName;

            double d1, d2, variancePerc;

            for (int idx = 1; idx < myView.Count; idx++)
            {
                d1 = double.Parse(myView[idx - 1][dataFld1].ToString());
                d2 = double.Parse(myView[idx][dataFld2].ToString());
                if (d1 == 0)
                {
                    continue;
                }
                variancePerc = (d2 / d1) - 1;
                //if (Math.Abs(d2 - d1) <= checkVariance ||
                if (Math.Abs(Math.Round(variancePerc, precision)) <= checkVariancePerc)
                {
                    continue;
                }
                priceRow1        = (databases.baseDS.priceDataRow)myView[idx - 1].Row;
                priceRow2        = (databases.baseDS.priceDataRow)myView[idx].Row;
                priceDiagnoseRow = priceDiagnoseTbl.NewpriceDiagnoseRow();

                priceDiagnoseRow.code  = priceRow2.stockCode;
                priceDiagnoseRow.date1 = priceRow1.onDate;
                priceDiagnoseRow.date2 = priceRow2.onDate;

                priceDiagnoseRow.price1   = d1;
                priceDiagnoseRow.price2   = d2;
                priceDiagnoseRow.variance = variancePerc;
                priceDiagnoseTbl.AddpriceDiagnoseRow(priceDiagnoseRow);
            }
        }
Beispiel #20
0
        public override databases.baseDS.priceDataDataTable GetImportFromWeb(DateTime updateTime, databases.baseDS.exchangeDetailRow exchangeDetailRow)
        {
            try
            {
                databases.importDS.importPriceDataTable importPriceTbl;
                metaStock meta = GetMeta();
                if (meta == null) return null;

                //try
                //{
                    importPriceTbl = GetPriceFromWeb(updateTime, meta, exchangeDetailRow);
                    Imports.Libs.AddNewCode(exchangeDetailRow.marketCode, importPriceTbl, null);
                    databases.DbAccess.UpdateData(importPriceTbl);
                ////}
                //catch (Exception er)
                //{
                //    commonClass.SysLibs.WriteSysLog(common.SysSeverityLevel.Error, "SRV004 - Import price error", er);
                //    throw er;
                //}

                //try
                //{
                    databases.baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
                    Imports.Libs.AddImportPrice(importPriceTbl, priceTbl);
                    databases.DbAccess.UpdateData(priceTbl);
                    return priceTbl;
                //}
                //catch (Exception er)
                //{
                //    commonClass.SysLibs.WriteSysLog(common.SysSeverityLevel.Error, "SRV004 - Price Data table", er);
                //    throw er;
                //}
            }

            catch (Exception er)
            {
                commonClass.SysLibs.WriteSysLog(common.SysSeverityLevel.Error, "SRV004 - GetImport From Web error", er);
                return null;
            }
            
        }
Beispiel #21
0
            public override databases.baseDS.priceDataDataTable GetImportFromWeb(DateTime updateTime, databases.baseDS.exchangeDetailRow exchangeDetailRow)
            {
                // Different culture has differebr strt of week, ie in VN culture : start of week is Monday (not Sunday) 
                if (myCulture == null)
                    myCulture = application.AppLibs.GetCulture(exchangeDetailRow.culture);

                databases.importDS.importPriceDataTable importPriceTbl = new databases.importDS.importPriceDataTable();
                ForexData goldData = ImportKitco(exchangeDetailRow.address);
                if (null == goldData) { return null; }

                AddImportRow(updateTime, goldData, false, importPriceTbl);

                Imports.Libs.AddNewCode(exchangeDetailRow.marketCode, importPriceTbl, null);
                databases.DbAccess.UpdateData(importPriceTbl);

                databases.baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
                Imports.Libs.AddImportPrice(importPriceTbl, priceTbl);
                databases.DbAccess.UpdateData(priceTbl);

                return priceTbl;
            }
Beispiel #22
0
        private void loadPriceBtn_Click(object sender, EventArgs e)
        {
            try
            {
                this.ShowMessage("");
                if (!DataValid_Edit())
                {
                    return;
                }

                loadPriceBtn.Enabled = false;

                DateTime frDate = editFrDateEd.myDateTime;
                DateTime toDate = editToDateEd.myDateTime;
                System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
                watch.Start();
                string timeScaleCode = AppTypes.TimeScaleTypeToCode(AppTypes.TimeScaleTypes.RealTime);
                databases.baseDS.priceDataDataTable priceTbl = DataAccess.Libs.GetPriceData(dataCodeEd.Text.Trim(), timeScaleCode,
                                                                                            editFrDateEd.myDateTime, editToDateEd.myDateTime);

                if (priceTbl == null)
                {
                    return;
                }
                priceDataSource.DataSource = priceTbl;
                priceDataSource.Sort       = priceTbl.onDateColumn.ColumnName + " DESC";
                watch.Stop();
                this.ShowMessage(Languages.Libs.GetString("finished") + " : " + common.dateTimeLibs.TimeSpan2String(watch.Elapsed));
                this.ShowReccount(priceDataSource.Count);
                fullMode = true;
            }
            catch (Exception er)
            {
                this.ShowError(er);
            }
            finally
            {
                loadPriceBtn.Enabled = true;
            }
        }
Beispiel #23
0
        public virtual bool ImportFromWeb(DateTime updateTime, databases.baseDS.exchangeDetailRow exchangeDetailRow)
        {
            try
            {
                databases.baseDS.priceDataDataTable priceTbl = GetImportFromWeb(updateTime, exchangeDetailRow);
                if (priceTbl == null)
                {
                    return(false);
                }

                // Different culture has different start of week, ie in VN culture : start of week is Monday (not Sunday)
                CultureInfo exchangeCulture = application.AppLibs.GetExchangeCulture(exchangeDetailRow.marketCode);
                databases.AppLibs.AggregatePriceData(priceTbl, exchangeCulture, null);
                return(true);
            }
            catch (Exception er)
            {
                //retVal = false;
                commonClass.SysLibs.WriteSysLog(common.SysSeverityLevel.Error, "SRV004", er);
                return(false);
            }
        }
Beispiel #24
0
        private void loadPriceBtn_Click(object sender, EventArgs e)
        {
            try
            {
                this.ShowMessage("");
                if (!DataFixValid())
                {
                    return;
                }

                loadPriceBtn.Enabled = false;

                DateTime toDate = dataToDateEd.myDateTime;
                decimal  weight = (decimal)adjustWeightEd.Value;
                System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
                watch.Start();
                databases.baseDS.priceDataDataTable priceTbl = DataAccess.Libs.GetPriceData(dataCodeEd.Text.Trim(), dataTimeScaleCb.myValue.Code,
                                                                                            Settings.sysStartDataDate, toDate.AddDays(1));

                if (priceTbl == null)
                {
                    return;
                }
                priceDataSource.DataSource = priceTbl;
                priceDataSource.Sort       = priceTbl.onDateColumn.ColumnName + " DESC";
                watch.Stop();
                this.ShowMessage(Languages.Libs.GetString("finished") + " : " + common.dateTimeLibs.TimeSpan2String(watch.Elapsed));
                this.ShowReccount(priceDataSource.Count);
                fullMode = true;
            }
            catch (Exception er)
            {
                this.ShowError(er);
            }
            finally
            {
                loadPriceBtn.Enabled = true;
            }
        }
Beispiel #25
0
        private static void AjustPriceDataDN(databases.baseDS.priceDataDataTable priceTbl, DateTime toDate, decimal weight)
        {
            if (weight == 0 || priceTbl == null)
            {
                return;
            }
            byte precisionPrice = common.system.GetPrecisionFromMask(Settings.sysMaskPrice);

            for (int idx = 0; idx < priceTbl.Count; idx++)
            {
                if (priceTbl[idx].RowState == DataRowState.Deleted)
                {
                    continue;
                }
                if (priceTbl[idx].onDate > toDate)
                {
                    continue;
                }
                priceTbl[idx].lowPrice   = Math.Round(priceTbl[idx].lowPrice / weight, precisionPrice);
                priceTbl[idx].highPrice  = Math.Round(priceTbl[idx].highPrice / weight, precisionPrice);
                priceTbl[idx].closePrice = Math.Round(priceTbl[idx].closePrice / weight, precisionPrice);
                priceTbl[idx].openPrice  = Math.Round(priceTbl[idx].openPrice / weight, precisionPrice);
            }
        }
Beispiel #26
0
 public bool UpdatePriceData(ref databases.baseDS.priceDataDataTable priceDataTbl)
 {
     return(base.Channel.UpdatePriceData(ref priceDataTbl));
 }
Beispiel #27
0
 public static bool ImportFromCVS_BVSC(string csvFileName, string marketCode, CultureInfo dataCulture,
                                       databases.baseDS.priceDataDataTable priceDataTbl, OnUpdatePriceData onUpdateDataFunc)
 {
     return(Imports.Libs.CSV_ImportParse(csvFileName, ',', common.dateTimeLibs.DateTimeFormats.YYMMDD,
                                         marketCode, dataCulture, priceDataTbl, DoImportRow, onUpdateDataFunc, null));
 }
Beispiel #28
0
 public static void ReAggregatePriceData(string code, CultureInfo stockCulture, OnAggregateData onAggregateDataFunc)
 {
     //Load main  pricedata
     baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
     DbAccess.LoadData(priceTbl, AppTypes.MainDataTimeScale.Code, DateTime.MinValue, DateTime.MaxValue, code);
     if (priceTbl == null) return;
     //Delete all summ pricedata
     DbAccess.DeletePriceSumData(code);
     ClearLastClosePrices();
     AggregatePriceData(priceTbl, stockCulture, onAggregateDataFunc);
     priceTbl.Dispose();
 }
 public databases.baseDS.priceDataDataTable GetData_ByTimeScale_Code_FrDate(string timeScaleCode,string stockCode,DateTime fromDate)
 {
     try
     {
         databases.baseDS.priceDataDataTable tbl = new databases.baseDS.priceDataDataTable();
         databases.DbAccess.LoadData(tbl, timeScaleCode, fromDate, stockCode);
         return tbl;
     }
     catch (Exception ex)
     {
         WriteSysLogLocal("WS056", ex);
     }
     return null;
 }
Beispiel #30
0
 private int LoadDataLEFT()
 {
     DateTime toDate = myData.priceDataTbl[0].onDate.AddSeconds(-1);
     DateTime frDate = toDate.AddDays(-10);
     databases.baseDS.priceDataDataTable dataTbl = new databases.baseDS.priceDataDataTable();
     databases.DbAccess.LoadData(dataTbl, cbTimeScale.myValue.Code, frDate, toDate, codeEd.Text.Trim());
     if (dataTbl.Count > 0)
     {
         myData.Add2Top(dataTbl);
         this.pricePane.myGraphObj.SetSeriesX(myData.DateTime.Values, Charts.AxisType.DateAsOrdinal);
         this.volumePanel.myGraphObj.SetSeriesX(myData.DateTime.Values, Charts.AxisType.DateAsOrdinal);
         lineCurve = this.pricePane.myGraphObj.ReDrawCurveLine(lineCurve, myData.Close.Values);
     }
     return dataTbl.Count;
 }
Beispiel #31
0
 public static double[] GetDataList(databases.baseDS.priceDataDataTable dataTbl, int startIdx, AppTypes.PriceDataType type)
 {
     return(GetDataList(dataTbl, startIdx, dataTbl.Count - 1, type));
 }
Beispiel #32
0
        public static double[] GetDataList(databases.baseDS.priceDataDataTable dataTbl, int startIdx, int endIdx, AppTypes.PriceDataType type)
        {
            double[] data = new double[endIdx - startIdx + 1];
            switch (type)
            {
            case AppTypes.PriceDataType.High:
                for (int i = startIdx, j = 0; i <= endIdx; i++, j++)
                {
                    if (dataTbl[i].RowState == System.Data.DataRowState.Deleted)
                    {
                        continue;
                    }
                    data[j] = (double)dataTbl[i].highPrice;
                }
                break;

            case AppTypes.PriceDataType.Low:
                for (int i = startIdx, j = 0; i <= endIdx; i++, j++)
                {
                    if (dataTbl[i].RowState == System.Data.DataRowState.Deleted)
                    {
                        continue;
                    }
                    data[j] = (double)dataTbl[i].lowPrice;
                }
                break;

            case AppTypes.PriceDataType.Open:
                for (int i = startIdx, j = 0; i <= endIdx; i++, j++)
                {
                    if (dataTbl[i].RowState == System.Data.DataRowState.Deleted)
                    {
                        continue;
                    }
                    data[j] = (double)dataTbl[i].openPrice;
                }
                break;

            case AppTypes.PriceDataType.Close:
                for (int i = startIdx, j = 0; i <= endIdx; i++, j++)
                {
                    if (dataTbl[i].RowState == System.Data.DataRowState.Deleted)
                    {
                        continue;
                    }
                    data[j] = (double)dataTbl[i].closePrice;
                }
                break;

            case AppTypes.PriceDataType.Volume:
                for (int i = startIdx, j = 0; i <= endIdx; i++, j++)
                {
                    if (dataTbl[i].RowState == System.Data.DataRowState.Deleted)
                    {
                        continue;
                    }
                    data[j] = (double)dataTbl[i].volume;
                }
                break;

            case AppTypes.PriceDataType.DateTime:
                for (int i = startIdx, j = 0; i <= endIdx; i++, j++)
                {
                    if (dataTbl[i].RowState == System.Data.DataRowState.Deleted)
                    {
                        continue;
                    }
                    data[j] = dataTbl[i].onDate.ToOADate();
                }
                break;

            default:
                common.system.ThrowException("Invalid dataField in MakeDataList()"); break;
            }
            return(data);
        }
Beispiel #33
0
        //Use the idea from http://www.codeproject.com/KB/database/CsvReader.aspx by Sebastien Lorion
        public static bool CSV_ImportParse(string csvFileName, char delimiter,
                                           common.dateTimeLibs.DateTimeFormats dateDataFormat,
                                           string marketCode, CultureInfo dataCulture,
                                           databases.baseDS.priceDataDataTable priceDataTbl,
                                           ImportRowHandler ImportRowFunc,
                                           OnUpdatePriceData onUpdateDataFunc,
                                           OnEndImportPriceData onEndImportFunc)
        {
            importStat myImportStat = new importStat();

            myImportStat.Reset();
            myImportStat.dateDataFormat = dateDataFormat;
            myImportStat.srcCulture     = dataCulture;
            databases.baseDS.stockCodeDataTable stockCodeTbl = new databases.baseDS.stockCodeDataTable();
            databases.baseDS.priceDataRow       priceDataRow;

            DataRowView[] foundRows;
            databases.DbAccess.LoadData(stockCodeTbl, AppTypes.CommonStatus.Enable);
            DataView stockCodeView = new DataView(stockCodeTbl);

            stockCodeView.Sort = stockCodeTbl.codeColumn.ColumnName;

            bool     fCanceled     = false;
            DateTime lastPriceDate = common.Consts.constNullDate;

            importOHLCV data;

            // open the file "data.csv" which is a CSV file with headers
            using (CsvReader csv = new CsvReader(new StreamReader(csvFileName), true, delimiter))
            {
                // missing fields will not throw an exception,
                // but will instead be treated as if there was a null value
                csv.MissingFieldAction = MissingFieldAction.ReplaceByNull;

                int fieldCount = csv.FieldCount;
                if (fieldCount < 7)
                {
                    return(false);
                }
                while (csv.ReadNextRecord())
                {
                    Application.DoEvents();
                    myImportStat.dataCount++;
                    data = ImportRowFunc(csv, myImportStat);
                    if (myImportStat.cancel)
                    {
                        fCanceled = true; break;
                    }
                    if (data == null)
                    {
                        myImportStat.errorCount++;
                        continue;
                    }
                    //Assume that all price must be valid
                    if (data.Open <= 0 || data.High <= 0 || data.Low <= 0 || data.Close <= 0)
                    {
                        continue;
                    }

                    foundRows = stockCodeView.FindRows(data.code);
                    if (foundRows.Length == 0)
                    {
                        //Try to add new stock code
                        Libs.AddNewCode(data.code, marketCode, stockCodeTbl);
                        databases.DbAccess.UpdateData(stockCodeTbl);
                    }

                    // Ignore all data that was in database
                    //if (!foundLastPriceDate)
                    //{
                    //    lastPriceDate = FindLastPriceDate(data.code);
                    //    foundLastPriceDate = true;
                    //}
                    if (lastPriceDate != common.Consts.constNullDate && data.dateTime <= lastPriceDate)
                    {
                        continue;
                    }
                    if (priceDataTbl.FindBystockCodeonDate(data.code, data.dateTime) != null)
                    {
                        myImportStat.errorCount++;
                        continue;
                    }
                    myImportStat.updateCount++;
                    priceDataRow = priceDataTbl.NewpriceDataRow();
                    databases.AppLibs.InitData(priceDataRow);
                    priceDataRow.stockCode = data.code;
                    priceDataRow.onDate    = data.dateTime;
                    //Try to fix some error in data
                    priceDataRow.openPrice  = (decimal)data.Open;
                    priceDataRow.highPrice  = (decimal)data.High;
                    priceDataRow.lowPrice   = (decimal)data.Low;
                    priceDataRow.closePrice = (decimal)data.Close;
                    priceDataRow.volume     = (decimal)data.Volume;
                    priceDataTbl.AddpriceDataRow(priceDataRow);
                    if (onUpdateDataFunc != null)
                    {
                        onUpdateDataFunc(priceDataRow, myImportStat);
                    }
                }
            }
            if (fCanceled)
            {
                priceDataTbl.Clear();
                return(false);
            }
            if (onEndImportFunc != null)
            {
                onEndImportFunc(priceDataTbl);
            }
            return(true);
        }
 public databases.baseDS.priceDataDataTable GetPriceData(string stockCode, string timeScaleCode,DateTime frDate,DateTime toDate)
 {
     try
     {
         databases.baseDS.priceDataDataTable priceDataTbl = new databases.baseDS.priceDataDataTable();
         databases.DbAccess.LoadData(priceDataTbl, timeScaleCode, frDate, toDate, stockCode);
         return priceDataTbl;
     }
     catch (Exception ex)
     {
         WriteSysLogLocal("WS053", ex);
     }
     return null;
 }
Beispiel #35
0
 public static void AddImportPrice(databases.importDS.importPriceDataTable importPriceTbl,
                                   databases.baseDS.priceDataDataTable priceDataTbl)
 {
     AddImportPrice(importPriceTbl, myDailyData, priceDataTbl);
 }
 private void DoAggregate(databases.baseDS.priceDataDataTable tbl, CultureInfo CultureInfo)
 {
     databases.AppLibs.AggregatePriceData(tbl, CultureInfo, onAggregateData);
 }
Beispiel #37
0
        /// <summary>
        /// Updated data from the last read/update point
        /// </summary>
        /// <param name="dataObj"></param>
        /// <returns></returns>
        public static int UpdateAnalysisData(AnalysisData dataObj)
        {
            int lastDataIdx = dataObj.priceDataTbl.Count - 1;
            DateTime lastDateTime;
            if (lastDataIdx < 0) lastDateTime = Settings.sysStartDataDate;
            else lastDateTime = dataObj.priceDataTbl[lastDataIdx].onDate;

            databases.baseDS.priceDataDataTable tbl = new databases.baseDS.priceDataDataTable();
            databases.DbAccess.LoadData(tbl, dataObj.DataTimeScale.Code, lastDateTime, dataObj.DataStockCode);
            if (tbl.Count > 0)
            {
                //Delete the last data because the updated data will include this one.
                if (lastDataIdx >= 0)
                {
                    dataObj.priceDataTbl[lastDataIdx].ItemArray = tbl[0].ItemArray;
                    common.system.Concat(tbl, 1, dataObj.priceDataTbl);
                }
                else common.system.Concat(tbl, 0, dataObj.priceDataTbl);
            }
            return dataObj.priceDataTbl.Count - 1 - lastDataIdx;
        }
Beispiel #38
0
        public override databases.baseDS.priceDataDataTable GetImportFromWeb(DateTime updateTime, databases.baseDS.exchangeDetailRow exchangeDetailRow)
        {
            if (!GetData(exchangeDetailRow, ref hnIdx, ref hnIdx30)) return null;
            databases.importDS.importPriceDataTable importPriceTbl = new databases.importDS.importPriceDataTable();
            AddImportRow(updateTime, hnIdx, true, importPriceTbl);
            //AddImportRow(updateTime, vn30Idx, false, importPriceTbl);

            Imports.Libs.AddNewCode(exchangeDetailRow.marketCode, importPriceTbl, null);
            databases.DbAccess.UpdateData(importPriceTbl);

            databases.baseDS.priceDataDataTable priceTbl = new databases.baseDS.priceDataDataTable();
            Imports.Libs.AddImportPrice(importPriceTbl, priceTbl);
            databases.DbAccess.UpdateData(priceTbl);
            return priceTbl;
        }
Beispiel #39
0
        private void saveDataBtn_Click(object sender, EventArgs e)
        {
            const short constNumberOfRowInBatchToSave = 500;
            try
            {
                this.ShowMessage("");
                //if (!DataFixValid()) return;

                saveDataBtn.Enabled = false;
                common.system.ShowCurrorWait(); 
                System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
                watch.Start();
                //Only update changed data
                databases.baseDS.priceDataDataTable tbl = new databases.baseDS.priceDataDataTable();
                databases.baseDS.priceDataDataTable sourceTbl = (databases.baseDS.priceDataDataTable)priceDataSource.DataSource;

                progressBar.Visible = true;
                progressBar.Value =0;
                progressBar.Maximum = sourceTbl.Count;
                int batchCount = Settings.sysNumberOfItemsInBatchProcess;
                for (int idx = 0; idx < sourceTbl.Count; idx++)
                {
                    progressBar.Value++;
                    Application.DoEvents();

                    if (sourceTbl[idx].RowState == DataRowState.Unchanged) continue;
                    tbl.ImportRow(sourceTbl[idx]);
                    batchCount--;
                    if (batchCount == 0)
                    {
                        DataAccess.Libs.UpdateData(tbl);
                        tbl.Clear();
                        batchCount = constNumberOfRowInBatchToSave;
                    }
                }
                DataAccess.Libs.UpdateData(tbl);
                sourceTbl.AcceptChanges();
                watch.Stop();
                this.ShowMessage(Languages.Libs.GetString("finished") + " : " + tbl.Count.ToString() +" - " + common.dateTimeLibs.TimeSpan2String(watch.Elapsed) );
            }
            catch (Exception er)
            {
                this.ShowError(er);
            }
            finally
            {
                common.system.ShowCurrorDefault();
                saveDataBtn.Enabled = true;
                progressBar.Visible = false;
            }
        }
Beispiel #40
0
        private void testAdjustDataBtn_Click(object sender, EventArgs e)
        {
            try
            {
                this.ShowMessage("");
                testAdjustDataBtn.Enabled = false;
                common.system.ShowCurrorWait();

                DateTime toDate = dataToDateEd.myDateTime;
                decimal  weight = (decimal)adjustWeightEd.Value;

                databases.baseDS.priceDataDataTable priceTbl = (priceDataSource.DataSource as databases.baseDS.priceDataDataTable);
                if (priceTbl == null)
                {
                    return;
                }
                //Only adjust before the specified date
                if (weight > 0)
                {
                    //weight = (1+weight)/100;
                    for (int idx = 0; idx < priceTbl.Count; idx++)
                    {
                        if (priceTbl[idx].RowState == DataRowState.Deleted)
                        {
                            continue;
                        }
                        if (priceTbl[idx].onDate >= toDate)
                        {
                            continue;
                        }
                        priceTbl[idx].lowPrice   *= weight;
                        priceTbl[idx].highPrice  *= weight;
                        priceTbl[idx].closePrice *= weight;
                        priceTbl[idx].openPrice  *= weight;
                    }
                }
                else
                {
                    weight = -weight;
                    for (int idx = 0; idx < priceTbl.Count; idx++)
                    {
                        if (priceTbl[idx].RowState == DataRowState.Deleted)
                        {
                            continue;
                        }
                        if (priceTbl[idx].onDate >= toDate)
                        {
                            continue;
                        }
                        priceTbl[idx].lowPrice   /= weight;
                        priceTbl[idx].highPrice  /= weight;
                        priceTbl[idx].closePrice /= weight;
                        priceTbl[idx].openPrice  /= weight;
                    }
                }
            }
            catch (Exception er)
            {
                this.ShowError(er);
            }
            finally
            {
                testAdjustDataBtn.Enabled = true;
                common.system.ShowCurrorDefault();
            }
        }
 public databases.tmpDS.priceDiagnoseDataTable DiagnosePrice_CloseAndNextOpen(DateTime frDate, DateTime toDate, string timeScaleCode,
     string exchangeCode,string code, double variancePerc, double variance,byte precision)
 {
     try
     {
         databases.baseDS.priceDataDataTable priceDataTbl = new databases.baseDS.priceDataDataTable();
         databases.tmpDS.priceDiagnoseDataTable priceDiagnoseTbl = new databases.tmpDS.priceDiagnoseDataTable();
         if (code != null && code.Trim() != "")
         {
             priceDataTbl.Clear();
             databases.DbAccess.LoadData(priceDataTbl, timeScaleCode, frDate, toDate, code.Trim());
             application.AppLibs.DiagnosePrice_CloseAndNextOpen(priceDataTbl, variancePerc, variance,precision, priceDiagnoseTbl);
         }
         else
         {
             databases.tmpDS.stockCodeDataTable codeTbl = new databases.tmpDS.stockCodeDataTable();
             databases.DbAccess.LoadStockCode_ByStockExchange(codeTbl, exchangeCode, AppTypes.CommonStatus.Enable);
             for (int idx = 0; idx < codeTbl.Count; idx++)
             {
                 priceDataTbl.Clear();
                 databases.DbAccess.LoadData(priceDataTbl, timeScaleCode, frDate, toDate, codeTbl[idx].code);
                 application.AppLibs.DiagnosePrice_CloseAndNextOpen(priceDataTbl, variancePerc, variance,precision, priceDiagnoseTbl);
             }
             codeTbl.Dispose();
         }
         priceDataTbl.Dispose();
         return priceDiagnoseTbl;
     }
     catch (Exception ex)
     {
         WriteSysLogLocal("WS088", ex);
     }
     return null;
 }