Пример #1
0
        public string GetSQL()
        {
            databases.baseDS.portfolioDataTable  portfolioTbl  = new databases.baseDS.portfolioDataTable();
            databases.baseDS.tradeAlertDataTable tradeAlertTbl = new databases.baseDS.tradeAlertDataTable();
            string condCmd = "";

            condCmd += (condCmd == "" ? "" : " AND ") +
                       "(" + tradeAlertTbl.portfolioColumn.ColumnName +
                       " IN (" +
                       " SELECT " + portfolioTbl.codeColumn.ColumnName +
                       " FROM " + portfolioTbl.TableName +
                       " WHERE " + portfolioTbl.investorCodeColumn.ColumnName + "=N'" + commonClass.SysLibs.sysLoginCode + "'))";

            if (dateRangeChk.Checked)
            {
                condCmd += (condCmd == "" ? "" : " AND ") +
                           "(" + tradeAlertTbl.onTimeColumn.ColumnName +
                           " BETWEEN '" + common.system.ConvertToSQLDateString(dateRange.frDate, false) + "' AND '" +
                           common.system.ConvertToSQLDateString(dateRange.toDate.AddDays(1).AddSeconds(-1), false) + "')";
            }
            if (statusChk.Checked)
            {
                condCmd += (condCmd == "" ? "" : " AND ") +
                           "(" + tradeAlertTbl.statusColumn.ColumnName + " & " + ((byte)statusCb.myValue).ToString() + ">0)";
            }

            if (portfolioChk.Checked)
            {
                condCmd += (condCmd == "" ? "" : " AND ") +
                           "(" + tradeAlertTbl.portfolioColumn.ColumnName + "=N'" + portfolioCb.myValue + "')";
            }

            if (strategyChk.Checked)
            {
                condCmd += (condCmd == "" ? "" : " AND ") +
                           "(" + tradeAlertTbl.strategyColumn.ColumnName + "=N'" + strategyCb.myValue + "')";
            }


            if (timeScaleChk.Checked)
            {
                condCmd += (condCmd == "" ? "" : " AND ") +
                           "(" + tradeAlertTbl.timeScaleColumn.ColumnName + "='" + timeScaleCb.myValue.Code + "')";
            }

            if (codeChk.Checked)
            {
                condCmd += (condCmd == "" ? "" : " AND ") +
                           "(" + tradeAlertTbl.stockCodeColumn.ColumnName + "=N'" + codeEd.Text.Trim() + "')";
            }

            string sqlCmd = "SELECT * FROM " + tradeAlertTbl.TableName +
                            (condCmd == "" ? "" : " WHERE " + condCmd) +
                            " ORDER BY " + tradeAlertTbl.onTimeColumn.ColumnName + " DESC";

            return(sqlCmd);
        }
Пример #2
0
        public static databases.baseDS.tradeAlertDataTable GetTradeAlertSummaryOfLogin()
        {
            DateTime lastAlertDate = DataAccess.Libs.GetLastAlertTime(commonClass.SysLibs.sysLoginCode);

            databases.baseDS.tradeAlertDataTable tradeAlertTbl = DataAccess.Libs.GetTradeAlert(lastAlertDate, lastAlertDate,
                                                                                               commonClass.SysLibs.sysLoginCode,
                                                                                               (byte)common.CommonTypes.CommonStatus.All);
            return(MakeAlertSummary(tradeAlertTbl));
        }
Пример #3
0
 private static void CreateTradeAlert(databases.baseDS.tradeAlertDataTable tradeAlertTbl, string portfolioCode,
                                      string stockCode, string strategy, AppTypes.TimeScale timeScale, TradePointInfo info, DateTime onTime, string msg)
 {
     databases.baseDS.tradeAlertRow row = tradeAlertTbl.NewtradeAlertRow();
     databases.AppLibs.InitData(row);
     row.onTime      = onTime;
     row.portfolio   = portfolioCode;
     row.stockCode   = stockCode;
     row.timeScale   = timeScale.Code;
     row.strategy    = strategy;
     row.status      = (byte)AppTypes.CommonStatus.New;
     row.tradeAction = (byte)info.TradeAction;
     row.subject     = info.TradeAction.ToString();
     row.msg         = msg;
     tradeAlertTbl.AddtradeAlertRow(row);
 }
