Пример #1
0
 public static CultureInfo GetExchangeCulture(databases.baseDS.stockExchangeRow exchangeRow)
 {
     if (exchangeRow == null)
     {
         return(null);
     }
     return(GetCulture(exchangeRow.country));
 }
Пример #2
0
 private void exchangeCb_SelectionChangeCommitted(object sender, EventArgs e)
 {
     try
     {
         databases.baseDS.stockExchangeRow row = exchangeCb.GetInfo(exchangeCb.myValue);
         checkVariancePercEd.Value = (row == null?0:row.priceAmplitude);
     }
     catch (Exception er)
     {
         this.ShowError(er);
     }
 }
Пример #3
0
 public static void InitData(databases.baseDS.stockExchangeRow row)
 {
     row.code           = "";
     row.description    = "";
     row.country        = "";
     row.workTime       = "";
     row.holidays       = "";
     row.minBuySellDay  = 0;
     row.tranFeePerc    = 0;
     row.priceRatio     = 1;
     row.volumeRatio    = 1;
     row.weight         = 0;
     row.priceAmplitude = 0;
 }
Пример #4
0
 // Stock Exchange
 public static databases.baseDS.stockExchangeRow AddStockExchange(databases.baseDS.stockExchangeDataTable tbl, string code)
 {
     databases.baseDS.stockExchangeRow stockExchangeRow = application.SysLibs.FindAndCache_StockExchange(code);
     if (stockExchangeRow == null)
     {
         stockExchangeRow = tbl.NewstockExchangeRow();
         databases.AppLibs.InitData(stockExchangeRow);
         stockExchangeRow.code = code;
         tbl.AddstockExchangeRow(stockExchangeRow);
         databases.DbAccess.UpdateData(stockExchangeRow);
         common.SysLog.WriteLog(" - Add stockExchange" + common.Consts.constTab + code);
     }
     return(stockExchangeRow);
 }
Пример #5
0
 protected override void RemoveCurrent()
 {
     this.ShowMessage("");
     if (myMasterSource.Current == null)
     {
         return;
     }
     databases.baseDS.stockExchangeRow row = (databases.baseDS.stockExchangeRow)(myMasterSource.Current as DataRowView).Row;
     if (row.HasVersion(DataRowVersion.Original))
     {
         DataAccess.Libs.DeleteData(row);
     }
     myMasterSource.RemoveCurrent();
     this.ShowMessage(Languages.Libs.GetString("dataWasDeleted"));
 }
Пример #6
0
        public override void AddNew(string code)
        {
            this.AddNewRow();
            databases.baseDS.stockExchangeRow row = (databases.baseDS.stockExchangeRow)((DataRowView)myMasterSource.Current).Row;
            if (row == null)
            {
                return;
            }
            databases.AppLibs.InitData(row);
            row.code = code;
            int position = myMasterSource.Position;

            myMasterSource.Position = -1;
            myMasterSource.Position = position;
        }
Пример #7
0
 public static databases.baseDS.stockExchangeRow FindAndCache_StockExchange(string code)
 {
     databases.baseDS.stockExchangeRow row = myCachedDS.stockExchange.FindBycode(code);
     if (row != null)
     {
         return(row);
     }
     databases.baseDSTableAdapters.stockExchangeTA dataTA = new databases.baseDSTableAdapters.stockExchangeTA();
     dataTA.ClearBeforeFill = false;
     dataTA.Fill(myCachedDS.stockExchange);
     row = myCachedDS.stockExchange.FindBycode(code);
     if (row != null)
     {
         return(row);
     }
     return(null);
 }
Пример #8
0
        public virtual void SetEditData(databases.baseDS.tradeAlertRow row)
        {
            transCodeEd.Text = "";
            databases.tmpDS.stockCodeRow stockCodeRow = DataAccess.Libs.myStockCodeTbl.FindBycode(row.stockCode);
            if (stockCodeRow != null)
            {
                databases.baseDS.stockExchangeRow stockExchangeRow = DataAccess.Libs.myStockExchangeTbl.FindBycode(stockCodeRow.stockExchange);
                if (stockExchangeRow != null)
                {
                    feePercEd.Value = stockExchangeRow.tranFeePerc;
                }
            }
            codeEd.Text         = row.stockCode;
            onTimeEd.myDateTime = row.onTime;
            portfolioCb.myValue = row.portfolio;
            qtyEd.Value         = 0; subTotalEd.Value = 0; feeAmtEd.Value = 0; totalAmtEd.Value = 0;
            transTypeCb.myValue = (AppTypes.TradeActions)row.tradeAction;
            statusCb.myValue    = AppTypes.CommonStatus.New;
            CalculatePriceAndFeePercentage();

            codeEd.Focus();
        }
Пример #9
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);
        }
Пример #10
0
 public static CultureInfo GetExchangeCulture(string code)
 {
     databases.baseDS.stockExchangeRow exchangeRow = databases.AppLibs.FindAndCache_StockExchange(code);
     return(GetExchangeCulture(exchangeRow));
 }