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; }
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); }
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); }
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); }
/// <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; }
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); }
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; }
/// <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); }
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(); }
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); }
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); } }
/// <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(); }
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); }
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); }
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); }
//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"); }
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); } }
/// <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); } }
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; } }
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; }
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; } }
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); } }
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; } }
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); } }
public bool UpdatePriceData(ref databases.baseDS.priceDataDataTable priceDataTbl) { return(base.Channel.UpdatePriceData(ref priceDataTbl)); }
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)); }
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; }
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; }
public static double[] GetDataList(databases.baseDS.priceDataDataTable dataTbl, int startIdx, AppTypes.PriceDataType type) { return(GetDataList(dataTbl, startIdx, dataTbl.Count - 1, type)); }
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); }
//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; }
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); }
/// <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; }
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; }
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; } }
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; }