/// <summary> /// BEGIN CALCULATION SWAP OF SYMBOL /// </summary> internal void BeginCalculationSwap(string TargetName, Business.TimeEvent timeEvent) { return; List<Business.Investor> listInvestor = new List<Investor>(); #region BUILD TIME CURRENT DateTime timeCurrent; //USING CHECK THREE DAY SWAP if (DateTime.Now.Hour < 10) timeCurrent = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day - 1, 00, 00, 00); else timeCurrent = DateTime.Now; #endregion //IF DAY OF WEEK == SUNDAY OR SATURDAY if (timeCurrent.DayOfWeek == DayOfWeek.Saturday || timeCurrent.DayOfWeek == DayOfWeek.Sunday) return; #region CALCULATION SWAP if (Business.Market.CommandExecutor != null) { int count = Business.Market.CommandExecutor.Count; for (int i = 0; i < Business.Market.CommandExecutor.Count; i++) { bool isComplete = false; bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(Business.Market.CommandExecutor[i].Type.ID); if (!isPending) { //Begin log calculation swap string strBeforeBalance = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.CommandExecutor[i].Investor.Balance.ToString(), 2); string strBeforeSwap = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.CommandExecutor[i].Swap.ToString(), 2); string strBeforeTotalSwap = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.CommandExecutor[i].TotalSwap.ToString(), 2); string strBid = string.Empty; string strAsk = string.Empty; #region CHECK IF COMMAND OPEN AFTER TIME CURRENT THEN DON'T CALCULATION SWAP TimeSpan checkTime = timeCurrent - Business.Market.CommandExecutor[i].OpenTime; if (checkTime.TotalSeconds < 0) continue; #endregion bool IsEnable = false; string Type = string.Empty; double LongPosition = 0; double ShortPosition = 0; string ThreeDaySwaps = string.Empty; bool UseOpenPrice = false; int SpreadDifference = 0; double CloseAsk = 0; double closeAskCurrency = 0; double SwapPrice = 0; #region GET PARAMETER CALCULATION SWAP if (Business.Market.CommandExecutor[i].Symbol.ParameterItems != null) { int countParameter = Business.Market.CommandExecutor[i].Symbol.ParameterItems.Count; for (int j = 0; j < countParameter; j++) { if (Business.Market.CommandExecutor[i].Symbol.ParameterItems[j].Code == "S035") { if (Business.Market.CommandExecutor[i].Symbol.ParameterItems[j].BoolValue == 1) IsEnable = true; } if (Business.Market.CommandExecutor[i].Symbol.ParameterItems[j].Code == "S036") { Type = Business.Market.CommandExecutor[i].Symbol.ParameterItems[j].StringValue; } if (Business.Market.CommandExecutor[i].Symbol.ParameterItems[j].Code == "S037") { double.TryParse(Business.Market.CommandExecutor[i].Symbol.ParameterItems[j].NumValue, out LongPosition); } if (Business.Market.CommandExecutor[i].Symbol.ParameterItems[j].Code == "S038") { double.TryParse(Business.Market.CommandExecutor[i].Symbol.ParameterItems[j].NumValue, out ShortPosition); } if (Business.Market.CommandExecutor[i].Symbol.ParameterItems[j].Code == "S039") { ThreeDaySwaps = Business.Market.CommandExecutor[i].Symbol.ParameterItems[j].StringValue; } if (Business.Market.CommandExecutor[i].Symbol.ParameterItems[j].Code == "S040") { if (Business.Market.CommandExecutor[i].Symbol.ParameterItems[j].BoolValue == 1) UseOpenPrice = true; } } } #endregion #region CHECK ISENABLE CALCULATION SWAP if (IsEnable) { DayOfWeek ThreeDay = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), ThreeDaySwaps, true); int numThreeday = 1; if (ThreeDay == timeCurrent.DayOfWeek) numThreeday = 3; switch (Type) { #region BY POINTS[ LOTS * LONG_OR_SHORT_POINTS * POINTSIZE ] case "by points[ lots * long_or_short_points * pointsize ]": { #region PROCESS GET SPREAD DIFFIRENCES if (Business.Market.CommandExecutor[i].IGroupSecurity != null) { if (Business.Market.CommandExecutor[i].IGroupSecurity.IGroupSecurityConfig != null) { int countIGroupSecurityConfig = Business.Market.CommandExecutor[i].IGroupSecurity.IGroupSecurityConfig.Count; for (int n = 0; n < countIGroupSecurityConfig; n++) { if (Business.Market.CommandExecutor[i].IGroupSecurity.IGroupSecurityConfig[n].Code == "B14") { int.TryParse(Business.Market.CommandExecutor[i].IGroupSecurity.IGroupSecurityConfig[n].NumValue, out SpreadDifference); break; } } } } #endregion #region PROCESS GET PRICE OF DAY ProcessQuoteLibrary.Business.BarTick BarTick1M = new ProcessQuoteLibrary.Business.BarTick(); ProcessQuoteLibrary.Business.BarTick barTick1MCurrency = new ProcessQuoteLibrary.Business.BarTick(); //Get Price Bid and Ask Close Of Day if (ProcessQuoteLibrary.Business.QuoteProcess.listQuotes != null) { #region GET ONLINE CANDLE WITH SYMBOL int countQuote = ProcessQuoteLibrary.Business.QuoteProcess.listQuotes.Count; for (int n = 0; n < countQuote; n++) { if (ProcessQuoteLibrary.Business.QuoteProcess.listQuotes[n].Name == Business.Market.CommandExecutor[i].Symbol.Name) { BarTick1M = ProcessQuoteLibrary.Business.QuoteProcess.listQuotes[n].BarTick1M; //CloseAsk = Business.Market.CommandExecutor[i].Symbol.CreateAskPrices(BarTick1M.Close, Business.Market.CommandExecutor[i].Symbol.SpreadByDefault, // Business.Market.CommandExecutor[i].Symbol.Digit, int.Parse(Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade.ToString())); CloseAsk = Business.Market.CommandExecutor[i].Symbol.CreateAskPrices(Business.Market.CommandExecutor[i].Symbol.Digit, int.Parse(Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade.ToString()), BarTick1M.CloseAsk); break; } } #endregion #region GET ONLINE CANDLE WITH CURRENCY for (int m = 0; m < countQuote; m++) { if (ProcessQuoteLibrary.Business.QuoteProcess.listQuotes[m].Name.Trim() == Business.Market.CommandExecutor[i].Symbol.Currency.Trim()) { barTick1MCurrency = ProcessQuoteLibrary.Business.QuoteProcess.listQuotes[m].BarTick1M; //GET DIGIT OF SYMBOL CURRENCY if (Business.Market.SymbolList != null) { int countSymbol = Business.Market.SymbolList.Count; for (int k = 0; k < countSymbol; k++) { if (Business.Market.SymbolList[k].Name.ToUpper().Trim() == Business.Market.CommandExecutor[i].Symbol.Currency.ToUpper().Trim()) { //closeAskCurrency = Business.Market.CommandExecutor[i].Symbol.CreateAskPrices(barTick1MCurrency.Close, 0, // Business.Market.SymbolList[k].Digit, int.Parse(Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade.ToString())); closeAskCurrency = Business.Market.CommandExecutor[i].Symbol.CreateAskPrices(Business.Market.SymbolList[k].Digit, int.Parse(Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade.ToString()), barTick1MCurrency.CloseAsk); break; } } } break; } } #endregion } #endregion if (BarTick1M.Open > 0 && BarTick1M.Close > 0) { SwapPrice = Math.Round(Business.Market.CommandExecutor[i].Symbol.Points(Business.Market.CommandExecutor[i].Size, LongPosition, ShortPosition, BarTick1M.Close, CloseAsk, Business.Market.CommandExecutor[i].Symbol.ContractSize, Business.Market.CommandExecutor[i].Symbol.Digit, numThreeday, Business.Market.CommandExecutor[i].Type.ID), 2); //BUILD STRING BID/ASK SYMBOL strBid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(BarTick1M.Close.ToString(), Business.Market.CommandExecutor[i].Symbol.Digit); strAsk = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(CloseAsk.ToString(), Business.Market.CommandExecutor[i].Symbol.Digit); //if (SwapPrice > 0) // SwapPrice = -SwapPrice; Business.Market.CommandExecutor[i].TotalSwap += SwapPrice; TradingServer.Facade.FacadeUpdateTotalSwapOnlineCommand(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].TotalSwap); double totalSwaps = Business.Market.CommandExecutor[i].Swap + SwapPrice; //Set new Swap To Command Business.Market.CommandExecutor[i].Swap = totalSwaps; //Call Fucntion Update Swap In Investor List bool resultUpdateInInvestorList = Market.marketInstance.FindAndUpdateSwapInInvestorList(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].Investor.InvestorID, totalSwaps, Business.Market.CommandExecutor[i].TotalSwap); //Call Function Update Swap In Symbol List bool resultUpdateInSymbolList = Market.marketInstance.FindAndUpdateSwapInSymbolList(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].Symbol.Name, totalSwaps, Business.Market.CommandExecutor[i].TotalSwap); //UPDATE SWAP ONLINE COMMAND TradingServer.Facade.FacadeUpdateSwapOnlineCommand(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].Swap); isComplete = true; } } break; #endregion #region BY MONEY [ LOTS * LONG_OR-SHORT ] case "by money [ lots * long_or-short ]": { SwapPrice = Math.Round(Business.Market.CommandExecutor[i].Symbol.Money(Business.Market.CommandExecutor[i].Size, LongPosition, ShortPosition, numThreeday, Business.Market.CommandExecutor[i].Type.ID), 2); //BUILD BID/ASK SYMBOL strBid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.CommandExecutor[i].Symbol.TickValue.Bid.ToString(), Business.Market.CommandExecutor[i].Symbol.Digit); strAsk = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.CommandExecutor[i].Symbol.TickValue.Ask.ToString(), Business.Market.CommandExecutor[i].Symbol.Digit); //if (SwapPrice > 0) // SwapPrice = -SwapPrice; Business.Market.CommandExecutor[i].TotalSwap += SwapPrice; TradingServer.Facade.FacadeUpdateTotalSwapOnlineCommand(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].TotalSwap); double totalSwaps = Business.Market.CommandExecutor[i].Swap + SwapPrice; Business.Market.CommandExecutor[i].Swap = totalSwaps; //Call Fucntion Update Swap In Investor List bool resultUpdateInInvestorList = Market.marketInstance.FindAndUpdateSwapInInvestorList(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].Investor.InvestorID, totalSwaps, Business.Market.CommandExecutor[i].TotalSwap); //Call Function Update Swap In Symbol List bool resultUpdateInSymbolList = Market.marketInstance.FindAndUpdateSwapInSymbolList(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].Symbol.Name, totalSwaps, Business.Market.CommandExecutor[i].TotalSwap); //UPDATE SWAP IN DATABASE TradingServer.Facade.FacadeUpdateSwapOnlineCommand(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].Swap); isComplete = true; } break; #endregion #region BY INTEREST [ LOTS * LONG_OR_SHORT / 100 / 360 ] case "by interest [ lots * long_or_short / 100 / 360 ]": { #region PROCESS GET SPREAD DIFFIRENCES if (Business.Market.CommandExecutor[i].IGroupSecurity != null) { if (Business.Market.CommandExecutor[i].IGroupSecurity.IGroupSecurityConfig != null) { int countIGroupSecurityConfig = Business.Market.CommandExecutor[i].IGroupSecurity.IGroupSecurityConfig.Count; for (int n = 0; n < countIGroupSecurityConfig; n++) { if (Business.Market.CommandExecutor[i].IGroupSecurity.IGroupSecurityConfig[n].Code == "B14") { int.TryParse(Business.Market.CommandExecutor[i].IGroupSecurity.IGroupSecurityConfig[n].NumValue, out SpreadDifference); break; } } } } #endregion #region PROCESS GET PRICE OF DAY ProcessQuoteLibrary.Business.BarTick BarTick1M = new ProcessQuoteLibrary.Business.BarTick(); ProcessQuoteLibrary.Business.BarTick barTick1MCurrency = new ProcessQuoteLibrary.Business.BarTick(); //Get Price Bid and Ask Close Of Day if (ProcessQuoteLibrary.Business.QuoteProcess.listQuotes != null) { #region GET ONLINE CANDLE WITH SYMBOL int countQuote = ProcessQuoteLibrary.Business.QuoteProcess.listQuotes.Count; for (int n = 0; n < countQuote; n++) { if (ProcessQuoteLibrary.Business.QuoteProcess.listQuotes[n].Name == Business.Market.CommandExecutor[i].Symbol.Name) { BarTick1M = ProcessQuoteLibrary.Business.QuoteProcess.listQuotes[n].BarTick1M; //CloseAsk = Business.Market.CommandExecutor[i].Symbol.CreateAskPrices(BarTick1M.Close, Business.Market.CommandExecutor[i].Symbol.SpreadByDefault, // Business.Market.CommandExecutor[i].Symbol.Digit, int.Parse(Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade.ToString())); CloseAsk = Business.Market.CommandExecutor[i].Symbol.CreateAskPrices(Business.Market.CommandExecutor[i].Symbol.Digit, int.Parse(Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade.ToString()), BarTick1M.CloseAsk); break; } } #endregion #region GET ONLINE CANDLE WITH CURRENCY for (int m = 0; m < countQuote; m++) { if (ProcessQuoteLibrary.Business.QuoteProcess.listQuotes[m].Name.Trim() == Business.Market.CommandExecutor[i].Symbol.Currency.Trim()) { barTick1MCurrency = ProcessQuoteLibrary.Business.QuoteProcess.listQuotes[m].BarTick1M; //GET DIGIT OF SYMBOL CURRENCY if (Business.Market.SymbolList != null) { int countSymbol = Business.Market.SymbolList.Count; for (int k = 0; k < countSymbol; k++) { if (Business.Market.SymbolList[k].Name.ToUpper().Trim() == Business.Market.CommandExecutor[i].Symbol.Currency.ToUpper().Trim()) { //closeAskCurrency = Business.Market.CommandExecutor[i].Symbol.CreateAskPrices(barTick1MCurrency.Close, 0, // Business.Market.SymbolList[k].Digit, int.Parse(Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade.ToString())); closeAskCurrency = Business.Market.CommandExecutor[i].Symbol.CreateAskPrices(Business.Market.SymbolList[k].Digit, int.Parse(Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade.ToString()), barTick1MCurrency.CloseAsk); break; } } } break; } } #endregion } #endregion //Call Function Convert If Symbol Is XXXUSD #region GET LONG AND SHORT IN IGROUPSYMBOL if (Business.Market.IGroupSymbolList != null) { int countIGroupSymbol = Business.Market.IGroupSymbolList.Count; for (int j = 0; j < countIGroupSymbol; j++) { if (Business.Market.IGroupSymbolList[j].SymbolID == Business.Market.CommandExecutor[i].Symbol.SymbolID && Business.Market.IGroupSymbolList[j].InvestorGroupID == Business.Market.CommandExecutor[i].Investor.InvestorGroupInstance.InvestorGroupID) { if (Business.Market.IGroupSymbolList[j].IGroupSymbolConfig != null) { int countParameter = Business.Market.IGroupSymbolList[j].IGroupSymbolConfig.Count; for (int n = 0; n < countParameter; n++) { if (Business.Market.IGroupSymbolList[j].IGroupSymbolConfig[n].Code == "GS01") { LongPosition = double.Parse(Business.Market.IGroupSymbolList[j].IGroupSymbolConfig[n].NumValue); } if (Business.Market.IGroupSymbolList[j].IGroupSymbolConfig[n].Code == "GS02") { ShortPosition = double.Parse(Business.Market.IGroupSymbolList[j].IGroupSymbolConfig[n].NumValue); } } } } } } #endregion //Calculation Swaps SwapPrice = Math.Round(Business.Market.CommandExecutor[i].Symbol.Interest(Business.Market.CommandExecutor[i].Size, LongPosition, ShortPosition, BarTick1M.Close, Business.Market.CommandExecutor[i].Symbol.ContractSize, numThreeday, Business.Market.CommandExecutor[i].Type.ID), 2); //BUILD BID/ASK SYMBOL strBid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(BarTick1M.Close.ToString(), Business.Market.CommandExecutor[i].Symbol.Digit); strAsk = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(CloseAsk.ToString(), Business.Market.CommandExecutor[i].Symbol.Digit); double closePrice = 0; if (Business.Market.CommandExecutor[i].Type.ID == 1) closePrice = barTick1MCurrency.Close; else closePrice = closeAskCurrency; SwapPrice = Business.Market.CommandExecutor[i].Symbol.ConvertCurrencyToUSD(Business.Market.CommandExecutor[i].Symbol.Currency, SwapPrice, closePrice, 2); //if (SwapPrice > 0) // SwapPrice = -SwapPrice; Business.Market.CommandExecutor[i].TotalSwap += SwapPrice; TradingServer.Facade.FacadeUpdateTotalSwapOnlineCommand(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].TotalSwap); double totalSwaps = Business.Market.CommandExecutor[i].Swap + SwapPrice; //Set new Swap To Command Business.Market.CommandExecutor[i].Swap = totalSwaps; //Call Fucntion Update Swap In Investor List bool resultUpdateInInvestorList = Market.marketInstance.FindAndUpdateSwapInInvestorList(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].Investor.InvestorID, totalSwaps, Business.Market.CommandExecutor[i].TotalSwap); //Call Function Update Swap In Symbol List bool resultUpdateInSymbolList = Market.marketInstance.FindAndUpdateSwapInSymbolList(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].Symbol.Name, totalSwaps, Business.Market.CommandExecutor[i].TotalSwap); //UPDATE SWAP IN DATABASE TradingServer.Facade.FacadeUpdateSwapOnlineCommand(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].Swap); isComplete = true; } break; #endregion #region BY MONEY IN MARGIN CURRENCY [ LOTS * LONG_OR_SHORT ] case "by money in margin currency [ lots * long_or_short ]": { #region PROCESS GET SPREAD DIFFIRENCES if (Business.Market.CommandExecutor[i].IGroupSecurity != null) { if (Business.Market.CommandExecutor[i].IGroupSecurity.IGroupSecurityConfig != null) { int countIGroupSecurityConfig = Business.Market.CommandExecutor[i].IGroupSecurity.IGroupSecurityConfig.Count; for (int n = 0; n < countIGroupSecurityConfig; n++) { if (Business.Market.CommandExecutor[i].IGroupSecurity.IGroupSecurityConfig[n].Code == "B14") { int.TryParse(Business.Market.CommandExecutor[i].IGroupSecurity.IGroupSecurityConfig[n].NumValue, out SpreadDifference); break; } } } } #endregion #region PROCESS GET PRICE OF DAY ProcessQuoteLibrary.Business.BarTick BarTick1M = new ProcessQuoteLibrary.Business.BarTick(); ProcessQuoteLibrary.Business.BarTick barTick1MCurrency = new ProcessQuoteLibrary.Business.BarTick(); //Get Price Bid and Ask Close Of Day if (ProcessQuoteLibrary.Business.QuoteProcess.listQuotes != null) { #region GET ONLINE CANDLE WITH SYMBOL int countQuote = ProcessQuoteLibrary.Business.QuoteProcess.listQuotes.Count; for (int n = 0; n < countQuote; n++) { if (ProcessQuoteLibrary.Business.QuoteProcess.listQuotes[n].Name == Business.Market.CommandExecutor[i].Symbol.Name) { BarTick1M = ProcessQuoteLibrary.Business.QuoteProcess.listQuotes[n].BarTick1M; //CloseAsk = Business.Market.CommandExecutor[i].Symbol.CreateAskPrices(BarTick1M.Close, Business.Market.CommandExecutor[i].Symbol.SpreadByDefault, // Business.Market.CommandExecutor[i].Symbol.Digit, int.Parse(Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade.ToString())); CloseAsk = Business.Market.CommandExecutor[i].Symbol.CreateAskPrices(Business.Market.CommandExecutor[i].Symbol.Digit, int.Parse(Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade.ToString()), BarTick1M.CloseAsk); break; } } #endregion #region GET ONLINE CANDLE WITH CURRENCY for (int m = 0; m < countQuote; m++) { if (ProcessQuoteLibrary.Business.QuoteProcess.listQuotes[m].Name.Trim() == Business.Market.CommandExecutor[i].Symbol.Currency.Trim()) { barTick1MCurrency = ProcessQuoteLibrary.Business.QuoteProcess.listQuotes[m].BarTick1M; //GET DIGIT OF SYMBOL CURRENCY if (Business.Market.SymbolList != null) { int countSymbol = Business.Market.SymbolList.Count; for (int k = 0; k < countSymbol; k++) { if (Business.Market.SymbolList[k].Name.ToUpper().Trim() == Business.Market.CommandExecutor[i].Symbol.Currency.ToUpper().Trim()) { //closeAskCurrency = Business.Market.CommandExecutor[i].Symbol.CreateAskPrices(barTick1MCurrency.Close, 0, // Business.Market.SymbolList[k].Digit, int.Parse(Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade.ToString())); closeAskCurrency = Business.Market.CommandExecutor[i].Symbol.CreateAskPrices(Business.Market.SymbolList[k].Digit, int.Parse(Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade.ToString()), barTick1MCurrency.CloseAsk); break; } } } break; } } #endregion } #endregion //Calculation Swap SwapPrice = Math.Round(Business.Market.CommandExecutor[i].Symbol.MoneyInMarginCurrency(Business.Market.CommandExecutor[i].Size, LongPosition, ShortPosition, numThreeday, Business.Market.CommandExecutor[i].Type.ID), 2); //BUILD BID/ASK SYMBOL strBid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(BarTick1M.Close.ToString(), Business.Market.CommandExecutor[i].Symbol.Digit); strAsk = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(CloseAsk.ToString(), Business.Market.CommandExecutor[i].Symbol.Digit); double closePrice = 0; if (Business.Market.CommandExecutor[i].Type.ID == 1) closePrice = barTick1MCurrency.Close; else closePrice = closeAskCurrency; Business.Market.CommandExecutor[i].Symbol.ConvertCurrencyToUSD(Business.Market.CommandExecutor[i].Symbol.Currency, SwapPrice, closePrice, 2); //if (SwapPrice > 0) // SwapPrice = -SwapPrice; Business.Market.CommandExecutor[i].TotalSwap += SwapPrice; TradingServer.Facade.FacadeUpdateTotalSwapOnlineCommand(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].TotalSwap); double totalSwaps = Business.Market.CommandExecutor[i].Swap + SwapPrice; Business.Market.CommandExecutor[i].Swap = totalSwaps; //Call Fucntion Update Swap In Investor List bool resultUpdateInInvestorList = Market.marketInstance.FindAndUpdateSwapInInvestorList(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].Investor.InvestorID, totalSwaps, Business.Market.CommandExecutor[i].TotalSwap); //Call Function Update Swap In Symbol List bool resultUpdateInSymbolList = Market.marketInstance.FindAndUpdateSwapInSymbolList(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].Symbol.Name, totalSwaps, Business.Market.CommandExecutor[i].TotalSwap); //UPDATE SWAP IN DATABASE TradingServer.Facade.FacadeUpdateSwapOnlineCommand(Business.Market.CommandExecutor[i].ID, Business.Market.CommandExecutor[i].Swap); isComplete = true; } break; #endregion } if (isComplete) { //End login calculation swap string strAfterBalance = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.CommandExecutor[i].Investor.Balance.ToString(), 2); string strAfterSwap = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(SwapPrice.ToString(), 2); string strAfterTotalSwap = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.CommandExecutor[i].TotalSwap.ToString(), 2); string strSize = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.CommandExecutor[i].Size.ToString(), 2); //'00001140: calculation swap order #004432443 - current balance: 40000 - old swap: 5.00' string content = "'" + Business.Market.CommandExecutor[i].Investor.Code + "': calculation swap order #" + Business.Market.CommandExecutor[i].CommandCode + " name: " + Business.Market.CommandExecutor[i].Symbol.Name + " size: " + strSize + " old balance: " + strBeforeBalance + " - old swap: " + strBeforeSwap + " - old total swap: " + strBeforeTotalSwap + " -> " + "current balance: " + strAfterBalance + " - current swap: " + strAfterSwap + " - current total swap: " + strAfterTotalSwap + "(" + strBid + "/" + strAsk + ")"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, "[calculation swap]", "", Business.Market.CommandExecutor[i].Investor.Code); //SEND NOTIFY TO MANAGER CHANGE COMMAND TradingServer.Facade.FacadeSendNoticeManagerRequest(1, Business.Market.CommandExecutor[i]); //SEND NOTIFY TO MANAGER CHANGE ACCOUNT TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Business.Market.CommandExecutor[i].Investor); #region SEND NOTIFY TO INVESTOR IF IT ONLINE if (Business.Market.CommandExecutor[i].Investor.IsOnline) { //Send Command To Client, Get Account And Online Command string MessageGetAccount = "CSW5789"; if (Business.Market.CommandExecutor[i].Investor.ClientCommandQueue == null) Business.Market.CommandExecutor[i].Investor.ClientCommandQueue = new List<string>(); Business.Market.CommandExecutor[i].Investor.ClientCommandQueue.Add(MessageGetAccount); } #endregion #region SEND NOTIFY TO AGENT SYSTEM string msg = "UpdateCommand$True,Update Command," + Business.Market.CommandExecutor[i].ID + "," + Business.Market.CommandExecutor[i].Investor.InvestorID + "," + Business.Market.CommandExecutor[i].Symbol.Name + "," + Business.Market.CommandExecutor[i].Size + "," + true + "," + Business.Market.CommandExecutor[i].OpenTime + "," + Business.Market.CommandExecutor[i].OpenPrice + "," + Business.Market.CommandExecutor[i].StopLoss + "," + Business.Market.CommandExecutor[i].TakeProfit + "," + Business.Market.CommandExecutor[i].ClosePrice + "," + Business.Market.CommandExecutor[i].Commission + "," + Business.Market.CommandExecutor[i].Swap + "," + Business.Market.CommandExecutor[i].Profit + "," + Business.Market.CommandExecutor[i].Comment + "," + Business.Market.CommandExecutor[i].ID + "," + Business.Market.CommandExecutor[i].Type.Name + "," + 1 + "," + Business.Market.CommandExecutor[i].ExpTime + "," + Business.Market.CommandExecutor[i].ClientCode + "," + Business.Market.CommandExecutor[i].CommandCode + "," + Business.Market.CommandExecutor[i].IsHedged + "," + Business.Market.CommandExecutor[i].Type.ID + "," + Business.Market.CommandExecutor[i].Margin + ",Update" + "," + Business.Market.CommandExecutor[i].AgentRefConfig + "," + Business.Market.CommandExecutor[i].SpreaDifferenceInOpenTrade; //SEND NOTIFY UPDATE COMMAND TO AGENT Business.AgentNotify newAgentNotify = new AgentNotify(); newAgentNotify.NotifyMessage = msg; TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, Business.Market.CommandExecutor[i].Investor.InvestorGroupInstance); #endregion } } #endregion } } } #endregion if (Business.Market.InvestorList != null) { TradingServer.Facade.FacadeAddNewCommandHistory(Business.Market.InvestorList, timeCurrent); } }
/// <summary> /// /// </summary> /// <param name="command"></param> /// <param name="digits"></param> internal void AutoSuperDealerOpen(Business.RequestDealer command, int digits) { ProcessQuoteLibrary.Business.BarTick barBid = new ProcessQuoteLibrary.Business.BarTick(); barBid = this.GetCandlesTwoM(command.Request.Symbol.Name); barBid.High = Math.Round(barBid.High, digits); barBid.Low = Math.Round(barBid.Low, digits); barBid.HighAsk = Math.Round(barBid.HighAsk, digits); barBid.LowAsk = Math.Round(barBid.LowAsk, digits); //double spreadDifference = command.Request.Symbol.SpreadDifference; double spreadDifference = command.Request.SpreaDifferenceInOpenTrade; double spreadDefault = 0; for (int i = command.Request.Symbol.ParameterItems.Count - 1; i >= 0; i--) { if (command.Request.Symbol.ParameterItems[i].Code == "S013") { double.TryParse(command.Request.Symbol.ParameterItems[i].NumValue, out spreadDefault); break; } } int type = Business.Symbol.ConvertCommandIsBuySell(command.Request.Type.ID); if (type == 1) { ProcessQuoteLibrary.Business.BarTick barAsk = new ProcessQuoteLibrary.Business.BarTick(); barAsk = barBid; double spreadDiff = Business.Symbol.ConvertNumberPip(digits, spreadDifference); double spreadDef = Business.Symbol.ConvertNumberPip(digits, spreadDefault); if (command.Request.Symbol.ApplySpread) { double high = (double)barBid.High + (double)spreadDiff + (double)spreadDef; barAsk.High = Math.Round(high, digits); double low = (double)barBid.Low + (double)spreadDiff + (double)spreadDef; barAsk.Low = Math.Round(low, digits); } else { double high = (double)barBid.HighAsk + (double)spreadDiff; barAsk.High = Math.Round(high, digits); double low = (double)barBid.LowAsk + (double)spreadDiff; barAsk.Low = Math.Round(low, digits); } if (barAsk.High >= command.Request.OpenPrice && command.Request.OpenPrice >= barAsk.Low) { command.FlagConfirm = true; command.Notice = "RD03"; //this.AddRequestDealerToInvestor(command); command.Request.Symbol.MarketAreaRef.AddCommand(command.Request); command.AgentCode = "system"; command.Answer = "Confirm"; TradingServer.Facade.FacadeSendNoticeManagerDealerRequest(command); return; } else { command.FlagConfirm = false; command.Notice = "RD04"; this.AddRequestDealerToInvestor(command); command.AgentCode = "system"; command.Answer = "Requote"; TradingServer.Facade.FacadeSendNoticeManagerDealerRequest(command); TradingServer.Facade.FacadeAddNewSystemLog(3, "'" + command.Request.Investor.Code + "': system requote " + command.LogRequestSuper(barAsk.Low, barAsk.High), "Requote", "", "system"); return; } } else if (type == 2) { if (barBid.Low <= command.Request.OpenPrice && command.Request.OpenPrice <= barBid.High) { command.FlagConfirm = true; command.Notice = "RD06"; //this.AddRequestDealerToInvestor(command); command.Request.Symbol.MarketAreaRef.AddCommand(command.Request); command.AgentCode = "system"; command.Answer = "Confirm"; TradingServer.Facade.FacadeSendNoticeManagerDealerRequest(command); return; } else { command.FlagConfirm = false; command.Notice = "RD07"; this.AddRequestDealerToInvestor(command); command.AgentCode = "system"; command.Answer = "Requote"; TradingServer.Facade.FacadeSendNoticeManagerDealerRequest(command); TradingServer.Facade.FacadeAddNewSystemLog(3, "'" + command.Request.Investor.Code + "': system requote " + command.LogRequestSuper(barBid.Low, barBid.High), "Requote", "", "system"); return; } } }
/// <summary> /// /// </summary> /// <param name="symbol"></param> /// <returns></returns> internal ProcessQuoteLibrary.Business.BarTick GetCandlesTwoM(string symbol) { ProcessQuoteLibrary.Business.BarTick bar = new ProcessQuoteLibrary.Business.BarTick(); if (CandlesOffline.ContainsKey(symbol)) { bar = CandlesOffline[symbol]; } if (bar.Low == 0 | bar.High == 0) { bar = ProcessQuoteLibrary.Business.QuoteProcess.GetCandles(1, symbol); } else { ProcessQuoteLibrary.Business.BarTick temp = new ProcessQuoteLibrary.Business.BarTick(); temp = ProcessQuoteLibrary.Business.QuoteProcess.GetCandles(1, symbol); if (temp.High > bar.High) { bar.High = temp.High; } if (temp.HighAsk > bar.HighAsk) { bar.HighAsk = temp.HighAsk; } if (temp.Low < bar.Low) { bar.Low = temp.Low; } if (temp.LowAsk < bar.LowAsk) { bar.LowAsk = temp.LowAsk; } } return bar; }
/// <summary> /// /// </summary> /// <param name="temp"></param> internal void ArchiveCandlesOffline(ProcessQuoteLibrary.Business.BarTick temp) { ProcessQuoteLibrary.Business.BarTick bar = new ProcessQuoteLibrary.Business.BarTick(); bar.Symbol = temp.Symbol; bar.High = temp.High; bar.Low = temp.Low; bar.HighAsk = temp.HighAsk; bar.LowAsk = temp.LowAsk; if (CandlesOffline.ContainsKey(bar.Symbol)) { CandlesOffline[bar.Symbol] = bar; } else { CandlesOffline.Add(bar.Symbol, bar); } }
/// <summary> /// /// </summary> /// <returns></returns> internal List<Business.Symbol> GetAllSymbol() { List<Business.Symbol> Result = new List<Business.Symbol>(); List<Business.Tick> listTickTemp = new List<Business.Tick>(); System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(DBConnection.DBConnection.Connection); DSTableAdapters.SymbolTableAdapter adap = new DSTableAdapters.SymbolTableAdapter(); DSTableAdapters.TradingConfigTableAdapter adapTradingConfig = new DSTableAdapters.TradingConfigTableAdapter(); DS.SymbolDataTable tbSymbol = new DS.SymbolDataTable(); DS.TradingConfigDataTable tbTradingConfig = new DS.TradingConfigDataTable(); try { conn.Open(); adap.Connection = conn; adapTradingConfig.Connection = conn; tbSymbol = adap.GetData(); #region GET TICK FROM SERVER ANOTHER try { string[] tickData = new string[] { }; tickData = Business.Market.client.ServerCommandList("GetTickOnline", ""); if (tickData != null) { int countTick = tickData.Count(); for (int j = 0; j < countTick; j++) { string message = tickData[j]; string[] splipTick = message.Split('▼'); if (splipTick.Length == 6) { Business.Tick newTick = new Business.Tick(); newTick.Bid = double.Parse(splipTick[0]); newTick.TickTime = DateTime.Parse(splipTick[1]); newTick.SymbolName = splipTick[2]; newTick.HighInDay = double.Parse(splipTick[3]); newTick.LowInDay = double.Parse(splipTick[4]); newTick.Status = splipTick[5]; listTickTemp.Add(newTick); } } } } catch (Exception ex) { } #endregion if (tbSymbol != null) { int count = tbSymbol.Count; for (int i = 0; i < count; i++) { if (tbSymbol[i].RefSymbolID == -1) { Business.Symbol newSymbol = new Business.Symbol(); newSymbol.Name = tbSymbol[i].Name; newSymbol.SymbolID = tbSymbol[i].SymbolID; newSymbol.SecurityID = tbSymbol[i].SecurityID; #region GET SPREAD DIFFERENCE SET TO SPREAD DIFFERENCE OF SYMBOL if (Business.Market.IGroupSecurityList != null) { int countIGroupSecurity = Business.Market.IGroupSecurityList.Count; for (int n = 0; n < countIGroupSecurity; n++) { if (Business.Market.IGroupSecurityList[n].SecurityID == newSymbol.SecurityID) { if (Business.Market.IGroupSecurityList[n].IGroupSecurityConfig != null) { int countIGroupSecurityConfig = Business.Market.IGroupSecurityList[n].IGroupSecurityConfig.Count; for (int m = 0; m < countIGroupSecurityConfig; m++) { if (Business.Market.IGroupSecurityList[n].IGroupSecurityConfig[m].Code == "B04") { newSymbol.SpreadDifference = double.Parse(Business.Market.IGroupSecurityList[n].IGroupSecurityConfig[m].NumValue); break; } } } break; } } } #endregion newSymbol.RefSymbol = this.GetSymbolReference(newSymbol.SymbolID, tbSymbol); //newSymbol.ParameterItems = DBWSymbol.TradingConfigInstance.GetParameterItemBySymbolID(tbSymbol[i].SymbolID); tbTradingConfig = adapTradingConfig.GetTradingConfigBySymbolID(tbSymbol[i].SymbolID); if (tbTradingConfig != null) { int countTradingConfig = tbTradingConfig.Count; for (int j = 0; j < countTradingConfig; j++) { Business.ParameterItem newParameter = new Business.ParameterItem(); newParameter.ParameterItemID = tbTradingConfig[j].TradingConfigID; newParameter.BoolValue = tbTradingConfig[j].BoolValue; newParameter.Code = tbTradingConfig[j].Code; newParameter.DateValue = tbTradingConfig[j].DateValue; newParameter.NumValue = tbTradingConfig[j].NumValue; newParameter.SecondParameterID = tbTradingConfig[j].SymbolID; newParameter.StringValue = tbTradingConfig[j].StringValue; newParameter.Name = tbTradingConfig[j].Name; if (newSymbol.ParameterItems == null) newSymbol.ParameterItems = new List<Business.ParameterItem>(); newSymbol.ParameterItems.Add(newParameter); #region GET DIGIT SET TO DIGIT OF SYMBOL if (tbTradingConfig[j].Code == "S003") { int Digit = 0; int.TryParse(tbTradingConfig[j].NumValue, out Digit); newSymbol.Digit = Digit; } #endregion #region GET CURRENCY SET TO CURRENCY OF SYMBOL if (tbTradingConfig[j].Code == "S007") { newSymbol.Currency = tbTradingConfig[j].StringValue; } #endregion #region GET ISTRADE SET TO TRADE OF SYMBOL if (tbTradingConfig[j].Code == "S008") { newSymbol.Trade = tbTradingConfig[j].StringValue; } #endregion #region GET SPREAD BY DEFAULT SET TO SPREAD BY DEFAULT OF SYMBOL if (tbTradingConfig[j].Code == "S013") { double SpreadByDefault = 0; double.TryParse(tbTradingConfig[j].NumValue, out SpreadByDefault); newSymbol.SpreadByDefault = SpreadByDefault; } #endregion #region GET LONG ONLY SET TO LONG ONLY OF SYMBOL if (tbTradingConfig[j].Code == "S014") { if (tbTradingConfig[j].BoolValue == 0) { newSymbol.LongOnly = false; } else { newSymbol.LongOnly = true; } } #endregion #region GET LIMIT STOP LEVEL SET TO LIMIT STOP LEVEL OF SYMBOL if (tbTradingConfig[j].Code == "S015") { int LimitLevel = 0; int.TryParse(tbTradingConfig[j].NumValue, out LimitLevel); newSymbol.LimitLevel = LimitLevel; } if (tbTradingConfig[j].Code == "S046") { int StopLevel = 0; int.TryParse(tbTradingConfig[j].NumValue, out StopLevel); newSymbol.StopLevel = StopLevel; } if (tbTradingConfig[j].Code == "S047") { int SLTP = 0; int.TryParse(tbTradingConfig[j].NumValue, out SLTP); newSymbol.StopLossTakeProfitLevel = SLTP; } #endregion #region GET SPREAD BALANCE SET TO SPREAD BALANCE OF SYMBOL if (tbTradingConfig[j].Code == "S016") { double SpreadBalace = 0; if (tbTradingConfig[j].NumValue != "NaN") { double.TryParse(tbTradingConfig[j].NumValue, out SpreadBalace); } newSymbol.SpreadBalace = SpreadBalace; } #endregion #region GET FREEZE LEVEL SET TO FREEZE LEVEL TO SYMBOL if (tbTradingConfig[j].Code == "S017") { int FreezeLevel = 0; int.TryParse(tbTradingConfig[j].NumValue, out FreezeLevel); newSymbol.FreezeLevel = FreezeLevel; } #endregion #region GET ALLOW READ TIME SET TO ALLOW READ TIME OF SYMBOL if (tbTradingConfig[j].Code == "S018") { if (tbTradingConfig[j].BoolValue == 0) { newSymbol.AllowReadTime = false; } else { newSymbol.AllowReadTime = true; } } #endregion #region GET FILTTRATIONS LEVEL SET TO FILTRATIONS OF SYMBOL if (tbTradingConfig[j].Code == "S020") { int FiltrationLevel = 0; int.TryParse(tbTradingConfig[j].NumValue, out FiltrationLevel); newSymbol.FiltrationsLevel = FiltrationLevel; } #endregion #region GET AUTO LIMIT SET TO AUTO LIMIT OF SYMBOL if (tbTradingConfig[j].Code == "S021") { newSymbol.AutoLimit = tbTradingConfig[j].StringValue; } #endregion #region GET FILTER SET TO FILTER OF SYMBOL if (tbTradingConfig[j].Code == "S022") { int Filter = 0; int.TryParse(tbTradingConfig[j].NumValue, out Filter); newSymbol.Filter = Filter; } #endregion #region GET CONTRACT SIZE SET TO CONTRACT SIZE OF SYMBOL if (tbTradingConfig[j].Code == "S025") { double ContractSize = 0; double.TryParse(tbTradingConfig[j].NumValue, out ContractSize); newSymbol.ContractSize = ContractSize; } #endregion #region GET TICK SIZE SET TO TICK SIZE OF SYMBOL if (tbTradingConfig[j].Code == "S029") { double TickSize = 0; double.TryParse(tbTradingConfig[j].NumValue, out TickSize); newSymbol.TickSize = TickSize; } #endregion #region GET TICK PRICE SET TO TICK PRICE OF SYMBOL if (tbTradingConfig[j].Code == "S030") { double TickPrice = 0; double.TryParse(tbTradingConfig[j].NumValue, out TickPrice); newSymbol.TickPrice = TickPrice; } #endregion #region GET PROFIT CALCULATION SET TO PROFIT CALCULATION OF SYMBOL if (tbTradingConfig[j].Code == "S033") { newSymbol.ProfitCalculation = tbTradingConfig[j].StringValue; } #endregion #region GET ISHEDGED SET TO ISHEDGED OF SYMBOL if (tbTradingConfig[j].Code == "S034") { if (tbTradingConfig[j].BoolValue == 0) { newSymbol.IsHedged = false; } else { newSymbol.IsHedged = true; } } #endregion #region GET TIME CLOSE ONLY OF SYMBOL FUTURE if (tbTradingConfig[j].Code == "S044") { newSymbol.TimeCloseOnly = tbTradingConfig[j].DateValue; } #endregion #region GET TIME EXP OF SYMBOL FUTURE if (tbTradingConfig[j].Code == "S045") { newSymbol.TimeExp = tbTradingConfig[j].DateValue; } #endregion #region GET APPLY SPREAD OF SYMBOL if (tbTradingConfig[j].Code == "S050") { if (tbTradingConfig[j].BoolValue == 1) { newSymbol.ApplySpread = true; } } #endregion #region GET FREEZE MARGIN if (tbTradingConfig[j].Code == "S051") { bool useFreezeLevel = false; if (tbTradingConfig[j].BoolValue == 1) useFreezeLevel = true; newSymbol.IsEnableFreezeMargin = useFreezeLevel; } #endregion #region GET USE FREEZE MARGIN if (tbTradingConfig[j].Code == "S052") { double freezeMargin = 0; double.TryParse(tbTradingConfig[j].NumValue.ToString(), out freezeMargin); newSymbol.FreezeMargin = freezeMargin; } #endregion #region GET FREEZE MARGIN HEDGED if (tbTradingConfig[j].Code == "S053") { double freezeMarginH = 0; double.TryParse(tbTradingConfig[j].NumValue, out freezeMarginH); newSymbol.FreezeMarginHedged = freezeMarginH; } #endregion #region GET MARGIN HEDGED if (tbTradingConfig[j].Code == "S028") { double marginH = 0; double.TryParse(tbTradingConfig[j].NumValue, out marginH); newSymbol.MarginHedged = marginH; } #endregion #region GET INIT MARGIN if (tbTradingConfig[j].Code == "S026") { double initMargin = 0; double.TryParse(tbTradingConfig[j].NumValue, out initMargin); newSymbol.InitialMargin = initMargin; } #endregion } } bool flagTick = false; if (listTickTemp != null) { int countTick = listTickTemp.Count; for (int j = 0; j < countTick; j++) { if (listTickTemp[j].SymbolName == tbSymbol[i].Name) { if (newSymbol.TickValue == null) newSymbol.TickValue = new Business.Tick(); //newSymbol.TickValue.Ask = Math.Round(newSymbol.CreateAskPrices(listTickTemp[j].Bid, newSymbol.SpreadByDefault, newSymbol.Digit, int.Parse(newSymbol.SpreadDifference.ToString())), newSymbol.Digit); //Apply Spread Change Function CreateAskPrices newSymbol.TickValue.Ask = Math.Round(newSymbol.CreateAskPrices(newSymbol.Digit,int.Parse(newSymbol.SpreadDifference.ToString()),listTickTemp[j].Ask),newSymbol.Digit); newSymbol.TickValue.Bid = listTickTemp[j].Bid; newSymbol.TickValue.Status = listTickTemp[j].Status; newSymbol.TickValue.SymbolID = newSymbol.SymbolID; newSymbol.TickValue.SymbolName = newSymbol.Name; newSymbol.TickValue.TickTime = listTickTemp[j].TickTime; newSymbol.TickValue.TimeCurrent = listTickTemp[j].TickTime; newSymbol.TickValue.HighInDay = listTickTemp[j].HighInDay; newSymbol.TickValue.LowInDay = listTickTemp[j].LowInDay; newSymbol.ArchiveTick(newSymbol.TickValue); #region BUILD HIGH LOW if (newSymbol.TickCurrent == null) newSymbol.TickCurrent = new Business.TickLog(); newSymbol.TickCurrent.Close = listTickTemp[j].Bid; newSymbol.TickCurrent.Date = listTickTemp[j].TickTime; newSymbol.TickCurrent.HighBid = listTickTemp[j].HighInDay; newSymbol.TickCurrent.LowBid = listTickTemp[j].LowInDay; newSymbol.TickCurrent.Name = listTickTemp[j].SymbolName; newSymbol.TickCurrent.Open = listTickTemp[j].Bid; //newSymbol.TickValue.HighAsk = Math.Round(newSymbol.CreateAskPrices(listTickTemp[j].HighInDay, newSymbol.SpreadByDefault, newSymbol.Digit, int.Parse(newSymbol.SpreadDifference.ToString())), newSymbol.Digit); newSymbol.TickValue.HighAsk = Math.Round(newSymbol.CreateAskPrices(newSymbol.Digit, int.Parse(newSymbol.SpreadDifference.ToString()), listTickTemp[j].HighAsk), newSymbol.Digit); //newSymbol.TickValue.HighAsk = ResultDataLog.HighAsk; //newSymbol.TickValue.HighInDay = ResultDataLog.High; //newSymbol.TickValue.LowAsk = Math.Round(newSymbol.CreateAskPrices(listTickTemp[j].LowInDay, newSymbol.SpreadByDefault, newSymbol.Digit, int.Parse(newSymbol.SpreadDifference.ToString())), newSymbol.Digit); newSymbol.TickValue.LowAsk = Math.Round(newSymbol.CreateAskPrices(newSymbol.Digit, int.Parse(newSymbol.SpreadDifference.ToString()), listTickTemp[j].LowAsk), newSymbol.Digit); //newSymbol.TickValue.LowAsk = ResultDataLog.LowAsk; //newSymbol.TickValue.LowInDay = ResultDataLog.Low; newSymbol.TickCurrent.HighAsk = newSymbol.TickValue.HighAsk; newSymbol.TickCurrent.LowAsk = newSymbol.TickValue.LowAsk; int tickID = ProcessQuoteLibrary.FacadeDataLog.AddNewDataLog(listTickTemp[j].TickTime, listTickTemp[j].Bid, listTickTemp[j].HighInDay, listTickTemp[j].LowInDay, listTickTemp[j].HighAsk, listTickTemp[j].LowAsk, listTickTemp[j].Bid, listTickTemp[j].SymbolName); newSymbol.TickCurrent.ID = tickID; newSymbol.TickValue.ID = tickID; #endregion flagTick = true; break; } } } if (!flagTick) { #region GET TICK OF SYMBOL ProcessQuoteLibrary.Business.BarTick resultTick = ProcessQuoteLibrary.FacadeDataLog.FacadeGetClosePriceBySymbol(newSymbol.Name); if (resultTick != null && resultTick.ID > 0) { if (newSymbol.TickValue == null) newSymbol.TickValue = new Business.Tick(); //newSymbol.TickValue.Ask = Math.Round(newSymbol.CreateAskPrices(resultTick.Close, newSymbol.SpreadByDefault, newSymbol.Digit, int.Parse(newSymbol.SpreadDifference.ToString())), newSymbol.Digit); newSymbol.TickValue.Ask = Math.Round(newSymbol.CreateAskPrices(newSymbol.Digit, int.Parse(newSymbol.SpreadDifference.ToString()), resultTick.Close), newSymbol.Digit); newSymbol.TickValue.Bid = resultTick.Close; newSymbol.TickValue.Status = "up"; newSymbol.TickValue.SymbolID = newSymbol.SymbolID; newSymbol.TickValue.SymbolName = newSymbol.Name; newSymbol.TickValue.TickTime = resultTick.Time; newSymbol.TickValue.TimeCurrent = resultTick.Time; newSymbol.ArchiveTick(newSymbol.TickValue); } else { if (newSymbol.TickValue == null) newSymbol.TickValue = new Business.Tick(); //newSymbol.TickValue.Ask = Math.Round(newSymbol.CreateAskPrices(resultTick.Close, newSymbol.SpreadByDefault, newSymbol.Digit, int.Parse(newSymbol.SpreadDifference.ToString())), newSymbol.Digit); newSymbol.TickValue.Ask = 0; newSymbol.TickValue.Bid = 0; newSymbol.TickValue.Status = "down"; newSymbol.TickValue.SymbolID = newSymbol.SymbolID; newSymbol.TickValue.SymbolName = newSymbol.Name; newSymbol.TickValue.TickTime = DateTime.Now; newSymbol.TickValue.TimeCurrent = DateTime.Now; } #endregion #region GET DATA HIGH LOW IN DAY SET TO DATA HIGH LOW OF SYMBOL ProcessQuoteLibrary.Business.BarTick ResultDataLog = new ProcessQuoteLibrary.Business.BarTick(); ResultDataLog = ProcessQuoteLibrary.FacadeDataLog.FacadeGetDataLogByName(newSymbol.Name); if (ResultDataLog.Time.Day == DateTime.Now.Day) { if (ResultDataLog != null && ResultDataLog.High != 0) { if (newSymbol.TickValue == null) newSymbol.TickValue = new Business.Tick(); if (newSymbol.TickCurrent == null) newSymbol.TickCurrent = new Business.TickLog(); newSymbol.TickCurrent.Close = ResultDataLog.Close; newSymbol.TickCurrent.Date = ResultDataLog.Time; newSymbol.TickCurrent.HighBid = ResultDataLog.High; newSymbol.TickCurrent.ID = ResultDataLog.ID; newSymbol.TickValue.ID = ResultDataLog.ID; newSymbol.TickCurrent.LowBid = ResultDataLog.Low; newSymbol.TickCurrent.Name = ResultDataLog.Symbol; newSymbol.TickCurrent.Open = ResultDataLog.Open; //newSymbol.TickValue.HighAsk = Math.Round(newSymbol.CreateAskPrices(resultTick.High, newSymbol.SpreadByDefault, newSymbol.Digit, int.Parse(newSymbol.SpreadDifference.ToString())), newSymbol.Digit); newSymbol.TickValue.HighAsk = Math.Round(newSymbol.CreateAskPrices(newSymbol.Digit,int.Parse(newSymbol.SpreadDifference.ToString()),resultTick.High)); //newSymbol.TickValue.HighAsk = ResultDataLog.HighAsk; newSymbol.TickValue.HighInDay = ResultDataLog.High; //newSymbol.TickValue.LowAsk = Math.Round(newSymbol.CreateAskPrices(resultTick.Low, newSymbol.SpreadByDefault, newSymbol.Digit, int.Parse(newSymbol.SpreadDifference.ToString())), newSymbol.Digit); newSymbol.TickValue.LowAsk = Math.Round(newSymbol.CreateAskPrices(newSymbol.Digit,int.Parse(newSymbol.SpreadDifference.ToString()),resultTick.Low),newSymbol.Digit); //newSymbol.TickValue.LowAsk = ResultDataLog.LowAsk; newSymbol.TickValue.LowInDay = ResultDataLog.Low; newSymbol.TickCurrent.HighAsk = ResultDataLog.HighAsk; newSymbol.TickCurrent.LowAsk = ResultDataLog.LowAsk; } } #endregion } #region FIND IMARKET AREA AND ADD TO SYMBOL //Find IMarketArea if (Business.Market.MarketArea != null) { int countMarketArea = Business.Market.MarketArea.Count; for (int j = 0; j < countMarketArea; j++) { if (Business.Market.MarketArea[j].IMarketAreaID == tbSymbol[i].MarketAreaID) { newSymbol.MarketAreaRef = Business.Market.MarketArea[j]; //Add Symbol To MarketArea if (Business.Market.MarketArea[j].ListSymbol == null) Business.Market.MarketArea[j].ListSymbol = new List<Business.Symbol>(); Business.Market.MarketArea[j].ListSymbol.Add(newSymbol); break; } } } #endregion Result.Add(newSymbol); } } } } catch (Exception ex) { return null; } finally { adap.Connection.Close(); adapTradingConfig.Connection.Close(); conn.Close(); } return Result; }