Пример #4
0
        public virtual void LoadData(bool force)
        {
            databases.baseDS.tradeAlertDataTable tradeAlertTbl = DataAccess.Libs.GetTradeAlert_BySQL(myAlertFilterForm.GetSQL());
            for (int idx = 0; idx < tradeAlertTbl.Count; idx++)
            {
                if (tradeAlertTbl[idx].RowState == DataRowState.Deleted)
                {
                    continue;
                }
                tradeAlertTbl[idx].msg = AppLibs.AlertMessageText(tradeAlertTbl[idx].msg, "      ");
            }

            tradeAlertSource.DataSource   = tradeAlertTbl;
            alertSummarySource.DataSource = AppLibs.MakeAlertSummary(tradeAlertSource.DataSource as databases.baseDS.tradeAlertDataTable);
            SetDataGrid();
            ShowReccount(alertSummarySource.Count);
        }
Пример #5
0
        //private static void SaveLastRunTime(DateTime onTime)
        //{
        //    StringCollection aFields = new StringCollection();
        //    StringCollection aValues = new StringCollection();
        //    aFields.Add(Configuration.configKeys.sysTradeAlertLastRun.ToString());
        //    aValues.Add(onTime.ToString());
        //    application.Configuration.SaveConfig(aFields, aValues);
        //}

        //withAplicableCheckInAlert = true : Sell alerts only create when user owned stock that is applible to sell


        /// <summary>
        /// Create alerts for all stock in portfolio and return number of alerts created
        /// </summary>
        /// <param name="alertList"> all alert resulted from analysis </param>
        private static int CreateTradeAlert(TradeAlertItem[] alertList)
        {
            int              noAlertCreated = 0;
            string           msg;
            StringCollection timeScaleList;

            databases.baseDS.tradeAlertRow       tradeAlertRow;
            databases.baseDS.tradeAlertDataTable tradeAlertTbl = new databases.baseDS.tradeAlertDataTable();

            //Watch list : sort by  Stock code + Strategy code
            databases.baseDS.portfolioDetailDataTable watchlistTbl = databases.DbAccess.GetPortfolioDetail_ByType(new AppTypes.PortfolioTypes[] { AppTypes.PortfolioTypes.WatchList });
            DataView watchlistView = new DataView(watchlistTbl);

            watchlistView.Sort = watchlistTbl.codeColumn.ColumnName + "," + watchlistTbl.subCodeColumn.ColumnName;

            //Portfolio : Sort by  Stock code
            databases.tmpDS.investorStockDataTable investorStockTbl = new databases.tmpDS.investorStockDataTable();
            databases.DbAccess.LoadStockOwnedByAll(investorStockTbl);

            DataView investorStockView = new DataView(investorStockTbl);

            investorStockView.Sort = investorStockTbl.stockCodeColumn.ColumnName;

            DataRowView[] foundRows;
            // Only create alerts for codes in user's watchlist.
            for (int alertId = 0; alertId < alertList.Length; alertId++)
            {
                databases.baseDS.portfolioDetailRow portfolioDetailRow;
                //===============================================
                // Check if alert's strategy in user's wish list
                //===============================================
                foundRows = watchlistView.FindRows(new object[] { alertList[alertId].StockCode, alertList[alertId].Strategy.Trim() });
                for (int dataIdx = 0; dataIdx < foundRows.Length; dataIdx++)
                {
                    // Check if alert's time scale in user's wish list ??
                    portfolioDetailRow = ((databases.baseDS.portfolioDetailRow)foundRows[dataIdx].Row);
                    timeScaleList      = common.MultiValueString.String2List(portfolioDetailRow.data.Trim());
                    if (!timeScaleList.Contains(alertList[alertId].TimeScale.Code))
                    {
                        continue;
                    }

                    //Ignore duplicate alerts.
                    tradeAlertRow = databases.DbAccess.GetOneAlert(alertList[alertId].OnDateTime,
                                                                   portfolioDetailRow.portfolio,
                                                                   alertList[alertId].StockCode,
                                                                   alertList[alertId].Strategy,
                                                                   alertList[alertId].TimeScale.Code,
                                                                   AppTypes.CommonStatus.All);
                    if (tradeAlertRow != null)
                    {
                        continue;
                    }
                    string infoText = alertList[alertId].TradePoint.BusinessInfo.ToText().Trim();
                    infoText = (infoText != "" ? infoText : common.Consts.constNotAvailable);

                    //Create alert template message, AlertMessageText() will convert it to specified-language text.
                    msg = Consts.constTextMergeMarkerLEFT + "price" + Consts.constTextMergeMarkerRIGHT + " : " + alertList[alertId].Price.ToString() + common.Consts.constCRLF +
                          Consts.constTextMergeMarkerLEFT + "volume" + Consts.constTextMergeMarkerRIGHT + " : " + alertList[alertId].Volume.ToString() + common.Consts.constCRLF +
                          Consts.constTextMergeMarkerLEFT + "marketInfo" + Consts.constTextMergeMarkerRIGHT + " : " + infoText + common.Consts.constCRLF;
                    CreateTradeAlert(tradeAlertTbl, portfolioDetailRow.portfolio, alertList[alertId].StockCode, alertList[alertId].Strategy,
                                     alertList[alertId].TimeScale, alertList[alertId].TradePoint, alertList[alertId].OnDateTime, msg);
                    noAlertCreated++;
                }

                //===============================================
                // Create alerts for all codes in user's porfolio
                //===============================================
                foundRows = investorStockView.FindRows(new object[] { alertList[alertId].StockCode });
                for (int dataIdx = 0; dataIdx < foundRows.Length; dataIdx++)
                {
                    // Check if alert's time scale in user's wish list ??
                    databases.tmpDS.investorStockRow investorStockRow = ((databases.tmpDS.investorStockRow)foundRows[dataIdx].Row);
                    if (investorStockRow.qty == 0)
                    {
                        continue;
                    }

                    //Ignore duplicate alerts.
                    tradeAlertRow = databases.DbAccess.GetOneAlert(alertList[alertId].OnDateTime,
                                                                   investorStockRow.portfolio,
                                                                   alertList[alertId].StockCode,
                                                                   alertList[alertId].Strategy,
                                                                   alertList[alertId].TimeScale.Code,
                                                                   AppTypes.CommonStatus.All);
                    if (tradeAlertRow != null)
                    {
                        continue;
                    }

                    string infoText = alertList[alertId].TradePoint.BusinessInfo.ToText().Trim();
                    infoText = (infoText != "" ? infoText : common.Consts.constNotAvailable);

                    //Create alert template message, AlertMessageText() will convert it to specified-language text.
                    msg = Consts.constTextMergeMarkerLEFT + "price" + Consts.constTextMergeMarkerRIGHT + " : " + alertList[alertId].Price.ToString() + common.Consts.constCRLF +
                          Consts.constTextMergeMarkerLEFT + "volume" + Consts.constTextMergeMarkerRIGHT + " : " + alertList[alertId].Volume.ToString() + common.Consts.constCRLF +
                          Consts.constTextMergeMarkerLEFT + "marketInfo" + Consts.constTextMergeMarkerRIGHT + " : " + infoText + common.Consts.constCRLF;
                    msg += Consts.constTextMergeMarkerLEFT + "ownedQty" + Consts.constTextMergeMarkerRIGHT + " : " + investorStockRow.qty.ToString() + common.Consts.constCRLF;
                    CreateTradeAlert(tradeAlertTbl, investorStockRow.portfolio, alertList[alertId].StockCode, alertList[alertId].Strategy,
                                     alertList[alertId].TimeScale, alertList[alertId].TradePoint, alertList[alertId].OnDateTime, msg);
                    noAlertCreated++;
                }
            }
            databases.DbAccess.UpdateData(tradeAlertTbl);
            return(noAlertCreated);
        }
