예제 #1
0
        public override void AddNew(string code)
        {
            bool saveOnProccessing = this.fOnProccessing;

            try
            {
                this.fOnProccessing = true;
                databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)myMasterSource.AddNew()).Row;
                if (row != null)
                {
                    databases.AppLibs.InitData(row);
                    row.type         = (byte)this.myWatchListType;
                    row.investorCode = this.myInvestorCode;
                    row.code         = Consts.constMarkerNEW;
                    interestedStrategy.Clear();
                    int position = myMasterSource.Position;
                    myMasterSource.Position = -1;
                    myMasterSource.Position = position;
                    SetFirstFocus();
                }
                PortfolioCurrentChanged();
                this.fOnProccessing = saveOnProccessing;
            }
            catch (Exception er)
            {
                this.fOnProccessing = saveOnProccessing;
                ShowError(er);
            }
        }
예제 #2
0
        protected override void SaveData()
        {
            databases.baseDS.portfolioDetailDataTable defaultStrategyTbl = DataAccess.Libs.GetPortfolioDetail_ByCode(DataAccess.Libs.GetPortfolio_DefaultStrategy().code);

            databases.baseDS.portfolioDetailDataTable portfolioDetailTbl;
            for (int portfolioIdx = 0; portfolioIdx < watchListLb.myCheckedValues.Count; portfolioIdx++)
            {
                databases.baseDS.portfolioRow portfolioRow = DataAccess.Libs.GetPortfolio_ByCode(watchListLb.myCheckedValues[portfolioIdx]);
                if (portfolioRow == null)
                {
                    continue;
                }
                portfolioDetailTbl      = DataAccess.Libs.GetPortfolioDetail_ByCode(portfolioRow.code);
                mvString.myFormatString = portfolioRow.interestedStock;
                for (int stockIdx = 0; stockIdx < myStockCodes.Count; stockIdx++)
                {
                    if (!mvString.Add(myStockCodes[stockIdx]))
                    {
                        continue;
                    }
                    mvString.Add(myStockCodes[stockIdx]);
                    //Add default portfolio data
                    DeletePortfolioData(portfolioDetailTbl, portfolioRow.code, myStockCodes[stockIdx]);
                    databases.AppLibs.CopyPortfolioData(defaultStrategyTbl, portfolioDetailTbl, portfolioRow.code, myStockCodes[stockIdx]);
                }
                portfolioRow.interestedStock = mvString.myFormatString;
                DataAccess.Libs.UpdateData(portfolioRow);
                DataAccess.Libs.UpdateData(portfolioDetailTbl);
            }
            common.system.ShowMessage(Languages.Libs.GetString("dataSaved"));
        }
예제 #3
0
        private void LoadData()
        {
            databases.baseDS.portfolioRow sysPortfolioRow = DataAccess.Libs.GetPortfolio_DefaultStrategy();
            interestedStrategy.myDataTbl = DataAccess.Libs.GetPortfolioDetail_ByCode(sysPortfolioRow.code);

            interestedStrategy.myPorfolioCode = sysPortfolioRow.code;
            interestedStrategy.myStockCode    = sysPortfolioRow.code;
            interestedStrategy.Refresh();
        }
예제 #4
0
 protected override void RemoveCurrent()
 {
     this.ShowMessage("");
     databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)myMasterSource.Current).Row;
     if (row.HasVersion(DataRowVersion.Original))
     {
         DataAccess.Libs.DeleteData(row);
     }
     base.RemoveCurrent();
 }
예제 #5
0
 protected override void RemoveCurrent()
 {
     this.ShowMessage("");
     if (myMasterSource.Current == null)
     {
         return;
     }
     databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)(myMasterSource.Current as DataRowView).Row;
     if (row.HasVersion(DataRowVersion.Original))
     {
         DataAccess.Libs.DeleteData(row);
     }
     myMasterSource.RemoveCurrent();
     this.ShowMessage(Languages.Libs.GetString("dataWasDeleted"));
 }
예제 #6
0
 private void CalculateCashAmt()
 {
     if (this.portfolioSource.Current == null)
     {
         return;
     }
     databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)this.portfolioSource.Current).Row;
     if (row.IsNull(myDataSet.portfolio.startCapAmtColumn.ColumnName))
     {
         cashAmtEd.Value = 0;
     }
     else
     {
         cashAmtEd.Value = row.startCapAmt - row.usedCapAmt;
     }
 }
