public static CultureInfo GetExchangeCulture(databases.baseDS.stockExchangeRow exchangeRow) { if (exchangeRow == null) { return(null); } return(GetCulture(exchangeRow.country)); }
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); } }
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; }
// 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); }
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")); }
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; }
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); }
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(); }
/// <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); }
public static CultureInfo GetExchangeCulture(string code) { databases.baseDS.stockExchangeRow exchangeRow = databases.AppLibs.FindAndCache_StockExchange(code); return(GetExchangeCulture(exchangeRow)); }