/// <summary> /// /// </summary> /// <param name="command"></param> private void MultiUpdateCommand(Business.OpenTrade command) { List<Business.OpenTrade> listBackupData = new List<OpenTrade>(); if (this.CommandList != null) { int count = this.CommandList.Count; for (int i = 0; i < count; i++) { if (this.CommandList[i].Symbol.Name.Trim().ToUpper() == command.Symbol.Name.Trim().ToUpper()) { #region BACKUP DATA Business.OpenTrade newOpenTrade = new OpenTrade(); newOpenTrade.AgentCommission = this.CommandList[i].AgentCommission; newOpenTrade.ClientCode = this.CommandList[i].ClientCode; newOpenTrade.ClosePrice = this.CommandList[i].ClosePrice; newOpenTrade.CommandCode = this.CommandList[i].CommandCode; newOpenTrade.Comment = this.CommandList[i].Comment; newOpenTrade.Commission = this.CommandList[i].Commission; newOpenTrade.ExpTime = this.CommandList[i].ExpTime; newOpenTrade.FreezeMargin = this.CommandList[i].FreezeMargin; newOpenTrade.ID = this.CommandList[i].ID; newOpenTrade.IGroupSecurity = this.CommandList[i].IGroupSecurity; newOpenTrade.Investor = this.CommandList[i].Investor; newOpenTrade.IsClose = this.CommandList[i].IsClose; newOpenTrade.IsHedged = this.CommandList[i].IsHedged; newOpenTrade.IsMultiClose = this.CommandList[i].IsMultiClose; newOpenTrade.IsMultiUpdate = this.CommandList[i].IsMultiUpdate; newOpenTrade.IsProcess = this.CommandList[i].IsProcess; newOpenTrade.IsServer = this.CommandList[i].IsServer; newOpenTrade.ManagerID = this.CommandList[i].ManagerID; newOpenTrade.Margin = this.CommandList[i].Margin; newOpenTrade.MaxDev = this.CommandList[i].MaxDev; newOpenTrade.NumberUpdate = this.CommandList[i].NumberUpdate; newOpenTrade.OpenPrice = this.CommandList[i].OpenPrice; newOpenTrade.OpenTime = this.CommandList[i].OpenTime; newOpenTrade.Size = this.CommandList[i].Size; newOpenTrade.SpreaDifferenceInOpenTrade = this.CommandList[i].SpreaDifferenceInOpenTrade; newOpenTrade.StopLoss = this.CommandList[i].StopLoss; newOpenTrade.Swap = this.CommandList[i].Swap; newOpenTrade.Symbol = this.CommandList[i].Symbol; newOpenTrade.TakeProfit = this.CommandList[i].TakeProfit; newOpenTrade.Taxes = this.CommandList[i].Taxes; newOpenTrade.Type = this.CommandList[i].Type; newOpenTrade.ClosePrice = this.CommandList[i].ClosePrice; newOpenTrade.Profit = this.CommandList[i].Profit; newOpenTrade.CloseTime = this.CommandList[i].CloseTime; listBackupData.Add(newOpenTrade); #endregion } } } if (listBackupData != null) { TradingServer.DBW.DBWOnlineCommand newDBWOnlineCommand = new DBW.DBWOnlineCommand(); bool resultUpdate = newDBWOnlineCommand.MultipleUpdateOpenTrade(listBackupData, command.StopLoss, command.TakeProfit); if (!resultUpdate) { //rollback data RollBackData(listBackupData, 2); } } }
/// <summary> /// /// </summary> /// <param name="command"></param> private void MultiCloseCommand(Business.OpenTrade command) { List<Business.OpenTrade> rollbackData = new List<OpenTrade>(); if (this.CommandList != null) { for (int i = 0; i < this.CommandList.Count; i++) { if (this.CommandList[i].Symbol.Name.ToUpper().Trim() == command.Symbol.Name.ToUpper().Trim()) { bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(this.CommandList[i].Type.ID); if (!isPending) { #region BACKUP DATA Business.OpenTrade newOpenTrade = new OpenTrade(); newOpenTrade.AgentCommission = this.CommandList[i].AgentCommission; newOpenTrade.ClientCode = this.CommandList[i].ClientCode; newOpenTrade.ClosePrice = this.CommandList[i].ClosePrice; newOpenTrade.CommandCode = this.CommandList[i].CommandCode; newOpenTrade.Comment = this.CommandList[i].Comment; newOpenTrade.Commission = this.CommandList[i].Commission; newOpenTrade.ExpTime = this.CommandList[i].ExpTime; newOpenTrade.FreezeMargin = this.CommandList[i].FreezeMargin; newOpenTrade.ID = this.CommandList[i].ID; newOpenTrade.IGroupSecurity = this.CommandList[i].IGroupSecurity; newOpenTrade.Investor = this.CommandList[i].Investor; newOpenTrade.IsClose = this.CommandList[i].IsClose; newOpenTrade.IsHedged = this.CommandList[i].IsHedged; newOpenTrade.IsMultiClose = this.CommandList[i].IsMultiClose; newOpenTrade.IsMultiUpdate = this.CommandList[i].IsMultiUpdate; newOpenTrade.IsProcess = this.CommandList[i].IsProcess; newOpenTrade.IsServer = this.CommandList[i].IsServer; newOpenTrade.ManagerID = this.CommandList[i].ManagerID; newOpenTrade.Margin = this.CommandList[i].Margin; newOpenTrade.MaxDev = this.CommandList[i].MaxDev; newOpenTrade.NumberUpdate = this.CommandList[i].NumberUpdate; newOpenTrade.OpenPrice = this.CommandList[i].OpenPrice; newOpenTrade.OpenTime = this.CommandList[i].OpenTime; newOpenTrade.Size = this.CommandList[i].Size; newOpenTrade.SpreaDifferenceInOpenTrade = this.CommandList[i].SpreaDifferenceInOpenTrade; newOpenTrade.StopLoss = this.CommandList[i].StopLoss; newOpenTrade.Swap = this.CommandList[i].Swap; newOpenTrade.Symbol = this.CommandList[i].Symbol; newOpenTrade.TakeProfit = this.CommandList[i].TakeProfit; newOpenTrade.Taxes = this.CommandList[i].Taxes; newOpenTrade.Type = this.CommandList[i].Type; newOpenTrade.CloseTime = DateTime.Now; newOpenTrade.Profit = this.CommandList[i].Profit; if (this.CommandList[i].Type.ID == 2 || this.CommandList[i].Type.ID == 12) { //newOpenTrade.ClosePrice = this.CommandList[i].Symbol.CreateAskPrices(command.ClosePrice, this.CommandList[i].Symbol.SpreadByDefault, // this.CommandList[i].Symbol.Digit, int.Parse(this.CommandList[i].SpreaDifferenceInOpenTrade.ToString())); newOpenTrade.ClosePrice = this.CommandList[i].Symbol.CreateAskPrices(this.CommandList[i].Symbol.Digit, int.Parse(this.CommandList[i].SpreaDifferenceInOpenTrade.ToString()), command.ClosePrice); } #region SET NEW DATA newOpenTrade.CalculatorProfitCommand(newOpenTrade); newOpenTrade.Profit = newOpenTrade.Symbol.ConvertCurrencyToUSD(newOpenTrade.Symbol.Currency, newOpenTrade.Profit, false, newOpenTrade.SpreaDifferenceInOpenTrade, newOpenTrade.Symbol.Digit); #endregion rollbackData.Add(newOpenTrade); #endregion } } } } if (rollbackData != null && rollbackData.Count > 0) { TradingServer.DBW.DBWOnlineCommand newDBWOnlineCommand = new DBW.DBWOnlineCommand(); bool resultMultiClose = newDBWOnlineCommand.MultipleCloseOpenTrade(rollbackData); if (!resultMultiClose) { //rollback data this.RollBackData(rollbackData, 1); } } }