예제 #7
0
 public static databases.baseDS.portfolioRow FindAndCache(databases.baseDS.portfolioDataTable tbl, string code)
 {
     databases.baseDS.portfolioRow row = tbl.FindBycode(code);
     if (row != null)
     {
         return(row);
     }
     databases.baseDSTableAdapters.portfolioTA dataTA = new databases.baseDSTableAdapters.portfolioTA();
     dataTA.ClearBeforeFill = false;
     dataTA.FillByCode(tbl, code);
     row = tbl.FindBycode(code);
     if (row != null)
     {
         return(row);
     }
     return(null);
 }
예제 #8
0
        protected override void UpdateData(DataRow row)
        {
            if (row == null)
            {
                return;
            }
            databases.baseDS.portfolioRow portfolioRow = (databases.baseDS.portfolioRow)row;
            portfolioRow.ItemArray = DataAccess.Libs.UpdateData(portfolioRow).ItemArray;
            portfolioRow.AcceptChanges();

            if (this.interestedStrategy.myDataTbl != null)
            {
                DataAccess.Libs.UpdateData(this.interestedStrategy.myDataTbl);
                interestedStrategy.myDataTbl.AcceptChanges();
            }
            PortfolioCurrentChanged();
        }
예제 #9
0
 protected void LoadDetailData()
 {
     if (this.portfolioSource.Current == null)
     {
         return;
     }
     databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)this.portfolioSource.Current).Row;
     //Investor stock
     if (row.IsNull(myDataSet.portfolio.codeColumn.ColumnName))
     {
         investorStockSource.DataSource = null;
     }
     else
     {
         investorStockSource.DataSource = DataAccess.Libs.GetOwnedStock_ByPortfolio(row.code);
     }
 }
예제 #10
0
        public static void InitData(databases.baseDS.portfolioRow row)
        {
            row.type         = (byte)AppTypes.PortfolioTypes.WatchList;
            row.code         = "";
            row.name         = "";
            row.investorCode = "";
            row.description  = "";

            row.startCapAmt = 0;
            row.usedCapAmt  = 0;

            row.maxBuyAmtPerc       = 100;
            row.stockReducePerc     = 50;
            row.stockAccumulatePerc = 50;

            row.interestedSector = "";
            row.interestedStock  = "";
        }
예제 #11
0
        public override void AddNew(string code)
        {
            //databases.baseDS.portfolioRow lastRow = (databases.baseDS.portfolioRow)((DataRowView)myMasterSource.Current).Row;
            databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)myMasterSource.AddNew()).Row;
            if (row == null)
            {
                return;
            }
            databases.AppLibs.InitData(row);
            row.type         = (byte)this.myPortfolioType;
            row.investorCode = this.myInvestorCode;
            row.code         = Consts.constMarkerNEW;

            int position = myMasterSource.Position;

            myMasterSource.Position = -1;
            myMasterSource.Position = position;
            SetFirstFocus();
        }
예제 #12
0
 private void PortfolioCurrentChanged()
 {
     if (this.portfolioSource.Current == null)
     {
         return;
     }
     databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)this.portfolioSource.Current).Row;
     if (isNewRow(row))
     {
         interestedStrategy.myPorfolioCode = null;
         interestedStrategy.myDataTbl      = null;
     }
     else
     {
         interestedStrategy.myPorfolioCode = row.code;
         interestedStrategy.myDataTbl      = DataAccess.Libs.GetPortfolioDetail_ByCode(row.code);
     }
     interestedStrategy.myStockCode = null;
     interestedStrategy.Refresh();
     ShowReccount((this.portfolioSource.Position + 1).ToString() + "/" + this.portfolioSource.Count.ToString());
 }
