/// <summary> /// This method creates new user account in meta trader /// </summary> /// <param name="newUser"></param> /// <returns></returns> public static bool CreateMetaTraderAccountForUser(int pkClientAccID, int?fkPlatformID, User newUser, LoginAccountType accType) { try { var user = new MT4ManLibraryNETv03.UserRecordNET(); user.group = "FQ-IB-One"; user.name = newUser.UserEmailID; user.password = "******"; var manager = new MetaTraderWrapperManager("mtdem01.primexm.com:443", 900, "!FQS123!!"); if (manager.IsConnected() == 1) { var accStatus = manager.CreateNewUser(user); //If success if (accStatus == 0) { var clientAccBO = new Client_AccountBO(); clientAccBO.InsertPlatformLoginForTradingAccount(pkClientAccID, fkPlatformID, user.password, user.login); return(true); } else { var error = manager.ErrorDescription(accStatus); } } return(false); } catch (Exception ex) { CurrentDeskLog.Error(ex.Message, ex); throw; } }
/// <summary> /// This Function is running in thread /// it will get all the trades after the /// processed id and than populateBOBOpen Trades data. /// </summary> public void StartBOMAMOpenTrades() { var lastProcessedID = 0; var tradeBO = new TradeBO(); var boMAMTradeBO = new BOMAMTradeBO(); var clientAccountBO = new Client_AccountBO(); while (true) { //Check If Initiated if (isInitiated) { try { if (assetManagerDict.Keys.Count > 0) { //If The LastProcessID is 0 get it from database if (lastProcessedID == 0) { lastProcessedID = boMAMTradeBO.GetLastOpenTradeProcessedID(); } //Get All Open Trades For All the asset Manager var openTradeResult = tradeBO.GetAssetManagerOpenTrades(assetManagerDict.Keys.ToList(), lastProcessedID); //Check If the Count > 0 if (openTradeResult.Count > 0) { lastProcessedID = openTradeResult.Max(x => x.PK_TradeID); var boMAMTradeList = new List <BOMAMTrade>(); //Loop Through The Open trades foreach (var item in openTradeResult) { foreach (var res in assetManagerDict[(int)item.Login]) { BOMAMTrade openBOMAMTrade = new BOMAMTrade(); openBOMAMTrade.OrderID = (int)item.OrderID; openBOMAMTrade.OpenPrice = item.OpenPrice; openBOMAMTrade.ClosePrice = item.ClosePrice; openBOMAMTrade.OpenTime = item.OpenTime; openBOMAMTrade.CloseTime = item.CloseTime; openBOMAMTrade.Agent = ""; openBOMAMTrade.FK_IBID = (int)res.FK_IBID; openBOMAMTrade.FK_ClientAccountID = (int)res.FK_ClientAccountID; openBOMAMTrade.Symbol = item.Symbol; openBOMAMTrade.LastIDProcessed = item.PK_TradeID; openBOMAMTrade.Size = item.Volume != null ? (double)item.Volume * slaveAllocationDict[(int)res.FK_ClientAccountID] : 0.0; openBOMAMTrade.Commission = item.Commission != null ? (double)item.Commission * slaveAllocationDict[(int)res.FK_ClientAccountID] : 0.0; openBOMAMTrade.Swap = item.Storage != null ? (double)item.Storage * slaveAllocationDict[(int)res.FK_ClientAccountID] : 0.0; openBOMAMTrade.Pnl = item.Profit != null ? (double)item.Profit * slaveAllocationDict[(int)res.FK_ClientAccountID] : 0.0; openBOMAMTrade.IsopenTrades = true; boMAMTradeList.Add(openBOMAMTrade); } } //If Count > 0 Add it to the database if (boMAMTradeList.Count > 0) { boMAMTradeBO.AddBOMAMOpenTrades(boMAMTradeList); } } } } catch (Exception exceptionMessage) { //Log Error CurrentDeskLog.Error("Monitoring Open Trades :" + exceptionMessage); } } } }
/// <summary> /// Create Account Number /// </summary> /// <param name="newClient"></param> /// <returns></returns> public static void CreateAccountNumberForUser(Client newClient, out string tradingAcn, out string landingAcn, out long actualAccount) { try { var accountCreationRuleBO = new AccountCreationRuleBO(); AccountCurrencyBO curencyBO = new AccountCurrencyBO(); string tradingAccountNumber = string.Empty; var landingAccountNumber = string.Empty; string landingAccCurrencyCode = string.Empty; long lAccNumber = 0; var rulelist = accountCreationRuleBO.GetRule().OrderBy(c => c.Position); var currencyID = curencyBO.GetCurrencyLookUpID(newClient.FK_AccountCurrencyID); //Iterating through each rule/steps of account creation foreach (var item in rulelist) { //Currency if (item.Meaning == Constants.K_ACC_RULE_CURRENCY) { L_CurrencyValueBO currencyBO = new L_CurrencyValueBO(); tradingAccountNumber += currencyBO.GetCurrencyAccountCode(currencyID) + "-"; } //Account Number Belonging to that Currency else if (item.Meaning == Constants.K_ACC_RULE_CURR_NUMBER) { var template = item.Template; Client_AccountBO clientAccBO = new Client_AccountBO(); var tradingAccCount = clientAccBO.GetNumberOfSameCurrencyTradingAccountForUser(LoginAccountType.LiveAccount, newClient.PK_ClientID, currencyID); tradingAccountNumber += (tradingAccCount + 1).ToString("D" + template.Length) + "-"; //Required while creating landing account for (var ctDigit = 0; ctDigit < template.Length; ctDigit++) { landingAccCurrencyCode += "0"; } } //Client Account Number else if (item.Meaning == Constants.K_ACC_RULE_ACC_NUMBER) { var template = item.Template; Client_AccountBO clientAccBO = new Client_AccountBO(); var existingAccNumber = clientAccBO.GetUserExistingAccountNumber(LoginAccountType.LiveAccount, newClient.PK_ClientID); var latestAccNumber = clientAccBO.GetLatestAccountNumber(); //If no previous account exists for the user if (existingAccNumber == "") { //If any acc number exists in db if (latestAccNumber != "") { lAccNumber = Convert.ToInt64(latestAccNumber); tradingAccountNumber += (lAccNumber + 1).ToString("D" + template.Length) + "-"; lAccNumber++; } //If no acc number exists in db else { lAccNumber = 1; tradingAccountNumber += lAccNumber.ToString("D" + template.Length) + "-"; } } //If user has acc number in system else { tradingAccountNumber += existingAccNumber.Split('-')[((int)item.Position - 1)] + "-"; lAccNumber = Convert.ToInt64(existingAccNumber.Split('-')[((int)item.Position - 1)]); } } } //Landing account landingAccountNumber = tradingAccountNumber.Split('-')[0] + "-" + landingAccCurrencyCode + "-" + tradingAccountNumber.Split('-')[2]; landingAcn = landingAccountNumber; tradingAcn = tradingAccountNumber.TrimEnd('-'); actualAccount = lAccNumber; } catch (Exception ex) { CommonErrorLogger.CommonErrorLog(ex, System.Reflection.MethodBase.GetCurrentMethod().Name); throw; } }