Пример #6
0
 public static databases.baseDS.tradeAlertRow UpdateData(databases.baseDS.tradeAlertRow row)
 {
     try
     {
         lock (myClient)
         {
             databases.baseDS.tradeAlertDataTable tbl = new databases.baseDS.tradeAlertDataTable();
             tbl.ImportRow(row);
             myClient.UpdateTradeAlert(ref tbl);
             row.AcceptChanges();
             return tbl[0];
         }
     }
     catch (Exception er)
     {
         if (OnError != null) OnError(er);
     }
     return null;
 }
Пример #7
0
 public bool UpdateTradeAlert(ref databases.baseDS.tradeAlertDataTable tradeAlertTbl)
 {
     return(base.Channel.UpdateTradeAlert(ref tradeAlertTbl));
 }
Пример #8
0
        //private static void SaveLastRunTime(DateTime onTime)
        //{
        //    StringCollection aFields = new StringCollection();
        //    StringCollection aValues = new StringCollection();
        //    aFields.Add(Configuration.configKeys.sysTradeAlertLastRun.ToString());
        //    aValues.Add(onTime.ToString());
        //    application.Configuration.SaveConfig(aFields, aValues);
        //}
        
        //withAplicableCheckInAlert = true : Sell alerts only create when user owned stock that is applible to sell

       
        /// <summary>
        /// Create alerts for all stock in portfolio and return number of alerts created
        /// </summary>
        /// <param name="alertList"> all alert resulted from analysis </param>
        private static int CreateTradeAlert(TradeAlertItem[] alertList)
        {
            int noAlertCreated = 0;
            string msg;
            StringCollection timeScaleList;

            databases.baseDS.tradeAlertRow tradeAlertRow;
            databases.baseDS.tradeAlertDataTable tradeAlertTbl = new databases.baseDS.tradeAlertDataTable();

            //Watch list : sort by  Stock code + Strategy code
            databases.baseDS.portfolioDetailDataTable watchlistTbl = databases.DbAccess.GetPortfolioDetail_ByType(new AppTypes.PortfolioTypes[] { AppTypes.PortfolioTypes.WatchList});
            DataView watchlistView = new DataView(watchlistTbl);
            
            watchlistView.Sort = watchlistTbl.codeColumn.ColumnName + "," + watchlistTbl.subCodeColumn.ColumnName;

            //Portfolio : Sort by  Stock code 
            databases.tmpDS.investorStockDataTable investorStockTbl = new databases.tmpDS.investorStockDataTable();
            databases.DbAccess.LoadStockOwnedByAll(investorStockTbl);

            DataView investorStockView = new DataView(investorStockTbl);
            investorStockView.Sort = investorStockTbl.stockCodeColumn.ColumnName;

            DataRowView[] foundRows;
            // Only create alerts for codes in user's watchlist. 
            for (int alertId = 0; alertId < alertList.Length; alertId++)
            {
                databases.baseDS.portfolioDetailRow portfolioDetailRow;
                //===============================================
                // Check if alert's strategy in user's wish list 
                //===============================================
                foundRows = watchlistView.FindRows(new object[] { alertList[alertId].StockCode, alertList[alertId].Strategy.Trim() });
                for (int dataIdx = 0; dataIdx < foundRows.Length; dataIdx++)
                {
                    // Check if alert's time scale in user's wish list ??
                    portfolioDetailRow = ((databases.baseDS.portfolioDetailRow)foundRows[dataIdx].Row);
                    timeScaleList = common.MultiValueString.String2List(portfolioDetailRow.data.Trim());
                    if (!timeScaleList.Contains(alertList[alertId].TimeScale.Code)) continue;
                    
                    //Ignore duplicate alerts.
                    tradeAlertRow = databases.DbAccess.GetOneAlert(alertList[alertId].OnDateTime,
                                                                   portfolioDetailRow.portfolio,
                                                                   alertList[alertId].StockCode,
                                                                   alertList[alertId].Strategy,
                                                                   alertList[alertId].TimeScale.Code,
                                                                   AppTypes.CommonStatus.All);
                    if (tradeAlertRow != null) continue;
                    string infoText = alertList[alertId].TradePoint.BusinessInfo.ToText().Trim();
                    infoText = (infoText != "" ? infoText : common.Consts.constNotAvailable);

                    //Create alert template message, AlertMessageText() will convert it to specified-language text.
                    msg = Consts.constTextMergeMarkerLEFT + "price" + Consts.constTextMergeMarkerRIGHT + " : " + alertList[alertId].Price.ToString() + common.Consts.constCRLF +
                          Consts.constTextMergeMarkerLEFT + "volume" + Consts.constTextMergeMarkerRIGHT + " : " + alertList[alertId].Volume.ToString() + common.Consts.constCRLF +
                          Consts.constTextMergeMarkerLEFT + "marketInfo" + Consts.constTextMergeMarkerRIGHT + " : " + infoText + common.Consts.constCRLF;
                    CreateTradeAlert(tradeAlertTbl, portfolioDetailRow.portfolio, alertList[alertId].StockCode, alertList[alertId].Strategy,
                                     alertList[alertId].TimeScale, alertList[alertId].TradePoint, alertList[alertId].OnDateTime, msg);
                    noAlertCreated++;
                }

                //===============================================
                // Create alerts for all codes in user's porfolio
                //===============================================
                foundRows = investorStockView.FindRows(new object[] { alertList[alertId].StockCode });
                for (int dataIdx = 0; dataIdx < foundRows.Length; dataIdx++)
                {
                    // Check if alert's time scale in user's wish list ??
                    databases.tmpDS.investorStockRow investorStockRow = ((databases.tmpDS.investorStockRow)foundRows[dataIdx].Row);
                    if (investorStockRow.qty == 0) continue;

                    //Ignore duplicate alerts.
                    tradeAlertRow = databases.DbAccess.GetOneAlert(alertList[alertId].OnDateTime,
                                                                   investorStockRow.portfolio,
                                                                   alertList[alertId].StockCode,
                                                                   alertList[alertId].Strategy,
                                                                   alertList[alertId].TimeScale.Code,
                                                                   AppTypes.CommonStatus.All);
                    if (tradeAlertRow != null) continue;

                    string infoText = alertList[alertId].TradePoint.BusinessInfo.ToText().Trim();
                    infoText = (infoText != "" ? infoText : common.Consts.constNotAvailable);

                    //Create alert template message, AlertMessageText() will convert it to specified-language text.
                    msg = Consts.constTextMergeMarkerLEFT + "price" + Consts.constTextMergeMarkerRIGHT + " : " + alertList[alertId].Price.ToString() + common.Consts.constCRLF +
                          Consts.constTextMergeMarkerLEFT + "volume" + Consts.constTextMergeMarkerRIGHT + " : " + alertList[alertId].Volume.ToString() + common.Consts.constCRLF +
                          Consts.constTextMergeMarkerLEFT + "marketInfo" + Consts.constTextMergeMarkerRIGHT + " : " + infoText + common.Consts.constCRLF;
                    msg += Consts.constTextMergeMarkerLEFT + "ownedQty" + Consts.constTextMergeMarkerRIGHT + " : " + investorStockRow.qty.ToString() + common.Consts.constCRLF;
                    CreateTradeAlert(tradeAlertTbl, investorStockRow.portfolio, alertList[alertId].StockCode, alertList[alertId].Strategy,
                                     alertList[alertId].TimeScale, alertList[alertId].TradePoint, alertList[alertId].OnDateTime, msg);
                    noAlertCreated++;
                }

            }
            databases.DbAccess.UpdateData(tradeAlertTbl);
            return noAlertCreated;
        }