예제 #13
0
        protected override void SaveData()
        {
            common.MultiValueString                   mvString     = new common.MultiValueString();
            databases.baseDS.portfolioDataTable       portfolioTbl = new databases.baseDS.portfolioDataTable();
            databases.baseDS.portfolioDetailDataTable portfolioDataTbl;
            portfolioTbl.Clear();
            for (int portfolioIdx = 0; portfolioIdx < watchListLb.myCheckedValues.Count; portfolioIdx++)
            {
                databases.baseDS.portfolioRow portfolioRow = DataAccess.Libs.GetPortfolio_ByCode(watchListLb.myCheckedValues[portfolioIdx]);
                if (portfolioRow == null)
                {
                    continue;
                }
                mvString.myFormatString = portfolioRow.interestedStock;
                mvString.Add(codeEd.Text);
                portfolioRow.interestedStock = mvString.myFormatString;

                portfolioDataTbl = DataAccess.Libs.GetPortfolioDetail_ByCode(portfolioRow.code);
                databases.baseDS.portfolioDetailRow dataRow;
                for (int idx = 0; idx < myStrategyCodes.Count; idx++)
                {
                    dataRow = portfolioDataTbl.FindByportfoliocodesubCode(portfolioRow.code, this.codeEd.Text, this.myStrategyCodes[idx]);
                    if (dataRow == null)
                    {
                        dataRow = portfolioDataTbl.NewportfolioDetailRow();
                        databases.AppLibs.InitData(dataRow);
                        dataRow.portfolio = portfolioRow.code;
                        dataRow.code      = codeEd.Text;
                        dataRow.subCode   = this.myStrategyCodes[idx];
                        portfolioDataTbl.AddportfolioDetailRow(dataRow);
                    }
                    mvString.myFormatString = dataRow.data;
                    mvString.Add(timeScaleCb.myValue.Code);
                    dataRow.data = mvString.myFormatString;
                }
                DataAccess.Libs.UpdateData(portfolioRow);
                DataAccess.Libs.UpdateData(portfolioDataTbl);
            }
            common.system.ShowMessage(Languages.Libs.GetString("dataSaved"));
        }
예제 #14
0
        private void interestedStockClb_myStockCodeSelectionChange(object sender, EventArgs e)
        {
            try
            {
                if (this.fOnProccessing)
                {
                    return;
                }

                if (((baseClass.controls.lbStockCode)sender).SelectedItem == null)
                {
                    return;
                }
                databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)this.portfolioSource.Current).Row;
                interestedStrategy.Clear();
                interestedStrategy.myStockCode = ((common.myComboBoxItem)(((baseClass.controls.lbStockCode)sender).SelectedItem)).Value;
                interestedStrategy.Refresh();
            }
            catch (Exception er)
            {
                ShowError(er);
            }
        }
예제 #15
0
 private void newWatchListBtn_Click(object sender, EventArgs e)
 {
     try
     {
         this.ShowMessage("");
         baseClass.forms.watchListNew  form = baseClass.forms.watchListNew.GetForm();
         databases.baseDS.portfolioRow row  = form.ShowNew(AppTypes.PortfolioTypes.WatchList, commonClass.SysLibs.sysLoginCode);
         if (row == null)
         {
             return;
         }
         watchListLb.LoadData(commonClass.SysLibs.sysLoginCode, false);
         StringCollection list = watchListLb.myCheckedValues;
         if (!list.Contains(row.code))
         {
             list.Add(row.code);
             watchListLb.myCheckedValues = list;
         }
     }
     catch (Exception er)
     {
         this.ShowError(er);
     }
 }
