//Agrregate date time for hourly,daily data... //public static DateTime AggregateDateTime(AppTypes.timeScales type, DateTime onDateTime, CultureInfo ci) //{ // switch (type) // { // case AppTypes.timeScales.Hour1: // return onDateTime.Date.AddHours(onDateTime.Hour); // case AppTypes.timeScales.Hour2: // return onDateTime.Date.AddHours(onDateTime.Hour / 2); // case AppTypes.timeScales.Hour4: // return onDateTime.Date.AddHours(onDateTime.Hour / 4); // case AppTypes.timeScales.Daily: // return onDateTime.Date; // case AppTypes.timeScales.Weekly: // return common.dateTimeLibs.StartOfWeek(onDateTime, ci); // case AppTypes.timeScales.Monthly: // return common.dateTimeLibs.MakeDate(1, onDateTime.Month, onDateTime.Year); // case AppTypes.timeScales.Yearly: // return common.dateTimeLibs.MakeDate(1, 1, onDateTime.Year); // default: // common.system.ThrowException("Invalid argument in AggregateDateTime()"); // break; // } // return onDateTime; //} /// <summary> /// Agrregate a data row to hourly,daily data... /// </summary> /// <param name="priceRow"> source data arregated to [toSumTbl] </param> /// <param name="changeVolume"> volume qty changed and is cumulated to total volume </param> /// <param name="timeScale"> aggregate to hour,day,week... data </param> /// <param name="cultureInfo"> culture info that need to caculate the start of the week param> /// <param name="toSumTbl"> destination table</param> public static void AggregatePriceData(data.baseDS.priceDataRow priceRow, decimal changeVolume, AppTypes.TimeScale timeScale, CultureInfo cultureInfo,data.baseDS.priceDataSumDataTable toSumTbl) { DateTime dataDate = AggregateDateTime(timeScale, priceRow.onDate, cultureInfo); int dataTimeOffset = common.dateTimeLibs.DateDiffInMilliseconds(dataDate, priceRow.onDate); data.baseDS.priceDataSumRow priceDataSumRow; priceDataSumRow = libs.FindAndCache(toSumTbl, priceRow.stockCode, timeScale.Code, dataDate); if (priceDataSumRow == null) { priceDataSumRow = toSumTbl.NewpriceDataSumRow(); commonClass.AppLibs.InitData(priceDataSumRow); priceDataSumRow.type = timeScale.Code; priceDataSumRow.stockCode = priceRow.stockCode; priceDataSumRow.onDate = dataDate; priceDataSumRow.openPrice = priceRow.openPrice; priceDataSumRow.closePrice = priceRow.closePrice; toSumTbl.AddpriceDataSumRow(priceDataSumRow); } if (priceDataSumRow.openTimeOffset > dataTimeOffset) { priceDataSumRow.openPrice = priceRow.openPrice; priceDataSumRow.openTimeOffset = dataTimeOffset; } if (priceDataSumRow.closeTimeOffset <= dataTimeOffset) { priceDataSumRow.closePrice = priceRow.closePrice; priceDataSumRow.closeTimeOffset = dataTimeOffset; } if (priceDataSumRow.highPrice < priceRow.highPrice) priceDataSumRow.highPrice = priceRow.highPrice; if (priceDataSumRow.lowPrice > priceRow.lowPrice) priceDataSumRow.lowPrice = priceRow.lowPrice; priceDataSumRow.volume += changeVolume; }