Пример #9
0
 public databases.baseDS.tradeAlertDataTable GetTradeAlert_BySQL(string sql)
 {
     try
     {
         databases.baseDS.tradeAlertDataTable tbl = new databases.baseDS.tradeAlertDataTable();
         databases.DbAccess.LoadFromSQL(tbl, sql);
         return tbl;
     }
     catch (Exception ex)
     {
         WriteSysLogLocal("WS051", ex);
     }
     return null;
 }
Пример #10
0
        public string GetSQL()
        {
            databases.baseDS.portfolioDataTable portfolioTbl = new databases.baseDS.portfolioDataTable();
            databases.baseDS.tradeAlertDataTable tradeAlertTbl = new databases.baseDS.tradeAlertDataTable();
            string condCmd = "";
            condCmd += (condCmd == "" ? "" : " AND ") +
                "(" + tradeAlertTbl.portfolioColumn.ColumnName +
                    " IN (" +
                    " SELECT " + portfolioTbl.codeColumn.ColumnName +
                    " FROM " + portfolioTbl.TableName +
                    " WHERE " + portfolioTbl.investorCodeColumn.ColumnName + "=N'" + commonClass.SysLibs.sysLoginCode + "'))";

            if (dateRangeChk.Checked)
                condCmd += (condCmd == "" ? "" : " AND ") +
                    "(" + tradeAlertTbl.onTimeColumn.ColumnName + 
                    " BETWEEN '" + common.system.ConvertToSQLDateString(dateRange.frDate,false) + "' AND '"+
                                   common.system.ConvertToSQLDateString(dateRange.toDate.AddDays(1).AddSeconds(-1),false) + "')";
            if (statusChk.Checked)
                condCmd += (condCmd == "" ? "" : " AND ") +
                    "(" + tradeAlertTbl.statusColumn.ColumnName + " & " + ((byte)statusCb.myValue).ToString() + ">0)";

            if (portfolioChk.Checked)
                condCmd += (condCmd == "" ? "" : " AND ") +
                    "(" + tradeAlertTbl.portfolioColumn.ColumnName + "=N'" + portfolioCb.myValue + "')";

            if (strategyChk.Checked)
                condCmd += (condCmd == "" ? "" : " AND ") +
                    "(" + tradeAlertTbl.strategyColumn.ColumnName + "=N'" + strategyCb.myValue + "')";

            
            if (timeScaleChk.Checked)
                condCmd += (condCmd == "" ? "" : " AND ") +
                    "(" + tradeAlertTbl.timeScaleColumn.ColumnName + "='" + timeScaleCb.myValue.Code + "')";

            if (codeChk.Checked)
                condCmd += (condCmd == "" ? "" : " AND ") +
                    "(" + tradeAlertTbl.stockCodeColumn.ColumnName + "=N'" + codeEd.Text.Trim() + "')";

            string sqlCmd = "SELECT * FROM " + tradeAlertTbl.TableName +
                            (condCmd == "" ? "" : " WHERE " + condCmd) +
                            " ORDER BY " + tradeAlertTbl.onTimeColumn.ColumnName + " DESC";
            return sqlCmd;
        }
