Beispiel #1
0
 public object[] GetPriceByCode(string stockCode)
 {
     data.baseDS.priceDataRow priceRow = DbAccess.GetLastPriceData(stockCode);
     if (priceRow == null)
     {
         return(null);
     }
     return(priceRow.ItemArray);
 }
Beispiel #2
0
 public static void InitData(data.baseDS.priceDataRow row)
 {
     row.stockCode  = "";
     row.onDate     = DateTime.Today;
     row.openPrice  = 0;
     row.highPrice  = 0;
     row.lowPrice   = 0;
     row.closePrice = 0;
     row.volume     = 0;
 }
Beispiel #3
0
        private static data.importDS.importPriceDataTable GetPrice(DateTime updateTime, string url, string marketCode)
        {
            data.importDS.importPriceDataTable importPriceTbl = new data.importDS.importPriceDataTable();
            ForexData[] frData   = ImportForex(url);
            ForexData   goldData = frData[3]; //Gold at price 4

            if (lastForexData != null)
            {
                if (lastForexData.last == goldData.last &&
                    lastForexData.high == goldData.high &&
                    lastForexData.low == goldData.low)
                {
                    return(importPriceTbl);
                }
            }
            else
            {
                lastForexData = new ForexData();
            }
            lastForexData.last = goldData.last;
            lastForexData.high = goldData.high;
            lastForexData.low  = goldData.low;

            data.importDS.importPriceRow importRow;
            importRow = importPriceTbl.NewimportPriceRow();
            application.DbAccess.InitData(importRow);
            importRow.onDate        = updateTime;
            importRow.stockExchange = marketCode;
            importRow.stockCode     = goldData.code;
            importRow.closePrice    = goldData.last;
            importRow.highPrice     = goldData.high;
            importRow.lowPrice      = goldData.low;

            if (goldOpenPriceDate != updateTime.Date || goldOpenPrice == decimal.MinValue)
            {
                data.baseDS.priceDataRow row = application.DbAccess.GetLastPriceData(importRow.stockCode);
                if (row != null)
                {
                    goldOpenPrice = row.closePrice;
                }
                else
                {
                    goldOpenPrice = importRow.closePrice;
                }
                goldOpenPriceDate = updateTime.Date;
            }
            importRow.openPrice = goldOpenPrice;
            importPriceTbl.AddimportPriceRow(importRow);
            return(importPriceTbl);
        }
Beispiel #4
0
 public bool GetTransactionInfo(ref TransactionInfo transInfo)
 {
     data.baseDS.priceDataRow     priceRow     = DbAccess.GetLastPriceData(transInfo.stockCode);
     data.baseDS.portfolioRow     portfolioRow = DbAccess.GetPortfolio(transInfo.portfolio);
     data.baseDS.stockExchangeRow marketRow    = application.AppLibs.GetStockExchange(transInfo.stockCode);
     if (priceRow == null || portfolioRow == null || marketRow == null)
     {
         return(false);
     }
     transInfo.price         = priceRow.closePrice;
     transInfo.priceDate     = priceRow.onDate;
     transInfo.availableCash = portfolioRow.startCapAmt - portfolioRow.usedCapAmt;
     transInfo.transFeePerc  = marketRow.tranFeePerc;
     transInfo.priceRatio    = marketRow.priceRatio;
     return(true);
 }
Beispiel #5
0
        private void OnUpdateData(data.baseDS.priceDataRow row, libs.importStat stat)
        {
            if (fCanceled)
            {
                stat.cancel = true;
            }
            this.ShowMessage(stat.updateCount.ToString("###,###,##0") + "/" +
                             stat.errorCount.ToString("###,###,##0") + "/" +
                             stat.dataCount.ToString("###,###,##0"), "Import");

            //Do Aggregate and reset import to clear system resource
            if (myDataSet.priceData.Count > constNumberOfImportInBatch)
            {
                application.DbAccess.UpdateData(myDataSet.priceData);
                DoAggregate(myDataSet.priceData);
                myDataSet.priceData.Clear();
            }
        }
Beispiel #6
0
        //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;
        }
Beispiel #7
0
        public static void GenPriceData(string stockCode)
        {
            DateTime dt = DateTime.Now;
            decimal  lastHighPrice = 0, lastLowPrice = 0, lastClosePrice = 0, lastOpenPrice = 0, lastVolume = 0;

            data.baseDS.priceDataSumRow dayPriceRow = myDailyPrice.GetData(stockCode, dt);
            if (dayPriceRow == null)
            {
                data.baseDS.priceDataRow priceRow = application.DbAccess.GetLastPriceData(stockCode);
                lastHighPrice  = priceRow.highPrice;
                lastLowPrice   = priceRow.lowPrice;
                lastClosePrice = priceRow.closePrice;
                lastOpenPrice  = priceRow.openPrice;
                lastVolume     = 0;
            }
            else
            {
                lastHighPrice  = dayPriceRow.highPrice;
                lastLowPrice   = dayPriceRow.lowPrice;
                lastClosePrice = dayPriceRow.closePrice;
                lastOpenPrice  = dayPriceRow.openPrice;
                lastVolume     = dayPriceRow.volume;
            }
            priceDataTbl.Clear();
            importPriceTbl.Clear();

            data.importDS.importPriceRow importRow = importPriceTbl.NewimportPriceRow();
            application.DbAccess.InitData(importRow);

            decimal highPrice  = lastHighPrice + lastHighPrice * (decimal)common.system.Random(-4, 5) / 100;
            decimal lowPrice   = lastLowPrice + lastLowPrice * (decimal)common.system.Random(-4, 5) / 100;
            decimal closePrice = lastClosePrice + lastClosePrice * (decimal)common.system.Random(-5, 5) / 100;

            importRow.openPrice = lastOpenPrice;
            importRow.highPrice = Math.Max(lastHighPrice, highPrice);
            if (lowPrice < importRow.highPrice)
            {
                importRow.lowPrice = lowPrice;
            }
            else
            {
                importRow.lowPrice = importRow.highPrice;
            }

            if (closePrice >= importRow.lowPrice && closePrice <= importRow.highPrice)
            {
                importRow.closePrice = closePrice;
            }
            else
            {
                importRow.closePrice = (importRow.lowPrice + importRow.highPrice) / 2;
            }
            importRow.volume    = lastVolume + common.system.Random(0, 100);
            importRow.onDate    = dt;
            importRow.stockCode = stockCode;
            importPriceTbl.AddimportPriceRow(importRow);

            imports.libs.AddImportPrice(importPriceTbl, priceDataTbl);
            application.DbAccess.UpdateData(priceDataTbl);
            // In VN culture : start of week is Monday (not Sunday)
            imports.libs.AggregatePriceData(priceDataTbl, vnCulture, null);

            myDailyPrice.UpdateData(importRow);
        }
Beispiel #8
0
 public static void UpdateData(data.baseDS.priceDataRow row)
 {
     priceDataTA.Update(row);
     row.AcceptChanges();
 }