예제 #1
0
        /// <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;
            }
        }