Пример #11
0
        public static databases.baseDS.tradeAlertDataTable MakeAlertSummary(databases.baseDS.tradeAlertDataTable tbl)
        {
            SummaryItem buyCount, sellCount;
            databases.baseDS.tradeAlertRow sumRow;
            databases.baseDS.tradeAlertDataTable sumTbl = new databases.baseDS.tradeAlertDataTable();
            sumTbl.DefaultView.Sort = sumTbl.onTimeColumn.ColumnName + "," + sumTbl.stockCodeColumn.ColumnName;
            DataRowView[] foundRows;
            common.DictionaryList buyCountList = new common.DictionaryList();
            common.DictionaryList sellCountList = new common.DictionaryList();

            object obj;
            //Sum
            for (int idx = 0; idx < tbl.Count; idx++)
            {
                foundRows = sumTbl.DefaultView.FindRows(new object[] { tbl[idx].onTime.Date, tbl[idx].stockCode });
                if (foundRows.Length != 0)
                    sumRow = (databases.baseDS.tradeAlertRow)foundRows[0].Row;
                else
                {
                    sumRow = sumTbl.NewtradeAlertRow();
                    databases.AppLibs.InitData(sumRow);
                    sumRow.onTime = tbl[idx].onTime.Date;
                    sumRow.stockCode = tbl[idx].stockCode;
                    sumTbl.AddtradeAlertRow(sumRow);
                }
                AppTypes.TradeActions action = (AppTypes.TradeActions)tbl[idx].tradeAction;
                switch (action)
                {
                    case AppTypes.TradeActions.Buy:
                    case AppTypes.TradeActions.Accumulate:
                        obj = buyCountList.Find(sumRow.onTime.ToString() + sumRow.stockCode);
                        if (obj == null)
                            buyCount = new SummaryItem(sumRow.stockCode, sumRow.onTime);
                        else buyCount = (SummaryItem)obj;
                        buyCount.Qty++;
                        buyCountList.Add(sumRow.onTime.ToString() + sumRow.stockCode, buyCount);
                        break;
                    case AppTypes.TradeActions.Sell:
                    case AppTypes.TradeActions.ClearAll:
                        obj = sellCountList.Find(sumRow.onTime.ToString() + sumRow.stockCode);
                        if (obj == null)
                            sellCount = new SummaryItem(sumRow.stockCode, sumRow.onTime);
                        else sellCount = (SummaryItem)obj;
                        sellCount.Qty++;
                        sellCountList.Add(sumRow.onTime.Date.ToString() + sumRow.stockCode, sellCount);
                        break;
                }
            }
            //Make summary message
            for (int idx = 0; idx < sumTbl.Count; idx++)
            {
                sumTbl[idx].msg = "";
                obj = buyCountList.Find(sumTbl[idx].onTime.ToString() + sumTbl[idx].stockCode);
                if (obj != null)
                    sumTbl[idx].msg += (sumTbl[idx].msg.Trim() != "" ? " , " : "") + (obj as SummaryItem).Qty.ToString() + " " + Languages.Libs.GetString("buyAlert");

                obj = sellCountList.Find(sumTbl[idx].onTime.ToString() + sumTbl[idx].stockCode);
                if (obj != null)
                    sumTbl[idx].msg += (sumTbl[idx].msg.Trim() != "" ? " , " : "") + (obj as SummaryItem).Qty.ToString() + " " + Languages.Libs.GetString("sellAlert");
            }
            return sumTbl;
        }