예제 #16
0
        /// <summary>
        ///  Create records to keep stock transaction (buy,sell...)
        ///  - transactions
        ///  - investorStock
        /// </summary>
        /// <param name="onDate"></param>
        /// <param name="type"></param>
        /// <param name="stockCode"></param>
        /// <param name="portfolio"></param>
        /// <param name="qty"></param>
        /// <param name="amt"></param>
        public static databases.baseDS.transactionsDataTable MakeTransaction(AppTypes.TradeActions type, string stockCode, string portfolioCode, int qty, decimal feePerc, out string errorText)
        {
            errorText = "";
            databases.baseDS.stockExchangeRow marketRow = databases.DbAccess.GetStockExchange(stockCode);
            if (marketRow == null)
            {
                return(null);
            }

            errorText = "";
            DateTime onTime = DateTime.Now;

            //Price
            databases.baseDS.priceDataRow priceRow = databases.DbAccess.GetLastPriceData(stockCode);
            if (priceRow == null)
            {
                errorText = Languages.Libs.GetString("cannotDoTransaction");
                return(null);
            }
            decimal amt    = qty * priceRow.closePrice * marketRow.priceRatio;
            decimal feeAmt = (decimal)Math.Round(feePerc * amt / 100, common.system.GetPrecisionFromMask(Settings.sysMaskLocalAmt));

            databases.baseDS.portfolioRow portfolioRow = databases.DbAccess.GetPortfolio(portfolioCode);
            if (portfolioRow == null)
            {
                errorText = String.Format(Languages.Libs.GetString("dataNotFound"), "[portfolio]");
                return(null);
            }
            switch (type)
            {
            case AppTypes.TradeActions.Buy:
            case AppTypes.TradeActions.Accumulate:
                portfolioRow.usedCapAmt += amt;
                portfolioRow.usedCapAmt += feeAmt;
                break;

            default:     //Sell
                portfolioRow.usedCapAmt -= amt;
                portfolioRow.usedCapAmt += feeAmt;
                break;
            }
            if (portfolioRow.startCapAmt - portfolioRow.usedCapAmt < 0)
            {
                portfolioRow.CancelEdit();
                errorText = String.Format(Languages.Libs.GetString("outOfMoney"), portfolioRow.startCapAmt - portfolioRow.usedCapAmt - amt - feeAmt);
                return(null);
            }

            //Create records to store data
            databases.baseDS.transactionsDataTable  transTbl         = new databases.baseDS.transactionsDataTable();
            databases.baseDS.investorStockDataTable investorStockTbl = new databases.baseDS.investorStockDataTable();
            databases.baseDS.transactionsRow        transRow;
            databases.baseDS.investorStockRow       stockRow;

            transRow = transTbl.NewtransactionsRow();
            databases.AppLibs.InitData(transRow);
            transRow.onTime    = onTime;
            transRow.tranType  = (byte)type;
            transRow.stockCode = stockCode;
            transRow.portfolio = portfolioCode;
            transRow.qty       = qty;
            transRow.amt       = amt;
            transRow.feeAmt    = feeAmt;
            transRow.status    = (byte)AppTypes.CommonStatus.Close;
            transTbl.AddtransactionsRow(transRow);

            //Update stock
            DateTime onDate = onTime.Date;

            switch (type)
            {
            case AppTypes.TradeActions.Buy:
            case AppTypes.TradeActions.Accumulate:
                investorStockTbl.Clear();
                databases.DbAccess.LoadData(investorStockTbl, stockCode, portfolioCode, onDate);
                if (investorStockTbl.Count == 0)
                {
                    stockRow = investorStockTbl.NewinvestorStockRow();
                    databases.AppLibs.InitData(stockRow);
                    stockRow.buyDate   = onDate;
                    stockRow.stockCode = stockCode;
                    stockRow.portfolio = portfolioCode;
                    investorStockTbl.AddinvestorStockRow(stockRow);
                }
                stockRow      = investorStockTbl[0];
                stockRow.qty += qty; stockRow.buyAmt += amt;
                break;

            default:     //Sell
                DateTime applicableDate = onDate.AddDays(-marketRow.minBuySellDay);
                investorStockTbl.Clear();
                databases.DbAccess.LoadData(investorStockTbl, stockCode, portfolioCode);
                decimal remainQty = qty;
                for (int idx = 0; idx < investorStockTbl.Count; idx++)
                {
                    if (investorStockTbl[idx].buyDate > applicableDate)
                    {
                        continue;
                    }
                    if (investorStockTbl[idx].qty >= remainQty)
                    {
                        investorStockTbl[idx].buyAmt = (investorStockTbl[idx].qty - remainQty) * (investorStockTbl[idx].qty == 0 ? 0 : investorStockTbl[idx].buyAmt / investorStockTbl[idx].qty);
                        investorStockTbl[idx].qty    = (investorStockTbl[idx].qty - remainQty);
                        remainQty = 0;
                    }
                    else
                    {
                        remainQty -= investorStockTbl[idx].qty;
                        investorStockTbl[idx].buyAmt = 0;
                        investorStockTbl[idx].qty    = 0;
                    }
                    if (remainQty == 0)
                    {
                        break;
                    }
                }
                if (remainQty > 0)
                {
                    errorText = String.Format(Languages.Libs.GetString("outOfQty"), qty - remainQty);
                    return(null);
                }
                break;
            }
            //Delete empty stock
            for (int idx = 0; idx < investorStockTbl.Count; idx++)
            {
                if (investorStockTbl[idx].qty != 0)
                {
                    continue;
                }
                investorStockTbl[idx].Delete();
            }

            //Update data with transaction support
            TransactionScopeOption tranOption;

            tranOption = (commonClass.SysLibs.sysUseTransactionInUpdate ? TransactionScopeOption.Required : TransactionScopeOption.Suppress);
            using (TransactionScope scope = new TransactionScope(tranOption))
            {
                databases.DbAccess.UpdateData(portfolioRow);
                databases.DbAccess.UpdateData(investorStockTbl);
                databases.DbAccess.UpdateData(transTbl);
                scope.Complete();
            }
            return(transTbl);
        }