Пример #12
0
        public static databases.baseDS.tradeAlertDataTable MakeAlertSummary(databases.baseDS.tradeAlertDataTable tbl)
        {
            SummaryItem buyCount, sellCount;

            databases.baseDS.tradeAlertRow       sumRow;
            databases.baseDS.tradeAlertDataTable sumTbl = new databases.baseDS.tradeAlertDataTable();
            sumTbl.DefaultView.Sort = sumTbl.onTimeColumn.ColumnName + "," + sumTbl.stockCodeColumn.ColumnName;
            DataRowView[]         foundRows;
            common.DictionaryList buyCountList  = new common.DictionaryList();
            common.DictionaryList sellCountList = new common.DictionaryList();

            object obj;

            //Sum
            for (int idx = 0; idx < tbl.Count; idx++)
            {
                foundRows = sumTbl.DefaultView.FindRows(new object[] { tbl[idx].onTime.Date, tbl[idx].stockCode });
                if (foundRows.Length != 0)
                {
                    sumRow = (databases.baseDS.tradeAlertRow)foundRows[0].Row;
                }
                else
                {
                    sumRow = sumTbl.NewtradeAlertRow();
                    databases.AppLibs.InitData(sumRow);
                    sumRow.onTime    = tbl[idx].onTime.Date;
                    sumRow.stockCode = tbl[idx].stockCode;
                    sumTbl.AddtradeAlertRow(sumRow);
                }
                AppTypes.TradeActions action = (AppTypes.TradeActions)tbl[idx].tradeAction;
                switch (action)
                {
                case AppTypes.TradeActions.Buy:
                case AppTypes.TradeActions.Accumulate:
                    obj = buyCountList.Find(sumRow.onTime.ToString() + sumRow.stockCode);
                    if (obj == null)
                    {
                        buyCount = new SummaryItem(sumRow.stockCode, sumRow.onTime);
                    }
                    else
                    {
                        buyCount = (SummaryItem)obj;
                    }
                    buyCount.Qty++;
                    buyCountList.Add(sumRow.onTime.ToString() + sumRow.stockCode, buyCount);
                    break;

                case AppTypes.TradeActions.Sell:
                case AppTypes.TradeActions.ClearAll:
                    obj = sellCountList.Find(sumRow.onTime.ToString() + sumRow.stockCode);
                    if (obj == null)
                    {
                        sellCount = new SummaryItem(sumRow.stockCode, sumRow.onTime);
                    }
                    else
                    {
                        sellCount = (SummaryItem)obj;
                    }
                    sellCount.Qty++;
                    sellCountList.Add(sumRow.onTime.Date.ToString() + sumRow.stockCode, sellCount);
                    break;
                }
            }
            //Make summary message
            for (int idx = 0; idx < sumTbl.Count; idx++)
            {
                sumTbl[idx].msg = "";
                obj             = buyCountList.Find(sumTbl[idx].onTime.ToString() + sumTbl[idx].stockCode);
                if (obj != null)
                {
                    sumTbl[idx].msg += (sumTbl[idx].msg.Trim() != "" ? " , " : "") + (obj as SummaryItem).Qty.ToString() + " " + Languages.Libs.GetString("buyAlert");
                }

                obj = sellCountList.Find(sumTbl[idx].onTime.ToString() + sumTbl[idx].stockCode);
                if (obj != null)
                {
                    sumTbl[idx].msg += (sumTbl[idx].msg.Trim() != "" ? " , " : "") + (obj as SummaryItem).Qty.ToString() + " " + Languages.Libs.GetString("sellAlert");
                }
            }
            return(sumTbl);
        }